비트코인 해시 함수(sha-256, hash256, hash160)
해시 함수는 입력 데이터를 고정된 길이의 해시값으로 변환하는 함수를 말합니다. 비트코인에서는 기본적인 해시 함수인 sha-256과 이를 응용한 hash256, hash160을 사용하고 있습니다.
비트코인에서 사용하는 해시 함수는 다음과 같은 특징을 가지고 있습니다.
- 고정된 길이의 출력
- 같은 입력에 대한 같은 출력
- 역연산 불가능
해시 함수를 이용하면 어떤 길이의 입력이 들어오더라도 항상 같은 길이의 출력 값을 얻어낼 수 있습니다. 또한 같은 입력값이라면 항상 같은 결괏값을 출력합니다. 예를 들어 'Hello'를 sha-256 함수를 이용해 해시값을 얻어내면 항상 '185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969' 라는 결과를 얻습니다.
해시 함수의 가장 중요한 성질 중 하나는 역연산이 사실상 불가능하다는 것입니다. 단어 Hello를 이용해 해시값을 얻는 것은 쉽지만 해시값 '185...969'를 이용해 Hello를 얻어내는 것은 사실상 불가능합니다. 해시값에 해당하는 단어를 얻어내려면 모든 입력값을 대입해 해시값을 찾아야 합니다.
sha-256
sha-256은 비트코인에서 사용하는 가장 기본적인 해시 함수입니다. 해당 함수를 이용하면 고정된 256비트 길이의 해시값을 얻어낼 수 있습니다. 아래 코드는 파이썬 기본 라이브러리를 이용해 'Hello'의 sha-256 해시값을 구해 16진수로 출력하는 코드입니다. 실행 결과는 이전에 알아봤던 값과 같습니다.
import hashlib
s = b'Hello'
h = hashlib.sha256(s)
print(h.hexdigest())
hash256
hash256은 sha-256 함수를 두 번 이용하는 함수입니다. 쉽게 설명하면 hash256(A)는 sha256(sha256(A))입니다. 파이썬을 이용한 코드는 다음과 같습니다.
import hashlib
s = b'Hello'
h1 = hashlib.sha256(s)
h2 = hashlib.sha256(h1.digest())
print(h2.hexdigest())
hash160
hash160은 sha-256으로 구해진 해시값을 ripemd-160 해시 함수에 다시 입력하여 해시 값을 구하는 함수입니다. 쉽게 설명하면 hash160(A)는 ripemd160(sha256(A))입니다. 파이썬을 이용한 코드는 다음과 같습니다.
import hashlib
s = b'Hello'
h1 = hashlib.sha256(s)
h2 = hashlib.new('ripemd160', h1.digest())
print(h2.hexdigest())
지금까지 비트코인에서 사용하는 주요 해시 함수에 대해 알아봤습니다. 감사합니다.
'비트코인 > 비트코인 구조' 카테고리의 다른 글
[비트코인 구조] DER 형식 서명(Signature) 생성 (0) | 2022.08.26 |
---|---|
[비트코인 구조] 개인키(Private key), 공개키(Public key), 주소(Address) 생성 (0) | 2022.08.23 |
[비트코인 구조] 인코딩(Encoding) - Base58Check, Bech32 (2) | 2022.08.22 |
[비트코인 구조] 빅 엔디안(Big endian)과 리틀 엔디안(Little endian) (0) | 2022.08.19 |
[비트코인 구조] 비트코인 트랜잭션(Transaction) 기초 (0) | 2022.08.18 |