想听大家对于一道密码设计的数学建模题(数学建模代替法密码)

2023-03-26 5:52:13 密码用途 思思

公钥密码又称为双钥密码和非对称密码,是1976年由Daffy和Hellman在其“密码学新方向”一文中提出的,见划时代的文献:

W.Diffie and M.E.Hellman, New Directrions in Cryptography, IEEE Transaction on Information Theory, V.IT-22.No.6, Nov 1976, PP.644-654

单向陷门函数是满足下列条件的函数f:

(1)给定x,计算y=f(x)是容易的;

(2)给定y, 计算x使y=f(x)是困难的。

(所谓计算x=f-1(Y)困难是指计算上相当复杂,已无实际意义。)

(3)存在δ,已知δ 时,对给定的任何y,若相应的x存在,则计算x使y=f(x)是容易的。

注:1*. 仅满足(1)、(2)两条的称为单向函数;第(3)条称为陷门性,δ 称为陷门信息。

2*. 当用陷门函数f作为加密函数时,可将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*=F\{0}=g。并且对任意正整数x,计算gx是容易的;但是已知g和y求x使y= gx,是计算上几乎不可能的。这已问题称为有限域F上的离散对数问题。公钥密码学种使用最广泛的有限域为素域FP.

对Diffie-Hellman密钥交换协议描述:Alice和Bob协商好一个大素数p,和大的整数g,1gp,g最好是FP中的本原元,即FP*=g。p和g无须保密,可为网络上的所有用户共享。

当Alice和Bob要进行保密通信时,他们可以按如下步骤来做:

(1)Alice送取大的随机数x,并计算

X=gx(mod P)

(2)Bob选取大的随机数x,并计算X  = gx (mod P)

(3)Alice将X传送给Bob;Bob将X 传送给Alice。

(4)Alice计算K=(X )X(mod P);Bob计算K  =(X) X (mod P),易见,K=K  =g xx (mod P)。

由(4)知,Alice和Bob已获得了相同的秘密值K。双方以K作为加解密钥以传统对称密钥算法进行保密通信。

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

3 RSA公钥算法

RSA公钥算法是由Rivest,Shamir和Adleman在1978年提出来的(见Communitions of the ACM. Vol.21.No.2. Feb. 1978, PP.120-126)该算法的数学基础是初等数论中的Euler(欧拉)定理,并建立在大整数因子的困难性之上。

将Z/(n)表示为 Zn,其中n=pq; p,q为素数且相异。若

Z*n{g∈ Zn|(g,n)=1},易见Z*n为  (n)阶的乘法群,且有 g  (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,1e (n)),计算d,使d=e-1(mod  (n))),公钥Pk={e,n};私钥Sk={d,p,q}。

注意,当0Mn时,M (n) =1(mod n)自然有:

MK (n)+1M(mod n), 而ed  1 (mod  (n)),易见(Me)d  M(mod n)

B.加密 (用e,n)明文:Mn 密文:C=Me(mod n).

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

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

注:1*, 加密和解密时一对逆运算。

2*, 对于0Mn时,若(M,n) ≠ 1,则M为p或q的整数倍,假设M=cp,由(cp,q)=1 有 M (q)  1(mod q) M  (q)  (p)  1(mod q)

有M (q) = 1+kq 对其两边同乘M=cp有

有M (q)+1=M+kcpq=M+kcn于是

有M (q)+1  M(mod n)

例子:若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)=1)。假设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)Bob寻找出两个大素数p和q

(2)Bob计算出n=pq和 (n)=(p-1)(q-1).

(3)Bob选择一个随机数e(0e  (n)),满足(e,  (n))=1

(4)Bob使用辗转相除法计算d=e-1(mod  (n))

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

密码分析者攻击RSA体制的关键点在于如何分解n。若分

解成功使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)c1×…×(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)不容易忠实地“copy”!!!

定义: (数字签名方案)一个签名方案是有签署算法与验

证算法两部分构成。可由五元关系组(P,A,K,S,V)来刻化:

(1)P是由一切可能消息(messages)所构成的有限集合;

(2)A是一切可能的签名的有限集合;

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

(4)任意k ∈K,有签署算法Sigk ∈ S且有对应的验证算法Verk∈V,对每一个

Sigk:p A 和Verk:P×A {真,假} 满足条件:任意x∈ P,y∈ A.有签名方案的一个签名:Ver(x,y)= {

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

2*.Verk为公开的函数,而Sigk为秘密函数。

3*.如果坏人(如Oscar)要伪造Bob的对X的签名,在计算上是不可能的。也即,给定x,仅有Bob能计算出签名y使得Verk(x,y)=真。

4*.一个签名方案不能是无条件安全的,有足够的时间,Oscar总能伪造Bob的签名。

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

注意:n和e为公钥;p,q,d为保密的(私钥)。对x∈P, Bob要对x签名,取k∈K。Sigk(x) xd(mod n)y(mod n)

于是

Verk(x,y)=真 xye(mod n)

(注意:e,n公开;可公开验证签名(x,y)对错!!也即是否为Bob的签署)

注: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)

然后检验

VerAlice(x,y)= 真

问题:若Alice首先对消息x进行加密,然后再签名,结果

如何呢?Y=SigAlice(eBob(x))

Alice 将(z,y)传给Bob,Bob先将z解密,获取x;然后用

VerAlice检验关于x的加密签名y。这个方法的一个潜在问

题是,如果Oscar获得了这对(z,y),他能用自己的签名来

替代Alice的签名

y=SigOscar(eBob(x))

(注意:Oscar能签名密文eBob(x),甚至他不知明文x也能做。Oscar传送(z,y )给Bob,Bob可能推断明文x来自Oscar。所以,至今人么还是推荐先签名后加密。)

6.EIGamal方案

EIGamal公钥密码体制是基于离散对数问题的。设P

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

若α为Zp中的本原元,有Zp* =α。若取β∈Zp*=Zp\{0},

如何算得一个唯一得整数a,(要求,0≤a≤ p-2),满足

αa=β(mod 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)

Bob解密,

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

注:1*.容易验证y2(y1α)-1=x(αa)k(αka)-1=x !!

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

Alice 要对明文x进行签名,她首先取一个秘密随机数k作

为签名

Sigk(x,k)=( ,  )

其中 =αk(mod p), =(x-a )k-1(mod p-1)

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

βα=αx(mod p)

要说明的是,如果正确地构造了这个签名,那么验证将

是成功的,因为

βα= αa αk (mod p)= αa+k (mod p)

由上面知道, =(x- a)k-1(mod p-1)可以推出

k=x- a(mod p-1)有a+kx(mod p)

所以 β  = αx (mod p)

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

有关RSA方面的内容,请访问网址:

数学建模的方法有哪些?

预测模块:灰色预测、时间序列预测、神经网络预测、曲线拟合(线性回归);

归类判别:欧氏距离判别、fisher判别等 ;

图论:最短路径求法  ;

最优化:列方程组  用lindo 或 lingo软件解 ;

其他方法:层次分析法 马尔可夫链 主成分析法 等 。

建模常用算法,仅供参考:

蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决 问题的算法,同时间=可以通过模拟可以来检验自己模型的正确性,是比赛时必 用的方法) 。

数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数 据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab 作为工具) 。

线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多 数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通 常使用Lindo、Lingo 软件实现) 。

图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算 法,涉及到图论的问题可以用这些方法解决,需要认真准备) 。

动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算 法设计中比较常用的方法,很多场合可以用到竞赛中) 。

最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些 问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助, 但是算法的实现比较困难,需慎重使用) 。

网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很 多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种 暴力方案,最好使用一些高级语言作为编程工具) 。

一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计 算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替 积分等思想是非常重要的) 。

数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分 析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编 写库函数进行调用) 。

图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文 中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问 题,通常使用Matlab 进行处理)。

数学建模竞赛的密码在哪修改啊,找不到登录的地点。。。

你是哪个省的啊?应该在数学建模**省的网页里面改吧,河北省是这样的,不知道你那是不是...不记得自己是在哪儿报名的吗?就在那个网页就行呗?