RSA公钥算法详解

1970年左右科学家们开始思考公钥加密系统的可能性。经过科学家多年的研究,终于在1977年时,来自MIT的Ron Rivest,AdiShamir和Leonard Adlemn三个人合写了一篇论文,给出了至今仍然安全的公钥加密算法,即以三个人姓氏的首字母命名的RSA算法。

RSA的过程步骤如下:

1)       找两个大质素p和q

2)       设n=p·q 算出m=(p-1)(q-1)

3)       找出e和d,使得 e·d mod = 1 (随便找出一个与m互质的数e,求解方程e·dmod
= 1)

4)       把e,n作为公钥,d,n作为私钥

5)       设X为原始报文,Y为密文

则  Y=Xe mod n

X=Y dmod n

即某个人用公钥e和n加密后,只有拥有私钥d和n的另一个人才能进行解密。

看以上的算法步骤你会产生很多疑问,如为什么要找两个大质素p、q;为什么需要按照(p-1) ·(q-1)算出m,然后根据e·d mod m= 1这个公式找出e和d,…等等。

RSA背后所依赖的数学定理已经存在300年以上,但是根据这么古老的定理创造RSA算法却是最近几十年的事,主要原因是随着计算机运算速度的提升以及网络的建立带来安全通讯的需求,因此开始了研究公钥算法的可行性,并终于在1977年时由MIT的三位教授发明了RSA公钥加密算法。

由数学定理找出RSA公钥算法是一条异常曲折的道路,但是对RSA算法扩展然后用数学定理证明似乎就平坦多了。因此本文对RSA算法的详解从结果开始,然后提出疑问逐步反推并用数学定理证明,最后再回头看是如何用现存的数学定理找出RSA算法。

我们根据RSA算法的步骤,首先列出疑问

1.     为什么X=Y dmod n,而Y=Xe mod n,也就是X的e次方除以n取余的值的d次方再除以n的取余又等于X了呢?

1.1    因为Xe除以n的余数(Xe mod n)的d次方再模n,相当于Xe·dmodn,证明如下:

(1)     Y=Xemod n   即是算X的e次方除以n的余,

(2)     换成公式:Xe= nx + Y    x为n的倍数

(3)     则Y= Xe – nx

(4)      Y dmodn = (Xe – nx)d mod n

(5)      (Xe –nx)d 是一个多项式,展开后除了第一项为Xe·d
外,其余项都携带n,因此其余项都能被n除尽,(Xe –nx)d mod n可以简化为Xe·dmodn

1.2   由1.1可知Y dmodn = (Xe – nx)d mod n = Xe·dmodn,而为什么Xe·dmodn = X呢?

1.2.1       如果某个整数n等于两个质数p,q的乘积,那么对于任意一个整数a,写出ai 依次除以n所得的余数序列,那么p-1 和 q-1的最小公倍数将成为该序列的一个周期,这是一个费马小定理的扩展。为什么p-1 和 q-1的最小公倍数将成为该序列的一个周期呢?具体证明见2节,先记住这个结论,继续往下分析。

1.2.2       m就是(p-1)和(q-1)的乘积,因此该序列的周期是m,a mod n 、a1+mmod n 、a1+2m mod n 和a1+3m modn的余数都相等。

1.2.3       所以计算e·d = 1 + m、e ·d = 1 + 2m
或 e ·d = 1 + 3m
等的任何一个值即能保证a mod n = ae·d
mod n

1.2.4       计算e·d = 1 + m 即计算e·d mod m = 1,随便找一个与m互质的数e,然后求方程e·d
mod m =1。由于e与m互质,那么e·d mod m = 1、e·d
mod m = 2、e·d mod m = 3
等都有解,并且在这个解的基础上加减n的倍数即为所有的解。因此对n来说,必然存在一个与e对应的解d。为什么e与m互质,就必然存在一个解d呢?具体证明见3节。

1.2.5       通过以上步骤可以看出Y dmod n =(Xe
– nx)d mod n = Xe·dmodn = X mod n,而X mod n等于X,因此Y
dmodn也等于X,换句话说密文Y用私钥d,n解密出原始报文X。

2       为什么n存在两个质数p和q的乘积,ai 依次除以n所得的余数序列,存在为 p-1 乘以q-1的最小公倍数的一个周期

2.1   n是一个质数的话,那么对于任意一个数a,随着i的增加,a的i次方除以n的余数将会出现一个n-1的周期。具体证明见第4节。

2.2   如果n不是一个质数,而是两个质数的乘积,比如35是5和7的乘积,根据中国剩余定理(附录A),一个数除以35的余数就可以唯一的由它除以两个乘数5和7的余数确定出来。

2.3   所以根据2.1, aimod p有一个p-1的周期,ai mod q有一个q-1的周期,再根据2.2,aimod n的周期由n的两个质数p和q确定,因此aimod p存在一个(p-1) ·(q-1)=m的周期。

3       为什么e与m互质,就必然存在一个d,使得e·d mod m = 1?

3.1   a · x mod n = b 的解,相当于寻找一个 a 的倍数使得它除以 n 余 b ,或者说是寻找一个数 M 同时满足 M mod a =0 且 M mod n = b 。

3.2   如果 a 和 n 是互质的,那么根据中国剩余定理(附录A),这样的 M 一定存在,并且找到一个这样的 M 之后,在它的基础上加减 a · n 的整倍数,可以得到所有满足要求的 M 。

3.3   因此,为了解出方程 a · x mod n = b 的所有解,我们也只需要解出方程的某个特解就行了。假如我们找到了方程 a · x modn = b 中 x 的一个解,在这个解的基础上加上或减去 n 的倍数(相当于在整个被除数 a · x 的基础上加上或者减去 a · n 的倍数,这里的 a · x 就是前面所说的 M ),就能得到所有的解了。

(更妙的是,我们其实只需要考虑形如 a · x modn = 1 的方程。因为,如果能解出这样的方程, a · x mod n = 2 、 a · x mod n = 3 也都自动地获解了。假如 a · x modn = 1 有一个解 x = 100 ,由于 100 个 a 除以 n 余 1 ,自然 200 个 a 除以 n 就余 2 , 300 个 a 除以 n 就余 3 ,等等,等式右边余数不为 1 的方程也都解开了。)

4       为什么n是一个质数的话,那么对于任意一个数a,随着i的增加,a的i次方除以n的余数将会出现一个n-1的周期?

4.1    1640 年,法国业余数学家 Pierre de Fermat (通常译作“费马”)发现,如果 n 是一个质数的话,那么对于任意一个数 a , a 的 n 次方减去 a 之后都将是 n 的倍数。

4.2    4.1的费马小定理(见附录B)描述为 an-a mod n = 0;那么存在an mod n = a mod n

4.3    由于ai mod n = ai-1 · a mod n

而ai-1 = nx + y  设x为n倍数,y为ai mod n的余数

则y = ai-1 – nx

则ai = ai-1· a = (nx + y)· a

则 ai mod n = (nx + y)· a mod n

= (anx + ay)mod n

由于anx是an的倍数,anx mod n必然等于0,所以ai mod n的余数只需要求ay mod n即可,而y为ai-1 mod n的余数。也即是aimod n的余数等于ai-1 mod n的余数乘以a再除以n的余数,换句话说ai mod n的值是由ai-1 mod n的值决定。

4.4    由4.2和4.3结合起来可知ai的余数存在1到n-1的周期

附录A 中国剩余定理

中国剩余定理:给出 m 个两两互质的整数,它们的乘积为 P ;假设有一个未知数 M ,如果我们已知 M 分别除以这 m 个数所得的余数,那么在 0 到 P - 1 的范围内,我们可以唯一地确定这个 M 。这可以看作是 M 的一个特解。其他所有满足要求的 M ,则正好是那些除以 P 之后余数等于这个特解的数。注意,除数互质的条件是必需的,否则结论就不成立了。比如说,在 0 到 7 的范围内,除以 4 余 1 并且除以 2 也余 1 的数有 2 个,除以 4 余 1 并且除以 2 余 0 的数则一个也没有。

从某种角度来说,中国剩余定理几乎是显然的。让我们以两个除数的情况为例,来说明中国剩余定理背后的直觉吧。假设两个除数分别是 4 和 7 。下表显示的就是各自然数除以 4 和除以 7 的余数情况,其中 x mod y 表示 x 除以 y 的余数,这个记号后面还会用到。


i


0


1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


i mod 4


0


1


2


3


0


1


2


3


0


1


2


3


0


1


2


3


0


1


2


3


i mod 7


0


1


2


3


4


5


6


0


1


2


3


4


5


6


0


1


2


3


4


5


i


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36


37


38


39


i mod 4


0


1


2


3


0


1


2


3


0


1


2


3


0


1


2


3


0


1


2


3


i mod 7


6


0


1


2


3


4


5


6


0


1


2


3


4


5


6


0


1


2


3


4

i mod 4 的值显然是以 4 为周期在循环, i mod 7 的值显然是以 7 为周期在循环。由于 4 和 7 是互质的,它们的最小公倍数是 4 × 7 = 28 ,因而 (i mod 4, i mod 7) 的循环周期是 28 ,不会更短。因此,当 i 从 0 增加到 27 时, (i mod 4, i mod 7) 的值始终没有出现重复。但是,(i mod 4, i mod 7) 也就只有 4 × 7 = 28 种不同的取值,因而它们正好既无重复又无遗漏地分给了 0 到
27 之间的数。这说明,每个特定的余数组合都在前 28 项中出现过,并且都只出现过一次。在此之后,余数组合将产生长度为 28 的循环,于是每个特定的余数组合都将会以 28 为周期重复出现。这正是中国剩余定理的内容。

附录 B 费马小定理

费马小定理:如果 n 是一个质数的话,那么对于任意一个数 a , a 的 n 次方减去 a 之后都将是 n 的倍数。

Fermat 小定理有一个非常精彩的证明。我们不妨以“ 37- 3 能被 7 整除”为例进行说明,稍后你会发现,对于其他的情况,道理是一样的。首先,让我来解释一下“循环移位”的意思。想象一个由若干字符所组成的字符串,在一块大小刚好合适的 LED 屏幕上滚动显示。比方说, HELLOWORLD 就是一个 10 位的字符串,而我们的 LED 屏幕不多不少正好容纳 10 个字符。刚开始,屏幕上显示 HELLOWORLD 。下一刻,屏幕上的字母 H 将会移出屏幕,但又会从屏幕右边移进来,于是屏幕变成了 ELLOWORLDH
。下一刻,屏幕变成了 LLOWORLDHE ,再下一刻又变成了LOWORLDHEL 。移动到第 10 次,屏幕又会回到 HELLOWORLD 。在此过程中,屏幕上曾经显示过的ELLOWORLDH, LLOWORLDHE, LOWORLDHEL, ... ,都是由初始的字符串 HELLOWORLD 通过“循环移位”得来的。现在,考虑所有仅由 A 、 B 、 C 三个字符组成的长度为 7 的字符串,它们一共有 37个。如果某个字符串循环移位后可以得到另一个字符串,我们就认为这两个字符串属于同一组字符串。比如说,
ABBCCCC 和 CCCABBC 就属于同一组字符串,并且该组内还有其他 5 个字符串。于是,在所有 37个字符串当中,除了 AAAAAAA 、 BBBBBBB 、 CCCCCCC 这三个特殊的字符串以外,其他所有的字符串正好都是每 7 个一组。这说明, 37- 3 能被 7 整除。

在这个证明过程中,“ 7 是质数”这个条件用到哪里去了?仔细想想你会发现,正因为 7 是质数,所以每一组里才恰好有 7 个字符串。如果字符串的长度不是 7 而是 15 的话,有些组里将会只含 3 个或者 5 个字符串。比方说, ABCABCABCABCABC 所在的组里就只有 3 个字符串,循环移动 3 个字符后,字符串将会和原来重合。

附录C SSH中的diffie-hellman公钥交换算法,以RSA公钥举例:

时间: 2024-10-25 05:55:48

RSA公钥算法详解的相关文章

安全体系(二)——RSA算法详解

本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首次公布,当时他们三人都在麻省理工学院工作.RSA算法以他们三人姓氏开头字母命名. RSA是目前最有影响力的公钥加密

安全体系(三)——SHA1算法详解

本文主要讲述使用SHA1算法计算信息摘要的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 安全体系(二)——RSA算法详解 为保证传输信息的安全,除了对信息加密外,还需要对信息进行认证.认证的目的有两:一是验证信息的发送者是合法的,二是验证信息的完整性.Hash函数就是进行信息认证的一种有效手段. 1.Hash函数和消息完整性 Hash函数也称为杂凑函数或散列函数,函数输入为一可变长度x,输出为一固定长度串,该串被称为输入x

安全体系(一)—— DES算法详解

本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 安全体系(零)-- 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(二)--RSA算法详解 安全体系(三)--SHA1算法详解 1.DES算法简介 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准. DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法. 密钥长64位,密钥事实上是56位参与DES运算(第8.16.24.32.40

EM算法(3):EM算法详解

目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法详解

[转] KMP算法详解

转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串).比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串.

[搜索]波特词干(Porter Streamming)提取算法详解(3)

 接上 [搜索]波特词干(Porter Streamming)提取算法详解(2) 下面分为5大步骤来使用前面提到的替换条件来进行词干提取. 左边是规则,右边是提取成功或者失败的例子(用小写字母表示). 步骤1 SSES -> SS                   caresses  ->  caress IES  -> I                          ponies    ->  poni ties      ->  ti SS   -> S

KMP算法详解(图示+代码)

算法过程非常绕,不要企图一次就能看明白,多尝试就会明白一些.下面试图用比较直观的方法解释这个算法,对KMP算法的解释如下: 1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"ABCDABD"的第一个字符,进行比较.因为B与A不匹配,所以搜索词后移一位. 2. 因为B与A不匹配,搜索词再往后移. 3. 就这样,直到字符串有一个字符,与搜索词的第一个字符相同为止. 4. 接着比较字符串和搜索词的下一个字符,还是相同. 5. 直到字

php 二分查找法算法详解

一.概念:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 二.代

【转】AC算法详解

原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和Margaret J.Corasick于1974年提出(与KMP算法同年)的一个经典的多模式匹配算法,可以保证对于给定的长度为n的文本,和模式集合P{p1,p2,...pm},在O(n)时间复杂度内,找到文本中的所有目标模式,而与模式集合的规模m无关.正如KMP算法在单模式匹配方面的突出贡献一样,AC算法对于