디지털 서명의 수학 원리
- 수학/수학이야기
- 2025. 8. 9.
디지털 서명의 수학적 마법 - 손글씨보다 더 안전한 전자 사인의 비밀
여러분이 온라인 뱅킹으로 송금하거나, 암호화폐를 전송할 때마다 일어나는 놀라운 일이 있습니다. 여러분의 "전자 서명"이 전 세계 그 누구도 위조할 수 없는 수학적 증명이 되는 것입니다.
손글씨 서명은 연습하면 흉내낼 수 있지만, 디지털 서명은 우주의 나이만큼 오랜 시간이 걸려도 위조가 불가능합니다. 어떻게 이런 마법 같은 일이 가능할까요?
오늘은 디지털 서명 속에 숨겨진 수학의 세계로 떠나보겠습니다.
✍️ 서명이란 무엇인가? - 아날로그에서 디지털로
누구나 자기만의 서명(싸인)을 가지고 있습니다. 이제는 컴퓨터를 더 많이 쓰는 시대이니만큼 서명을 직접 쓰지 않고 디지털로 쓰려는 움직임이 많이 보입니다. 실제로 계약서를 쓰면 디지털 서명을 쓰게끔 도와주는 업체도 있는만큼 디지털 서명은 점점 우리 삶으로 들어오고 있습니다.

전통적인 서명의 한계
이런 움직임의 이유는 종이에 쓰는 서명은 다음과 같은 문제가 있기 때문입니다.
- 위조 가능: 충분히 연습하면 흉내낼 수 있음
- 복사 불가: 한 번 쓰면 다른 문서에 똑같이 옮길 수 없음
- 검증 어려움: 전문가도 진위 판별에 시간이 걸림
디지털 서명이 해결하는 것들
디지털 서명은 전통적인 서명의 모든 한계를 수학적으로 극복합니다:
🔒 부인 방지(Non-repudiation): "내가 서명한 게 아니야"라고 부인할 수 없음
🛡️ 무결성(Integrity): 문서가 조작되었는지 즉시 알 수 있음
🎯 인증(Authentication): 서명자가 누구인지 확실히 증명
⚡ 즉시 검증: 몇 밀리초 만에 진위 확인 가능
🧮 디지털 서명의 수학적 기초: RSA 서명
RSA 서명 알고리즘의 작동 원리
RSA 디지털 서명은 암호화와 반대로 작동합니다. 이게 핵심 아이디어입니다!
🔑 키 생성 과정:
1. 두 개의 큰 소수 선택: p = 1009, q = 1013
2. n = p × q = 1,022,117
3. φ(n) = (p-1) × (q-1) = 1,020,096
4. 공개키 지수 e = 65537
5. 개인키 지수 d = e⁻¹ mod φ(n) = 518,401
✍️ 서명 과정:
메시지: "Alice가 Bob에게 100BTC 전송"
해시값: H(메시지) = 12345 (실제로는 256비트)
서명: S = H(메시지)^d mod n = 12345^518401 mod 1022117 = 67890
✅ 검증 과정:
검증자는 다음을 계산합니다:
S^e mod n = 67890^65537 mod 1022117 = 12345
이 값이 H(메시지)와 같으면 서명이 유효!
🎯 왜 이렇게 안전한가?
수학적 보안 근거:
- 서명을 위조하려면
S^e ≡ H(메시지) (mod n)를 만족하는 S를 찾아야 함 - 이는 이산 로그 문제와 동등하며, 현재 수학으로는 효율적 해법이 없음
- n을 소인수분해할 수 없는 한 개인키를 구할 수 없음
📈 타원곡선 디지털 서명 알고리즘 (ECDSA)
더 우아하고 효율적인 수학
비트코인과 이더리움이 사용하는 ECDSA는 타원곡선의 기하학적 성질을 이용합니다.
사용하는 타원곡선 (secp256k1):
y² = x³ + 7 (mod p)
여기서 p = 2²⁵⁶ - 2³² - 2⁹ - 2⁸ - 2⁷ - 2⁶ - 2⁴ - 1
ECDSA 서명 과정의 수학적 아름다움
🔑 키 생성:
개인키: d (1부터 n-1 사이의 랜덤 정수)
공개키: Q = d × G (G는 곡선의 생성점)
✍️ 서명 생성:
1. 랜덤한 k 선택 (1 ≤ k ≤ n-1)
2. (x₁, y₁) = k × G 계산
3. r = x₁ mod n
4. s = k⁻¹(H(메시지) + d × r) mod n
5. 서명 = (r, s)
✅ 서명 검증:
1. u₁ = H(메시지) × s⁻¹ mod n
2. u₂ = r × s⁻¹ mod n
3. (x₁, y₁) = u₁ × G + u₂ × Q
4. r과 x₁이 같으면 서명 유효!
🚀 ECDSA의 놀라운 효율성
크기 비교
- RSA-3072 서명: 384바이트
- ECDSA-256 서명: 64바이트
6배 더 작으면서도 같은 보안 수준! 아주 효율적입니다.
🔬 슈노르 서명: 수학적 완벽성의 추구
선형성의 마법
2021년 비트코인에 도입된 슈노르 서명은 수학적으로 더 우아한 구조를 가집니다:
서명 생성:
s = k + H(R|P|m) × x
여기서:
- k: 랜덤한 nonce
- R = k × G: 공개된 점
- P = x × G: 공개키
- m: 메시지
- x: 개인키
선형성의 놀라운 성질:
서명 1: s₁ = k₁ + H₁ × x₁
서명 2: s₂ = k₂ + H₂ × x₂
합성 서명: s = s₁ + s₂ = (k₁ + k₂) + H × (x₁ + x₂)
이 성질 덕분에 다중 서명(Multi-signature)과 서명 집계가 가능합니다!
🎭 영지식 증명과 서명의 만남
zk-SNARKs: 비밀을 말하지 않고 증명하기
영지식 증명은 "나는 비밀을 알고 있다"를 비밀을 공개하지 않고 증명하는 수학적 마법입니다.
수학적 원리 (간단한 예시):
비밀: x = 7
공개 정보: y = x² = 49
증명자가 하는 일:
1. 랜덤한 r 선택 (예: r = 3)
2. t = r² = 9 계산 후 공개
3. 검증자가 랜덤한 c 제시 (예: c = 0 또는 1)
4. c=0이면 r 공개, c=1이면 s = r + cx 공개
검증:
- c=0일 때: r² = t인지 확인
- c=1일 때: s² = t + c²y인지 확인
실제 응용: Zcash의 zk-SNARKs
Zcash는 이차 산술 프로그램(QAP)과 타원곡선 쌍(Pairing)을 이용해 완전한 프라이버시를 제공합니다:
증명하고 싶은 것: "나는 유효한 거래를 가지고 있다"
공개하지 않는 것: 송신자, 수신자, 금액
수학적 구조:
- 증명 크기: 288바이트 (거래 내용과 무관)
- 검증 시간: 몇 밀리초
- 완벽한 영지식성 보장
🏛️ 실생활 속 디지털 서명 수학
블록체인 거래의 수학적 여정

여러분이 비트코인을 전송할 때도 수학적 과정이 일어납니다.
1단계: 거래 구성
입력: 이전 거래의 출력
출력: 새로운 주소와 금액
스크립트: 잠금 조건
2단계: 서명 생성
메시지 = Hash(거래 데이터)
k = 안전한 랜덤 nonce
r = (k × G).x mod n
s = k⁻¹(메시지 + 개인키 × r) mod n
3단계: 네트워크 검증
모든 노드가 다음을 확인:
- 서명이 수학적으로 유효한가?
- 공개키가 주소와 일치하는가?
- 거래 데이터가 변조되지 않았는가?
스마트 계약 속 서명 검증
이더리움 스마트 계약에서의 서명 검증
contract SignatureVerification {
function verifySignature(
bytes32 messageHash,
bytes memory signature,
address signer
) public pure returns (bool) {
bytes32 ethSignedMessageHash = keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)
);
address recoveredSigner = ethSignedMessageHash.recover(signature);
return recoveredSigner == signer;
}
}
🎯 멀티시그: 수학적 협력의 힘
n-of-m 다중서명의 수학
"3명 중 2명이 동의해야 거래 실행"과 같은 조건을 수학으로 구현
전통적 방식 (비트코인):
스크립트: 2 <pubkey1> <pubkey2> <pubkey3> 3 CHECKMULTISIG
의미: 3개 공개키 중 2개의 유효한 서명 필요
슈노르 집계 방식:
개별 서명: s₁, s₂, s₃
집계 서명: s = s₁ + s₂ + s₃
검증: s × G = R₁ + R₂ + R₃ + H × (P₁ + P₂ + P₃)
임계값 서명의 고급 수학
샤미르 비밀 분산을 이용한 더 정교한 방식:
비밀키 x를 t-of-n으로 분산:
다항식 f(z) = x + a₁z + a₂z² + ... + aₜ₋₁z^(t-1)
각 참여자 i는 (i, f(i))를 받음
t명이 모이면 라그랑주 보간법으로 x 복원 가능
⚡ 배치 검증: 수학적 최적화
여러 서명을 한 번에 검증하기
수천 개의 거래를 포함한 블록을 검증할 때 배치 검증으로 효율성을 높입니다:
개별 검증 (비효율적):
서명 1: s₁ × G = R₁ + H₁ × P₁
서명 2: s₂ × G = R₂ + H₂ × P₂
...
서명 n: sₙ × G = Rₙ + Hₙ × Pₙ
배치 검증 (효율적):
랜덤 가중치 α₁, α₂, ..., αₙ 생성
검증: (α₁s₁ + α₂s₂ + ... + αₙsₙ) × G
= α₁R₁ + α₁H₁P₁ + α₂R₂ + α₂H₂P₂ + ... + αₙRₙ + αₙHₙPₛ
성능 향상: n개 서명 검증이 개별 검증 대비 80% 시간 단축!
🔮 미래의 디지털 서명 수학
후양자 서명 알고리즘
양자컴퓨터가 등장하면 현재의 타원곡선 서명은 위험해집니다. 이에 대비한 새로운 수학적 접근:
1. 격자 기반 서명 (Dilithium)
보안 근거: Learning With Errors (LWE) 문제
서명 크기: 2420바이트 (ECDSA 대비 38배)
장점: 양자 컴퓨터에도 안전
단점: 크기와 연산량 증가
2. 해시 기반 서명 (SPHINCS+)
보안 근거: 해시 함수의 일방향성만 가정
서명 크기: 7856바이트 (매우 큼)
장점: 가장 보수적이고 안전함
단점: 실용성 문제
동형 서명: 암호화된 상태로 서명하기
완전 동형 암호화와 결합된 미래의 서명:
암호화된 메시지: Enc(m)
암호화된 서명: Sign(Enc(m))
검증: Verify(Enc(m), Sign(Enc(m))) = 1
놀라운 점: 메시지를 복호화하지 않고도 서명 검증 가능!
🎪 재미있는 디지털 서명 수학 트리비아
서명 가단성(Malleability) 문제
ECDSA의 흥미로운 취약점:
유효한 서명 (r, s)가 있으면
(r, -s mod n)도 똑같이 유효한 서명!
비트코인 거래 ID 변경 공격의 원인
→ 슈노르 서명으로 해결됨
생일 역설과 해시 충돌
디지털 서명에서 사용하는 해시 함수의 재미있는 수학:
SHA-256 출력: 2²⁵⁶ 가지 경우
생일 역설에 의한 충돌 확률 50%까지 필요한 시도: 2¹²⁸ 회
현재 전 세계 컴퓨팅 파워로도 수십억 년 소요
→ 실질적으로 안전함
키 복구의 마법
ECDSA에서는 서명만으로 공개키를 복구 가능:
서명 (r, s)와 메시지 해시 h가 주어지면:
R = (r, y) 계산 (y는 두 가지 가능)
공개키 Q = r⁻¹(sR - hG)
이더리움이 주소 대신 공개키를 저장하지 않는 이유!
🎯 마무리: 수학이 만드는 신뢰의 네트워크
디지털 서명은 단순해 보이는 개념이지만, 그 안에는 수천 년간 축적된 수학적 지혜가 응축되어 있습니다.
오늘 우리가 살펴본 수학적 원리들:
- 정수론: 소수와 모듈러 산술의 응용
- 대수기하학: 타원곡선의 군 구조 활용
- 확률론: 랜덤성과 보안 증명
- 복잡도 이론: 계산 불가능성을 이용한 보안
- 추상대수: 군론과 체론의 실제 응용
매번 여러분이 "전송" 버튼을 누를 때마다, 우주에서 가장 정교한 수학적 증명이 여러분의 의도를 전 세계에 알리고 있습니다.
손글씨 서명보다 더 안전하고, 공증인보다 더 확실하며, 어떤 권위보다도 믿을 만한 순수한 수학의 힘으로 말이죠.
다음에 암호화폐를 전송하거나 전자서명을 할 때, 여러분의 클릭 한 번에 담긴 수학적 기적을 떠올려 보세요. 우리는 정말 놀라운 시대에 살고 있습니다!
함께 보면 좋은 글
'수학 > 수학이야기' 카테고리의 다른 글
| zk-STARKs와 투명한 영지식의 세계 (14) | 2025.08.13 |
|---|---|
| zk-SNARKs 다항식과 타원곡선의 수학 (8) | 2025.08.12 |
| 비밀을 말하지 않고 진실을 증명하기(feat.영지식 증명) (6) | 2025.08.11 |
| 암호화폐와 블록체인 속 수학 원리 (15) | 2025.08.08 |
| 갈루아 표현 이론: 대칭성 표현 (5) | 2025.08.07 |