美文网首页
密码学第二次实验报告:RSA算法

密码学第二次实验报告:RSA算法

作者: 一包 | 来源:发表于2019-01-09 15:51 被阅读0次

实验题目

RSA算法

实验目的

了解公钥算法基本原理和RSA算法的原理。了解RSA算法在数据加密和数字签名中的应用。了解RSA算法中大和数分解的困难性,从而理解单向函数的
内涵。

实验要求

  1. 编程实现素数的选择判断
  2. 编程实现模逆算法。
  3. 编程实现快速模指运算。
  4. 编程实现RSA算法。
  5. 编程实现利用RSA进行数据加解密。
  6. 实现利用RSA对较大数据进行加解密(选作)
  7. 实现简单的GUI界面

实验原理与理论基础

RSA算法:

简介

RSA算法的单向函数基于质因数分解问题。
质因数分解问题指数论中的一个简单事实:计算两个素数的乘积很简单,但要把这个乘积重新分解为两个素数却很难。

步骤

RSA算法由三部分构成:密钥生成算法,加密算法,解密算法

1. 密钥生成算法

随机生成两个素数 p,q
计算 n=pq
计算欧拉函数 φ(n)=(p−1)(q−1)φ(n)=(p−1)(q−1)
选取一较小的与φ(n)φ(n)互质的正整数e。那么(n, e)为密钥对中的公钥

计算e在模φ(n)φ(n)下的数论倒数d,d≡e−1modφ(n)d≡e−1modφ(n),那么(n, d)为密钥对中的私钥

2. 加密算法

计算
C=fe(M)=Memodn
C=fe(M)=Memodn

其中M为明文,(n, e)为公钥,C为密文

3. 解密算法

计算
M=fd(C)=Cdmodn
M=fd(C)=Cdmodn

其中C为密文,(n, d)为私钥,M为明文
根据加密、解密过程中n、e、d三数扮演的角色,我们把n称为公共模数,把e称为公共指数,把d称为私有指数。

数学基础:

同余

两个整数a、b,如果他们除以正整数m的余数相等,那a和b同余。用公式来表示就是:

amodm=bmodm⇔a≡bmodm

数论倒数

普通算术运算中,如果ab=1ab=1,那么我们说a和b互为倒数。类似地,在同余式中,如果ab≡1modmab≡1modm ,我们说在模m下,a和b互为数论倒数,或者说乘法逆元。有时候也记作a≡b−1modma≡b−1modm或者b≡a−1modm

欧拉函数

欧拉函数φ(n)φ(n),也就是对于正整数n,小于或等于n且与n互质的正整数的个数。比如φ(6)φ(6),不超过6并且跟6互质的有1和5两个数,则φ(6)=2φ(6)=2。
特别地,对于任意素数p,所有小于p的正整数都跟它互质,所以φ(p)=p−1φ(p)=p−1。
另外,如果p和q均为素数,那么对于整数n=pqn=pq,有φ(n)=φ(p)φ(q)=(p−1)(q−1)φ(n)=φ(p)φ(q)=(p−1)(q−1)

欧拉定理

如果a和m都是整数,并且互质,那么有:
···
aφ(m)≡1modm
···

费马小定理

如果a为整数,p为素数,且a与p互质(也就是p不能整除a),那么:

ap−1≡1modp

中国剩余定理

中国剩余定理常用于一元线性同余方程组的求解,在这里我们介绍它的一个推论。
如果 p, q 互质,n = p * q,则对任意整数 x 和 a
···
{x≡amodpx≡amodq⇔x≡amodn
···

实验过程和结果测试

素数测试

1. 平方根测试:如果n是素数,则 1 模 n 的平方根是 +1 和 -1

如果n是合数,则 1 模n 的平方根除了 +1 和 -1外,还可能有其他值。

  • 输入123,可以看到123没有通过平方根测试


    image.png
image.png
  • 输入13,可以看到13通过平方根测试


    image.png

2.费马测试:

如果n是素数,则a^n = a mod n
如果n是合数,则a^n = a mod n 以一定概率成立
比如561是合数,但它可以通过费马测试,有许多这样的数存在,所以要配合其他素数判定规则
注意,不能使用a^(n-1) = 1 mod n 来判断,因为 a 不一定与n 互素

  • 输入123,测试次数为123的一半,可以看到123费马测试不通过



    image.png
  • 输入17,通过费马测试


    image.png

3. miller素数测试

  • 输入123


  • 输入17


    image.png

RSA算法的加密与解密

  • 输入p,q,可算出n和n的欧拉函数t


    image.png
  • 输入e,判断e是否与t互素,如果不互素重新输入,如果互素,则计算得出d


    image.png
    image.png
  • 输入1,进行加密


    image.png
  • 输入2,进行解密


  • 输入0,退出

实验分析与反思

  • 平方根测试:一开始不知道怎么做,后来仔细想了一下,按老师密码学例子那里的原理一步一步写,因为负数和整数是一样的,所以负数部分没有,因此计算出结果为1的有几个,如果超过一个就判断为合数,否则为素数。
  • 费马测试:一开始想着说要随机生成a,那就得随机生成不同的a,在这里卡了一段时间,后来写出来了,就让他随机生成后的a和之前的比较,如果一样就舍弃,否则加入数组。然后这里测试的次数用的是输入的n的一半,一开始想着固定100次,但是如果输入的n太小,就会做很多无用功,所以选择了n的一半。
  • miller测试:一开始想自己写,但实在写不出来了,所以后来网上找了代码,并看懂。
  • rsa算法:本来自己把需要的函数都写好了,打算输入明文然后程序自动生成p和q,还有e和d,但是写了很久一直有错误,后来因为时间原因只能放弃了,采用手动输入p,q,e的方法,就很简单了,一下子就写好了。

相关文章

  • 6.1 密码学专题 - 非对称加密算法 - RSA 算法

    密码学专题 - 非对称加密算法 - RSA 算法 6.1 RSA 算法 第一个较完善的非对称加密算法 RSA,它既...

  • 密码学第二次实验报告:RSA算法

    实验题目 RSA算法 实验目的 了解公钥算法基本原理和RSA算法的原理。了解RSA算法在数据加密和数字签名中的应用...

  • 安防之详谈RSA原理

    密码学发展史 讨论RSA原理之前,我们先了解一下密码学的发展史。因为RSA最终形成的数学算法,也是不断演变而来的。...

  • RSA的原理及简单终端运用

    密码学发展史 讨论RSA原理之前,我们先了解一下密码学的发展史。因为RSA最终形成的数学算法,也是不断演变而来的。...

  • RSA原理探究

    密码学发展史 讨论RSA原理之前,我们先了解一下密码学的发展史。因为RSA最终形成的数学算法,也是不断演变而来的。...

  • 非对称加密算法

    扩展欧几里得算法 DH密钥交换 ECC椭圆曲线加密原理参考1 椭圆曲线密码学简介 椭圆曲线密码学的简单介绍 RSA...

  • iOS加密方法base64,AES,DES,MD5,RSA

    加密算法的分类 base64 编码格式 密码学演化 "秘密本"-->RSA 常见的加密算法1)消息摘要(单向散列函...

  • 2017年07月 第一周

    密码学算法介绍:本文中主要介绍RSA和ECC两种算法,当今互联网主要用于秘钥协商。 http://www.free...

  • 2019-10-26

    今天做了rsa密码学实验!

  • RSA算法原理(作者: 阮一峰)

    RSA算法原理(一) RSA算法原理(二) RSA C算法实现【 看雪安全论坛】

网友评论

      本文标题:密码学第二次实验报告:RSA算法

      本文链接:https://www.haomeiwen.com/subject/akchcqtx.html