iOS逆向 -- RSA加密探究

密码学说起:

历史:两千年前 凯撒大帝发明

base64的雏形 

容易破解 【信息论】

间谍很危险

一直到1976年 迪菲、赫尔曼提出了一个构想 不通过密钥交换  1977 rsa诞生

RSA加密探究

对称加密的弊端 还有RSA的历史不在这里赘述,有兴趣的同学课自行查阅资料

在开始之前需要一定的数学知识,在这里跟大家一起复习一下:

取模运算

3%17= 3   、 3^2 %17= 9 、3^3 %17= 10 、3^4 %17= 13 、3^5 %17= 5  。。。

3^n % 17 = 12 请问n = ?,同学们可能发现了 取模的时候我们正向很容易算出答案,但是反向不好运算且有可能有多个解。

在这里 我们管3 叫做 17的原根。

互质关系 (如果两个正整数,除了1之外没有其他公因数,我们就称这两个数为互质关系)

例如 :1跟8、 3跟8 、5跟8、7跟8

有个小问题, 小于8的并且跟8为互质关系的正整数有几个,答案当然就是4

计算该值的方式就叫做欧拉函数(给定任意正整数n,在小于n的正整数之中有多少个与n为互质关系)用φ(n)表示

φ(8) = 4;

那么再来回忆一下质数的概念 - (在大于1的自然数中,除了1和它本身以外不再有其他因数。

所以我们就能得出结论:如果当n是质数  φ(n)=n-1 例如5: 与5互质的 1 、2、 3、4

上面就是欧拉函数的第一个特点 

另外欧拉函数还有个特点就是φ(A*B)=φ(A)* φ(B)  例如  φ(56) =  φ(8) *  φ(7) = 4 * 6 = 24

通过上面两个特点 我就还能得出:

如果N是两个质数P1 和 P2的乘积则

φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1) 例如  φ(15) =  φ(3) *  φ(5) = 2 * 4 = 8

以上还算是比较简单

接下来有了欧拉函数,我们再来看欧拉定理 (如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。 -- 这是定理,大家不用想着去论证,只要知道这是真的就可以,当然不信的话可以找几个数据测试一下

也就是  (m^φ(n) - 1) % n ≡ 0    => 

m^φ(n) % n ≡ 1

因为m 与n 互为质数 所以m的k次方与n也互为指数 于是

m^kφ(n) % n ≡ 1 =>

 m^kφ(n)+1 % n ≡ m

上面的等式先留着 一会儿要用

下面讲一下模反元素的概念

如果两个正整数e和x互质,那么一定可以找到整数d,使得 ed-1 被x整除。

那么d就是e对于x的“模反元素”  举个例子5 和 3互质 (5*2 - 1) % 3 ≡ 0 那么2 就是5相对3的模反元素,当然不止一个,可以有很多个

公式表达为

e*d  mod  x ≡  1也就相当于  

e*d  ≡  k*x + 1 这时候我们再把上面的欧拉定理推导公式拿出来

 m^(kφ(n)+1) % n ≡ m

当 x = φ(n)的时候 也就是 m^e*d % n ≡ m

稍微理一下:

m < n , x = φ(n),e 与 x互质 d是e对于x的模反元素 的时候 等式成立

到这里非对称加密已经有了雏形,m经过一系列运算后还能得到m, 但是如何拆分这个公式呢

迪菲赫尔曼密钥交换

来到最初的取模运算

3 ^13mod17  = 6

6^ 15 mod17 = 10 = 3 ^ 13 ^15 mod 17

接下来做一下等式对应 m = 3  n = 17 e  = 13  d = 15中间值 c = 6

于是 m^e mod n = c

c ^ d mod n = 10 = m^e^d mod n

也就是c ^d mod n = m^e^d mod n

再结合我们的推导公式m^e*d % n ≡ m

于是乎  m^e mod n = c    加密

c ^d mod n = m 解密

公钥 n 和 e 

私钥 n 和 d 

铭文m, 密文 c

 

说明:

1、n会非常大,长度一般为1024个二进制位。(目前人类已经分解的最大整数,232个十进制位,768个二进制位)

2、由于需要求出φ(n),所以根据欧函数特点,最简单的方式n 由两个质数相乘得到: 质数:p1、p2

Φ(n) = (p1 -1) * (p2 - 1)

3、最终由φ(n)得到e 和 d 。

总共生成6个数字:p1、p2、n、φ(n)、e、d

关于RSA的安全:

除了公钥用到了n和e 其余的4个数字是不公开的。

目前破解RSA得到d的方式如下:

1、要想求出私钥 d  。由于e*d = φ(n)*k + 1。要知道e和φ(n);

2、e是知道的,但是要得到 φ(n),必须知道p1 和 p2。

3、由于 n=p1*p2。只有将n因数分解才能算出。

 

大概原理就是这样,mac上有自带的OpenSSL 同学们可以根据指令自己耍一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值