해시는 임의 길이의 데이터를 고정 길이 값으로 바꾸는 함수입니다. 블록체인에서는 이 값을 데이터의 지문처럼 사용합니다.

중요한 점은 해시가 암호화가 아니라는 것입니다. 암호화는 원래 데이터를 다시 복원할 수 있어야 하지만, 해시는 보통 원래 입력을 되돌리는 용도로 쓰지 않습니다. 대신 같은 입력은 같은 결과를 만들고, 입력이 조금만 달라져도 전혀 다른 결과가 나오도록 설계합니다.

블록체인에서 해시는 크게 세 가지 역할을 합니다.

  • 데이터를 짧은 식별자로 다룹니다.
  • 데이터가 바뀌었는지 확인합니다.
  • 여러 데이터를 하나의 루트 값으로 묶어 검증합니다.

예를 들어 어떤 거래 데이터의 해시가 이미 알려져 있다면, 나중에 같은 거래 데이터를 다시 해시해서 결과를 비교할 수 있습니다. 값이 같으면 같은 데이터라고 볼 수 있고, 다르면 중간에 내용이 바뀐 것입니다.

블록체인에서 왜 중요한가

블록체인은 많은 데이터를 직접 비교하지 않습니다. 대신 데이터에서 계산한 해시를 비교합니다.

이 방식은 두 가지 장점이 있습니다.

  • 큰 데이터를 작은 값으로 식별할 수 있습니다.
  • 전체 데이터를 매번 들고 오지 않아도 일부 데이터가 포함되었는지 검증할 수 있습니다.

머클 트리나 이더리움의 Merkle Patricia Trie 같은 구조가 이 성질을 사용합니다. 여러 데이터의 해시를 다시 묶고, 그 결과를 또 해시해서 하나의 루트 값을 만듭니다. 이 루트 값이 바뀌면 아래 데이터 중 어딘가가 바뀌었다는 뜻입니다.

이더리움 문서도 Merkle Patricia Trie를 결정적이고 암호학적으로 검증 가능한 구조로 설명합니다. 같은 상태는 같은 루트 해시를 만들고, 상태가 같다는 사실은 루트 해시와 그 경로의 해시를 비교해 증명할 수 있습니다.

이더리움과 Keccak

이더리움에서 자주 보이는 해시 함수는 keccak256입니다.

이름 때문에 SHA-3와 혼동하기 쉽습니다. Keccak은 SHA-3 표준의 기반이 된 알고리즘이지만, 이더리움에서 쓰는 keccak256은 보통 최종 NIST SHA3-256과 같은 이름으로 부르지 않습니다. 실무에서는 이 차이를 구분하는 것이 안전합니다.

NIST FIPS 202는 SHA-3 계열이 Keccak에 기반한다고 설명합니다. 이더리움 쪽에서는 keccak256이라는 이름을 그대로 쓰는 경우가 많습니다.

정리

해시는 블록체인에서 데이터를 직접 보관하는 대신, 데이터를 검증 가능한 지문으로 다루게 해주는 기본 도구입니다.

오늘 기준으로는 이렇게 정리합니다.

해시는 데이터를 고정 길이 식별자로 바꾸고, 블록체인은 이 식별자를 이용해 데이터 변경 여부와 포함 여부를 검증한다.

참고 자료

  • Ethereum.org, Merkle Patricia Trie
  • NIST FIPS 202, SHA-3 Standard