RSA算法之原理篇

序言

RSA算法是最早得到广泛应用的公钥加密算法。它在通信加密、签名认证等领域都起着重要作用。

RSA算法最早由英国数学家Clifford Cocks在1973年发明,但由于当时被英国政府列为最高机密,直到死后不久其工作成果才被公布。而1977年,Ron Rivest、Adi Shamir 和 Leonard Adleman三人在MIT合作发表了一篇完整描述RSA算法的论文,被正式承认为该算法的发明者。RSA这个名字也正是由三人姓氏的首字母组成。

很有意思的一件事情是,RSA算法并不是第一个公钥加密算法,比RSA算法更早的是一个基于背包问题的公钥加密算法。该算法作者悬赏100美元寻找能够破解他的加密的人,结果这100美元被RSA中的S(Adi Shamir)轻松拿到了。之后不信邪的作者改进了算法,悬赏1000美元继续寻找能破解改进算法的人,不久又被RSA中的R(Ron Rivest)破解了,并且该破解方法适用于背包加密及其变种。

而RSA算法作者也在首次公布RSA算法时悬赏100美元寻找能破解他们的加密信息的人。这个挑战直到17年后,也就是1994年才被破解。而且这个破解有超过600人参与,使用了1600台计算机运算七个多月后才最终得到结果。当然,没有人能拿到那100美元,因为17年已经远远超出了当年作者设置的破解时限。

数学背景知识

RSA算法是一个基于数论的算法,要弄懂RSA,一些数论中的基础知识是必要的,如果你此前已经学过数论相关内容,可以直接跳到下一章。

同余

两个整数a、b,如果他们除以正整数m的余数相等,那a和b同余。用公式来表示就是:

amodm=bmodmabmodm a mod m = b mod m ⇔ a ≡ b mod m

符号“≡”表示同余相等。比如37跟13关于模24同余,也就是 3713mod24 37 ≡ 13 mod 24
而形如 a+bcmodm a + b ≡ c mod m 这样带有同余相等符号的式子被称为同余式。我们也可以把它转化为常见的形式 a+bmodm=cmodm a + b mod m = c mod m ,但这样写未免太繁琐了。
根据同余关系的性质,在求模运算中,任何大于或等于模数的数都可以用跟它同余的数来代替。比如:
因为

568mod24 56 ≡ 8 mod 24
251mod24 25 ≡ 1 mod 24

所以下列等式都是成立的:

(56+25)mod24=(8+1)mod24 ( 56 + 25 ) mod 24 = ( 8 + 1 ) mod 24
(5625)mod24=(81)mod24 ( 56 − 25 ) mod 24 = ( 8 − 1 ) mod 24
(56×25)mod24=(8×1)mod24 ( 56 × 25 ) mod 24 = ( 8 × 1 ) mod 24

利用同余性质,将较大的操作数替换为同余的较小的数,可以大大加快模运算的速度。

数论倒数

普通算术运算中,如果 ab=1 a b = 1 ,那么我们说a和b互为倒数。类似地,在同余式中,如果 ab1modm a b ≡ 1 mod m ,我们说在模m下,a和b互为数论倒数,或者说乘法逆元。有时候也记作 ab1modm a ≡ b − 1 mod m 或者 ba1modm b ≡ a − 1 mod m

欧拉函数

欧拉函数 φ(n) φ ( n ) ,也就是对于正整数n,小于或等于n且与n互质的正整数的个数。比如 φ(6) φ ( 6 ) ,不超过6并且跟6互质的有1和5两个数,则 φ(6)=2 φ ( 6 ) = 2
特别地,对于任意素数p,所有小于p的正整数都跟它互质,所以 φ(p)

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值