티스토리 뷰
해시 함수
해시 함수는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬 또는 간단하게 해시라고 한다. 위키백과
해시 함수 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 이름을 0~15 사이의 정수값으로 매핑하는 해시 함수의 예. “John Smith”와 “Sandra Dee”라는 두 키 사이에 충돌이 존재한다. 해시 함수(hash function)는 임의의 길이
ko.wikipedia.org
해시 함수의 특성과 효과
- 압축 : 입력 x의 크기와 상관없이 출력길이 y=h(x)는 항상 작아야 한다. 암호학적 해시함수는 입력 길이에 상관 없이 고정된 크기의 출력을 만들어 낸다.
- 효율성 : 어떤 입력 x에 대해 h(x)를 계산하기 쉬워야 한다.
- 단방향 : 주어진 값 y에 대해 h(x)=y의 x값을 찾는 계산이 어려워야 한다. 즉, 해시함수를 찾기 어려워야 함.
- 약한 충돌 방지 : 주어진 x와 h(x)에 대해 h(y)=h(x)를 만족하면서, y != x 인 y를 찾기 어려워야 한다.
- 강한 출돌 방지 : h(x)=h(y)를 만족하면서 x != y인 x와 y를 찾기 어려워야 한다.
해시함수가 주로 쓰이는 분야
1. DB에 비밀번호 저장
- 가장 대표적으로 사용하는 곳은 비밀번호를 저장할 때, 암호화해서 저장하면 탈취를 당해도 기존 비밀번호를 쉽게 알 수 없어 보안에 효과적임.
2. 복제 문서 판별
- 문서 판별을 하기위해서는 모든 단어를 비교해야 하므로 오래걸림. 모든 문자열 해시함수를 사용하여 일정한 크기의 문자열로 변환하여 비교하면 문자열이 축소되어 속도가 비약적으로 빠름.
3. 블록 체인
- 이전 블록의 해시값음 블록에 포함하여 연결된 형태로 만듦. 중간의 한 블록만 위조하는 것을 불가능하게 할 수 있음.
※ 블록체인 관련 코드는 간단하게 Java로 구현하여 다음에 포스팅하겠음.