从0开始RSA 逐步变成RSA高手 (一) RSA数论基础

环境配置

### python3 下载

https://www.python.org/downloads/windows/

### sagemath下载

https://mirrors.aliyun.com/sagemath/win/index.html

### sagemath在线网站

https://sagecell.sagemath.org/


## python rsa安装常用的库
安装 libnum 库
pip install libnum
安装 pycryptodome库 Crypto
pip install pycryptodome -i https://pypi.mirrors.ustc.edu.cn/simple/
安装 gmpy2库
pip install gmpy2 -i https://pypi.mirrors.ustc.edu.cn/simple/
安装 sympy库
pip install sympy -i https://pypi.mirrors.ustc.edu.cn/simple/

前置知识

明文  m:就是待加密的文本啦,一般也就是我们的flag。

密文 C:加密完成后的密文,一般题目会给你,我们要做的就是根据密文解密出明文。

公钥 e(加密钥):用来加密的密钥,是一个整数,是公开的。

两个大素数 p,q:RSA加密的关键部分,一般不会告诉你。我们选取两个大素数并计算它们的乘积,得到n=p*q。后面会用p,q,n来加密解密。由于p,q非常大,想要对n进行因式分解得到p,q非常困难,这也确保了RSA的安全性。

私钥 d(解密钥):用来解密,一般不会告诉你,d满足e*d mod (p-1)(q-1)=1,所以我们只要知道e和p,q就可以把d算出来。

数论基础

欧几里得算法

欧几里得算法是数论中最基本的一个技巧,它可以简单地求出两个正整数的最大公因子。首先,我们需要一个简单的定义:两个整数是互素的,当前仅当它们只有一个正整数公因子1。

对于整数a,b,c,用gcd(a,b)表示a与b的最大公因子。存在gcd(a,b)=c,则称a与b的最大公因子为c,另外gcd(0,0)=0

例子

gcd(60,24)=12

gcd(17,16)=1

模的运算

若a是一个整数,n是一个正整数,则定义a除以n所得的余数为a模n。整数n称为模数。

若(a mod n) = (b mod n),则称整数a和b是模n同余的,表示为a ≡ b(mod n)

同余性质

  1. 若a|(a-b),则a ≡ b(mod n)
  2. 若a ≡ b(mod n),则b ≡ a(mod n)
  3. 若a ≡ b(mod n),b ≡ c(mod n),则a ≡ c(mod n)
欧几里得算法回顾

欧几里得算法基于下面的定理:对任意整数a,b,且a ≥ b ≥ 0,有

gcd(a,b) = gcd(b,a mod b)

例子gcd(55,22) = gcd(22,55 mod 22) = gcd(22,11) = 11

扩展欧几里得算法

扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。已知整数x,y,扩展欧几里得算法可以在求得x,y 的最大公约数的同时,能找到整数s、t(其中一个很可能是负数),使它们满足贝祖等式: sx+ty=gcd(x,y) 。

扩展欧几里得算法可以用来计算模反元素(也叫模逆元)。
定义:设m是一个正正整数,a是一个整数,如果存在整数 b使得ab ≡ 1(mod n),成立,则a叫做模n的可逆元,b叫做模n逆元。在模m的意义下(即n的完全剩余系中)b存在且唯一。

费马定理和欧拉定理

费马定理

若p是素数,a是正整数且不能被p整除,则

a^{^{p-1}} ≡ 1(mod p)

费马的另一种表现形式为

a^{^{p}} ≡ a(mod p)

欧拉函数

先引入一个概念f(n),f(n)是指小于n且与n互素的正整数个数。

简单翻译一下

一个整数n,在[1,n]的集合中与n互质数的个数。

对于质数p,有f(p) = p - 1

假设有两个质数p和q,p ≠ q ,n = pq,则有

f(n) = f(pq) = f(p)f(q) = (p - 1)(q - 1)

关于f(n) = f(p)f(q)证明

#关于f(n) = f(p)f(q)证明


#考虑小于n的正整数集合{1,...,(pq-1)}

#不与n互素的集合{p,2p,...,(q - 1)p}和{q,2q,...,(p - 1)q},之所以得出这个结果,是因为任何数能够整除n的整数都必须整除素数p或q;此外,这两个集合是非重叠的:因为p和q都是素数,我们发现第一个集合中不存在一个为q的整数倍的数,第二个集合不存在一个为p的整数倍的数。因此两个集合中共有(q - 1)(p - 1)个整数,所以
f(n) =(pq - 1) - [(q - 1) + (p - 1)]

f(n) =pq - (p + q) + 1

f(n) =(p - 1)(q - 1)

f(n) =f(p)f(q)

欧拉定理

欧拉定理说明,对任意互质的a和n,有

a^{f(n)} ≡ 1(mod n) 

中国剩余定理

这里推一篇文章,我就不解释了

中国剩余定理(超详细讲解)-CSDN博客

离散对数

初等数论笔记(7):离散对数和指数的算术 - 知乎 (zhihu.com)

本人某时做的笔记

本人只是个菜鸡,勿喷,喜欢的话可以点点关注,点点赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值