667. 해시 함수 (Hash Function) - 무결성 보장을 위한 압축
핵심 인사이트: 100GB짜리 영화 파일과, 내 이름 '홍길동' 세 글자. 크기가 1억 배 차이 나지만, 해시 함수라는 믹서기에 넣고 갈아버리면 둘 다 똑같이 '64글자'의 무의미한 텍스트로 압축되어 튀어나온다. 영화 파일의 픽셀 단 1개만 색깔을 바꿔서 믹서기에 넣어도 결과물 64글자는 완전히 딴판으로 변해버린다. 파일이 중간에 1비트라도 조작되었는지(무결성) 1초 만에 확인해 내는 기적의 판독기다.
Ⅰ. 해시 함수 (Hash Function)의 개념
- 임의의 가변 길이 데이터(크기가 1바이트든 100기가바이트든 상관없음)를 수학적 알고리즘에 통과시켜, 항상 "고정된 짧은 길이"의 무작위 해시값(Hash Value, 다이제스트)으로 변환해 내는 단방향(일방향) 암호화 기술입니다.
- 평문을 암호문으로 숨기는 것(기밀성)이 목적이 아니라, 원본 데이터가 전송 중에 지워지거나 해커에 의해 변조되지 않았음을 확인하는 '무결성(Integrity)' 검증이 존재의 목적입니다.
Ⅱ. 암호학적 해시 함수의 3대 핵심 요건 🌟
해시 함수가 보안 방패로 쓰이려면 아래 세 가지 조건을 완벽히 지켜야 합니다.
- 역상 저항성 (일방향성, One-wayness)
- 믹서기에 간 과일 주스(해시값)를 보고, 원래 무슨 모양의 과일(원본 평문)이 들어갔는지 절대 거꾸로 복원(복호화)할 수 없어야 합니다.
- 제2 역상 저항성 (약한 충돌 내성)
- 어떤 파일의 해시값이
[AbCd]라고 할 때, 해커가 일부러 똑같이[AbCd]라는 해시값이 튀어나오는 전혀 다른 내용의 '가짜 바이러스 파일'을 수학적으로 찾아내어 바꿔치기할 수 없어야 합니다.
- 어떤 파일의 해시값이
- 충돌 저항성 (Collision Resistance) 🌟
- 내용이 완전히 다른 A 파일과 B 파일을 해시에 넣었는데, 우연히 똑같은 해시값
[AbCd]가 튀어나오는 현상을 '충돌(Collision)'이라고 합니다. 해시값이 고정된 길이이므로 확률상 무조건 충돌이 존재하지만, 지구상의 컴퓨터를 다 동원해도 이 충돌하는 쌍을 억지로 찾아내는 것이 불가능할 정도로 경우의 수(해시 길이)가 거대해야 합니다.
- 내용이 완전히 다른 A 파일과 B 파일을 해시에 넣었는데, 우연히 똑같은 해시값
Ⅲ. 해시 함수의 놀라운 특성 (눈사태 효과)
- 눈사태 효과 (Avalanche Effect): 원본 데이터가 수백만 페이지짜리 책이라도, 그 안의 오타(온점 하나, 1비트)만 딱 고치고 다시 해시를 돌리면, 결과로 나오는 64글자의 해시값 중 절반 이상이 완전히 다르게 싹 뒤바뀌어 버립니다. (패턴 유추 불가)
Ⅳ. 해시 함수의 3대 실무 활용처
- 다운로드 파일 무결성 검증: 홈페이지에서 윈도우 설치 ISO 파일을 받을 때, 옆에
SHA256: e3b0c4...라고 적혀 있습니다. 내가 다운받은 파일을 내 컴퓨터의 해시 검사기에 넣어 똑같은 값이 나오면, 중간에 해커가 바이러스를 섞지 않았음이 100% 증명됩니다. - 비밀번호(Password) DB 저장: 카카오나 네이버는 내 비밀번호 원본(예: "1234")을 DB에 그대로 저장하지 않습니다. 해시값으로 갈아서(예: "a6xg9...") 저장합니다. 나중에 DB가 통째로 털려도 해커는 이 해시를 다시 "1234"로 복호화할 수 없으므로 내 비밀번호는 안전합니다. (671번 문서 참조)
- 블록체인(비트코인) 무결성 검증: 앞 블록의 해시값을 다음 블록에 쇠사슬처럼 묶어, 해커가 10년 전 장부를 조작하면 눈사태 효과로 현재 블록까지 모조리 파괴되게 만들어 위변조를 막습니다.
📢 섹션 요약 비유: 해시 함수는 고기(데이터)를 넣고 돌리는 '고기 다짐기(믹서기)'입니다. 소고기 1톤을 넣든 1그램을 넣든, 나오는 햄버거 패티(해시값)의 크기는 항상 성인 손바닥만 한 규격(고정 길이)으로 똑같습니다. 완성된 다짐 고기를 보고 원래 소의 얼굴 생김새를 알아낼 수 없으며(일방향성), 소고기 1톤 속에 쥐약 1그램(1비트 변조)을 섞어서 다시 다짐기를 돌리면 패티의 색깔 전체가 시뻘겋게 변해버려(눈사태 효과) 즉시 오염되었음을 알 수 있습니다.