Hash
해시! not 해쉬!
Last updated
해시! not 해쉬!
Last updated
해시의 정의는 해시넷에 따르면 '해시(hash)란 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값이다.' 이다.
사실 hash, hashing 이런 단어들은 구별없이 사용된다. 하지만 한국어 특성상 찰떡같이 알아들을 수 있다.
해싱은 가변적 길이의 문자열을 입력값으로 받아서 정해진 길이의 출력값을 내는 일을 의미한다. 입력값은 어떤 함수를 통해 출력값으로 변하는데 이 함수를 해시 함수라고 한다. 동일한 해시 함수를 이용하여 같은 입력값을 해싱하면 항상 같은 값을 출력한다. 여기서 해싱하여 나온 출력 값을 해시 혹은 해시값이라고 한다.
예를 들어 비트코인에서의 해싱은 거래를 인풋으로 하고 SHA-256같은 암호화 해시 함수를 사용하여 256비트 길이의 값을 출력한다.
보통 해싱이라는 단어는 자료구조를 공부하면서 처음 듣게 된다. 크게 다른 의미로 쓰이지는 않지만 자료구조에서 "해싱한다" 라는 것은 "해시 함수를 이용해서 해시 값을 구해 해시 테이블에 저장한다"는 의미로 사용된다.
해시 함수는 입력 값을 받아서 어떠한 계산을 통해 출력 값을 반환하는 함수이다. 여기서 계산은 주로 CPU자원을 많이 소비하지 않는 가벼운 연산으로 이루어진다. 같은 입력 값에 대해서 해시 함수는 항상 같은 출력 값을 반환한다. 대표적인 해시 함수로는 MD, SHA, murmur hash 등이 있다.
간단한 예시로 modular(나머지 연산)도 해시 함수가 될 수 있다. 아래 해시 함수를 생각해보자. 어떠한 x 값이 오더라도 한자리 수 정수를 반환하면서 같은 x 값에 대해서는 항상 같은 값을 반환한다.
해싱의 정의에서 눈치 챘겠지만, 해시 함수가 해싱의 알파이자 오메가이다. 해싱의 성능이나 목적은 해시 함수에 의해 결정된다고 볼 수 있다.
해시 함수는 많은 종류가 있지만 블록체인에서는 암호화 해시 함수 (cryptographic hash function)를 주로 사용한다.
암호화 해시 함수는 해시 함수들 중에서도 특수한 성질을 만족하는 함수들의 집합이다. 암호화 해시 함수는 여러 보안 영역에서 중요하게 사용된다.
암호화 해시 함수는 아래 특성을 가져야한다.
일방향 함수(one-way function): 결과값이 주어졌을 때 입력값을 구하는 것이 어려운 함수.
제2 역상 저항성(second preimage resistance): 입력값이 주어져 있을 때, 그 입력과 같은 해시값을 출력하는 다른 입력값을 찾기 어려운 함수.
충돌 저항성(collision resistance): 해시 충돌에 대해 안전해야 한다. 같은 해시 값을 생성하는 두 개의 입력값을 찾는 것이 계산상 어려워야 한다.
SHA 계열, MD 계열 함수가 대표적이다.
암호화 해시 함수는 암호학에서 주로 이용된다. 암호 시스템이나 전자 서명등에 사용된다. 자세한 내용은 암호학(Cryptography) 세션을 참고하자.
참고: https://ko.wikipedia.org/wiki/%EC%95%94%ED%98%B8%ED%99%94_%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98
Last update: 04/08/0201