RSA算法学习笔记

请添加图片描述

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。

RSA是被研究得最广泛的公钥算法,从提出后经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

一、先导知识

素性检测
随机数生成
中国剩余定理

二、算法流程

1. 密钥生成

1.1 选取大素数p、q

选取两个大素数 p p p q q q,保密。

1.2 计算乘积n、欧拉函数值 φ ( n ) \varphi(n) φ(n)

计算 n = p × q n=p \times q n=p×q,计算 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p1)(q1),其中 φ ( n ) \varphi(n) φ(n) n n n的欧拉函数值。

1.3 选取整数e

选取一个整数 e e e,满足 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n),且 g c d ( φ ( n ) , e ) = 1 gcd(\varphi(n),e)=1 gcd(φ(n),e)=1

1.4 计算乘法逆元d

计算 d d d,满足 d ⋅ e ≡ 1    m o d    φ ( n ) d \cdot e \equiv 1 \; mod \; \varphi(n) de1modφ(n)

1.5 生成密钥

{ e , n } \{ e, n \} {e,n}为公开钥,以 { d , n } \{d , n \} {d,n}为秘密钥。

2. 加密

加密时需要将明文比特串进行分组,分组长度小于 log ⁡ 2 n \log_{2}n log2n,然后对每个明文分组 m m m作加密运算。

c ≡ m e    m o d    n c \equiv m^e \; mod \; n cmemodn

3. 解密

对密文分组的解密运算为

m ≡ c d    m o d    n m \equiv c^d \; mod \; n mcdmodn

三、计算问题

密钥的产生

产生密钥时,需要考虑两个大素数p和q的选取。寻找大素数时,一般是先随机选取一个大的奇数,然后使用素性检测算法检验这一奇数是否为素数,若不是,则重新选取另一个大奇数,进行素性检测,知道找到素数为止。

选定 p p p q q q后,需要考虑 e e e的选取和 d d d的计算,这一问题可由扩展欧几里得算法完成。

算法速度提升

利用中国剩余定理,可以极大的提高解密运算的速度。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值