본문 바로가기
블록체인 이론

해시 함수와 비대칭 암호화 기법

by gun_poo 2024. 2. 21.

해시 함수란 입력의 길이에 상관없이 항상 고정된 길이의 출력을 생성하는 함수를 의미한다.

해시 함수는 임의 길이의 데이터를 고정된 길이의 유일한 값(해시)으로 매핑하는 함수이다.

블록체인에서 사용되는 해시 함수는 다음과 같은 특징을 가진다:

  • 결정성(Deterministic): 동일한 입력에 대해 항상 동일한 출력(해시)을 생성한다.
  • 빠른 계산: 입력 데이터의 크기와 상관없이 해시 값을 빠르게 계산할 수 있다.
  • 충돌 방지: 두 개의 다른 입력이 동일한 출력을 가질 확률이 극히 낮다.
  • 원본 가리기: 출력값으로부터 입력값을 유추하기 매우 어렵다.
  • 데이터 무결성: 입력 데이터에 아주 작은 변화라도 출력 해시에는  변화가 생긴다.

sha256 과 해시 퍼즐

블록체인에서 사용하는 해시함수는 sha256이다. 입력에 상관없이 항상 256비트의 출력을 생성한다.

 

머클트리에서 사용

비트코인 머클트리와, 이더리움 머클트리 구조는 다소 차이가 있다.

 

우선 비트코인 머클트리 해시구조에 대해 알아보자.

  • 비트코인에서는 트랜잭션의 해시를 계산할  SHA-256 해시 함수를   적용하는 것이 일반적이다. 이를 "double-SHA-256"이라고 한다. ,  트랜잭션의 해시는 SHA256(SHA256(tx)) 형태로 계산된다. 이렇게 해시를   적용하는 이유는 보안을 강화하기 위함이다. 머클 트리의  노드는 자식 노드들의 해시 값을 합친 , 이를 다시 해시하여 생성된다.

이더리움의 머클 트리

  • 이더리움은 비트코인과는 다르게, 머클 패트리샤 트리(Merkle Patricia Tree)라는 변형된 형태의 머클 트리를 사용한다. 이 구조는 데이터의 저장 및 검색 효율성을 높이기 위해 설계되었다. 이더리움에서는 블록 헤더에 세 가지 다른 종류의 머클 패트리샤 트리의 루트를 포함한다: 상태 트리, 트랜잭션 트리, 그리고 영수증 트리이다.
  • 이더리움은 트랜잭션 해시와 머클 트리의 생성에 Keccak-256(이전에는 SHA-3으로 알려짐) 해시 함수를 사용한다. 이더리움의 경우, 트랜잭션 해시를 계산할  해시 함수를   적용하는 대신 일반적으로  번만 적용한다.

암호화 기법

해시 함수는 사소한 변경도 손쉽게 탐지할 수 있는 성질을 갖고있지만 해시 값으로 부터 원래 메시지를 복원하는 것은 불가능하다.

해시 함수는 문장을 암호화해뒀다 필요한 경우 원래 문장을 복원하는 암호화 기법과는 확연히 구분된다.

대칭형, 비대칭형 기법

대칭형 : 암호화와 복호화 모두 동일한 키를 사용하는 방식

비대칭형: 암호화 할때와 복호화 할때 서로 다른키를 사용하는 방식

 

대칭형 암호화(Symmetric Encryption)

  • 개요: 대칭키 암호화는 암호화와 복호화에 동일한 키를 사용하는 암호화 기법이다.
  • 동작 원리: 평문(원본 데이터)과 대칭키를 사용하여 암호문(암호화된 데이터)을 생성하고, 이 암호문과 대칭키를 사용하여 원본 데이터를 복원한다.
  • 장점:
    • 빠른 암호화 및 복호화 속도
    • 구현이 간단하고 효율적
  • 단점:
    • 대칭키를 안전하게 공유해야 함
    • 키 관리가 어려울 수 있음

비대칭형 암호화(Asymmetric Encryption)

  • 개요: 비대칭키 암호화는 암호화와 복호화에 서로 다른 키를 사용하는 암호화 기법이다.
  • 동작 원리: 공개키와 개인키를 사용하여 암호화된 데이터를 생성하고, 이를 개인키로만 복호화할 수 있다.
  • 장점:
    • 키 교환 문제를 해결하여 안전한 통신을 지원
    • 공개키를 자유롭게 공유할 수 있음
  • 단점:
    • 대칭키에 비해 느린 암호화 및 복호화 속도
    • 키 관리 및 인증의 어려움

비대칭형 암호화의 용도

 개인키 암호화 - 전자 서명

서로 쌍이 되는 키의 성질을 이용하면 위조 불가, 인증 효과를 구현가능하여 메시지를 만든 사람과 그 메시지의 진위를 검증할수 있다. 개인키로 암호화 한 후 공개키로 복호화하는 방법을 사용한다.

 

메시지와, 메세지를 해시화한 전자 서명을 함께 송신한다.

해시 함수를 H(), 개인키, 공개키를 각 K(priv), k(pub) 이라 할때

서명을 한다는 것은 => Sig = E(H(M), k(priv))

문서의 해시를 만들고 H(M), 해시값을 개인키로 암호화 E(H(M), K(priv))하는 과정이다.

검증을 한다는 것은 => H(M) = D(Sig, K(pub))

문서의 해시 값을 계산한 후 복호화도니 전자 서명 값과 일치하는지 비교한다.

 

 

'블록체인 이론' 카테고리의 다른 글

트랜잭션 (transaction), UTXO, 서명  (1) 2024.02.21
블록의 구조  (0) 2024.02.21
Nonce  (0) 2024.02.21
이더리움 Nonce 검증  (0) 2024.02.21
머클트리  (0) 2024.02.21

댓글