实验4_RSA

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

密码学实验报告(四):RSA 公钥密码体制实验

(一)实验内容:

1、 选择并计算出两组RSA 算法参数, 填写表格1。

2、 编程实现扩展欧几里德算法。

3、 编程实现模幂运算。

4、 编程计算欧拉函数Ø(n),利用编写的函数计算100~10000的自然数的欧拉函数, 输出结

果到文本文件中. 每行一个数.

(二)实验原理:

1、扩展欧几里得算法实现原理:

有两个数a,b ,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。 具体流程如下:

1. (X1, X2, X3)←(1, 0, f); (Y1, Y2, Y3)←(0, 1, d);

2. if Y3=0 then return X3=gcd(f, d);no inverse;

3. if Y3=1 then return Y3=gcd(f, d);Y2=d-1 mod f;

4.

33/Q X Y =⎢⎥⎣⎦

;

5. (T1, T2, T3)←(X1-QY1, X2-QY2, X3-QY3);

6. (X1, X2, X3)←(Y1, Y2, Y3);

7. (Y1, Y2, Y3)←(T1, T2, T3);

8. goto 2

2、模幂算法原理:

首先,我们可以根据定义,用for 循环b 次,暂存值从1开始每次乘a ,结果模n ,得到的即模幂结果;

为实现更高的效率,可利用经典的Montgomery 算法,将模运算转化为乘法运算和移位运算,从而避免计算模运算:

例如求D=C**15 % N,由于:a*b % n = (a % n)*(b % n) % n,所以:

C1 =C*C % N =C**2 % N

C2 =C1*C % N =C**3 % N

C3 =C2*C2 % N =C**6 % N

C4 =C3*C % N =C**7 % N

C5 =C4*C4 % N =C**14 % N

C6 =C5*C % N =C**15 % N

即:对于E=15的幂模运算可分解为6 个乘模运算,归纳分析以上方法可以发现对于任意E,都可采用以下算法计算D=C**E % N:

D=1

WHILE E>=0

IF E%2=0

C=C*C % N

E=E/2

ELSE

D=D*C % N

E=E-1

RETURN D

继续分析会发现,要知道E 何时能整除 2,并不需要反复进行减一或除二的操作,只需验证E 的二进制各位是0 还是1 就可以了,从左至右或从右至左验证都可以,从左至右会更简洁,设E=Sum[i=0 to n](E*2**i),0<=E<=1,则:

D=1

FOR i=n TO 0

D=D*D % N

IF E=1

D=D*C % N

RETURN D

这样,模幂运算就转化成了一系列的模乘运算。

3、欧拉算法原理:

根据欧拉函数的定义, Ø(n)是指是小于或等于n的正整数中与n互素的数的个数,可以从1循环至n-1判断其中与n互质的数的个数,但为使算法效率更高,我们可以应用如下性质: 若p是n的一个素数因子, 则有:

Ø(n) = Ø(n/p)*p其中: ( n/p ) % p = 0

Ø(n) = Ø(n/p)*(p-1) 其中: ( n/p ) % p != 0

则成倍减少了计算n欧拉函数值的运算量;

(三)函数说明:

1、扩展欧几里得算法:

int ext_euclid(int a, int b, int &x, int &y);

函数返回int型值,含义为参数(a,b)的最大公约数,x,y均是中间系数,最终得到的x 是b模n的逆;

实现过程:首先判断是否满足a>b,不满足则a,b进行交换;

然后运用辗转相除法对a,b进行迭代运算,并利用q = saver / nowr; r = saver % nowr; x = savex - q * nowx; y = savey - q * nowy;每次对四个值进行更新;r=0时循环结束最终返回倒数第二层的q值即a,b的最大公约数,x,y 即所求的逆;

2、模幂算法:

int modular_exponentitation(int a, int b, int n);

函数返回int型值,含义为a^b(mod n)的结果;三个参数即上式所示;

实现过程:如实验原理中所示:流程图大致如下:

3、欧拉函数:

int Eular(int n)

输出即n欧拉函数的值;实现过程如原理所示;

(四)实验结果: 1、实验表格如下: p

q

n

Ø(n) e

d

报文(ascii 码)

报文MD5值

签名结果

11 13 143 120 7 103 121,117,113,105,97,110

3ABE2E24354B4C4E 9595C2DF7F72C76F 14

13 23 299 264 5 53 121,117,113,105,97,110

3ABE2E24354B4C4E 9595C2DF7F72C76F

29

平台截图如下:

2、扩展欧几里得函数运行截图如下:

相关文档
最新文档