一个简单示例让你秒懂RSA非对称加密原理

我们知道RSA非对称算法的基本概念就是公私钥。消息通过公钥加密,只有私钥能解密,公钥不能解密;消息通过私钥加密,也只有公钥能解密,私钥不能解密。而且RSA算法的公钥和私钥是成对存在的,理论上,可以通过公钥推算出私钥,也可以通过私钥算出公钥。(下文会有推算过程。)实际使用时,公私钥足够复杂(超级大质数),使得公钥推算私钥可能需要N年时间,甚至更久,就使得RSA“变得”无法被破解。下面举一个超级简单的例子,让我们能秒懂其中奥妙。

一、加解密演算过程

首先,我们找一对简单的公私钥,用于验证加解密过程。

        公钥=(n,e)=(3233,17)

        私钥=(n,d)=(3233,2753)

其次,加、解密的过程就是对下面的两个公式的运算。

        公钥加密(解密)公式:m^e ≡ c(mod n) (m为需要加密的消息,c为加密后的密文)

        私钥加密(解密)公式:c^d ≡ m(mod n)

接下来,我们假设使用公钥对信息100进行加密,然后用私钥解密,借助计算器进行验证如下。

        将公钥带入可得 m^17 ≡ c(mod 3233)(注:c必然小于3233) => c = (m^17) mod 3233

        密文c = (100^17) mod 3233 = 1773

        使用私钥进行密文1773进行解密,由上述公式可得:

        解密的消息 m = (c^d) mod 3233 = 1773^2753 mod 3233 = 100

相信大家看到这里,就能明白RSA加密算法是怎么回事了。

二、公钥推算出私钥的过程

还是以上述密钥对举例说明。

公钥=(n,e)=(3233,17)

私钥=(n,d)=(3233,2753)

欧拉函数 φ(n)的计算

定义:φ(n) 表示在小于 n 的正整数之中,与 n 构成互质关系的数的个数。

如果 n = p * q,p 与 q 均为质数,则

φ(𝑛)=φ(𝑝𝑞)=φ(𝑝)φ(𝑞)=(𝑝−1)(𝑞−1)

n = 3233 = p*q(p、q均为质数),我们很容易从100以内的质数中挑出p=53和q=61

私钥d,满足于e*d≡1(mod φ(n) ) =>17*d ≡ 1(mod (53-1)(61-1)) ≡ 1 mod 3120

即17*d -1 = 3120*k(k为整数)

左右调换得

式① :17*d -3120*k = 1

根据欧几里得算法(又称辗转相除法)

3120对17取模得9,代替3120,得

式② 17*d -9*k = 1

17对9取模得8,代替17,得

式③ 8*d -9*k = 1

9对8取模得1,代替9,得

式④ 8*d - k = 1

当k的系数先化为1时,令d=1,再带入(注:当d的系数先化为1时,令k=0,再带入)

令d = 1,代入式④,得k = 7

将k = 7,代入式③,得d = 8

将d = 8,代入式②,得 k = 15

将k = 15,代入式①,得d = 2753,这个就是我们的私钥d

此时,我们从公钥信息里的n推算出了私钥d,这意味着私钥被破解了。然而,事情并不是这样简单,首先私钥的破解或者说生成,是因为我们知道p和q。如果我们要生成密钥对,p和q是我们选定的,所以私钥能正常生成。但是如果我们从n(巨大数值)里求p和q,这一步几乎是不可能的。上述例子之所以能破解私钥,是因为n太小,很容易就可以从100里找出两个质数。所以说理论上可以从公钥破解私钥,但是由于运算量巨大,实际并不能破解1024bit以上的私钥。

ok,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值