预备数论知识

互质关系

如果两个正整数,除了1以外,没有其他公因子,那么就称这两个数是互质关系

比如:4和7,13和61

欧拉函数

思考:任意给定整数n,在小于等于n的正整数中,有多少个数与n构成互质关系?

计算这个值的方法即欧拉函数,以\(φ(n)\)表示

第一种情况

如果n=1,则\(φ(n)\)=1,因为1和任何数互质

第二种情况

如果n是质数,则\(φ(n)\)=n-1;易证

第三种情况

如果n是质数的某一次方,即:$$n=p^k \quad(p为质数,k为大于1的整数)$$

则:$$φ(pk)=pk-p{k-1}=pk(1-\frac{1}{p})$$

因为只有当一个数的公因数中不包含质数p,才可能与n互质,而包含质数p的数一共有\(p^{k-1}\)个

第四种情况

如果n可以分解为两个质数的整数之积,即:$$n=p_1 * p_2$$

则:$$φ(n)=φ(p_1p_2)=φ(p_1k)φ(p_2k)$$

第五种情况

任意一个大于1的整数都能够因式分解为一系列质数的乘积:$$n=p_1{k1}p_2{k2}···p_m^{km}$$

即:$$φ(n)=φ(p_1{k1})φ(p_2{k2})···φ(p_m^{km}) $$

即:$$φ(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})···(1-\frac{1}{p_m})$$

欧拉定理

如果两个正整数an互质,则n的欧拉函数\(φ(n)\)可以使得下面的等式成立:

\[a^{φ(n)}\equiv1(mod \quad n)
\]

也就是说,a的\(φ(n)\)次方被n除的余数为1。或者说,a的\(φ(n)\)次方减去1,可以被n整除。

假设正整数a与质数p互质,因为质数p的\(φ(p)\)等于p-1,则欧拉定理可以写成

\[a^{p-1}\equiv1(mod \quad n)
\]

模反元素

如果两个正整数an互质,那么一定可以找到整数b,使得 a*b-1n整除,或者说a*bn除的余数是1。

\[a*b\equiv1(mod \quad n)
\]

这个时候b称之为a的模反元素

RSA算法

RSA是一种公钥密码算法,简单来说就是:

加密:

密文=明文^E mod N

也就是说RSA的密文是代表明文的数字的E次方求mod N得结果

解密:

明文=密文^D mod N

对密文得数字得D次方求mod N就可以得到明文

例:现在Alice要向Bob发送信息

  1. 选择两个质数p=63q=71

  2. 计算n=p*q=4473

  3. 计算L=lcm(p-1,q-1),L是(p-1)(q-1)的最小公倍数,所以求得L=2170

  4. 选择一个随机整数\(e (1<e<L)\),并且\(e和L互质\),也就是要找出满足gcd(e,L)=1得数e,也就是eL的最大公约数为1,可以使用伪随机生成器,通过伪随机生成器在1<e<L得范围内生成e得侯选数,然后判断是否满足gcd(e,L)=1,求最大公约数可以使用欧几里得的辗转相除法。

    这里选e=13

  5. 计算\(e对L的模反元素d\),即\(e*d \equiv1(mod \quad L)\)

    即:\(e*d-1=k·L\)

  6. 解方程:\(13x-2170y=1\),其中xy为整数

def ext_euclid(a,b):
d=b//a+1
while(d>0):
if (a*d-1)%b==0:
k=(a*d-1)//b
print("d=%d,k=%d"%(d,k))
d=0
else:
d+=1
if __name__ == '__main__':
ext_euclid(13,2170)

最后求得:(167, 1),所以得到d=167,k=1

  1. (e,n)和(d,n)封装成公钥和私钥,即公钥(13,4473)和私钥(167,4473)

  2. 明文:m(m<n,且为整数),这里假设m=55,密文为c

    \[m^e\equiv c( mod \quad n)
    \]

    即55的13次方除以4473的余数等于c,:

    \[55^{13}\equiv c(mod \quad4473)
    \]

得到:c=3331

  1. 解密信息

    \[c^d \equiv m(mod\quad n)
    \]

    m等于3331的2003次方除以4473的余数:

    \[3331^{167} \equiv m(mod \quad 4473)
    \]

    求得:m=55

对RSA的攻击

破译者能够获取的信息:密文(m)、公钥(e,n)

破译者不知道的信息:明文(c)、私钥中的(d)、q、p、L

解密过程如下,也就是说我们只要嫩巩固获得D,那么就能破译密文了

明文=密文^D mod N

暴力破解获得 D

在有限的时间和有限的计算能力下,只要D的长度在安全范围内,难以实现;

通过en求出D

e*D mod L=1

要想获得D的值,就得知道L的值是多少

L=lcm(p-1,q-1)

然后得知道pq的值

N=p*q

所以只要能够对N进行因数分解求出pq,也就能够破译密文了

而目前还未能够有发现对大整数进行质数因数分解的高效算法,目前已知能够分解的最大长度为768位。

中间人攻击

中间人攻击就是主动攻击者混入真正的发送者和接收者之间,对发送者伪装成接收者,对接收者伪装成发送者。

参考:

《图解密码技术》:https://item.jd.com/11942019.html

阮一峰的网络日志:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

密码学之RSA基础的更多相关文章

  1. 【密码学】RSA密钥长度、明文长度和密文长度

    本文介绍RSA加解密中必须考虑到的密钥长度.明文长度和密文长度问题,对第一次接触RSA的开发人员来说,RSA算是比较复杂的算法,天缘以后还会补充几篇RSA基础知识专题文章,用最简单最通俗的语言描述RS ...

  2. 【密码学】RSA算法过程-求解密钥

    1.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q. 令k=ϕ(n)=(p−1)(q−1),原理见2的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1] ...

  3. 【密码学】RSA公钥密码体制

    RSA公钥密码体制是美国麻省理工学院(MIT)的三位科学家Rivest.Shamir.Adleman于1978年提出的,简称RSA公钥秘密系统.实际上,RSA稍后于MH背包公钥密码实用系统,但它的影响 ...

  4. 【密码学】RSA算法原理

    RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密. RSA的算法涉及三个参数,n.e1.e2. 其中,n是两个大质数p.q的积,n的二进制 ...

  5. 【密码学】RSA加密 kotlin实现方法(支持任意字节长度)

    这个编辑器不支持kotlin,尴尬了···· 算了,就用Java来弄吧 val 定义常量 var 定义变量 具体kotlin的开发手册详见:http://www.runoob.com/kotlin/k ...

  6. 跨越千年的RSA算法

    转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

  7. HTTPS 为什么更安全,先了解一下密码学的这些原理

    HTTPS 是建立在密码学基础之上的一种安全通信协议,严格来说是基于 HTTP 协议和 SSL/TLS 的组合.理解 HTTPS 之前有必要弄清楚一些密码学的相关基础概念,比如:明文.密文.密码.密钥 ...

  8. Java 密码学算法

    Java 密码学算法 候捷老师在< 深入浅出MFC 2e(电子版)>中引用林语堂先生的一句话: 只用一样东西,不明白它的道理,实在不高明 只知道How,不知道Why,出了一点小问题时就无能 ...

  9. 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)

    摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...

随机推荐

  1. 二叉树入门(洛谷P1305)

    题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ...

  2. mysql性能查看 命中率 慢查询

    网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...

  3. PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题

    PHP CURL与file_get_contents函数都可以获取远程服务器上的文件保存到本地,但在性能上面两者完全不在同一个级别,下面我先来介绍PHP CURL或file_get_contents函 ...

  4. [CSP-S模拟测试]:斯诺(snow)(数学+前缀和+树状数组)

    题目传送门(内部题37) 输入格式 第一行一个整数$n$,表示区间的长度. 第二行一个长度为$n$的只包含$0,1,2$的字符串,表示给出的序列. 输出格式 一行一个整数,表示革命的区间的数量. 样例 ...

  5. [CSP模拟测试43、44]题解

    状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一 ...

  6. 启发式分治:2019牛客多校第三场 G题 Removing Stones

    问题可以转换为求有多少个区间数字的总和除2向下取整大于等于最大值.或者解释为有多少个区间数字的总和大于等于最大值的两倍(但是若区间数字总和为奇数,需要算作减1) 启发式分治: 首先按最大值位置分治,遍 ...

  7. python作业/练习/实战:3、实现商品管理的一个程序

    作业要求 实现一个商品管理的一个程序,运行程序有三个选项,输入1添加商品:输入2删除商品:输入3 查看商品信息1.添加商品: 商品名称:xx 商品如果已经存在,提示商品已存在 商品价格:xx数量只能为 ...

  8. 抓取猫眼TOP100的数据

    import requests import re import json from multiprocessing import Pool from multiprocessing import M ...

  9. Linux NIO 系列(04-1) select

    目录 一.select 机制的优势 二.select API 介绍与使用 2.1 select 2.2 fd_set 集合操作 2.3 select 使用范例 三.深入理解 select 模型: 四. ...

  10. Spring Cloud服务安全连接

    Spring Cloud可以增加HTTP Basic认证来增加服务连接的安全性. 1.加入security启动器 在maven配置文件中加入Spring Boot的security启动器. <d ...