Self-Improvement

해시 함수 본문

개인

해시 함수

JoGeun 2020. 3. 30. 15:56

1. 해시 함수
해시함수란 임의의 길이를 가진 데이터를 고정된 길이의 데이터로 매핑하는 함수이며 결과값을 해시값이라고 한다.
해시함수는 데이터를 자르거나 치환하거나 위치를 변경하는 방법으로 해시값을 생성하므로 원본 데이터의 정보를 상실하게 되어 생성된 해시값은 원래 데이터로 복원할 수 없습니다. 즉 해시는 일방향성입니다.

해시값은 두 개의 다른 입력값에 대해 특정 확률로 동일한 해시값이 나올 수 있다. 이와 같이 서로 다른 입력값에 대해 동일한 해시값이 나오는 상황을 해시 충돌이라고 부른다. 해시 충돌이 발생하는 특정 확률이라는 것이 매우 작은 값으로 통계적으로 큰 의미가 없다고 볼 수 있다.
128비트 크기의 해시값을 출력하는 해시함수의 경우, 해시 충돌이 발생하는 경우는 1/2^128로 매우 작습니다. 더군다나 최근에는 256비트, 512비트 크기의 해시값을 출력하는 해시함수가 사용도기 때문에 해시충돌 발생 확률은 거의 0에 가깝다고 볼 수 있다.
해시 알고리즘 종류로는 MD5, SHA가 있다.

2. MD5
MD5는 1991년 에 만들어진 128비트 길이의 해시값을 출력하는 해시 함수입니다. MD5는 패스워드의 암호화나 네트워크 장비인 스위치, 라우터 등에서 장비간 상호 인증을 위해 활용되기도 한다.
하지만 MD5는 128비트의 다소 작은 크기의 해시값 출력과 알고리즘 자체의 결함도 알려져있어 최근에는 네트워크로 전송되는 파일의 무결성 검증 등에서만 활용되는 추세이다.

3. SHA
SHA는 1993년 미국의 NSA가 만들고 미국 국립표준기술연구소에서 표준으로 제정한 해시함수입니다. SHA는 SHA-0, SHA-1, SHA-2, SHA-3으로 발전되어 왔으며 토렌트로 잘 알려져 있는 P2P 파일 공유 시스템의 원조격인 비트토렌트에서 파일의 무결성이나 인덱싱을 위해 SHA-1 알고리즘이 활용되었고, 패스워드 암호화나 블록체인 등에서는 SHA-2 시리즈 중 SHA-256 알고리즘이 광범위하게 사용되며  최근에는 유닉스나 리눅스 계열의 os에서 사용자의 패스워드 암호화 방법으로 SHA-2 시리즈 중 SHA-512 알고리즘도 사용되고 있다.

4. 해시의 활용
해시 인덱스
DNMS에서 검색을 위한 인덱스로 해시가 활용되며, DB 테이블의 파티셔닝 용도로 사용되기도 합니다. 해시 인덱스는 검색하고자 하는 값의 해시값을 인덱스로 하는 방법인데 검색하고자하는 값을 해시함수에 입력하여 결과로 나오는 해시값과 일치하는 인덱스를 찾고 해당 레코드 위치를 찾아가는 기법입니다.
해시 인덱스는 해시의 특성으로 인해 입력한 값과 동일한 값을 검색하는 동등 비교 검색에서는 탁월한 성능을 발휘하지만 범위 검색에서는 매우 비효율적인 방법이다.

패스워드 암호화
해시는 사용자 계정의 비밀번호 즉, 패스워드를 암호화하는 방법으로 많이 활용됩니다. 리눅스 계열의 OS는 사용자의 비밀번호를 MD5나 SHA-256도는 SHA-512 해시값으로 변환하여 보관한다.

데이터 무결성 검증
해시값은 어떤 데이터의 지문값으로도 불립니다. 2개의 데이터가 있을 때 각각의 데이터에 대한 해시값이 일치하면 이 2개의 데이터는 완전히 동일한 데이터임을 보장할 수 있습니다. 따라서 어떤 정보의 위조나 변조가 이루어진다면 이 정보의 해시값은 원본 데이터의 해시값과 완전히 다른 값이 될 것입니다.