해시 함수 - 토막글

Benedictus Park·2023년 8월 15일
0

잡다한 것들

목록 보기
2/2

1. 해시 함수란?

해시 함수란, 역함수가 없는 함수를 말합니다. 그러니까, f(x)=yf(x)=y는 있는데 f1(y)f^{-1}(y)가 없습니다. 그리고 입력이 아주 살짝만 변해도 해시 함수의 결과가 크게 요동칩니다. 도무지 값의 변화에 따른 해시값 변화의 규칙성을 분석할 수가 없습니다. 그리고 짧은 데이터든, 긴 데이터든 전부 같은 길이의 데이터로 바꿔 버립니다. 또 일대일 대응인 함수로 두 개 이상의 입력값에 중복되는 결과가 나올 수 없습니다. 만약 그런 결과가 나온다면 우린 이것을 '해시 충돌'이라 부르며, 어떤 해시 알고리즘에서 해시 충돌의 사례가 밝혀지면 모두가 다른 해시 알고리즘으로 갈아타는 수순을 밟습니다.

MD5 해시의 사례를 보죠.

입력: 1
출력: C4CA4238A0B923820DCC509A6F75849B (길이 32)

입력: 2
출력: C81E728D9D4C2F636F067F89CC14862C (길이 32)

입력을 넣으면 출력이 나오고, 길이가 모두 같으며, 어떤 규칙에 의해 값이 변화되는지 유추하기가 참 힘듭니다.

입력: gsogvipevknbseiohfobq32oi4h89udr0932jr32%#^%#@ejqwufhefvnasjdr@!TU^%6T#@%TYETRnmdfkbndiomv cxk fngoewjt#@@%#@%#@TNksldngdsopfmnv bkodsgnoapieiotn4t5$@%@#R#@N%@#%#@nediovgdstgniodxvbiosdhvdsait#@TY^%{U)in-dfsubzxc0hvakgwetw
출력: E9E29EDE169B04F11D3A8E7DF3C42E5B (길이 32)

아무리 긴 데이터를 넣어도 해시된 결과의 길이는 같습니다. 바이너리든 무엇이든 해시를 돌리면 고정 길이의 데이터가 나옵니다.

출력을 입력으로 변환해주는 함수는 없습니다. 즉, 해시 값을 보고 원본 데이터를 알아내는 방법은 일일이 원본으로 추정되는 값을 하나씩 대입해 보고 그 해시 출력을 비교해보는 것. Brute-Force밖에는 없습니다.

2. 사용처

해시는 파일 무결성 검사, 패스워드 저장 등에 유용합니다.

2-1. 패스워드 등 민감정보 저장

서버로 들어온 패스워드 평문은 패스워드의 주인을 제외한 그 누구도 알아서는 안 됩니다. 그러므로 이것을 못 알아보게 으깨버려야(해시해야) 합니다. 그러면 서버를 누가 통째로 들고 도망가더라도 패스워드를 복원할 수 없습니다. 다만 검증은 쉽습니다. 평문으로 들어온 패스워드를 해시한 후에 그 결과를 DB에 저장된 패스워드의 해시와 비교해 보면 되잖아요?

기타 민감한 정보도 마찬가지로 관리하면 됩니다.

2-2. 파일 무결성 검증

파일 무결성 검증도 마찬가지입니다. 입력이 아주 조금만 바껴도 출력 또한 크게 바뀌기에, 파일의 주인이 제시한 파일 전체의 해시 결과와 내가 가진 파일 전체의 해시 결과가 다르다면 무결성에 문제가 있다고 보면 되는 것입니다.

profile
박한강, 24세.

0개의 댓글