디지털 서명(Digital Signature)은 문서의 진위성과 무결성을 증명하는 암호학적 방법이다. 개인키로 서명하고 공개키로 검증하며, 블록체인의 트랜잭션 인증 핵심 기술이다.
동작 원리
서명:
문서 → SHA-256 → 해시값
해시값 + 개인키 → ECDSA 서명
검증:
서명 + 공개키 → ECDSA 검증
검증된 해시값 == 문서의 해시값? → 유효
제공하는 보안 속성
| 속성 | 의미 |
|---|
| 인증 | 서명자 신원 확인 (개인키 소유자) |
| 무결성 | 문서가 서명 후 변경되지 않았음 |
| 부인 방지 | 서명자가 나중에 서명 사실 부인 불가 |
python
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
# 키 생성
private_key = ec.generate_private_key(ec.SECP256K1())
public_key = private_key.public_key()
# 서명
message = b"Transaction: Alice -> Bob: 1 BTC"
signature = private_key.sign(message, ec.ECDSA(hashes.SHA256()))
# 검증
try:
public_key.verify(signature, message, ec.ECDSA(hashes.SHA256()))
print("서명 유효!")
except Exception:
print("서명 위조!")
블록체인에서의 활용
Bitcoin 트랜잭션:
1. Alice가 개인키로 "1 BTC를 Bob에게 전송" 서명
2. 네트워크에 서명 + 트랜잭션 브로드캐스트
3. 노드가 Alice의 공개키로 서명 검증
4. 검증 성공 → 트랜잭션 블록에 포함
관련 개념
- •RSA — RSA 기반 디지털 서명
- •SHA-256 — 서명 전 문서 해시
- •공개키 암호화 — 디지털 서명의 기반
- •Bitcoin — ECDSA 기반 트랜잭션 서명
참고문헌
- •NIST FIPS 186-5 — Digital Signature Standard