公钥密码

8/21/2023 Cryptography

非对称加密,加密使用公钥,解密使用私钥

RSA 算法

大整数素数分解困难

RSA 的加密解密

两个大素数 p、q,其积记为 n,找到一个和 φ(n) 互素的整数 d

d(1,φ(n)) d\in(1,φ(n))
和 d 关于模 φ(n) 的逆 e
e=d1(modφ(n)) e = d^{-1}(mod\,φ(n))
则 (d,n) 作为公钥,(e, n) 作为私钥

加密解密过程如下,设明文为 m,密文为 c

cmdmodn c\equiv m^d\,mod\,n
解密为
mcemodn m\equiv c^e\,mod\,n
解释如下,对于加密等式同时指上 e,由于二者互逆,相乘为单位元 1
cemde=m c^e\equiv m^{de}=m
对于破译者,只要知道 p 和 q,就可以根据 φ(n) 和公钥 d 求得私钥 e,但已知大整数 n 求他的大素数分解 pxq 是一件很困难的事,于是这种加密可行

RSA 的孙子定理优化

通过重复平方法的中间过程分解 n

背包密码体制

背包密码加密

超递增序列 A,乘数 k,模数 p,背包向量 B

注意背包向量的长度应等于每组的比特数,在背包体制中,每个字母为一个 5 位的二进制数,空格为 00000,A 为 00001,以此类推(背包长度和待加密分组的比特位数相同)

若背包向量 A 长度为 5,则每次处理一个字母,若为 10,则每次处理两个字母,若为 15 则每次处理三个字母......

背包密码的处理方式有点像独热码,如 c 表示 3,二进制为 00011,则其密文为

B4+B5 B_4+B_5
因为 c 的二进制在第四第五位取 1

举个栗子

背包密码解密

解密需要用到乘数 k 和模数 p(在背包体制中也是作为私钥,序列 B 作为公钥)

解密分为以下三步,

  1. 首先求 k 关于 p 的逆,记为 d
  2. 第二将已知的密文乘以 d 再模上 p,得到经过 A 加密后的明文
  3. 最后根据超递增序列 A,通过贪心算法构造二进制数得到明文

注意在已知 B 的情况下不能使用贪心算法,他不是超递增的,不满足最优子结构(这也符合公钥体制的设计思想,无法根据公钥解密)

举个栗子

Rabin 密码体制

大素数分解困难

Rabin 的加密解密

基于二次同余方程,模数 n 为两个大素数 p 和 q 之积

明文为 m,加密为

cm2modn c\equiv m^2\,mod\,n
解密为求解一个二次同余方程为
x2cmodn x^2\equiv c\,mod\,n
其中 n 作为公钥,p 和 q 作为私钥(用于解这个二次同余方程)

求解二次同余方程的四个根(当 p 和 q 均模 4 得 3 时)

孙子定理

当知道二次同余方程的四个根 x1、x2、y1、y2 之后,这个二次同余方程转化为一个一次同余方程组

{mx1modpmx2modpmy1modqmy2modq \begin{cases} m\equiv x_1\,mod\,p\\ m\equiv x_2\,mod\,p\\ m\equiv y_1\,mod\,q\\ m\equiv y_2\,mod\,q \end{cases}
我们通过孙子定理对明文 x 进行求解

椭圆曲线密码体制

椭圆曲线的嵌入和倍点运算

将明文 m 表示为椭圆曲线上的一个点 (m', f(m'))

  • m' 为 m 的线性变换,乘以 k 加上 j(一般 k 在 30-50 之间)
  • f 为椭圆曲线函数,最后结果要模上模数 p

椭圆曲线表示为

Gp(a,b):f(x)=x3+ax+bmodp G_{p}(a,b):f(x)=x^3+ax+b\,mod\,p
代数加法(倍点运算)

Diffie-Hellman 密码交换

a 是大素数的一个本原根

K=YBXB=YAXA=aXAXB K=Y_B^{X_B}=Y_A^{X_A}=a^{X_AX_B}
其中 Y 为公钥,X 为私钥
YB=aXBYA=aXA Y_B=a^{X_B}\quad Y_A=a^{X_A}
A 加密时,通过 K 进行加密,发送给 B,B 由于知道 YA 和 XB,可以轻易的将明文解出,而其他人将只知道公钥 Y,解出的只能是
aXBaXA a^{X_B}\quad a^{X_A}
而由于离散对数问题很难求解这里的 a 或者是 X

在椭圆曲线上的实现

ElGamal 密码体制

重点,出计算

离散对数求解困难

ElGamal 的加密解密

选取大素数 p,随机数 g 和 x,计算

ygxmodp y \equiv g^x\,mod\,p
以 (y,g,p) 作为公钥,x 作为私钥

设明文为 M,选取任一与 p-1 互素的整数 k,加密过程为

C1=gkmodpC2=ykMmodp C_1=g^k\,mod\,p\quad C_2=y^kM\,mod\,p
解密过程为
M=C2C1xmodp M = \frac{C_2}{C_1^x}\,mod\,p
注意分母 C1 有一个小小的 x 次方
C2C1x=ykMgxk=ykMyk=Mmodp \frac{C_2}{C_1^x}=\frac{y^kM}{g^{xk}}=\frac{y^kM}{y^k}=M\,mod\,p

ElGamal 的椭圆曲线实现

在椭圆曲线上的实现

在椭圆曲线上,倍点运算就相当于指数运算,其反向求解过程即为求解离散对数问题

Last Updated: 9/17/2024, 4:16:37 PM
妖风过海
刘森