想听听一个密码设计的数学建模问题。

公钥密码学,又称双密钥密码学和非对称密码学,是由Daffy和Hellman在1976的文章《密码学的新方向》中提出的。参见划时代的文献:

W.Diffie和M.E.Hellman,密码学的新方向,IEEE信息论汇刊,IT-22。第6号,11月1976,第644-654页

单向活板门函数是满足以下条件的函数f:

(1)给定x,很容易计算出y = f(x);

(2)给定y,很难计算出x使得y=f(x)。

(所谓计算难度x=f-1(Y)是指计算相当复杂,没有实际意义。)

(3)当δ存在时,很容易计算出X使得y=f(x)对于任意给定的Y,如果对应的X存在。

注:1*。只有(1)和(2)称为单向函数;第(3)条称为陷门性质,δ称为陷门信息。

2*.当陷门函数f被用作加密函数时,它可以被公开,这相当于公开了加密密钥。此时加密密钥称为公钥,记为Pk。F函数的设计者对δ保密,并将其作为解密密钥。此时δ称为密钥,记为Sk。因为加密函数是公开的,任何人都可以把信息x加密成y=f(x)然后发给函数的设计者(当然也可以通过不安全的通道传输);既然设计者拥有Sk,自然可以求解x=f-1(y)。

3*.单向陷门函数的性质(2)表明窃听者从截获的密文y=f(x)推断X是不可行的。

Diffie和Hellman在他们具有里程碑意义的文章中给出了密码学的思想,但是他们并没有给出公钥密码学的真实例子,也没有找到一个真正的带活板门的单向函数。但他们给出了单向函数的例子,并基于此提出了Diffie-Hellman密钥交换算法。这个算法是基于有限域上计算离散对数的困难性:设F是有限域,g∈ F是f * = f \ {0} =

Diffie-Hellman密钥交换协议描述:Alice和Bob协商一个大素数P和一个大整数G,1

当Alice和Bob想要私下交流时,他们可以按如下方式进行:

(1)Alice发送一个大随机数X并计算它。

X=gx(模P)

(2)Bob选择一个大随机数x?,并计算x?= gx?(国防部)

(3)爱丽丝把X发给鲍勃;;Bob会x?把它发给爱丽丝

(4)爱丽丝计算K=(X?)X(mod P);Bob算k?=(X) X?(mod P),很容易看出来,K=K?=g xx?(国防部).

根据(4),Alice和Bob获得了相同的秘密值K,双方使用K作为加解密密钥,用传统的对称密钥算法进行安全通信。

注:Diffie-Hellman密钥交换算法在美国和加拿大拥有专利。

3 RSA公钥算法

RSA公钥算法是由Rivest、Shamir和Adleman在1978中提出的(参见ACM通讯。第265438卷+0。第2号。二月1978,第120-126页)。

Z/(n)表示为Zn,其中n = pqp和q是质数,是不同的。如果

Z*n?{g∈ Zn|(g,n)=1},很容易看出Z*n是?与g的(n)阶乘法群?(n)?1(mod n),而?(n)=(p-1)(q-1)。

RSA密码系统描述如下:

第一,明文空间p =密文空间C=Zn。(参见P175)。

A.密钥的生成

选择p,q,p,q为互不相同的素数,计算n=p*q,?(n)=(p-1)(q-1),选择整数e使(?(n),e)=1,1 & lt;e & lt?(n)),计算d使得d=e-1(mod?(n)),公钥Pk={e,n };私钥Sk={d,p,q}。

请注意,当0

MK?(n)+1?M(mod n),还有ed?1 (mod?(n))、易见(Me)d M(mod n)

B.加密(e,n)明文:m

C.解密(用d,p,q)

密文:c明文:M=Cd(mod n)

注:1*是加密和解密中的一对逆运算。

2*,对于0 < M & lt当n,如果(M,n) ≠ 1,那么M是p或q的整数倍,假设M=cp,从(cp,q)=1,则有M?(q)?1(mod q) M?(q)?(p)?1(q款)

有m吗?(q)= 1+kq;M=cp两边乘法相同。

有m吗?(q)+1 = m+kcpq = m+kcn那么

有m吗?(q)+1?m(现代)

例:如果Bob选择p=101,Q = 113,那么n=11413。(n)= 100×112 = 11200;但是11200 = 26× 52× 7,一个正整数E可以作为加密索引当且仅当E不能被2,5,7整除(其实Bob不会分解φ(n),他会用相除的方法(欧式算法)求E使得(E,φ (n) =假设Bob选择e=3533,那么通过辗转相除会得到:

d=e -1?6597(mod 11200),所以Bob的解密密钥d=6597。

Bob在一个目录中发布n=11413和e=3533。现在假设Alice想发送纯文本9726给Bob,她计算:

97263533(mod 11413)= 5761

并在一个通道上发送密文5761。Bob收到密文5761时,用他的秘密解密索引(私钥)D = 6597:57616597(mod 11413)= 9726解密。

注:RSA的安全性是建立在加密函数ek(x)=xe(mod n)是单向函数的基础上的,所以人们求逆是不可行的。而Bob可以解密的陷阱就是分解n=pq,好吗?(n)=(p-1)(q-1).因此,解密私钥d由欧几里德算法求解。

4 RSA密码系统的实现

实现步骤如下:Bob是实现者。

(1)鲍勃找到两个大质数P和q。

(2)Bob计算n=pq和?(n)=(p-1)(q-1)。

(3)鲍勃选择一个随机数e (0

(4)Bob计算d=e-1(mod?(n))

(5)Bob在目录中公开N和E作为她的公钥。

密码分析者攻击RSA系统的关键是如何分解n. Ruofen

如果解成功使n=pq,那么就可以算出φ (n) = (P-1) (Q-1),然后由大众算出

开e,解密d .(猜测:破解RSA,分解n是多项式。

相当于。然而这个猜想至今没有给出一个可信的证明!!!)

所以要求RSA要想安全,P和Q必须是足够大的素数才能使。

分析师没有办法在多项式时间内分解n。建议的选择

p和q大约是100的十进制质数。模块n的长度要求至少为

512位。EDI攻击标准使用的RSA算法规定n的长度为

512到1024位,但必须是128的倍数。国际数字

签名标准ISO/IEC 9796规定n的长度为512位。

为了抵抗现有的整数分解算法,分析了RSA模n的素因子

p和q还具有以下要求:

(1)|p-q|很大,通常p和q的长度相同;

(2)p-1和q-1分别含有宏素因子p1和q1。

(3)P1-1和q1-1分别包含宏素因子p2和q2。

(4)p+1和q+1分别含有宏素因子p3和q3。

为了提高加密速度,通常将e取为特定的小整数,如EDI国际标准中的e = 216+1,ISO/IEC9796甚至允许e = 3。此时加密速度一般比解密速度快10倍。接下来研究加解密算术运算,主要是模n的取幂运算,著名的“平方和乘法”方法将计算xc(mod n)的模乘次数减少到最多2l,其中L是二进制表示指数c的位数。设n用二进制形式表示k位,即k=[log2n]+1。L≤ k,这样xc(mod n)可以在o(k3)时间内完成。(注意,不难看出乘法可以在o(k2)时间内完成。)

平方和乘法算法;

指数c以二进制形式表示为:

c=

xc = xc0×(x2)c 1×…×(x2t-1)CT-1

预先计算:x2=xx

x4=x22=x2x2

x2t-1 =x2t-2*x2t-2

Xc计算:将ci=1对应的所有x2i相乘得到xc。直到/非常

T-1乘法用的比较多。请参考参考书177页并给出计算。

Xc(mod n)算法程序:

A=xc c=c0+c12+..+CT-12t-1 =[CT-1,....,c1,c0]2

5 RSA签名方案

签名的基本概念

传统签名(手写签名)的特点:

(1)签名是已签名文档的物理部分;

(2)验证实物部分,进行对比,达到确认的目的。(容易伪造)

(3)忠实“复制”不易!!!

定义:(数字签名方案)签名方案是一种签名算法和验证。

证明算法由两部分组成。可以通过五行关系组(P,A,K,S,V)来雕刻:

(1)P是所有可能消息的有限集;

(2)A是所有可能签名的有限集;

(3)k是有限密钥空间,是一些可能的密钥的有限集合;

(4)对于任何k ∈K,存在签名算法Sigk ∈ S和相应的验证算法Verk∈V,对于每一个

Sigk:p A和Verk:P×A {true,false}满足条件:任意x ∈ p,y ∈ a .具有签名方案的签名:ver (x,y) = {

注:1*。任何k∈K,函数Sigk和Verk都是多项式时间函数。

2*.Verk是公共函数,而Sigk是秘密函数。

3*.如果坏人(比如Oscar)想在X上伪造Bob的签名,在计算上是不可能的。也就是说,给定x,只有Bob可以计算签名y使得verk (x,y) = true。

4*.签名方案不可能是无条件安全的。只要有足够的时间,奥斯卡总能伪造鲍勃的签名。

RSA签名:n=pq,P=A=Zn,定义密钥集K={(n,e,P,q,d)}|n=pq,d*e?1(mod?(n))}

注意:n和e是公钥;p,q,d q和d是秘密的(私钥)。对于x∈P,Bob应该符号X,取K ∈ K. Sigk(x)?xd(mod n)?y(模n)

因此

Verk(x,y)=真x?叶(现代)

(注:e,n是开的;可以公开验证签名(x,y)是对是错!!即是否是鲍勃的签名)

注:1*。任何人都可以对某个签名Y计算x=ek(y)来伪造Bob在随机消息x上的签名。

2*.签名消息的加密传输:假设Alice要加密给Bob的签名消息,她是这样做的:对于明文X,Alice计算X的签名,y=SigAlice(x),然后用Bob的公开加密函数eBob计算。

Z=eBob(x,y),Alice将Z发送给Bob,Bob收到Z后,第一步就是解密。

dBob(Z)=dBobeBob(x,y)=(x,y)

然后检查

VeraAlice (x,y) = true

问:如果Alice先加密消息X,然后签名,结果将是

怎么样?Y=SigAlice(eBob(x))

Alice发送(Z,y)给Bob,Bob先解密Z得到X;然后使用

VerAlice检查关于x的加密签名y。这种方法的潜在问题

问题是,如果奥斯卡得到这对(z,y),他可以用他的签名

替换爱丽丝的签名

y?=SigOscar(eBob(x))

(注:奥斯卡可以签署密文eBob(x),即使他不知道明文x .奥斯卡隐形传态(z,y?)鲍勃,鲍勃,他可能推断明文x来自奥斯卡。所以大家还是建议先签名再加密。)

6.EIGamal计划

EIGamal公钥密码系统基于离散对数问题。让p

至少150十进制素数,p-1有一个大素数因子。Zp是有限域,

如果α是Zp中的本原,则有ZP * =

如何计算唯一整数A,(必选,0≤a≤ p-2),满足

αa=β(模p)

把a写成a=logαβ。

一般来说,求解a在计算上是困难的。

Zp*中Egamal公钥体制的描述:设明文空间为P=Zp*,密文为空。

C=Zp*×Zp*,定义密钥空间K={(p,α,a,β )|β=αa(mod p)}

公钥是:p,α,β。

密钥(私钥):a

Alice取一个秘密随机数k∈ Zp-1,加密明文x。

ek(x,k)=(y1,y2)

其中y1 = α k (mod p),y2 = x β k (mod p)。

鲍勃解密了它,

dk(y1,y2)=y2(y1α)-1(mod p)

注:1*。很容易验证Y2(y 1α)-1 = X(αA)K(αKa)-1 = X!!

2*.使用EIGamal加密算法,可以给出基于此的签名方案:

Alice想对明文x签名,首先她取一个秘密随机数K作为签名。

签收

Sigk(x,k)=(?, ?)

其中?=αk(mod p),?=(x-a?)k-1(型号p-1)

对吧,x?∈Zp*和∈ Zp-1,定义Verk(x,,?)=真等价于

β?α?=αx(模p)

应当注意,如果该签名被正确构造,则验证将

是成功的,因为

β?α?= αa?αk?(mod p)= αa?+k?(国防部)

从上面知道?=(x- a?)可以引入k-1(mod p-1)。

k?=x- a?(mod p-1)有a?+kx(mod p)

所以贝塔?= αx(模p)

该签名方案已被NIST(美国国家标准与技术研究院)确定为签名标准(1985)。

对于RSA,请访问网站:

www.RSAsecurity.com