RSA密码算法学习笔记

79 阅读2分钟

请添加图片描述

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

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

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

一、先导知识

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

二、算法流程

1. 密钥生成

1.1 选取大素数p、q

选取两个大素数ppqq,保密。

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

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

1.3 选取整数e

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

1.4 计算乘法逆元d

计算dd,满足de1  mod  φ(n)d \cdot e \equiv 1 \; mod \; \varphi(n)

1.5 生成密钥

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

2. 加密

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

cme  mod  nc \equiv m^e \; mod \; n

3. 解密

对密文分组的解密运算为

mcd  mod  nm \equiv c^d \; mod \; n

三、计算问题

密钥的产生

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

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

算法速度提升

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