[퍼옴] Hash란?

DRM 관련 라이브러리를 포팅하다 보면 Hash란 용어가 자주 나오는데 대략의 의미는 알면서도 정리가 잘 안되더라구요 그래서 찾아봤습니다. 그리고 스크랩합니다.

 

일반적인 용어로는 다음 의미를 갖더군요

 

1. 데이터를 저장하고 찾기를 하는데 사용되는 자료 구조의 한 종류. 찾고자 하는 문자열을 특정한 함수(hash function)로 처리하여 얻은 값으로 데이터의 위치를 찾는 방법. 데이터를 찾는 속도가 데이터의 개수의 영향을 거의 받지 않는 특성을 지니고 있어, 효율적이고 빠르게 데이터의 위치를 찾을 수 있다.

2. 데이터베이스에서 임의의 레코드를 빠르게 찾아가기 위한 직접 파일 구조.

3. 메모리에 블럭 단위로 정보를 저장할 때 블럭의 길이에 맞추기 위해 쓰는 의미가 없는 정보를 나타낸다. 더 넓게는 전기 분야에서 전기 잡음 등 의미없는 것을 가리킨다.

 

 

설명이 충분치 않은 것 같아서 다른 설명을 보면 DRM 관련해서 Hash의 의미가 잘 정리된 것 같습니다.


해싱 알고리즘을 해시 함수라고 부른다. 해싱은 빠른 속도의 데이터 검색 외에도, 전자서명을 암호화하고 복호화하는 데에도 사용된다. 전자서명은 해시 함수를 이용하여 변환된 다음, 해시 값(이를 요약 메시지라고 부른다)과 전자서명이 별도로 전송된다. 수신자는 송신자가 사용한 해시함수와 같은 것을 사용하여, 서명으로부터 요약 메시지를 뽑아내어 그것을 이미 수신한 요약 메시지와 비교한다. 그 비교 결과는 같아야만 전자서명이 유효한 것이다.


해시 함수는 원래의 값이나 키를 색인하는데 사용되며, 그 값이 관련된 데이터가 검색될 때마다 다시 사용된다. 그러나, 해싱은 항상 한 쪽 방향으로만 연산된다. 따라서, 해시된 값을 분석함으로써 해시 함수를 추출해내는 역방향 공학은 필요가 없다. 사실, 이상적인 해시함수는 그러한 분석에 의해 추론할 수 없어야 한다. 또한, 우수한 해시 함수는 서로 다른 두 개의 입력에 대해, 동일한 해시 값을 생산해서는 안된다. 만약 그렇게 되면, 충돌이 생긴다. 충돌 위험성이 매우 적은 해시 함수라야 훌륭한 해시 함수로 평가된다.

다음에 나열한 것들은, 그 동안 사용되어 온 비교적 단순한 해시 함수들이다.

1. 나눗셈-나머지 방식 : 먼저 테이블 내에 들어갈 항목의 개수를 추정한다. 그 숫자는 원래의 값이나 키에서 몫과 나머지를 추출해 내기 위해 각각을 나누는 제수(除數)로 사용된다. 계산의 나머지가 해시 값이 된다 (이 방식은 얼마간의 충돌이 일어나는 것을 피할 수 없으며, 어떠한 검색 방식이라도 충돌 여부를 인식하고, 대체 검색 방법을 제공할 수 있어야만 한다).
2. 접기 : 이 방식은 원래의 값을 여러 부분으로 나누어, 그 부분들을 함께 더하고 나서, 마지막 네 자리를 해시 값이나 키로 삼는 것이다.
3. 기수변환 : 값이나 키가 디지털이라면, 다른 순서의 숫자열을 만들도록 기수(基數)를 변경할 수 있다. 즉, 10진수의 키를 16진수의 키로 변경할 수 있는 것이다. 변경 후, 해시 값의 길이를 일정하게 유지하기 위해 상위 자리수의 일부는 버려질 수 있다.
4. 자리수 재배열 : 이것은 단순히 세 번째부터 여섯 번째 자리까지 등과 같이 원래 값이나 키의 일부를 취하여 그 순서를 역으로 한 다음, 그 것을 해시 값이나 키로 사용하는 것이다.

데 이터베이스 저장이나 검색에 잘 적용되는 해시 함수는 오히려 암호화나 에러검출 목적으로는 잘 듣지 않을 수도 있다. 암호화에 사용되는 잘 알려진 해시 함수들이 몇 개 있다. 이러한 것들에는 전자서명을 요약 메시지라고 불리는 더 짧은 값으로 바꾸는 데 사용되는 요약 메시지 해시 함수 MD2, MD4, MD5 등과, 더 큰 요약 메시지 (60 비트)를 만드는 표준 알고리즘인 SHA 등이 포함된다.


좀더 엔지니어적인 접근으로 참고할 만한 싸이트는

 

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/datastructures_guide2.asp


<출처 : http://blog.daum.net/_blog/BlogView.do?blogid=0CNH3&articleno=7641836&categoryId=469579#ajax_history_home>