数学基础
基本概念
公钥密码体制采用两个相关密钥将加密解密能力分开;一个是公开密钥,用于加密,另一个是保密密钥,用于解密;
公钥体制加解密流程
-
信息接收者产生一对密钥,然后将公开密钥公开
-
信息发送者使用公开密钥将信息进行加密,发送在公开信道上
-
信息接收者捕获加密后的信息,使用保密密钥进行解密
进一步地,接收方也可以要求信息发送方产生公私密钥,对信息发送方进行身份认证
为了保证发送方发送的信息只由希望的接收方接收,而不由第三方窃听,可以采取这样的手段
发送者和接收者都产生一对公私钥,发送方首先使用自己的保密密钥进行第一次加密,然后使用接收方的公开密钥对信息进行第二次加密
解密时接收方使用自身的保密密钥进行第一次解密,再通过发送方的公开密钥进行第二次解密;这样就同时保证了信息的认证功能和保密性
RSA算法
算法描述
-
选取两个保密的大素数p、q
-
n=p*q;φ(n)=(p-1)(q-1)
-
1 < e < φ(n),gcd(φ(n),e)=1
-
d*e ≡ 1 mod φ(n)
-
密文c ≡ me mod n
-
明文m ≡ cd mod n
攻击方法
- 共模攻击:用户使用的密钥不同,但模数n相同时;攻击者分别截获同一明文加密的不同密文c1、c2;
于是有:
c1 ≡ me1 mod n
c2 ≡ me2 mod n
使用推广的Euclid算法求出满足
re1+se2=1
的两个整数r、s,然后求出c1-1得
(c1-1)-rc2s ≡ m mod n
ElGamal公钥加密体制
-
选取一个大素数p,使离散对数问题在有限域GF(p)上是难解的,选取g∈Z是一个本原元。
-
随机选取整数x,1≤x≤p-2,计算y=g^x(mod p); y是公开的加密密钥,而x是保密的脱密密钥。
-
明文空间为Z,密文空间为Z×Z。
-
加密变换:对任意明文m∈Z,秘密地随机选取一个整数k,1≤k≤p-2,于是可得密文为:c=(c1,c2)其中c1=g^k(mod p), c2=my^k(mod p)
-
脱密变换:对任意密文c=(c1,c2)∈Z×Z,明文为:m=c2×(c1^x)^-1(mod p)
ElGamal数字签名方案
1. 生成乘法群Z中的一个生成元g,p,g公开。
2. 随机选取整数x,1≤x≤p-2,计算y=g^x(mod p),y是公开密钥,而x是保密密钥。
3. 签名算法:设m∈Z是待签名的消息,秘密随机选取一个整数k,1≤k≤p-2,且(k,p-1)=1,计算
r=g^k(mod p)
s=k^-1(m-rx)(mod p-1)
则(m,r,s)为对消息m的数字签名。
4. 验证算法:对方收到对消息m的数字签名(m,r,s)后,利用签名者的公开密钥y,g,p可对签名进行以下验证:
(y^r)(r^s)=g^m(mod p)
如果上式成立,则接受该签名,否则拒绝该签名。
椭圆曲线密码体制
椭圆曲线并不是椭圆,一般方程为y2+axy+by=x3+cx2+dx+e
- 椭圆曲线的加法:如P+Q=R,表示在满足方程的曲线中过PQ两点作直线与椭圆曲线交与R点
设P(x1,y1),Q=(x2,y2),P≠-Q;R=P+Q=(x3,y3)
x3 ≡ λ2 - x1 - x2 (mod p)
y3 ≡ λ (x1 - x3) - y3(mod p)
λ = ( y2 - y1 ) / ( x2 - x1 )
密码体制实现
-
嵌入消息m:选取k,30<=k<=50,令x=k*m+j;j=0,1,2···,验证是否存在以x为横坐标落在曲线上的整数点
-
密钥生成:设Ep(a,b)是曲线上的整数点集;取生成元G,接收者选取xA作为秘密密钥,PA = xA * G 作为公开密钥
-
加密运算:发送者向接收者发送信息Pm,选取正整数k,密文Cm={k * G , Pm+k * PA}
-
解密运算:Pm = Pm + k * PA - nA * k * G