Link Search Menu Expand Document

Hash

Hash Function

  • hash

  • Hash Function이란 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다.

해시 함수의 특징

  • 어떤 값을 입력해도 고정 길이의 해시를 출력한다.
    • 입력데이터의 크기가 방대할지라도 해시결과물은 고정된 길이를 갖기 때문에, 고정 길이의 해시 길이만큼만 비교과정을 거쳐서 데이터의 변화가 발생했는지 확인할 수 있다.
  • 눈사태 효과 : 입력값의 아주 일부를 변경했을때, 전혀 다른 결과를 출력한다.
    • 이를 반대로 말하면, 같은 입력값에는 항상 같은 해시값을 얻을 수 있어야한다. 만약 동일 값에 대하여 다른 해시 결과값을 얻게된다면 데이터의 무결성을 검증할 수 없게된다.
  • 눈사태효과의 특징으로, 해시를 통하여 입력값을 유추할 수 없다.

Hash Function Example

  • SHA-256 : SHA(Secure Hash Algorithm) 알고리즘의 한 종류로서 256비트의 해시 값을 생성하는 해시 함수이다. SHA-256은 미국의 국립표준기술연구소(NIST; National Institute of Standards and Technology)에 의해 공표된 표준 해시 알고리즘인 SHA-2 계열 중 하나이며 블록체인에서 가장 많이 채택하여 사용하고 있다.
  • MD5(Message-Digest algorithm 5) : 128비트의 해시 값을 생성하는 해시 함수이다. 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다. 이전에 쓰이던 MD4를 대체하기 위해 만들어졌다. 문제점이 발견되어 추천되지않는다

Hash Collision

  • Hash Collision이란 서로 다른 두개의 입력값에 대하여 동일한 출력값을 내는 상황을 의미한다.
  • 일반적인 해결론이 제시되어있다.
    • separate chaining : jdk 에서 사용하는 방식으로 각 bucket이 linked list 구조를 갖고 data를 이어서 저장해나간다.
    • Open Addressing : chaining 방법과 달리, 기존의 해쉬 공간 내에서 index에 충돌이 발생했을 때 탐색을 통해 빈 index bucket에 데이터를 저장하는 방식이다. 해쉬 테이블 내의 빈 주소를 찾아가는 방법이며, 방법에 따라 linear Probing, Quadratic Probing등 여러 방법이있다.
      • 최초 index에 저장된 데이터가 삭제되었을 경우 충돌에 의해서 다른 곳에 저장된 데이터의 검색이 어렵다는 한계점이 있으며, 추가적인 데이터 공간을 사용하기 때문에 태생적인 한계점을 갖는다. 따라서, resizing 작업이 필요하다.
      • linear Probing의 경우 군집화 현상이 발생하기 때문에 해쉬의 성능을 방해할 확률이 높다.

Map? HashMap?

  • key : value 형태로 저장된 자료구조를 Map이라고 부른다.
  • keyvalue 를 찾는 방법에 따라서 hashMap,treeMap등의 이름이 붙는다
  • 즉, HashMapkey를 통해 value를 찾아가는 과정에 hash function이 적용된 Map 형태의 자료구조이다.

HashMap 의 특징

  • hashMap
    • key ⇒ value 를 찾는 과정에 hash function이 사용된다.
    • value 값을 찾을 때 Hash Function을 한 번씩만 수행하면 되기 때무에 데이터 조회 및 저장 삭제가 빠르다는 장점이 있다.

참고

  • https://en.wikipedia.org/wiki/Hash_table
  • https://preamtree.tistory.com/20