해시 함수란 입력의 길이에 상관없이 항상 고정된 길이의 출력을 생성하는 함수를 의미한다.
해시 함수는 임의 길이의 데이터를 고정된 길이의 유일한 값(해시)으로 매핑하는 함수이다.
블록체인에서 사용되는 해시 함수는 다음과 같은 특징을 가진다:
- - 결정성(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 |
댓글