RSA加密及数字签名详解

名词解释 

欧拉函数 φ(n) 的定义是小于等于 n 的正整数中与 n 互素的数的个数。简单说,就是找到与给定正整数 n 互素的数有多少个。

RSA密钥生成

RSA公钥 Kpub(n,e) ,私钥 Kpr=d。生成秘钥过程可以分为六步:

①选择长度相等的p,q两个质数;

②计算n=p·q (n的长度至少为1024bit)

③计算 \phi(n) =(p-1)·(q-1) (小费马定理)

④随机选择e:0<e< \phi(n),且e和 \phi(n) 的最大公约数为1

⑤计算秘钥d,d是e的逆,即:d=e^-1mod \phi(n) ,且e和d满足 e*d=1mod\phi(n)

⑥计算出e和d后生成了公钥和秘钥对:

Kpub(n,e) =(n,e)

Kpr=(p,q,d)

RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

RSA加密解密步骤

得到密钥对(Kpub,Kpri)后 Alice 和Bob 双方利用秘钥对进行加密解密

加密:Enc(Kpub)=x^e mod n

解密:Dec(Kpri)=y^d mod n

RSA 签名

数字签名是一种公钥加密算法,对数字信息进行鉴别的方法,分为数字签名和验证;

RSA 加解密举例

x=4,通信过程如下:

消息x=4

1、选择 p=3,q=11;
2、计算 n=pq=33
3、计算φ(n)=(3-1)(11-1)=20
4、选择e=3
5、计算d==e^-1=7 mod 20

     5.1、过程:

        ed ≡ 1 (mod φ(n))

   ed - 1 = kφ(n)

        找到模反元素d,实质上就是对下面这个二元一次方程求解

         ed - φ(n)k = 1

        已知 e=3, φ(n)=20,

        3d - 20k = 1

        这个方程可以用"扩展欧几里得算法"求解,此处省略具体过程。总之算出一组整数解为 (d,k)=(7,1),即 d=7。

  (a)、3d - 20k = 1

(b)、将20对3取模得到的余数2代替20,则变为3d-2k=1;

  (c)、同理,将3对2取模得到余数1代替3,则变为d-2k=1

  当x的系数最后化为1时,

令k=0代入 (c),得d=1;

令d=1代入(b),  得k=1;

令k=1代入(a),得d=7 

此时即可得到公钥PK=(e,n)={3,33},私钥SK={d,n}={7,33},后面的加密和解密直接套相应公式即可。

  例如:79*d-3220*k=1

(a)79*d-3220*k=1(其中k为正整数);
(b)将3220对79取模得到的余数60代替3220,则变为79*d-60*k=1;
(c)同理,将79对60取模得到的余数19代替79,则变为19*d-60*k=1;
(d)同理,将60对19取模得到的余数3代替60,则变为19*d-3*k=1;
(e)同理,将19对3取模得到的余数1代替19,则变为d-3*k=1;

当d的系数最后化为1时,
令k=0,代入(e)式中,得d=1;
将d=1代入(d)式,得k=6;
将k=6代入(c)式,得d=19;
将d=19代入(b)式,得k=25;
将k=25代入(a)式,得d=1019,这个值即我们要求的私钥d的最终值。
此时即可得到公钥PK=(e,n)={79,3337},私钥SK={1019,3337},后面的加密和解密直接套相应公式即可。

6、 通信举例 

Alice

假如明文 x=4  

密文 y =x^e=4^3 mod 33=31;

Bob

收到密文31,然后解密   x= y^d=31^7 mod 33=4  得到明文 x=4

RSA 签名举例

Alice 签名

消息 x=4

生成签名   s=x^d= 4^7 mod 33 =16

Bob 验证签名

收到签名(x,s)=(4,16), s=16

x撇=s^e=16^3 mod 33 =4   

x撇=x mod 33= 4  

有效签名

RSA 字符串加密示例演示

英文数字化

将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:

则得到分组后的key的明文信息为:11,05,25。

明文加密

用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由C≡Me(mod n)得:

因此,得到相应的密文信息为:11,31,16。

密文解密

用户B收到密文,若将其解密,只需要计算,即:

用户B得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。

它的原理就可以这么简单地解释!

  当然,实际运用要比这复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机高速完成。

参考:用实例给新手讲解RSA加密算法 - 中国金融认证中心

参考:RSA加密及数字签名详解 - 知乎

参考:【CRYPTO】RSA | 狼组安全团队公开知识库

参考:RSA算法原理(二) - 阮一峰的网络日志

  • 28
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值