[퍼옴] Hash란?
DRM 관련 라이브러리를 포팅하다 보면 Hash란 용어가 자주 나오는데 대략의 의미는 알면서도 정리가 잘 안되더라구요 그래서 찾아봤습니다. 그리고 스크랩합니다.
일반적인 용어로는 다음 의미를 갖더군요
1. 데이터를 저장하고 찾기를 하는데 사용되는 자료 구조의 한 종류. 찾고자 하는 문자열을 특정한 함수(hash
function)로 처리하여 얻은 값으로 데이터의 위치를 찾는 방법. 데이터를 찾는 속도가 데이터의 개수의 영향을 거의 받지
않는 특성을 지니고 있어, 효율적이고 빠르게 데이터의 위치를 찾을 수 있다.
2. 데이터베이스에서 임의의 레코드를 빠르게 찾아가기 위한 직접 파일 구조.
3. 메모리에 블럭 단위로 정보를 저장할 때 블럭의 길이에 맞추기 위해 쓰는 의미가 없는 정보를 나타낸다. 더 넓게는 전기 분야에서 전기 잡음 등 의미없는 것을 가리킨다.
설명이 충분치 않은 것 같아서 다른 설명을 보면 DRM 관련해서 Hash의 의미가 잘 정리된 것 같습니다.
해시 함수는 원래의 값이나 키를 색인하는데
사용되며, 그 값이 관련된 데이터가 검색될 때마다 다시 사용된다. 그러나, 해싱은 항상 한 쪽 방향으로만 연산된다. 따라서,
해시된 값을 분석함으로써 해시 함수를 추출해내는 역방향 공학은 필요가 없다. 사실, 이상적인 해시함수는 그러한 분석에 의해
추론할 수 없어야 한다. 또한, 우수한 해시 함수는 서로 다른 두 개의 입력에 대해, 동일한 해시 값을 생산해서는 안된다. 만약
그렇게 되면, 충돌이 생긴다. 충돌 위험성이 매우 적은 해시 함수라야 훌륭한 해시 함수로 평가된다.
다음에 나열한 것들은, 그 동안 사용되어 온 비교적 단순한 해시 함수들이다.
1.
나눗셈-나머지 방식 : 먼저 테이블 내에 들어갈 항목의 개수를 추정한다. 그 숫자는 원래의 값이나 키에서 몫과 나머지를 추출해
내기 위해 각각을 나누는 제수(除數)로 사용된다. 계산의 나머지가 해시 값이 된다 (이 방식은 얼마간의 충돌이 일어나는 것을
피할 수 없으며, 어떠한 검색 방식이라도 충돌 여부를 인식하고, 대체 검색 방법을 제공할 수 있어야만 한다).
2. 접기 : 이 방식은 원래의 값을 여러 부분으로 나누어, 그 부분들을 함께 더하고 나서, 마지막 네 자리를 해시 값이나 키로 삼는 것이다.
3.
기수변환 : 값이나 키가 디지털이라면, 다른 순서의 숫자열을 만들도록 기수(基數)를 변경할 수 있다. 즉, 10진수의 키를
16진수의 키로 변경할 수 있는 것이다. 변경 후, 해시 값의 길이를 일정하게 유지하기 위해 상위 자리수의 일부는 버려질 수
있다.
4. 자리수 재배열 : 이것은 단순히 세 번째부터 여섯 번째 자리까지 등과 같이 원래 값이나 키의 일부를 취하여 그 순서를 역으로 한 다음, 그 것을 해시 값이나 키로 사용하는 것이다.
데
이터베이스 저장이나 검색에 잘 적용되는 해시 함수는 오히려 암호화나 에러검출 목적으로는 잘 듣지 않을 수도 있다. 암호화에
사용되는 잘 알려진 해시 함수들이 몇 개 있다. 이러한 것들에는 전자서명을 요약 메시지라고 불리는 더 짧은 값으로 바꾸는 데
사용되는 요약 메시지 해시 함수 MD2, MD4, MD5 등과, 더 큰 요약 메시지 (60 비트)를 만드는 표준 알고리즘인
SHA 등이 포함된다.
좀더 엔지니어적인 접근으로 참고할 만한 싸이트는