Skip to content
Notes
GitHub

第 4 章 公钥密码

4.1. 数学知识

4.1.1. 群 环 域

\ast 是集合 S\displaystyle{ S } 上的运算,若对 a,bS\forall a,b \in S,有 abSa \ast b \in S,则称 S\displaystyle{ S } 对运算 \ast 是封闭的。若 \ast 是一元运算,对 aS\forall a \in S,有 aS\ast a \in S,则称 S\displaystyle{ S } 对运算 \ast 是封闭的。

若对 a,b,cS\forall a, b, c \in S,有 (ab)c=a(bc)(a \ast b) \ast c = a \ast (b \ast c),则称 \ast 满足结合律。

定义 4-1

G,\langle\mathbb{G}, \ast\rangle 是一个代数系统,\ast 满足

  • 封闭性
  • 结合律

则称 G,\langle\mathbb{G}, \ast\rangle 是半群

定义 4-2

G,\langle\mathbb{G}, \ast\rangle 是一个代数系统,\ast 满足

  • 封闭性
  • 结合律
  • 存在元素 e\displaystyle{ e },对 a(G)\forall a \in \mathbb(G),有 ae=ea=aa \ast e = e \ast a = ae\displaystyle{ e } 称为 G,\langle\mathbb{G}, \ast\rangle 的单位元
  • aG\forall a \in \mathbb{G},存在元素 a{1}\displaystyle{ a ^{ \left\lbrace - 1 \right\rbrace } },使得 aa1=a1a=ea \ast a^{-1} = a^{-1} \ast a = e,称 a{1}\displaystyle{ a ^{ \left\lbrace - 1 \right\rbrace } }a\displaystyle{ a } 的逆元

则称 G,\langle\mathbb{G}, \ast\rangle 是群,若其中的运算 \ast 已明确,有时将其简记为 G\mathbb{G}

如果 G\mathbb{G} 是有限集合,则称 G,\langle\mathbb{G}, \ast\rangle 是有限群,否则是无限群。有限群中,G\mathbb{G} 的元素个数称为群的阶数

如果群 G,\langle\mathbb{G}, \ast\rangle 中的运算 \ast 还满足交换律,即对 a,bG\forall a, b \in \mathbb{G},有 ab=baa \ast b = b \ast a,则称 G,\langle\mathbb{G}, \ast\rangle 为交换群或 Abel 群

定义 4-3

G,\langle\mathbb{G}, \ast\rangle 是一个群,I\displaystyle{ I } 是整数集合。如果存在一个元素 gGg \in \mathbb{G},对于每一个元素 aGa \in \mathbb{G},都有相应的 iIi \in I,能把 a\displaystyle{ a } 表示成 gi\displaystyle{ g ^{ i } },则称 G,\langle\mathbb{G}, \ast\rangle 是循环群,g\displaystyle{ g } 称为循环群的生成元,记 G=g={giiI}\mathbb{G} = \langle g \rangle = \{ g^i \mid i \in I \}。称满足方程 am=e\displaystyle{ a ^{ m } = e } 的最小正整数 m\displaystyle{ m }a\displaystyle{ a } 的阶,记为 a\displaystyle{ \left| a \right| }

定义 4-4

若代数系统 R,+,,\langle \mathbb{R}, +, \cdot, \rangle 的二元运算 +\displaystyle{ + }\cdot 满足

  • R,+\langle \mathbb{R}, + \rangle 是 Abel 群
  • R,\langle \mathbb{R}, \cdot \rangle 是半群
  • 乘法 \cdot 在加法 +\displaystyle{ + } 上可分配

则称 R,+,,\langle \mathbb{R}, +, \cdot, \rangle 是环

定义 4-5

若代数系统 F,+,\langle \mathbb{F}, +, \cdot \rangle 的二元运算 +\displaystyle{ + }\cdot 满足

  • F,+\langle \mathbb{F}, + \rangle 是 Abel 群
  • F{0},\langle \mathbb{F} - \{ 0 \}, \cdot \rangle 是 Abel 群,其中 0\displaystyle{ 0 }+\displaystyle{ + } 的单位元
  • 乘法 \cdot 在加法 +\displaystyle{ + } 上可分配

则称 F,+,\langle \mathbb{F}, +, \cdot \rangle 是域

Q,+,,R,+,,C,+,\langle Q, +, \cdot \rangle, \langle R, +, \cdot \rangle, \langle C, +, \cdot \rangle 都是域,分别代表有理数集、实数集、复数集

有限域是指域中元素个数有限的域,元素的个数称为域的阶。

4.1.2. 素数和互素数

1. 因子

a,bZ,b0a, b \in Z, b \ne 0,若存在另一个整数 m\displaystyle{ m },使得 a=mb\displaystyle{ a = mb },则称 b\displaystyle{ b } 整除 a\displaystyle{ a },记为 bab \mid a

2. 素数

称素数 p(p>1)\displaystyle{ p \left( p > 1 \right) } 是素数,如果 p\displaystyle{ p } 的因子只有 ±1\pm 1±p\pm p

任一整数 a(a>1)\displaystyle{ a \left( a > 1 \right) } 都能唯一的分解为以下形式

a=p1α1p2α2ptαta = p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_t^{\alpha_t}

其中 p1<p2<<ptp_1 < p_2 < \cdots < p_t 是素数

3. 互素数

c\displaystyle{ c }a\displaystyle{ a }b\displaystyle{ b } 的最大公因子,c=gcd(a,b)c=\gcd (a,b)

要求最大公因子一般为正

辗转相除求最大公因子
def gcd(a: int, b: int) -> int:
while b:
a, b = b, a % b
return a
def gcd(a: int, b: int) -> int:
while b:
a, b = b, a % b
return a

gcd(a,b)=1\gcd(a, b)=1 则称 a\displaystyle{ a }b\displaystyle{ b } 互素

最小公倍数 lcm(a,b)=abgcd(a,b)\text{lcm}(a,b)=\displaystyle \frac{ab}{\gcd(a, b)}

4.1.3. 模运算

a=qn+r,0r<n,q=ana = q n + r,0 \leqslant r < n,q = \left\lfloor{a\over n}\right\rfloor

其中 armodna \equiv r \bmod n

交换律、结合律、分配率、加法单位元 0 、乘法单位元 1 此处从略

乘法逆元

Zn={a0<a<n,gcd(a,n)=1}Z_n^\ast = \{ a \mid 0 < a < n, \gcd(a, n)=1 \}

定理 4-1

ZnZ_n^\ast 中每个元素都有乘法逆元

1Zn1 \in Z_n^\ast,存在 xZnx \in Z_n^\ast,使得 a×x1modna \times x \equiv 1 \bmod nx\displaystyle{ x }a\displaystyle{ a } 的乘法逆元,记为 x=a{1}\displaystyle{ x = a ^{ \left\lbrace - 1 \right\rbrace } }

4.1.4. 模指数运算

对给定的正整数 m,n\displaystyle{ m , n },计算 ammodna^m \bmod n

例 4-5 a=7,n=19\displaystyle{ a = 7 , n = 19 },易求出

717mod197211mod19731mod19\begin{aligned} 7^1 & \equiv 7 \bmod {19}\\ 7^2 & \equiv 11 \bmod {19}\\ 7^3 & \equiv 1 \bmod {19}\\ \end{aligned}

可以看出存在循环,循环周期为 3

称满足方程 am1modna^m \equiv 1 \bmod n 的最小正整数 m\displaystyle{ m } 为模 n\displaystyle{ n }a\displaystyle{ a } 的阶,记为 ordn(a)\text{ord}_n(a)

定理 4-2

ordn(a)=m\text{ord}_n(a)=m,则 ak1modna^k \equiv 1 \bmod n 的充要条件是 k\displaystyle{ k }m\displaystyle{ m } 的倍数

4.1.5. 三个定理

费尔马定理

Fermat 定理

p\displaystyle{ p } 为素数,a\displaystyle{ a } 是正整数且 gcd(a,p)=1\gcd(a, p)=1,则 ap11modpa^{p-1} \equiv 1 \bmod p

欧拉函数

n\displaystyle{ n } 是一正整数,小于 n\displaystyle{ n } 且与 n\displaystyle{ n } 互素的正整数的个数称为 n\displaystyle{ n } 的欧拉函数,记为 φ(n)\varphi (n)

定理 4-4
  • n\displaystyle{ n } 是素数,则 φ(n)=n1\varphi (n)=n-1
  • n\displaystyle{ n } 是两个素数 p\displaystyle{ p }q\displaystyle{ q } 的乘积,则 φ(n)=φ(p)×φ(q)=(p1)×(q1)\varphi(n)=\varphi(p) \times \varphi(q)=(p-1)\times(q-1)
  • n\displaystyle{ n } 有标准分解式 n=p1α1p2α2ptαtn=p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_t^{\alpha_t},则 φ(n)=n(11p1)(11p2)(11pt)\varphi(n)=n \left(1 - \displaystyle {1\over p_1}\right) \left(1 - \displaystyle {1\over p_2}\right) \cdots \left(1 - \displaystyle {1\over p_t}\right)

欧拉定理

欧拉定理

a\displaystyle{ a }n\displaystyle{ n } 互素,则 aφ(n)1modna^{\varphi(n)} \equiv 1 \bmod n

推论 ordn(a)φ(n)\text{ord}_n(a) \mid \varphi(n)

推论说明,ordn(a)\text{ord}_n(a)φ(n)\varphi(n) 的因子,则称 a\displaystyle{ a }n\displaystyle{ n }本原根。如果 a\displaystyle{ a }n\displaystyle{ n } 的本原根,则 a,a2,,aφ(n)a, a^2, \cdots, a^{\varphi(n)}modn\bmod n 下互不相同且与 n\displaystyle{ n } 互素。

卡米歇尔定理

对满足 gcd(a,n)=1\gcd (a,n)=1 的所有 a\displaystyle{ a },使得 am1modna^m \equiv 1 \bmod n 同时成立的最小正整数 m\displaystyle{ m },称为 n\displaystyle{ n } 的卡米歇尔函数,记为 λ(n)\lambda(n)

似乎没说要考

4.1.6. 素性检验

爱拉托斯尼筛法

用于求一定范围内的所有素数,每次筛去某一个小于 n\sqrt{n} 的素数的超过 1 的整数倍。

对于 n\displaystyle{ n } 很大时,不可行。

Miller-Rabin 概率检测法

懒,不想写

4.1.7. 欧几里得算法

1. 求最大公因子

def gcd(a: int, b: int) -> int:
while b != 0:
a, b = b, a % b
return a
def gcd(a: int, b: int) -> int:
while b != 0:
a, b = b, a % b
return a

2. 求乘法逆元

如果 (a,b)=1\displaystyle{ \left( a , b \right) = 1 },则 b\displaystyle{ b }moda\bmod a 下有乘法逆元(不妨设 b<a\displaystyle{ b < a }),即存在一个 x(x<a)\displaystyle{ x \left( x < a \right) },使得 bx1modabx \equiv 1 \bmod a。推广的欧几里得算法先求出 (a,b)\displaystyle{ \left( a , b \right) },当 (a,b)=1\displaystyle{ \left( a , b \right) = 1 } 时,则返回 b\displaystyle{ b } 的逆元。

# 扩展欧几里得算法
def extended_euclid(a, b):
x, y, u, v = 0, 1, 1, 0
while b != 0:
q, r = divmod(a, b)
a, b = b, r
x, u = u, x - q * u
y, v = v, y - q * v
return x, y, a
# 求出乘法逆元
def inverse(a, m):
x, y, q = extended_euclid(a, m)
if x < 0:
x += m
return x
# 扩展欧几里得算法
def extended_euclid(a, b):
x, y, u, v = 0, 1, 1, 0
while b != 0:
q, r = divmod(a, b)
a, b = b, r
x, u = u, x - q * u
y, v = v, y - q * v
return x, y, a
# 求出乘法逆元
def inverse(a, m):
x, y, q = extended_euclid(a, m)
if x < 0:
x += m
return x

4.1.8. 中国剩余定理

  • 如果已知某个数关于一些两两互素的数的同余类集,就可重构这个数
  • 可将大数用小数表示、大数的运算通过小数实现
中国剩余定理

m1,m2,,mkm_1, m_2, \cdots, m_k 是两两互素的正整数,M=i=1kmiM = \displaystyle \prod_{i=1}^{k}m_i,则一次同余方程组

{xa1(modm1)xa2(modm2)xak(modmk)\begin{cases} x \equiv a_1 \pmod{m_1} \\ x \equiv a_2 \pmod{m_2} \\ \cdots \\ x \equiv a_k \pmod{m_k} \end{cases}

miMi=M\displaystyle{ m _{ i } M _{ i } = M },即 Mi=MmiM_i = {M \over m_i};令 MiMi1(modmi)M_i^\prime M_i \equiv 1 \pmod {m_i},即 MiM_i^\primeMi\displaystyle{ M _{ i } }mi\displaystyle{ m _{ i } } 的乘法逆元

对模 M\displaystyle{ M } 有唯一解:

x(M1M1a1+M2M2a2++MkMkak)(modM)x \equiv \left( M_1^\prime M_1 a_1 + M_2^\prime M_2 a_2 + \cdots + M_k^\prime M_k a_k \right) \pmod{M}

中国剩余定理提供了一个非常有用的特性,即在模 M\displaystyle{ M } 下可将大数 A\displaystyle{ A } 由一组小数 (a1,a2,,ak)(a_1, a_2, \cdots, a_k) 来表达,且大数的运算可以通过小数实现。表示为:

A(a1,a2,,ak)A \leftrightarrow (a_1, a_2, \cdots, a_k)

其中 ai=Amodmia_i = A \bmod m_i,则有以下推论:

推论 如果

A(a1,a2,,ak),B(b1,b2,,bk),A \leftrightarrow (a_1, a_2, \cdots, a_k), B \leftrightarrow (b_1, b_2, \cdots, b_k),

那么

(A+B)modM((a1+b1)modm1,,(ak+bk)modmk)(AB)modM((a1b1)modm1,,(akbk)modmk)(A×B)modM((a1×b1)modm1,,(ak×bk)modmk)\begin{aligned} (A+B) \bmod M \leftrightarrow ((a_1+b_1) \bmod{m_1}, \cdots, (a_k+b_k) \bmod{m_k})\\ (A-B) \bmod M \leftrightarrow ((a_1-b_1) \bmod{m_1}, \cdots, (a_k-b_k) \bmod{m_k})\\ (A \times B) \bmod M \leftrightarrow ((a_1 \times b_1) \bmod{m_1}, \cdots, (a_k \times b_k) \bmod{m_k})\\ \end{aligned}

例题 有下面的同余方程组,求 x\displaystyle{ x }

{x1mod2x2mod3x3mod5x5mod7\begin{cases} x \equiv 1 \bmod 2 \\ x \equiv 2 \bmod 3 \\ x \equiv 3 \bmod 5 \\ x \equiv 5 \bmod 7 \end{cases}
解答
M=2×3×5×7=210M1=105M2=70M3=42M4=30e1M11mod21e2M21mod31e3M31mod53e4M41mod74x(105×1×1+70×1×2+42×3×3+30×4×5)mod210173mod210\begin{aligned} M & = 2 \times 3 \times 5 \times 7 = 210 \\ M_1 & = 105 \\ M_2 & = 70 \\ M_3 & = 42 \\ M_4 & = 30 \\ e_1 & \equiv M_1^{-1} \bmod 2 \equiv 1 \\ e_2 & \equiv M_2^{-1} \bmod 3 \equiv 1 \\ e_3 & \equiv M_3^{-1} \bmod 5 \equiv 3 \\ e_4 & \equiv M_4^{-1} \bmod 7 \equiv 4 \\ x & \equiv (105 \times 1 \times 1 + 70 \times 1 \times2 + 42 \times 3 \times 3 + 30 \times 4 \times 5) \bmod{210} \\ & \equiv 173 \bmod{210} \end{aligned}

4.1.9. 离散对数

1. 指标

p\displaystyle{ p } 是一素数,a\displaystyle{ a }p\displaystyle{ p } 的本原根,则 a,a2,,ap1a, a^2, \cdots, a^{p-1} 产生出 1p11 \sim p-1 之间的所有值,且每一值只出现一次。因此对任意 b{1,,p1}b \in \{1, \cdots, p - 1\},都存在唯一的 i(1ip1)i(1 \leqslant i \leqslant p - 1),使得 baimodpb \equiv a^i \bmod p。称 i\displaystyle{ i } 为模 p\displaystyle{ p } 下以 a\displaystyle{ a } 为底 b\displaystyle{ b } 的指标,记为 i=inda,p(b)i=\text{ind}_{a, p}(b)。指标有以下性质:

  • inda,p(1)=0\text{ind}_{a, p}(1)=0a0modp=1modp=1a^0 \bmod p =1 \bmod p = 1
  • inda,p(a)=1\text{ind}_{a, p}(a)=1a1modp=aa^1 \bmod p = a
定理 4-10

azaqmodpa^z \equiv a^q \bmod p,其中 p\displaystyle{ p } 为素数,a\displaystyle{ a }p\displaystyle{ p } 的本原根,则有 zqmodφ(p)z \equiv q \bmod {\varphi (p)}

证明

a\displaystyle{ a }p\displaystyle{ p } 互素,所以 a\displaystyle{ a } 在模 p\displaystyle{ p } 下存在逆元 a{1}\displaystyle{ a ^{ \left\lbrace - 1 \right\rbrace } },在 azaqmodpa^z \equiv a^q \bmod p 两边同乘 (a{1})q\displaystyle{ \left( a ^{ \left\lbrace - 1 \right\rbrace } \right) ^{ q } }azq1modpa^{z-q} \equiv 1 \bmod p。因 a\displaystyle{ a }p\displaystyle{ p } 的本原根,a\displaystyle{ a } 的阶为 φ(p)\varphi (p),所以存在整数 k\displaystyle{ k },使得 zqkφ(p)z-q \equiv k \varphi (p),所以 zqmodφ(p)z \equiv q \bmod {\varphi (p)}

又有两条性质

  • inda,p(xy)=[inda,p(x)+inda,p(y)]modφ(p)\text{ind}_{a, p}(xy)=[\text{ind}_{a,p}(x) + \text{ind}_{a,p}(y)] \bmod \varphi (p)
  • inda,p(yr)=[r×inda,p(y)]modφp\text{ind}_{a, p}(y^r)=[r \times \text{ind}_{a, p}(y)] \bmod \varphi p

2. 离散对数

p\displaystyle{ p } 是一素数,a\displaystyle{ a }p\displaystyle{ p } 的本原根,则 a,a2,,ap1a, a^2, \cdots, a^{p-1} 产生出 1p11 \sim p-1 之间的所有值,且每一值只出现一次。因此对任意 b{1,,p1}\forall b \in \{1, \cdots, p - 1\},都存在唯一的 i(1ip1)i(1 \leqslant i \leqslant p - 1),使得 baimodpb \equiv a^i \bmod p。称 i\displaystyle{ i } 为模 p\displaystyle{ p } 下以 a\displaystyle{ a } 为底 b\displaystyle{ b } 的离散对数,记为 iloga(b)modpi \equiv \log_a(b) \bmod p

a,p,i\displaystyle{ a , p , i } 已知,用快速指数算法可以比较容易算出 b\displaystyle{ b },但如果已知 a,b,p\displaystyle{ a , b , p },求 i\displaystyle{ i } 则十分困难。

4.2. 公钥密码体制的基本概念

4.2.1. 公钥密码体制的原理

采用两个相关密钥将加密和解密能力分开。一个密钥公开,用于加密数据;一个密钥为用户专用,是保密的,用于解密。

算法的特性:已知密码算法和加密密钥,求解解密密钥在计算上是不可行的

public/cypto/crypto02.svg

c=EPKB[m]m=DSKB[c]\begin{aligned} c & = \mathcal{E}_{PK_B}[m]\\ m & = \mathcal{D}_{SK_B}[c] \end{aligned}

公钥密码体制的认证、保密框图

public/cypto/crypto03.svg

c=EPKB[ESKA[m]]m=DPKA[DSKB[c]]\begin{aligned} c &= \mathcal{E}_{PK_B}[\mathcal{E}_{SK_A}[m]]\\ m &= \mathcal{D}_{PK_A}[\mathcal{D}_{SK_B}[c]] \end{aligned}

4.2.2. 公钥密码算法应满足的要求

  1. 接收方 B 产生密钥对(公钥 PKB\displaystyle{ P K _{ B } } 和私钥 SKB\displaystyle{ S K _{ B } })是计算上容易的
  2. 发方 A 用收方的公开钥对消息 m\displaystyle{ m } 加密以产生密文 c\displaystyle{ c },即 c=EPKB[m]c = \mathcal{E}_{PK_B}[m] 在计算上是容易的
  3. 收方 B 用自己的秘密钥对 c\displaystyle{ c } 解密,即 m=DSKB[C]m=\mathcal{D}_{SK_B}[C] 在计算上是容易的
  4. 敌手由 B 的公开钥 PKB\displaystyle{ P K _{ B } } 求秘密钥 SKB\displaystyle{ S K _{ B } } 在计算上是不可行的
  5. 敌手由密文 c\displaystyle{ c } 和 B 的公开钥 PKB\displaystyle{ P K _{ B } } 恢复明文 m\displaystyle{ m } 在计算上是不可行的
  6. 加解密次序可对换,即 EPKB[DSKB[m]]=DSKB[EPKB[m]]\mathcal{E}_{PK_B}[\mathcal{D}_{SK_B}[m]]=\mathcal{D}_{SK_B}[\mathcal{E}_{PK_B}[m]]

4.3. RSA 算法

做过实验,基本上不考了

4.3.2. 安全性

  • 加密算法是确定性算法

4.5. ElGamal 密码体制

4.5.1. 加解密算法

1. 密钥产生过程

选择一素数 p\displaystyle{ p } 以及小于 p\displaystyle{ p } 的随机数 x\displaystyle{ x }g\displaystyle{ g }p\displaystyle{ p } 的原根,计算 ygxmodpy \equiv g^x \bmod p

y\displaystyle{ y } 作为公开钥,x\displaystyle{ x } 作为秘密钥

2. 加密过程

明文消息 M\displaystyle{ M } 随机选一整数 k<p1\displaystyle{ k < p - 1 },计算 C1gkmodp,C2ykMmodpC_1 \equiv g^k \bmod p, C_2 \equiv y^kM \bmod p,密文为 C=(C1,C2)\displaystyle{ C = \left( C _{ 1 } , C _{ 2 } \right) }

3. 解密过程

M=C2C1xmodpM = {C_2 \over C_1^x} \bmod p\\ C2C1xmodp=ykMgkxmodp=ykMykmodp=Mmodp{C_2 \over C_1^x} \bmod p={y^kM \over g^{kx} } \bmod p={y^kM \over y^k} \bmod p = M \bmod p

4.5.2. 安全性

  • 安全性基于有限域上的离散对数难解性
  • 加密算法是概率算法
  • 不能抵御选择密文攻击

4.7. 椭圆曲线密码体制

4.7.5.椭圆曲线上的密码

1. Diffie-Hellman 密钥交换

首先取一个素数 p2180p \approx 2^{180} 和两个参数 a,b\displaystyle{ a , b },则得方程

y2=x3+ax+b(modp)a,bGF(p),4a3+27b20(modp)\begin{aligned} y^2=x^3 + a x + b \pmod{p} \\ a,b \in GF(p), 4 a^3 + 27 b^2 \ne 0 \pmod{p} \end{aligned}

表达的椭圆曲线及其上面的点构成的 Abel 群 Ep(a,b)\displaystyle{ E _{ p } \left( a , b \right) }。第二步,取 Ep(a,b)\displaystyle{ E _{ p } \left( a , b \right) } 的一个生成元 G(x1,y1)\displaystyle{ G \left( x _{ 1 } , y _{ 1 } \right) },要求 G\displaystyle{ G } 的阶为一个非常大的素数,G\displaystyle{ G } 的阶是满足 nG=O\displaystyle{ n G = O } 的最小正整数 n\displaystyle{ n }Ep(a,b)\displaystyle{ E _{ p } \left( a , b \right) }G\displaystyle{ G } 作为公开参数。

两用户 A 和 B 之间的密钥交换如下运行:

  1. A 选一个小于 n\displaystyle{ n } 的整数 nA\displaystyle{ n _{ A } } 作为秘密钥,并由 PA=nAG\displaystyle{ P _{ A } = n _{ A } G } 产生 Ep(a,b)\displaystyle{ E _{ p } \left( a , b \right) } 上的一点作为公开钥
  2. B 类似地选取自己的秘密钥 nB\displaystyle{ n _{ B } } 和公开钥 PB\displaystyle{ P _{ B } }
  3. A, B 分别由 K=nAPB\displaystyle{ K = n _{ A } P _{ B } }K=nBPA\displaystyle{ K = n _{ B } P _{ A } } 产生双方共享的秘密钥

这是因为 K=nAPB=nA(nBG)=nB(nAG)=nBPA\displaystyle{ K = n _{ A } P _{ B } = n _{ A } \left( n _{ B } G \right) = n _{ B } \left( n _{ A } G \right) = n _{ B } P _{ A } }

攻击者若想获取 K\displaystyle{ K },则必须由 PA\displaystyle{ P _{ A } }G\displaystyle{ G } 求出 nA\displaystyle{ n _{ A } },或由 PB\displaystyle{ P _{ B } }G\displaystyle{ G } 求出 nB\displaystyle{ n _{ B } },即需要求椭圆曲线上的离散对数,因此是不可行的。

  • 已知 n\displaystyle{ n }P\displaystyle{ P }K\displaystyle{ K } 是简单的
  • 已知 P\displaystyle{ P }K\displaystyle{ K }n\displaystyle{ n } 在计算上是不可行的

public/cypto/crypto04.svg

中间人攻击

public/cypto/crypto05.svg

2. ElGamal 密码体制

原理

选择一素数 p\displaystyle{ p } 以及小于 p\displaystyle{ p } 的随机数 x\displaystyle{ x }g\displaystyle{ g }p\displaystyle{ p } 的原根,计算 ygxmodpy \equiv g^x \bmod p(y,g,p)\displaystyle{ \left( y , g , p \right) } 作为公开钥,x\displaystyle{ x } 作为秘密钥。

加密过程 明文消息 M\displaystyle{ M } 随机选一整数 k<p1\displaystyle{ k < p - 1 },计算 C1gkmodp,C2ykMmodpC_1 \equiv g^k \bmod p, C_2 \equiv y^kM \bmod p,密文为 C=(C1,C2)\displaystyle{ C = \left( C _{ 1 } , C _{ 2 } \right) }

解密过程

M=C2C1xmodpM = {C_2 \over C_1^x} \bmod p\\ C2C1xmodp=ykMgkxmodp=ykMykmodp=Mmodp{C_2 \over C_1^x} \bmod p={y^kM \over g^{kx} } \bmod p={y^kM \over y^k} \bmod p = M \bmod p
利用椭圆曲线实现 ElGamal 密码体制

首先选取一条椭圆曲线,并得 Ep(a,b)\displaystyle{ E _{ p } \left( a , b \right) } ,将明文消息 m\displaystyle{ m } 通过编码嵌入到曲线上得点 Pm\displaystyle{ P _{ m } },再对点 Pm\displaystyle{ P _{ m } } 做加密变换。

Ep(a,b)\displaystyle{ E _{ p } \left( a , b \right) } 的一个点 G\displaystyle{ G }Ep(a,b)\displaystyle{ E _{ p } \left( a , b \right) }G\displaystyle{ G } 作为公开参数。

用户 A 选 nA\displaystyle{ n _{ A } } 作为秘密钥,并以 PA=nAG\displaystyle{ P _{ A } = n _{ A } G } 作为公开钥。任一用户 B 若想向 A 发送消息 Pm\displaystyle{ P _{ m } },可选取一随机正整数 k\displaystyle{ k },产生以下点对作为密文

Cm= {kG,Pm+kPA }\displaystyle{ C _{ m } = \ \left\lbrace k G , P _{ m } + k P _{ A } \ \right\rbrace }

A 解密时,以密文点对中的第二个点减去用自己的秘密钥与第一个点的倍乘,即

Pm+kPAnAkG=Pm+k(nAG)nAkG=Pm\displaystyle{ P _{ m } + k P _{ A } - n _{ A } k G = P _{ m } + k \left( n _{ A } G \right) - n _{ A } k G = P _{ m } }

攻击者若由 Cm\displaystyle{ C _{ m } } 得到 Pm\displaystyle{ P _{ m } },就必须知道 k\displaystyle{ k }。而要得到 k\displaystyle{ k },只有通过椭圆曲线上的两个已知点 G\displaystyle{ G }kG\displaystyle{ k G },这意味着必须求椭圆曲线上的离散对数,因此不可行。

技术蛋老师对椭圆曲线上密码的理解

椭圆曲线已知 n,G\displaystyle{ n , G },求出 P=nG\displaystyle{ P = n G } 在计算上是容易的;而已知 G,P\displaystyle{ G , P } 求出 n\displaystyle{ n } 是困难的。

就像是让一个小朋友在一个大房间踢球,我们知道球的初始位置,一小时后我们回到房间,我们知道了球的终止位置,但是如果我们想知道小朋友在这一个小时一共踢了多少次,这是一个困难的问题。