<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on kenji.blog</title><link>http://kenji.blog/ko/tags/security/</link><description>Recent content in Security on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ko</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 17:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ko/tags/security/index.xml" rel="self" type="application/rss+xml"/><item><title>포스트 양자 시대의 블록체인·가상화폐는 어떻게 변할까?</title><link>http://kenji.blog/ko/p/post-quantum-blockchain-and-crypto/</link><pubDate>Fri, 11 Sep 2026 17:00:00 +0900</pubDate><guid>http://kenji.blog/ko/p/post-quantum-blockchain-and-crypto/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-blockchain-and-crypto/img/eyecatch.jpg" alt="Featured image of post 포스트 양자 시대의 블록체인·가상화폐는 어떻게 변할까?" />&lt;h2 id="1-인트로덕션-포스트-양자-시대의-발소리와-블록체인의-위기">1. 인트로덕션: 포스트 양자 시대의 발소리와 블록체인의 위기
&lt;/h2>&lt;p>2009년 사토시 나카모트에 의해 비트코인(Bitcoin)이 탄생한 이래, 블록체인 기술은 &amp;lsquo;탈중앙화되고 위변조가 불가능한 원장&amp;rsquo;으로서 전 세계 금융 시스템과 애플리케이션의 기반으로 성장했습니다. 이러한 견고한 보안을 지탱하고 있는 것이 **공개키 암호(Public Key Cryptography)**와 **암호학적 해시 함수(Cryptographic Hash Functions)**라는 현대 암호 기술입니다.&lt;/p>
&lt;p>이러한 암호 기술은 고전적인 컴퓨터(현재 우리가 사용하고 있는 PC나 슈퍼컴퓨터)로는 우주의 수명만큼의 시간을 들여도 해독할 수 없다는 수학적인 &amp;lsquo;계산 곤란성(Computational Hardness)&amp;lsquo;을 근거로 안전성을 보장하고 있습니다.&lt;/p>
&lt;p>하지만 이 전제는 물리학과 정보과학의 프론티어인 **양자 컴퓨터(Quantum Computers)**의 급속한 발전과 실용화로 인해 근본부터 뒤집히려 하고 있습니다. 양자역학 특유의 &amp;lsquo;중첩(Superposition)&amp;lsquo;이나 &amp;lsquo;양자 얽힘(Entanglement)&amp;lsquo;을 이용하는 양자 컴퓨터는 특정 수학적 문제에 있어 기존의 고전 컴퓨터를 압도하는 계산 능력, 이른바 &amp;lsquo;양자 초월성(Quantum Supremacy)&amp;lsquo;을 발휘합니다.&lt;/p>
&lt;p>본 기사에서는 블록체인 기술이 양자 컴퓨터에 의해 구체적으로 어떤 위협에 직면해 있는지, 그리고 그 해결책이 될 **내양자 암호(PQC: Post-Quantum Cryptography)**의 최신 동향과 암호자산 네트워크의 전환 시나리오에 대해 기술적이고 수리적인 관점에서 철저하게 깊이 파고들어 해설합니다.&lt;/p>
&lt;hr>
&lt;h2 id="2-양자-컴퓨터의-기초와-블록체인에-미치는-2가지-큰-위협">2. 양자 컴퓨터의 기초와 블록체인에 미치는 2가지 큰 위협
&lt;/h2>&lt;p>현재의 블록체인 시스템은 주로 다음 2가지 암호 요소로 구성되어 있으며, 이들은 각각 양자 알고리즘에 의한 서로 다른 위협에 노출되어 있습니다.&lt;/p>
&lt;div class="mermaid">graph TD
A["양자 컴퓨터의 경이적인 계산 능력"] --> B["쇼어의 알고리즘 (Shor's Algorithm)"]
A --> C["그로버의 알고리즘 (Grover's Algorithm)"]
B --> D["공개키 암호 (ECDSA/RSA/DSA) 의 붕괴"]
C --> E["암호학적 해시 함수 (SHA-256) 에 미치는 영향"]
D --> F["타인의 비밀키 특정 및 트랜잭션 위조"]
E --> G["PoW 마이닝의 우위성 및 일부 주소에 대한 공격"]
F --> H["블록체인에 있어 치명적이고 직접적인 위협"]
G --> I["알고리즘 조정 (키 길이 확장 등) 으로 대응 가능한 위협"]
style H fill:#ff9999,stroke:#cc0000,stroke-width:2px;
style I fill:#ffff99,stroke:#cccc00,stroke-width:2px;&lt;/div>
&lt;h3 id="21-타원곡선-암호ecdsa의-기초와-계산-곤란성">2.1. 타원곡선 암호(ECDSA)의 기초와 계산 곤란성
&lt;/h3>&lt;p>비트코인이나 이더리움(Ethereum)을 비롯한 많은 블록체인은 디지털 서명 알고리즘으로 **타원곡선 디지털 서명 알고리즘(ECDSA: Elliptic Curve Digital Signature Algorithm)**을 채택하고 있습니다. 구체적으로 비트코인은 &lt;code>secp256k1&lt;/code>이라는 매개변수의 타원곡선을 사용합니다.&lt;/p>
&lt;p>타원곡선 암호의 안전성은 **타원곡선 이산대수 문제(ECDLP: Elliptic Curve Discrete Logarithm Problem)**의 계산 곤란성에 의존하고 있습니다.
타원곡선은 아래의 바이어슈트라스(Weierstrass) 표준형으로 표현되는 방정식으로 정의됩니다.&lt;/p>
$$
y^2 \equiv x^3 + ax + b \pmod{p}
$$
&lt;p>비트코인의 &lt;code>secp256k1&lt;/code>에서는 $a = 0, b = 7$이며, $p$는 매우 큰 소수입니다.
이 곡선 상에 있는 베이스 포인트(기준점)를 $G$라 하고, 무작위로 선택된 256비트의 거대한 정수인 비밀키를 $k$라고 합니다. 이때, 공개키 $K$는 베이스 포인트의 $k$번 덧셈(스칼라 곱셈)을 통해 구해집니다.&lt;/p>
$$
K = k \times G = \underbrace{G + G + \dots + G}_{k \text{ times}}
$$
&lt;p>고전 컴퓨터를 사용하여 공개된 공개키 $K$와 베이스 포인트 $G$로부터 비밀키 $k$를 역산(이산대수를 구함)하는 것은, 폴라드 로(Pollard&amp;rsquo;s rho) 알고리즘과 같은 최선의 고전적 알고리즘을 사용하더라도 $\mathcal{O}(\sqrt{p})$의 지수함수적인 계산 시간이 걸립니다. 256비트 키의 경우 약 $2^{128}$번의 연산이 필요하며, 이는 현재의 슈퍼컴퓨터를 수십억 년 가동해도 풀 수 없는 수준입니다.&lt;/p>
&lt;h3 id="22-쇼어의-알고리즘shors-algorithm에-의한-붕괴">2.2. 쇼어의 알고리즘(Shor&amp;rsquo;s Algorithm)에 의한 붕괴
&lt;/h3>&lt;p>하지만 1994년에 피터 쇼어가 발표한 &lt;strong>쇼어의 알고리즘&lt;/strong>은 이 전제를 완전히 파괴했습니다. 쇼어의 알고리즘은 원래 소인수분해 문제(RSA 암호의 기반)를 다항식 시간에 풀기 위해 제안되었지만, 이산대수 문제나 타원곡선 이산대수 문제에도 적용 가능합니다.&lt;/p>
&lt;p>쇼어 알고리즘의 핵심은 **양자 푸리에 변환(QFT: Quantum Fourier Transform)**을 사용하여 함수의 &amp;lsquo;주기(Period)&amp;lsquo;를 고속으로 찾아내는 데 있습니다.&lt;/p>
$$
\text{고전적인 계산량} = \mathcal{O}(2^{n/2}) \quad (n\text{은 비트 길이})
$$
$$
\text{양자 알고리즘의 계산량} = \mathcal{O}(n^3)
$$
&lt;p>이처럼 쇼어의 알고리즘은 지수함수적인 시간을 **다항식 시간(Polynomial Time)**으로 극적으로 단축시킵니다. 충분한 논리적 양자 비트를 가진 양자 컴퓨터가 완성되면 네트워크 상에 공개된 공개키 $K$로부터 단 몇 분 또는 몇 초 만에 비밀키 $k$를 특정할 수 있게 됩니다. 이로 인해 공격자는 타인 지갑의 비밀키를 쉽게 입수하여 자금을 완전히 장악할 수 있게 됩니다.&lt;/p>
&lt;h4 id="221-쇼어의-알고리즘에-의한-ecdlp-해독의-단계별-과정">2.2.1 쇼어의 알고리즘에 의한 ECDLP 해독의 단계별 과정
&lt;/h4>&lt;p>양자 컴퓨터가 어떻게 타원곡선 이산대수 문제(ECDLP)를 푸는지, 그 내부 프로세스를 순서대로 살펴보겠습니다.&lt;/p>
&lt;p>문제 설정: $K = k \times G$에서 $G$와 $K$를 알고 있으며, 미지의 정수 $k$(비밀키)를 구하고자 합니다. 타원곡선의 위수(order)를 $N$이라고 합니다.&lt;/p>
&lt;p>&lt;strong>Step 1: 중첩 상태 생성&lt;/strong>
먼저 2개의 양자 레지스터를 준비하고 각각에 아다마르 게이트(Hadamard Gate)를 적용하여 가능한 모든 정수 조합의 중첩 상태를 생성합니다.
&lt;/p>
$$
|\psi_1\rangle = \frac{1}{N} \sum_{x=0}^{N-1} \sum_{y=0}^{N-1} |x\rangle |y\rangle |0\rangle
$$
&lt;p>&lt;strong>Step 2: 양자 오라클 적용 (함수 평가)&lt;/strong>
다음으로 타원곡선 상의 점 덧셈을 수행하는 양자 회로(오라클)를 사용하여 함수 $f(x, y) = x \times G + y \times K$를 제3 레지스터에 계산합니다.
&lt;/p>
$$
|\psi_2\rangle = \frac{1}{N} \sum_{x=0}^{N-1} \sum_{y=0}^{N-1} |x\rangle |y\rangle |x \times G + y \times K\rangle
$$
&lt;p>
여기서 중요한 것은 $K = k \times G$이므로 $f(x, y) = (x + y \cdot k) \times G$로 다시 쓸 수 있다는 점입니다.&lt;/p>
&lt;p>&lt;strong>Step 3: 제3 레지스터 측정&lt;/strong>
제3 레지스터를 측정하면 어떤 타원곡선 상의 점 $R$로 수축(collapse)합니다. 이로 인해 제1, 제2 레지스터는 $x + y \cdot k \equiv c \pmod{N}$ ($c$는 상수)를 만족하는 $(x, y)$ 쌍의 중첩 상태로 수축합니다.
&lt;/p>
$$
|\psi_3\rangle = \frac{1}{\sqrt{N}} \sum_{y=0}^{N-1} |c - y \cdot k \pmod{N}\rangle |y\rangle
$$
&lt;p>&lt;strong>Step 4: 양자 푸리에 변환(QFT) 적용&lt;/strong>
이 상태는 주기 $k$와 관련된 주기성을 가지고 있습니다. 여기에 역 양자 푸리에 변환(Inverse QFT)을 적용함으로써 위상의 간섭을 일으켜 주기 정보를 진폭으로 변환합니다.&lt;/p>
&lt;p>&lt;strong>Step 5: 측정과 고전적 후처리&lt;/strong>
제1, 제2 레지스터를 측정하면 높은 확률로 $k$에 관한 정보를 포함하는 값을 얻을 수 있습니다. 측정된 값에 대해 연분수 전개(Continued Fractions)와 같은 고전적인 정수론 알고리즘을 적용함으로써 미지의 비밀키 $k$를 완전히 특정할 수 있습니다.&lt;/p>
&lt;p>이 전체 프로세스에서 필요로 하는 양자 게이트의 수는 $\mathcal{O}(\log^3 N)$이며, 고전 컴퓨터를 통한 $\mathcal{O}(\sqrt{N})$의 탐색과는 비교할 수 없을 정도의 초고속으로 비밀키를 파헤칩니다.&lt;/p>
&lt;h3 id="23-그로버의-알고리즘grovers-algorithm과-해시-함수에-미치는-영향">2.3. 그로버의 알고리즘(Grover&amp;rsquo;s Algorithm)과 해시 함수에 미치는 영향
&lt;/h3>&lt;p>또 다른 위협은 1996년 로브 그로버(Lov Grover)가 제안한 &lt;strong>그로버의 알고리즘&lt;/strong>입니다. 이는 해시 함수(예: SHA-256)에 큰 영향을 미칩니다.&lt;/p>
&lt;p>블록체인에서 해시 함수는 데이터 무결성 보장, 주소 생성, 그리고 비트코인의 &lt;strong>PoW(Proof of Work) 마이닝&lt;/strong> 기반으로 사용되고 있습니다. 해시 함수의 역산(원상 계산)은 특정 출력값 $y$에 대해 $H(x) = y$가 되는 입력값 $x$를 찾는 &amp;lsquo;비구조화 데이터베이스 탐색 문제&amp;rsquo;로 간주할 수 있습니다.&lt;/p>
&lt;p>고전 컴퓨터에서는 $N$개의 가능성 중에서 정답을 찾기 위해 평균적으로 $\frac{N}{2}$번, 최악의 경우 $N$번의 시도가 필요합니다. 즉, 계산량은 $\mathcal{O}(N)$입니다.
하지만 그로버의 알고리즘은 &amp;lsquo;진폭 증폭(Amplitude Amplification)&amp;lsquo;이라 불리는 양자 기술을 사용합니다. 중첩 상태에 있는 모든 가능성 중에서 정답이 되는 상태의 확률 진폭을 반복적으로 증폭시킴으로써 탐색 시간을 제곱근으로 단축시킵니다.&lt;/p>
$$
\text{그로버의 알고리즘의 계산량} = \mathcal{O}(\sqrt{N})
$$
&lt;p>SHA-256의 경우 $N = 2^{256}$이므로 고전적인 무차별 대입(Brute-force) 탐색으로는 약 $2^{256}$번의 시도가 필요합니다. 하지만 그로버의 알고리즘을 사용하면 $\sqrt{2^{256}} = 2^{128}$번의 시도만으로 충분하게 됩니다. 이는 256비트의 해시 함수가 양자 컴퓨터에 대해서는 &lt;strong>실질적으로 128비트의 보안 강도로 반감된다&lt;/strong>는 것을 의미합니다.&lt;/p>
&lt;h4 id="231-sha-256은-살아남을-것인가-quantum-supremacy-in-hashing">2.3.1. SHA-256은 살아남을 것인가? (Quantum Supremacy in Hashing)
&lt;/h4>&lt;p>보안이 절반으로 줄어든다고는 해도 &amp;lsquo;128비트의 보안&amp;rsquo;은 여전히 극도로 견고합니다. $2^{128}$번의 연산은 현재의 기술 수준에서 보아도 천문학적인 수치이며, 우주의 수명 스케일의 시간이 필요합니다.
따라서 **&amp;ldquo;SHA-256은 양자 컴퓨터에 대해서도 실용적인 안전성을 유지한다&amp;rdquo;**고 널리 여겨지고 있습니다. 향후 보안 여유도를 높일 필요가 있는 경우에는 단순히 해시의 출력 길이를 2배(예: SHA-256에서 SHA-512로의 전환)로 늘리는 것만으로 고전적인 256비트 보안을 양자 세계에서도 유지할 수 있습니다.&lt;/p>
&lt;p>결론적으로 해시 함수에 대한 양자의 위협은 &amp;lsquo;경미하고 대응 가능&amp;rsquo;한 반면, 공개키 암호(ECDSA)에 대한 위협은 &amp;lsquo;치명적&amp;rsquo;이라고 할 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="3-현재의-암호자산bitcoin-ethereum에-미치는-구체적인-영향-분석">3. 현재의 암호자산(Bitcoin, Ethereum)에 미치는 구체적인 영향 분석
&lt;/h2>&lt;p>양자 컴퓨터에 의한 ECDSA 해독이 가능해진 세계에서 암호자산 네트워크는 구체적으로 어떤 취약성에 직면하게 될까요? 여기서는 비트코인의 구조를 예로 들어 **&amp;lsquo;공개키의 노출 타이밍&amp;rsquo;**이라는 관점에서 상세한 분석을 진행합니다.&lt;/p>
&lt;h3 id="31-주소-생성과-공개키의-비공개성">3.1. 주소 생성과 공개키의 &amp;lsquo;비공개성&amp;rsquo;
&lt;/h3>&lt;p>비트코인의 주소(P2PKH: Pay-to-Public-Key-Hash나 P2WPKH: Pay-to-Witness-Public-Key-Hash)는 공개키 그 자체가 아니라 공개키를 여러 번 해시화한 것을 사용합니다.&lt;/p>
$$
\text{Bitcoin Address} = \text{Base58Check}(\text{RIPEMD160}(\text{SHA256}(\text{Public Key})))
$$
&lt;p>앞서 언급했듯이 해시 함수는 양자 공격(그로버의 알고리즘)에 대해 내성을 가지므로, 해시값인 &amp;lsquo;주소&amp;rsquo;로부터 원래의 &amp;lsquo;공개키&amp;rsquo;를 역산하는 것은 양자 컴퓨터로도 불가능합니다.
즉, **&amp;lsquo;미사용(한 번도 자금을 송금하지 않은) 주소&amp;rsquo;**에 대해서는 블록체인 상에 공개키가 일절 노출되어 있지 않고 해시값만이 기록되어 있는 상태입니다. 따라서 공개키를 모르는 이상 쇼어의 알고리즘을 실행할 표적이 존재하지 않아 비밀키를 특정할 수 없습니다. 이 상태의 지갑은 양자적으로 안전(Quantum-safe)하다고 할 수 있습니다.&lt;/p>
&lt;h3 id="32-트랜잭션-송신-시의-치명적인-취약성프론트-러닝-공격">3.2. 트랜잭션 송신 시의 치명적인 취약성(프론트 러닝 공격)
&lt;/h3>&lt;p>문제가 발생하는 것은 사용자가 자금을 송금하는 타이밍입니다.
트랜잭션을 네트워크에 브로드캐스트(송신)할 때, 사용자는 디지털 서명과 함께 검증을 위해 &lt;strong>자신의 공개키를 트랜잭션 데이터 내에 포함시켜 네트워크 전체에 공개&lt;/strong>해야 합니다.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant User as "사용자 (앨리스)"
participant Mempool as "Mempool (미승인 거래 풀)"
participant QuantumAttacker as "양자 공격자"
participant Miner as "마이너 (블록 생성)"
User->>Mempool: 트랜잭션 송신 (공개키 + 서명 포함)
Mempool-->>QuantumAttacker: 네트워크 상의 공개키를 감청
note right of QuantumAttacker: 쇼어의 알고리즘을 수 분 내로 실행&lt;br/>(공개키로부터 비밀키 산출)
QuantumAttacker->>QuantumAttacker: 앨리스의 비밀키를 사용해 새로운 서명 생성
QuantumAttacker->>Mempool: 더 높은 마이너 수수료로 부정 송금을 브로드캐스트
Miner->>Miner: 수수료(Gas)가 높은 부정 트랜잭션을 우선하여 블록에 포함
Miner-->>User: 블록체인에 기록 (앨리스의 자금 상실)&lt;/div>
&lt;p>일단 공개키가 Mempool(미승인 트랜잭션의 대기 장소)에 송신되면, 그 데이터는 전 세계의 노드에 공유됩니다. 만약 공격자가 초고속 양자 컴퓨터를 보유하고 있다면, 다음의 프로세스로 자금을 빼앗을 수 있습니다.&lt;/p>
&lt;ol>
&lt;li>Mempool에서 정당한 사용자(앨리스)의 트랜잭션을 감청하여 &lt;strong>공개키를 추출&lt;/strong>한다.&lt;/li>
&lt;li>쇼어의 알고리즘을 실행하여 공개키로부터 &lt;strong>비밀키를 수 분 이내(블록이 승인되기 전)에 계산&lt;/strong>한다.&lt;/li>
&lt;li>획득한 비밀키를 사용하여 앨리스의 자금을 공격자의 주소로 송금하는 &lt;strong>가짜 트랜잭션을 생성&lt;/strong>한다.&lt;/li>
&lt;li>이 가짜 트랜잭션에 앨리스의 원래 트랜잭션보다 &lt;strong>훨씬 높은 마이너 수수료(Fee)를 설정&lt;/strong>하여 네트워크에 송신한다.&lt;/li>
&lt;/ol>
&lt;p>마이너는 경제적 인센티브에 따라 수수료가 높은 트랜잭션을 우선적으로 블록에 포함시킵니다. 결과적으로 공격자의 부정 송금이 먼저 승인(Confirm)되고, 앨리스의 정당한 송금은 &amp;lsquo;잔고 부족(Double Spend)&amp;lsquo;으로 파기됩니다.
이 일련의 흐름은 **프론트 러닝 공격(Front-running Attack)**이라 불리며, 양자 컴퓨터가 실용화된 세계에서는 누군가가 송금 버튼을 누른 순간에 자금을 해커에게 빼앗기는 끔찍한 사태를 야기합니다.&lt;/p>
&lt;h3 id="33-재사용-주소와-오래된-주소p2pk의-위기">3.3. 재사용 주소와 오래된 주소(P2PK)의 위기
&lt;/h3>&lt;p>더욱 심각한 문제로, 과거에 한 번이라도 송금을 한 적이 있는 주소(잔돈 주소 등으로 재사용하고 있는 경우)는 이미 블록체인 상에 공개키가 영구적으로 기록되어 있습니다. 이들은 트랜잭션 송신을 기다릴 것도 없이 언제든지 비밀키가 계산되어 잔고를 빼앗길 위험에 노출되어 있습니다.&lt;/p>
&lt;p>또한, 사토시 나카모토의 초기 마이닝 보상(약 100만 BTC 이상)을 포함하여 2009년~2010년경에 주류였던 &lt;strong>P2PK(Pay-to-Public-Key)&lt;/strong> 포맷에서는 주소로 해시가 아닌 공개키 자체가 직접 블록체인에 기록되었습니다. 이러한 대량의 휴면 비트코인은 양자 컴퓨터에게 가장 쉬운 표적이 되어 일제히 도난당하고 시장에 덤핑됨으로써 가격 대폭락을 일으킬 가능성이 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="4-내양자-암호pqc-post-quantum-cryptography로의-전환-시나리오">4. 내양자 암호(PQC: Post-Quantum Cryptography)로의 전환 시나리오
&lt;/h2>&lt;p>이러한 &amp;lsquo;Q-Day(양자 컴퓨터에 의한 암호 돌파의 날)&amp;lsquo;의 파국을 피하기 위해, 암호학계와 블록체인 커뮤니티는 양자 알고리즘으로도 해독이 어려운 **내양자 암호(PQC)**로의 전환을 계획하고 있습니다.
미국 국립표준기술연구소(NIST)는 수년간 PQC의 표준화 프로세스를 진행해 왔으며, 수차례에 걸친 엄격한 평가를 거쳐 유망한 몇 가지 암호 방식이 최종 표준으로 선정되었습니다.&lt;/p>
&lt;p>블록체인의 디지털 서명 대체재로 주목받고 있는 주요 PQC 알고리즘을 그 수리적 메커니즘과 함께 상세히 해설합니다.&lt;/p>
&lt;h3 id="41-해시-기반-서명hash-based-signatures">4.1. 해시 기반 서명(Hash-Based Signatures)
&lt;/h3>&lt;p>해시 기반 서명은 그 안전성이 &amp;lsquo;해시 함수의 충돌 내성&amp;rsquo;이라는 매우 단순하고 견고한 기반에만 의존하는 암호 방식입니다. 양자 컴퓨터에 대한 해시 함수의 안전성은 이미 증명되었기 때문에(앞서 언급했듯이 128비트의 보안 여유도만 있으면 충분함) 매우 신뢰성이 높은 접근 방식입니다.
대표적인 것으로 **램포트 서명(Lamport Signatures)**이나 이를 확장한 WOTS(Winternitz One-Time Signature), 그리고 NIST 표준화 후보인 &lt;strong>SPHINCS+&lt;/strong>(현재는 FIPS 205로서 SLH-DSA라 불림)가 있습니다.&lt;/p>
&lt;h4 id="411-램포트-서명의-수리적-상세-one-time-signature">4.1.1. 램포트 서명의 수리적 상세 (One-Time Signature)
&lt;/h4>&lt;p>램포트 서명의 구조를 더욱 수학적으로 상세히 살펴보겠습니다.
해시 함수를 $H: \{0, 1\}^* \to \{0, 1\}^{256}$이라고 합시다.&lt;/p>
&lt;p>&lt;strong>【키 생성】&lt;/strong>
앨리스(송신자)는 진난수 생성기(TRNG)를 사용하여 256쌍의 비밀키 쌍을 생성합니다.
&lt;/p>
$$
\text{sk}_{i,0} \in \{0, 1\}^{256}, \quad \text{sk}_{i,1} \in \{0, 1\}^{256} \quad (1 \le i \le 256)
$$
&lt;p>
이로 인해 비밀키 $\text{sk}$는 총 512개의 256비트 문자열로 구성됩니다(크기: $512 \times 32 = 16,384$ 바이트).&lt;/p>
&lt;p>다음으로 공개키 $\text{pk}$를 계산합니다. 각 비밀키 컴포넌트를 각각 해시화합니다.
&lt;/p>
$$
\text{pk}_{i,0} = H(\text{sk}_{i,0}), \quad \text{pk}_{i,1} = H(\text{sk}_{i,1})
$$
&lt;p>
공개키 역시 동일하게 $16,384$ 바이트가 됩니다. 이를 블록체인 네트워크에 공개합니다.&lt;/p>
&lt;p>&lt;strong>【서명 생성】&lt;/strong>
앨리스는 트랜잭션 데이터 $M$에 서명하기 위해 먼저 그 해시값을 계산합니다.
&lt;/p>
$$
h = H(M) \in \{0, 1\}^{256}
$$
&lt;p>
해시값 $h$의 $i$번째 비트를 $h_i \in \{0, 1\}$이라고 합니다.
앨리스의 서명 $\sigma$는 각 비트 $h_i$에 대응하는 비밀키 컴포넌트의 집합이 됩니다.
&lt;/p>
$$
\sigma = (\text{sk}_{1, h_1}, \text{sk}_{2, h_2}, \dots, \text{sk}_{256, h_{256}})
$$
&lt;p>
즉, 메시지 해시의 비트가 &lt;code>0&lt;/code>이라면 $\text{sk}_{i,0}$을 공개하고, &lt;code>1&lt;/code>이라면 $\text{sk}_{i,1}$을 공개합니다. 서명 크기는 $256 \times 32 = 8,192$ 바이트가 됩니다.&lt;/p>
&lt;p>&lt;strong>【서명 검증】&lt;/strong>
마이너(검증자)는 수신한 트랜잭션 $M$과 서명 $\sigma = (s_1, s_2, \dots, s_{256})$, 그리고 공개키 $\text{pk}$를 사용하여 검증을 수행합니다.
트랜잭션의 해시 $h = H(M)$을 재계산하여, 각 $s_i$를 해시화한 것이 공개키의 대응하는 요소 $\text{pk}_{i, h_i}$와 일치하는지 확인합니다.
&lt;/p>
$$
H(s_i) \overset{?}{=} \text{pk}_{i, h_i} \quad (\text{for all } 1 \le i \le 256)
$$
&lt;p>이 프로세스는 수학적으로 지극히 단순하며, 양자 컴퓨터가 $H$의 역산을 할 수 없는 한 서명을 위조하는 것은 불가능합니다. 하지만 한 번 서명을 하면 비밀키의 절반이 네트워크에 노출되기 때문에 같은 키 쌍으로 다른 메시지에 서명하게 되면 노출된 비밀키들이 조합되어 공격자에게 위조의 여지를 주게 되므로, &amp;lsquo;단 한 번(One-Time)&amp;lsquo;밖에 쓸 수 없다는 강한 제약이 생깁니다.
이를 실용화하기 위해 머클 트리(Merkle Tree)를 사용하여 다수의 원타임 키를 하나의 루트 공개키로 묶는 &lt;strong>XMSS&lt;/strong>나 상태 비저장(Stateless) 방식인 &lt;strong>SPHINCS+&lt;/strong> 등의 기술이 개발되었으나, 서명 크기가 수십 킬로바이트에 달한다는 단점이 있습니다.&lt;/p>
&lt;h3 id="42-격자-기반-암호lattice-based-cryptography">4.2. 격자 기반 암호(Lattice-Based Cryptography)
&lt;/h3>&lt;p>현재 PQC의 주류로서 가장 기대받고 있으며, NIST의 메인 표준 규격(FIPS 204: ML-DSA / 구 CRYSTALS-Dilithium이나 Falcon 등)으로 채택된 것이 &lt;strong>격자 기반 암호&lt;/strong>입니다.&lt;/p>
&lt;p>격자 기반 암호의 안전성은 &amp;lsquo;다차원 격자에서의 최단 벡터 문제(SVP: Shortest Vector Problem)&amp;lsquo;나 &amp;lsquo;오차가 있는 학습 문제(LWE: Learning With Errors)&amp;lsquo;와 같이 수학적으로 증명된 어려운 문제에 의존하고 있습니다. 격자 문제는 양자 컴퓨터를 사용하더라도 효율적으로 푸는 알고리즘이 발견되지 않았습니다.&lt;/p>
&lt;p>&lt;strong>LWE(Learning With Errors)의 수리 모델:&lt;/strong>
LWE 문제의 기본적인 아이디어는 연립일차방정식에 의도적으로 &amp;lsquo;작은 노이즈(오차)&amp;lsquo;를 더함으로써 문제를 극적으로 어렵게 만든다는 것입니다.
비밀 벡터를 $\mathbf{s} \in \mathbb{Z}_q^n$이라고 합시다.
무작위로 선택된 거대한 공개 행렬 $\mathbf{A} \in \mathbb{Z}_q^{m \times n}$과 의도적으로 부가되는 작은 노이즈 벡터 $\mathbf{e} \in \mathbb{Z}_q^m$이 있습니다.
공개키 $\mathbf{b}$는 다음과 같이 계산됩니다.&lt;/p>
$$
\mathbf{b} = \mathbf{A}\mathbf{s} + \mathbf{e} \pmod{q}
$$
&lt;p>행렬 $\mathbf{A}$와 벡터 $\mathbf{b}$(공개키)가 공개되어 있더라도 그로부터 비밀키 $\mathbf{s}$를 역산하는 것은 노이즈 $\mathbf{e}$의 존재로 인해 매우 어려워집니다. 노이즈가 없다면 단순한 가우스 소거법으로 풀 수 있지만, 노이즈가 있음으로써 모든 차원에서의 탐색 공간이 폭발적으로 증가하여 고전 컴퓨터와 양자 컴퓨터 모두에 대해 견고한 보안을 제공합니다.
블록체인 등에서 사용되는 실제 알고리즘(Dilithium 등)에서는 이를 다항식 환(Polynomial Ring) 위에서 전개한 **Ring-LWE(또는 Module-LWE)**가 사용되어, 키 크기 축소 및 계산의 고속화가 이루어지고 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>장점&lt;/strong>: 해시 기반 서명에 비해 공개키나 서명의 크기가 비교적 작고(수 킬로바이트 정도), 서명 생성 및 검증의 계산 속도가 매우 빠릅니다(ECDSA와 동등 이상).&lt;/li>
&lt;li>&lt;strong>단점&lt;/strong>: 수학적인 구조가 복잡하고 역사적인 검증 기간이 짧기 때문에, 향후 새로운 해독 알고리즘이 발견될 위험이 제로는 아닙니다.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="5-블록체인의-pqc-전환에-있어서의-기술적-과제">5. 블록체인의 PQC 전환에 있어서의 기술적 과제
&lt;/h2>&lt;p>PQC 알고리즘(Dilithium이나 SPHINCS+ 등)이 존재한다고 해서 이를 내일 당장 비트코인이나 이더리움에 도입할 수 있는 것은 아닙니다. 분산형 시스템 특유의 무거운 과제들이 여러 가지 존재합니다.&lt;/p>
&lt;h3 id="51-서명-크기의-비대화와-확장성의-붕괴">5.1. 서명 크기의 비대화와 확장성의 붕괴
&lt;/h3>&lt;p>PQC 도입에 있어서 가장 큰 장벽은 데이터 크기의 대폭적인 비대화입니다.
현재 ECDSA의 서명 크기가 약 70바이트인 것에 반해, 격자 기반 암호인 Dilithium(ML-DSA)에서는 서명 크기가 약 2,420바이트~4,595바이트(보안 레벨에 따라 다름)이며 공개키 크기도 1,300바이트를 넘습니다. 해시 기반인 SPHINCS+에 이르러서는 서명만으로 수만 바이트에 달합니다.&lt;/p>
&lt;p>만약 비트코인이 현재와 동일한 블록 크기 상한(SegWit 포함 약 4MB의 가중치) 그대로 PQC를 도입할 경우, 1개의 블록에 저장할 수 있는 트랜잭션의 수는 격감합니다. 네트워크의 처리량(TPS: Transactions Per Second)은 파멸적으로 저하되고 송금 지연이 상태화될 것입니다.
이를 해결하기 위해서는 블록 크기를 대폭 늘려야 하지만, 이는 풀 노드의 스토리지 요구 사항이나 네트워크 대역폭 요구 사항을 증대시켜 개인의 노드 운영을 어렵게 만들고, 결과적으로 &lt;strong>네트워크의 중앙집권화&lt;/strong>를 초래한다는 딜레마에 빠지게 됩니다.&lt;/p>
&lt;div class="mermaid">pie title "블록체인에서의 서명 데이터 크기 비교 (개념도)"
"ECDSA (약 70 Bytes)" : 2
"Dilithium ML-DSA (약 2,500 Bytes)" : 58
"SPHINCS+ (약 17,000 Bytes)" : 40&lt;/div>
&lt;p>&lt;em>(※ PQC 도입에 따른 트랜잭션 데이터의 비대화는 확장성에 대한 치명적인 병목이 됩니다)&lt;/em>&lt;/p>
&lt;h3 id="52-ethereum-virtual-machine-evm에-미치는-영향과-사전-컴파일된-컨트랙트">5.2. Ethereum Virtual Machine (EVM)에 미치는 영향과 사전 컴파일된 컨트랙트
&lt;/h3>&lt;p>이더리움(Ethereum)과 같은 튜링 완전한 스마트 컨트랙트 플랫폼에서 PQC의 도입은 EVM(Ethereum Virtual Machine)의 근본적인 업그레이드를 요구합니다.
현재의 EVM에서는 ECDSA 서명 검증을 위해 &lt;code>ecrecover&lt;/code> (주소: &lt;code>0x01&lt;/code>)라는 사전 컴파일된 컨트랙트(Precompiled Contract)가 마련되어 있어, 매우 낮은 가스비(3000 Gas)로 서명 검증을 수행할 수 있도록 최적화되어 있습니다.&lt;/p>
&lt;p>하지만 Dilithium이나 Falcon과 같은 새로운 격자 기반 암호 알고리즘의 검증 처리는 복잡한 다항식 연산이나 행렬 연산을 수반하기 때문에, 기존의 EVM 연산 코드(Opcode)만으로 구현하면 단 1회의 서명 검증만으로 수백만에서 수천만 가스를 소비할 가능성이 있습니다. 이는 현재의 블록 가스 한도(약 3000만 Gas)를 1개의 트랜잭션으로 고갈시키는 수준입니다.&lt;/p>
&lt;p>이를 회피하기 위해서는 네트워크의 하드포크를 통해 새롭게 PQC 검증용 사전 컴파일된 컨트랙트(예: &lt;code>0x10&lt;/code>에 DilithiumVerify를 할당하는 등)를 EVM 자체에 내장해야 합니다. 여기에는 각 이더리움 클라이언트(Geth, Nethermind, Erigon 등)의 코어 개발자가 협력하여 C++, Go, Rust 등의 언어 레벨에서 격자 기반 암호 검증 로직을 최적화하여 구현하고, 보안 감사를 실시하는 장기간에 걸친 프로세스가 필요합니다.&lt;/p>
&lt;h3 id="53-하드포크를-통한-합의-형성의-어려움">5.3. 하드포크를 통한 합의 형성의 어려움
&lt;/h3>&lt;p>기반이 되는 서명 알고리즘을 변경하려면 네트워크 전체의 프로토콜을 갱신하는 **하드포크(Hard Fork)**가 불가피합니다. 하지만 비트코인처럼 &amp;lsquo;규칙을 바꾸지 않는 것, 탈중앙화되어 있을 것&amp;rsquo;에 무게를 두는 커뮤니티에서 합의를 이끌어내는 프로세스는 정치적으로도 매우 어렵습니다. PQC로의 전환에 관한 BIP(Bitcoin Improvement Proposal)가 제안된 후 구현에 이르기까지는 수년에 걸친 논의와 테스트가 필요할 것입니다.&lt;/p>
&lt;hr>
&lt;h2 id="6-언제-q-day는-오는가-전환을-향한-로드맵">6. 언제 &amp;lsquo;Q-Day&amp;rsquo;는 오는가? 전환을 향한 로드맵
&lt;/h2>&lt;p>&amp;lsquo;양자 컴퓨터가 256비트의 타원곡선 암호를 완전히 해독하는 날(Q-Day)&amp;lsquo;은 언제 올까요?
연구자들 사이에서도 의견이 분분하지만, 많은 전문가들은 &lt;strong>&amp;lsquo;2030년대 중반에서 2040년대에 걸쳐&amp;rsquo;&lt;/strong>, 적어도 수천에서 수만 개의 안정적인 논리적 양자 비트(노이즈 내성을 가진 오류가 정정된 양자 비트)를 가진 대규모 양자 컴퓨터가 등장할 것으로 예측하고 있습니다. 하지만 하드웨어 아키텍처의 돌파구나 보다 효율적인 양자 알고리즘의 발견에 따라 그 시기가 앞당겨질 가능성(2030년 전후)도 부정할 수 없습니다.&lt;/p>
&lt;p>암호자산 생태계가 늦기 전에 취해야 할 로드맵은 다음과 같습니다.&lt;/p>
&lt;h3 id="1단계-하이브리드-서명과-계정-추상화-현재2028년경">1단계: 하이브리드 서명과 계정 추상화 (현재~2028년경)
&lt;/h3>&lt;p>현재의 블록체인 업계, 특히 Ethereum의 개발진(Vitalik Buterin 등)은 ECDSA와 PQC(해시 기반 서명이나 격자 기반 암호)를 결합한 **&amp;lsquo;하이브리드 서명&amp;rsquo;**을 검토하고 있습니다. 이는 기존의 안전한 ECDSA에 의한 서명과 PQC에 의한 서명을 모두 트랜잭션에 부여하여, 어느 한쪽이 뚫리더라도 안전성을 유지한다는 접근 방식입니다.
또한, 계정 추상화(Account Abstraction, ERC-4337)를 활용함으로써 프로토콜 레벨의 하드포크를 기다리지 않고 스마트 컨트랙트 지갑 상에서 옵트인(희망하는 사용자만) 방식으로 PQC 서명을 구현 및 지원하는 노력도 진행되고 있습니다.&lt;/p>
&lt;h3 id="2단계-영지식-증명zk-rollups의-활용-2025년">2단계: 영지식 증명(ZK-Rollups)의 활용 (2025년~)
&lt;/h3>&lt;p>PQC의 가장 큰 약점인 &amp;lsquo;서명 데이터의 비대화&amp;rsquo;를 해결할 비장의 카드로 기대되고 있는 것이 레이어 2 기술인 **ZK-Rollups(영지식 증명)**의 활용입니다.
거대한 PQC 서명 데이터를 Layer 1(메인 체인)에 직접 기록하는 것이 아니라, Layer 2 상에서 다수의 PQC 트랜잭션을 검증 및 집약합니다. 그리고 ZK-SNARKs나 ZK-STARKs를 사용하여 이들을 하나의 극히 작은 &amp;lsquo;증명 데이터(Proof)&amp;lsquo;로 압축하여 Layer 1에 기록하는 것입니다.
참고로 SNARKs의 일부 구성(Groth16 등)은 그 자체가 양자 컴퓨터에 취약하기 때문에 내양자성을 가진 해시 함수에만 의존하는 &lt;strong>ZK-STARKs&lt;/strong>의 채택이 핵심이 됩니다.&lt;/p>
&lt;h3 id="3단계-프로토콜-레벨의-하드포크-2030년경">3단계: 프로토콜 레벨의 하드포크 (2030년경)
&lt;/h3>&lt;p>NIST에 의한 PQC 표준화가 완전히 정착되고 업계 표준 라이브러리가 갖추어져 충분히 테스트된 단계에서, Bitcoin이나 Ethereum 등 주요 체인의 기본 서명 방식을 완전히 PQC로 전환하는 하드포크가 실시될 것으로 예상됩니다. 이 전환기에는 사용자에게 &amp;lsquo;오래된 지갑에서 PQC를 지원하는 새로운 지갑으로 자금을 이동하도록 촉구하는&amp;rsquo; 대규모 공지가 이루어지게 될 것입니다.&lt;/p>
&lt;h3 id="선구적인-프로젝트-사례">선구적인 프로젝트 사례
&lt;/h3>&lt;p>일부 블록체인 프로젝트는 이러한 양자 위협을 선제적으로 인지하고 초기 단계부터 내양자성을 표방하며 개발되고 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>QRL (Quantum Resistant Ledger)&lt;/strong>: XMSS(확장 머클 서명 방식)라는 해시 기반의 PQC를 프로토콜 레벨에서 네이티브하게 구현한 초기 블록체인입니다.&lt;/li>
&lt;li>&lt;strong>Algorand / Cellframe&lt;/strong>: 미래의 PQC 업데이트를 염두에 둔 유연한 암호 계층의 모듈형 아키텍처를 가지고 있으며, 격자 기반 암호의 통합을 적극적으로 모색하고 있는 프로젝트들입니다.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="7-결론-암호자산의-미래와-우리의-자산을-지키기-위해">7. 결론: 암호자산의 미래와 우리의 자산을 지키기 위해
&lt;/h2>&lt;p>&amp;lsquo;포스트 양자 시대&amp;rsquo;의 도래는 단순한 SF(공상과학)의 상상 영역을 넘어 이미 현실의 암호 시스템에 대한 구체적인 기술적 과제로서 우리 눈앞에 다가와 있습니다.&lt;/p>
&lt;p>쇼어의 알고리즘과 그로버의 알고리즘이라는 양자 컴퓨터의 두 자루의 검은 현재 블록체인의 기반인 공개키 암호와 해시 함수를 각각 위협합니다. 특히 ECDSA의 취약성은 치명적이며, 프론트 러닝 공격에 의한 자금 도난 위험을 피하기 위해서는 내양자 암호(PQC)로의 전환이 절대적으로 피할 수 없는 길입니다.&lt;/p>
&lt;p>하지만 기술계와 블록체인 커뮤니티는 그저 손을 놓고 파멸을 기다리고 있는 것만은 아닙니다. 격자 기반 암호나 해시 기반 서명과 같은 PQC 알고리즘의 선정과 표준화가 착실히 진행되고 있으며, 영지식 증명(ZK-STARKs)이나 Layer 2의 스케일링 기술을 활용함으로써 PQC 도입의 가장 큰 장벽인 &amp;lsquo;데이터 크기의 비대화&amp;rsquo;를 극복할 길도 보이기 시작했습니다.&lt;/p>
&lt;p>우리 일반 암호자산 사용자나 투자자가 지금 당장 패닉에 빠져 자금을 모두 매각할 필요는 없습니다. 하지만 다음과 같은 기본적인 리터러시와 자기방어 의식을 가지는 것이 중요합니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>주소 재사용을 피한다&lt;/strong>: &amp;lsquo;사용된 주소(한 번이라도 자금을 송금하여 공개키가 블록체인 상에 노출된 주소)&amp;lsquo;에는 자금을 장기간 보관하지 않도록, 프라이버시 관점뿐만 아니라 보안 관점에서도 철저히 한다.&lt;/li>
&lt;li>&lt;strong>기술 동향에 주목한다&lt;/strong>: Bitcoin의 BIP나 Ethereum의 EIP 등 주요 네트워크의 PQC 전환에 관한 논의나 하드포크 뉴스에 촉각을 곤두세우고, 필요해진 타이밍에 적절히 지갑 전환 작업을 수행할 수 있도록 한다.&lt;/li>
&lt;/ul>
&lt;p>블록체인의 역사는 항상 새로운 기술적 위협에 대한 업그레이드와 레질리언스(회복력)의 역사이기도 합니다. 확장성 문제나 환경 문제(PoW에서 PoS로의 전환 등)를 극복해 온 것처럼, 이 전대미문의 양자 위협에 대해서도 생태계 전체가 해결책을 모색하고 적응해 나갈 것입니다.
양자 컴퓨터라는 인류의 새로운 지혜와 탈중앙화된 분산 원장이라는 신뢰의 기술이 충돌로 인해 붕괴하는 것이 아니라, 더 높은 차원에서 융합된 견고한 시스템으로 승화되어 가는 미래를 기대해 봅니다.&lt;/p>
&lt;hr>
&lt;p>&lt;em>참고 문헌 및 관련 링크:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>National Institute of Standards and Technology (NIST) - Post-Quantum Cryptography Standardization Project&lt;/li>
&lt;li>Shor, P. W. (1994). Algorithms for quantum computation: discrete logarithms and factoring.&lt;/li>
&lt;li>Grover, L. K. (1996). A fast quantum mechanical algorithm for database search.&lt;/li>
&lt;li>Buterin, V. (2024). How to hard-fork to save most users&amp;rsquo; funds in a quantum emergency.&lt;/li>
&lt;/ul></description></item><item><title>암호 기술의 역사: 카이사르 암호에서 양자 내성 암호(PQC)까지</title><link>http://kenji.blog/ko/p/history-of-cryptography-caesar-to-pqc/</link><pubDate>Fri, 11 Sep 2026 15:00:00 +0900</pubDate><guid>http://kenji.blog/ko/p/history-of-cryptography-caesar-to-pqc/</guid><description>&lt;img src="http://kenji.blog/p/history-of-cryptography-caesar-to-pqc/img/eyecatch.jpg" alt="Featured image of post 암호 기술의 역사: 카이사르 암호에서 양자 내성 암호(PQC)까지" />&lt;h1 id="1-서론-암호-기술이란-무엇인가">1. 서론: 암호 기술이란 무엇인가?
&lt;/h1>&lt;p>암호 기술(Cryptography)은 정보의 기밀성을 유지하기 위한 기술로, 인류의 역사와 함께 진화해 왔습니다. 고대 전쟁에서의 비밀 지령 전달부터 현대 인터넷의 신용카드 정보 보호에 이르기까지 암호의 목적은 일관됩니다. 그것은 &amp;ldquo;의도된 수신자만이 정보를 이해할 수 있게 하고, 제3자는 해독할 수 없도록 하는 것&amp;quot;입니다.&lt;/p>
&lt;p>현대의 정보 보안에서 암호 기술은 단순한 &amp;lsquo;정보의 은닉(기밀성: Confidentiality)&amp;lsquo;에 그치지 않고, 데이터의 &amp;lsquo;무결성(Integrity)&amp;rsquo;, &amp;lsquo;인증(Authentication)&amp;rsquo;, &amp;lsquo;부인 방지(Non-repudiation)&amp;lsquo;와 같은 중요한 역할을 담당하고 있습니다.&lt;/p>
&lt;p>본 기사에서는 고대의 단순한 환자식 암호에서 시작하여, 기계식 암호, 현대의 대칭키·공개키 암호, 그리고 양자 컴퓨터의 실용화로 도래할 &amp;lsquo;양자 내성 암호(PQC)&amp;rsquo; 시대까지, 암호 기술의 진화 역사를 기술적·수학적 관점에서 상세히 풀어보겠습니다.&lt;/p>
&lt;hr>
&lt;h1 id="2-고전-암호의-시대-문자의-치환과-전치">2. 고전 암호의 시대: 문자의 치환과 전치
&lt;/h1>&lt;p>암호의 기원은 기원전으로 거슬러 올라갑니다. 초기의 암호는 주로 &amp;lsquo;전치(자리 바꿈)&amp;lsquo;와 &amp;lsquo;환자(치환)&amp;lsquo;의 두 가지 접근 방식으로 구성되어 있었습니다.&lt;/p>
&lt;h2 id="스키테일-암호-전치식-암호">스키테일 암호 (전치식 암호)
&lt;/h2>&lt;p>기원전 5세기 고대 그리스 스파르타에서 사용된 &amp;lsquo;스키테일(Scytale)&amp;lsquo;은 가장 오래된 암호 도구 중 하나입니다. 특정 굵기의 나무 막대에 가늘고 긴 양피지를 감고, 그 위에 가로쓰기로 메시지를 적습니다. 종이를 풀면 글자가 의미 없는 순서로 나열되지만, 같은 굵기의 막대를 가진 수신자가 다시 종이를 감으면 원래의 메시지를 읽을 수 있는 방식이었습니다.&lt;/p>
&lt;h2 id="카이사르-암호-단일-환자식-암호">카이사르 암호 (단일 환자식 암호)
&lt;/h2>&lt;p>기원전 1세기, 고대 로마의 영웅 율리우스 카이사르(시저)가 사용했다고 전해지는 것이 &amp;lsquo;카이사르 암호&amp;rsquo;입니다. 이는 알파벳을 일정 수(보통 3글자)만큼 시프트시키는 단일 환자식 암호(Monoalphabetic substitution)입니다.&lt;/p>
&lt;p>수학적으로는 문자를 $0$부터 $25$까지의 수치로 취급하고, 시프트 수를 $K$라고 할 때, 평문 $P$에서 암호문 $C$로의 변환은 다음 합동식으로 나타낼 수 있습니다.&lt;/p>
$$C \equiv P + K \pmod{26}$$
&lt;p>복호화는 역연산을 수행합니다.&lt;/p>
$$P \equiv C - K \pmod{26}$$
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 카이사르 암호의 간단한 Python 구현 예&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;encrypt&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">mode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;decrypt&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">shift&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">shift&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isalpha&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isupper&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 시프트 계산&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nb">chr&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">base&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">26&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">char&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 실행 예&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;HELLO WORLD&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plaintext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;encrypt&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;암호문: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># KHOOR ZRUOG&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="빈도-분석과-비즈네르-암호">빈도 분석과 비즈네르 암호
&lt;/h2>&lt;p>단일 환자식 암호는 9세기 아랍의 학자 알 킨디가 고안한 &amp;lsquo;빈도 분석(Frequency Analysis)&amp;lsquo;에 의해 쉽게 해독되기 시작했습니다. 영어라면 &amp;lsquo;E&amp;rsquo;나 &amp;lsquo;T&amp;rsquo;가 자주 등장한다는 언어의 통계적 특성을 이용한 것입니다.&lt;/p>
&lt;p>이에 대항하기 위해 16세기에 고안된 것이 &amp;lsquo;비즈네르 암호(Vigenère cipher)&amp;lsquo;입니다. 이는 여러 개의 시프트(키)를 주기적으로 전환하여 사용하는 다중 환자식 암호(Polyalphabetic substitution)로, 약 300년 동안 &amp;lsquo;해독 불가능한 암호(Le Chiffre Indéchiffrable)&amp;lsquo;라 불렸습니다.&lt;/p>
&lt;p>수학적으로는 평문의 $i$번째 문자 $P_i$와 반복되는 키의 $i$번째 문자 $K_i$를 사용하여 다음과 같이 암호화합니다.&lt;/p>
$$C_i \equiv P_i + K_i \pmod{26}$$
&lt;p>이 암호도 19세기에 들어 찰스 배비지와 프리드리히 카시스키에 의해 암호문 속 반복 패턴에서 키의 길이를 알아내는 &amp;lsquo;카시스키 검사(Kasiski examination)&amp;lsquo;가 발견되면서 해독되게 됩니다.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "고전 암호의 분류"
A["고전 암호"] --> B["전치식 암호"]
A --> C["환자식 암호"]
B --> D["스키테일 암호"]
C --> E["단일 환자식"]
C --> F["다중 환자식"]
E --> G["카이사르 암호"]
F --> H["비즈네르 암호"]
end&lt;/div>
&lt;hr>
&lt;h1 id="3-기계식-암호와-세계-대전-애니그마와-그-해독">3. 기계식 암호와 세계 대전: 애니그마와 그 해독
&lt;/h1>&lt;p>20세기에 들어 통신 수단이 편지에서 전신이나 무선으로 전환되면서 암호화의 속도와 복잡성이 요구되었습니다. 이때 등장한 것이 로터(회전판)를 조합한 &amp;lsquo;기계식 암호&amp;rsquo;입니다.&lt;/p>
&lt;h2 id="애니그마enigma의-위협">애니그마(Enigma)의 위협
&lt;/h2>&lt;p>제2차 세계 대전 중 나치 독일이 사용한 &amp;lsquo;애니그마&amp;rsquo;는 암호 기술 역사상 가장 유명한 암호기입니다. 애니그마는 여러 개의 로터(보통 3~4개)와 문자의 배선을 바꾸는 플러그보드(Steckerbrett), 그리고 리플렉터(반사 로터)로 구성되어 있었습니다.&lt;/p>
&lt;p>키보드로 한 글자를 입력할 때마다 로터가 회전하기 때문에, 같은 글자를 연속해서 입력해도 다른 암호 문자가 출력됩니다(다중 환자식 암호의 극치). 그 키 공간(설정의 조합)은 약 $1.58 \times 10^{19}$ 가지(약 1,580경)에 달해, 당시 기술로는 무차별 대입을 통한 해독이 불가능하다고 여겨졌습니다.&lt;/p>
&lt;h2 id="앨런-튜링과-봄브bombe">앨런 튜링과 &amp;lsquo;봄브(Bombe)&amp;rsquo;
&lt;/h2>&lt;p>이 난공불락의 애니그마에 도전한 것이 폴란드의 수학자 마리안 레예프스키 등의 초기 성과를 이어받은 영국의 블레츨리 파크 암호 해독 팀입니다.&lt;/p>
&lt;p>특히 앨런 튜링(Alan Turing)은 암호문 일부에 대응하는 평문의 추측(크립: Crib)을 이용하여 전기 기계식 해독기인 &amp;lsquo;봄브(Bombe)&amp;lsquo;를 개발했습니다. 봄브는 논리적인 모순을 고속으로 검출하고 불가능한 로터 설정을 차례로 배제함으로써 애니그마 해독에 성공했습니다. 이 위업은 연합군의 승리를 몇 년 앞당겼다고 평가받습니다.&lt;/p>
&lt;hr>
&lt;h1 id="4-현대-암호의-서막-대칭키-암호-des와-aes">4. 현대 암호의 서막: 대칭키 암호 (DES와 AES)
&lt;/h1>&lt;p>전후 컴퓨터의 등장으로 암호는 &amp;lsquo;문자&amp;rsquo;의 조작에서 &amp;lsquo;비트(0과 1)&amp;lsquo;의 조작으로 극적인 패러다임 전환을 이룹니다.&lt;/p>
&lt;h2 id="클로드-섀넌과-정보-이론">클로드 섀넌과 정보 이론
&lt;/h2>&lt;p>1949년, 클로드 섀넌은 논문 &amp;lsquo;비밀 통신의 통신 이론&amp;rsquo;을 발표하며 현대 암호의 수학적 기초를 다졌습니다. 그는 안전한 암호 설계의 원칙으로 &amp;lsquo;혼돈(Confusion)&amp;lsquo;과 &amp;lsquo;확산(Diffusion)&amp;lsquo;을 제창했습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>혼돈(Confusion)&lt;/strong>: 키와 암호문의 관계를 가능한 한 복잡하게 만드는 것. (환자/치환, S-box를 통해 구현)&lt;/li>
&lt;li>&lt;strong>확산(Diffusion)&lt;/strong>: 평문의 1비트 변경이 암호문의 많은 비트에 영향을 미치도록 하는 것. (전치, 자리 바꿈을 통해 구현)&lt;/li>
&lt;/ul>
&lt;h2 id="des-data-encryption-standard">DES (Data Encryption Standard)
&lt;/h2>&lt;p>1977년, 미국 국립표준기술연구소(NIST, 당시 NBS)는 IBM의 설계를 바탕으로 한 &amp;lsquo;DES&amp;rsquo;를 표준 암호로 제정했습니다.
DES는 &amp;lsquo;파이스텔 구조(Feistel Network)&amp;lsquo;라 불리는 아키텍처를 채택했으며, 64비트의 블록 길이와 56비트의 키 길이를 가집니다. 암호화와 복호화 알고리즘이 거의 같은 구조가 된다는 구현상의 이점이 있었습니다.&lt;/p>
&lt;p>하지만 컴퓨터의 계산 능력이 향상됨에 따라 56비트의 키 길이(약 $7.2 \times 10^{16}$ 가지)로는 불충분하다는 것이 명백해졌습니다. 1998년에는 전자 프론티어 재단(EFF)이 전용 머신 &amp;lsquo;Deep Crack&amp;rsquo;을 개발하여 단 며칠 만에 DES를 해독해 보였습니다.&lt;/p>
&lt;h2 id="aes-advanced-encryption-standard">AES (Advanced Encryption Standard)
&lt;/h2>&lt;p>DES를 대체할 새로운 표준으로 2001년에 제정된 것이 &amp;lsquo;AES&amp;rsquo;입니다. 공모를 통해 선정된 벨기에의 암호학자가 개발한 &amp;lsquo;레인달(Rijndael)&amp;rsquo; 알고리즘이 채택되었습니다.&lt;/p>
&lt;p>AES는 파이스텔 구조가 아닌 &amp;lsquo;SPN 구조(Substitution-Permutation Network)&amp;lsquo;를 채택하였고, 갈루아 체(유한체) $GF(2^8)$ 상의 수학적 연산을 이용합니다. 키 길이는 128, 192, 256비트 중에서 선택할 수 있으며, 현재도 전 세계적으로 표준 대칭키 암호로 널리 사용되고 있습니다.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "AES의 1라운드 처리 (SPN 구조)"
A["입력 상태 (128-bit)"] --> B("SubBytes (바이트 대체 / S-Box)")
B --> C("ShiftRows (행 시프트)")
C --> D("MixColumns (열 믹스 / GF(2^8) 상의 곱셈)")
D --> E("AddRoundKey (라운드 키와의 XOR)")
E --> F["다음 라운드로"]
end&lt;/div>
&lt;hr>
&lt;h1 id="5-공개키-암호의-혁명-diffie-hellman에서-rsa로">5. 공개키 암호의 혁명: Diffie-Hellman에서 RSA로
&lt;/h1>&lt;p>대칭키 암호에는 결정적인 약점이 있었습니다. 바로 &amp;lsquo;키 분배 문제(Key Distribution Problem)&amp;lsquo;입니다. 암호 통신을 시작하기 전에 멀리 떨어진 상대와 어떻게 안전하게 &amp;lsquo;공통의 키&amp;rsquo;를 공유할 것인가 하는 문제입니다. 이 문제를 해결한 것이 1970년대에 탄생한 &amp;lsquo;공개키 암호&amp;rsquo;입니다.&lt;/p>
&lt;h2 id="diffie-hellman-키-교환">Diffie-Hellman 키 교환
&lt;/h2>&lt;p>1976년, 휫필드 디피와 마틴 헬먼은 획기적인 논문 &amp;lsquo;암호학의 새로운 방향(New Directions in Cryptography)&amp;lsquo;을 발표했습니다. 이들은 &amp;lsquo;이산 로그 문제(Discrete Logarithm Problem)&amp;lsquo;라는 수학적 어려움을 이용하여 도청당하고 있는 통신 경로 상에서도 안전하게 키를 공유할 수 있는 기법을 제안했습니다.&lt;/p>
&lt;ol>
&lt;li>큰 소수 $p$와 생성원 $g$를 공개합니다.&lt;/li>
&lt;li>Alice는 비밀 값 $a$를 선택하고, $A = g^a \pmod{p}$를 Bob에게 전송합니다.&lt;/li>
&lt;li>Bob은 비밀 값 $b$를 선택하고, $B = g^b \pmod{p}$를 Alice에게 전송합니다.&lt;/li>
&lt;li>Alice는 $K = B^a \pmod{p}$를 계산하고, Bob은 $K = A^b \pmod{p}$를 계산합니다.&lt;/li>
&lt;li>지수 법칙에 의해 $K = (g^b)^a = (g^a)^b = g^{ab} \pmod{p}$가 되어, 훌륭하게 같은 키 $K$를 공유할 수 있습니다.&lt;/li>
&lt;/ol>
&lt;h2 id="rsa-암호">RSA 암호
&lt;/h2>&lt;p>이듬해인 1977년, 론 리베스트, 아디 샤미르, 레너드 애들먼의 세 사람에 의해 고안된 것이 &amp;lsquo;RSA 암호&amp;rsquo;입니다. 이는 &amp;ldquo;거대한 합성수의 소인수분해는 어렵다&amp;quot;는 성질에 기반하고 있습니다.&lt;/p>
&lt;p>&lt;strong>RSA의 수학적 원리:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>2개의 거대한 소수 $p$와 $q$를 선택하고, $n = p \times q$를 계산합니다.&lt;/li>
&lt;li>오일러의 피 함수 $\phi(n) = (p-1)(q-1)$을 계산합니다.&lt;/li>
&lt;li>$\phi(n)$과 서로소인 정수 $e$(공개키)를 선택합니다.&lt;/li>
&lt;li>$e \times d \equiv 1 \pmod{\phi(n)}$이 되는 정수 $d$(비밀키)를 계산합니다.&lt;/li>
&lt;/ol>
&lt;p>암호화: 평문 $M$에 대해 $C \equiv M^e \pmod{n}$
복호화: 암호문 $C$에 대해 $M \equiv C^d \pmod{n}$&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># RSA 암호의 개념을 보여주는 Python 코드 (실무용은 아닙니다)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 확장 유클리드 호제법을 이용한 모듈러 역원 계산&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">rsa_example&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 작은 소수를 사용한 예&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">61&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">17&lt;/span> &lt;span class="c1"># phi와 서로소인 값&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;공개키: (e=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;비밀키: (d=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 메시지의 암호화와 복호화&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">65&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decrypted&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;평문: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; 암호문: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; 복호화 후: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rsa_example&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h1 id="6-타원-곡선-암호ecc의-대두">6. 타원 곡선 암호(ECC)의 대두
&lt;/h1>&lt;p>RSA 암호는 강력하지만 컴퓨터의 성능 향상에 따라 안전성을 유지하기 위해 키 길이를 늘려야 했고(현재는 2048비트나 3072비트), 계산 비용이 증가한다는 문제가 발생했습니다.&lt;/p>
&lt;p>그래서 1985년에 제안된 것이 &amp;lsquo;타원 곡선 암호(Elliptic Curve Cryptography: ECC)&amp;lsquo;입니다. 이는 유한체 상의 타원 곡선(일반적으로 $y^2 = x^3 + ax + b$ 형태)에서의 점 덧셈을 이용한 것입니다.&lt;/p>
&lt;p>타원 곡선 상의 이산 로그 문제(ECDLP)는 소인수분해 문제보다 푸는 것이 더 어렵다고 알려져 있으며, &lt;strong>RSA의 3072비트와 동등한 안전성을 ECC라면 불과 256비트의 키 길이로 구현&lt;/strong>할 수 있습니다. 이를 통해 스마트폰이나 IoT 기기 등 계산 자원이 제한된 환경에서도 빠르고 안전한 암호 통신(ECDSA나 ECDH 등)이 가능해졌습니다.&lt;/p>
&lt;hr>
&lt;h1 id="7-양자-컴퓨터의-위협과-양자-내성-암호pqc">7. 양자 컴퓨터의 위협과 양자 내성 암호(PQC)
&lt;/h1>&lt;p>암호 기술은 반석처럼 보였으나, 1994년 피터 쇼어(Peter Shor)가 발표한 &amp;lsquo;쇼어의 알고리즘&amp;rsquo;으로 인해 큰 충격이 가해졌습니다.&lt;/p>
&lt;p>양자 컴퓨터는 &amp;lsquo;중첩&amp;rsquo;과 &amp;lsquo;양자 얽힘&amp;rsquo;이라는 양자 역학의 성질을 이용하여 계산을 수행합니다. 쇼어의 알고리즘을 충분한 성능의 양자 컴퓨터에서 실행하면, 소인수분해 문제나 이산 로그 문제가 &amp;lsquo;다항식 시간&amp;rsquo; 내에 풀린다는 것이 수학적으로 증명된 것입니다. 즉, 실용적인 양자 컴퓨터가 완성되는 날(Q-Day), 현재 사용되고 있는 RSA나 ECC 같은 공개키 암호는 모두 순식간에 붕괴됩니다.&lt;/p>
&lt;h2 id="pqcpost-quantum-cryptography의-등장">PQC(Post-Quantum Cryptography)의 등장
&lt;/h2>&lt;p>이 전대미문의 위협에 대비해, 양자 컴퓨터로도 해독이 어려운 새로운 수학적 문제에 기반한 &amp;lsquo;양자 내성 암호(PQC)&amp;rsquo; 연구가 빠른 속도로 진행되고 있습니다. NIST(미국 국립표준기술연구소)는 수년간 PQC의 표준화 과정을 진행해 왔으며, 주로 다음의 수학적 접근 방식이 유력하게 꼽히고 있습니다.&lt;/p>
&lt;h3 id="1-격자-기반-암호-lattice-based-cryptography">1. 격자 기반 암호 (Lattice-based Cryptography)
&lt;/h3>&lt;p>현재 가장 유력한 접근법으로, NIST의 표준화 알고리즘(ML-KEM / Kyber, ML-DSA / Dilithium)에도 채택되었습니다. 다차원 공간의 &amp;lsquo;격자(Lattice)&amp;rsquo; 위에서 특정 점을 찾는 문제(최단 벡터 문제: SVP 등)나, LWE(Learning With Errors: 오차가 있는 학습) 문제의 어려움에 기반하고 있습니다.&lt;/p>
&lt;p>LWE 문제의 개념은 연립 일차 방정식에 의도적으로 &amp;lsquo;작은 노이즈(오차)&amp;lsquo;를 더하면 순간적으로 해를 구하기가 매우 어려워진다는 성질을 이용한 것입니다.
방정식계: $\mathbf{A}\mathbf{s} + \mathbf{e} \equiv \mathbf{b} \pmod{q}$
($\mathbf{A}$와 $\mathbf{b}$는 공개, $\mathbf{s}$는 비밀키, $\mathbf{e}$는 미세한 노이즈)&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># LWE 문제의 개념적 의사 코드 (학습 목적)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">256&lt;/span> &lt;span class="c1"># 차원&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3329&lt;/span> &lt;span class="c1"># 법(modulus)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">512&lt;/span> &lt;span class="c1"># 방정식의 수&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 비밀키 s와 작은 에러 e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 공개 행렬 A와 공개 벡터 b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">A&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 양자 컴퓨터를 사용해도 A와 b로부터 s를 복원하는 것은 매우 어렵다고 여겨짐&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-해시-기반-암호-hash-based-cryptography">2. 해시 기반 암호 (Hash-based Cryptography)
&lt;/h3>&lt;p>해시 함수의 충돌 저항성에만 안전성의 근거를 두는 전자 서명 방식입니다. 수학적인 구조를 가지지 않기 때문에 양자 공격에 강하지만, 서명 크기가 커지는 경향이 있습니다(SPHINCS+ 등).&lt;/p>
&lt;h3 id="3-코드-기반-암호-code-based-cryptography">3. 코드 기반 암호 (Code-based Cryptography)
&lt;/h3>&lt;p>오류 정정 코드 이론에 기반한 암호 방식입니다. 1978년에 제안된 McEliece 암호 등이 유명하며, 역사가 길고 안전성이 입증되었으나 공개키의 크기가 매우 크다(수 메가바이트에 달하기도 함)는 과제가 있습니다.&lt;/p>
&lt;div class="mermaid">timeline
title "암호 기술과 컴퓨터의 진화 역사"
"고대~중세" : "카이사르 암호" : "비즈네르 암호" : "빈도 분석의 탄생"
"1930~40년대" : "애니그마의 운용과 해독" : "튜링 머신·봄브의 개발"
"1970년대" : "DES 표준화 (1977)" : "Diffie-Hellman 키 교환 (1976)" : "RSA 암호의 탄생 (1977)"
"1980~90년대" : "타원 곡선 암호(ECC) 제안" : "쇼어의 알고리즘 발표 (1994)"
"2000년대" : "AES 표준화 (2001)"
"2010년대~현재" : "양자 컴퓨터 연구 가속" : "NIST의 PQC 표준화 프로젝트 시작"
"가까운 미래 (Q-Day)" : "대규모 양자 컴퓨터 실현?" : "PQC(ML-KEM/ML-DSA)로의 완전 전환"&lt;/div>
&lt;hr>
&lt;h1 id="8-결론-끝없는-방패와-창의-싸움">8. 결론: 끝없는 방패와 창의 싸움
&lt;/h1>&lt;p>암호 기술의 역사는 새로운 암호 방식(방패)의 발명과 그것을 깨는 새로운 해독 기법(창)의 끝없는 싸움의 역사입니다.&lt;/p>
&lt;p>카이사르 암호는 빈도 분석에 패배했고, 무적을 자랑하던 애니그마는 튜링의 천재적인 두뇌와 기계의 힘에 패배했습니다. 그리고 지금, 현대 인터넷 사회의 근간을 지탱하는 RSA나 ECC 같은 강력한 암호도 양자 컴퓨터라는 새로운 &amp;lsquo;창&amp;rsquo; 앞에 위협을 받고 있습니다.&lt;/p>
&lt;p>하지만 인류는 이미 그 너머의 미래를 바라보며 양자 내성 암호(PQC)라는 새로운 &amp;lsquo;방패&amp;rsquo;를 준비하고 있습니다. 현재 전 세계의 IT 인프라에서 기존의 공개키 암호로부터 PQC로의 전환 준비(Crypto Agility 확보)가 시급한 과제가 되었습니다.&lt;/p>
&lt;p>암호 기술은 단순하고 난해한 수학 퍼즐이 아니라, 우리의 프라이버시, 재산, 그리고 사회 인프라 자체를 지키기 위한 최강의 방벽인 것입니다.&lt;/p></description></item></channel></rss>