1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。
它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi
Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。
RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100
个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个
大素数的积。
密钥对的产生。选择两个大素数,p 和q 。计算:
n = p * q
然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用
Euclid 算法计算解密密钥d, 满足
e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )
其中n和d也要互质。数e和
n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。
加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s
,其中 2^s = n, s 尽可能的大。对应的密文是:
ci = mi^e ( mod n ) ( a )
解密时作如下计算:
mi = ci^d ( mod n ) ( b )
RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )
式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作 HASH 运算。
RSA 的安全性。
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因
为没有证明破解
RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成
为大数分解算法。目前, RSA
的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现
在,人们已能分解140多个十进制位的大素数。因此,模数n
必须选大一些,因具体适用情况而定。
RSA的速度。
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬
件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。
RSA的选择密文攻击。
RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装(
Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上
,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
( XM )^d = X^d *M^d mod n
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使
用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议
,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息
签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash
Function
对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不同类型的攻击方
法。
RSA的公共模数攻击。
若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的
情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就
可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:
C1 = P^e1 mod n
C2 = P^e2 mod n
密码分析者知道n、e1、e2、C1和C2,就能得到P。
因为e1和e2互质,故用Euclidean算法能找到r和s,满足:
r * e1 + s * e2 = 1
假设r为负数,需再用Euclidean算法计算C1^(-1),则
( C1^(-1) )^(-r) * C2^s = P mod n
另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d
,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无
需分解模数。解决办法只有一个,那就是不要共享模数n。
RSA的小指数攻击。 有一种提高
RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有所提高。
但这样作是不安全的,对付办法就是e和d都取较大的值。
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研
究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为
人们接受,普遍认为是目前最优秀的公钥方案之一。RSA
的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难
度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数
人士倾向于因子分解不是NPC问题。
RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次
一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits
以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大
数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(
Secure Electronic Transaction
)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。
DSS/DSA算法
Digital Signature Algorithm
(DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(Digital Signature
Standard)。算法中应用了下述参数:
p:L bits长的素数。L是64的倍数,范围是512到1024;
q:p - 1的160bits的素因子;
g:g = h^((p-1)/q) mod p,h满足h p - 1, h^((p-1)/q) mod p 1;
x:x q,x为私钥 ;
y:y = g^x mod p ,( p, q, g, y )为公钥;
H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。
p, q,
g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及
验证协议如下:
1. P产生随机数k,k q;
2. P计算 r = ( g^k mod p ) mod q
s = ( k^(-1) (H(m) + xr)) mod q
签名结果是( m, r, s )。
3. 验证时计算 w = s^(-1)mod q
u1 = ( H( m ) * w ) mod q
u2 = ( r * w ) mod q
v = (( g^u1 * y^u2 ) mod p ) mod q
若v = r,则认为签名有效。
DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特
点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们
是否是随机产生的,还是作了手脚。RSA算法却作不到。
前几天看到一句话,“我们中的很多人把一生中最灿烂的笑容大部分都献给了手机和电脑屏幕”。心中一惊,这说明了什么?手机和电脑已经成为了我们生活中的一部分,所以才会有最懂你的不是你,也不是你男朋友,而是大数据。
如此重要的个人数据,怎样才能保证其在互联网上的安全传输呢?当然要靠各种加密算法。说起加密算法,大家都知道有哈希、对称加密和非对称加密了。哈希是一个散列函数,具有不可逆操作;对称加密即加密和解密使用同一个密钥,而非对称加密加密和解密自然就是两个密钥了。稍微深入一些的,还要说出非对称加密算法有DES、3DES、RC4等,非对称加密算法自然就是RSA了。那么当我们聊起RSA时,我们又在聊些什么呢?今天笔者和大家一起探讨一下,有不足的地方,还望各位朋友多多提意见,共同进步。
RSA简介:1976年由麻省理工学院三位数学家共同提出的,为了纪念这一里程碑式的成就,就用他们三个人的名字首字母作为算法的命名。即 罗纳德·李维斯特 (Ron Rivest)、 阿迪·萨莫尔 (Adi Shamir)和 伦纳德·阿德曼 (Leonard Adleman)。
公钥:用于加密,验签。
私钥:解密,加签。
通常知道了公钥和私钥的用途以后,即可满足基本的聊天需求了。但是我们今天的主要任务是来探究一下RSA加解密的原理。
说起加密算法的原理部分,肯定与数学知识脱不了关系。
我们先来回忆几个数学知识:
φn = φ(A*B)=φ(A)*φ(B)=(A-1)*(B-1)。
这个公式主要是用来计算给定一个任意的正整数n,在小于等于n的正整数中,有多少个与n构成互质的关系。
其中n=A*B,A与B互为质数,但A与B本身并不要求为质数,可以继续展开,直至都为质数。
在最终分解完成后,即 φ(N) = φ(p1)*φ(p2)*φ(p3)... 之后,p1,p2,p3都是质数。又用到了欧拉函数的另一个特点,即当p是质数的时候,φp = p - 1。所以有了上面给出的欧拉定理公式。
举例看一下:
计算15的欧拉函数,因为15比较小,我们可以直接看一下,小于15的正整数有 1、2、3、4、5、6、7、8、9、10、11、12、13、14。和15互质的数有1、2、4、7、8、11、13、14一共四个。
对照我们刚才的欧拉定理: 。
其他感兴趣的,大家可以自己验证。
之所以要在这里介绍欧拉函数,我们在计算公钥和私钥时候,会用到。
如果两个正整数m 和 n 互质,那么m 的 φn 次方减1,可以被n整除。
其中 .
其中当n为质数时,那么 上面看到的公式就变成了
mod n 1.
这个公式也就是著名的 费马小定理 了。
如果两个正整数e和x互为质数,那么一定存在一个整数d,不止一个,使得 e*d - 1 可以被x整除,即 e * d mode x 1。则称 d 是 e 相对于 x的模反元素。
了解了上面所讲的欧拉函数、欧拉定理和模反元素后,就要来一些化学反应了,请看图:
上面这幅图的公式变化有没有没看明白的,没看明白的咱们评论区见哈。
最终我们得到了最重要的第5个公式的变形,即红色箭头后面的:
mod n m。
其中有几个关系,需要搞明白,m 与 n 互为质数,φn = x,d 是e相对于x的模反元素。
有没有看到一些加解密的雏形。
从 m 到 m。 这中间涵盖了从加密到解密的整个过程,但是缺少了我们想要的密文整个过程。
OK,下面引入本文的第四个数学公式:
我们来看一下整个交换流程:
1、客户端有一个数字13,服务端有一个数字15;
2、客户端通过计算 3的13次方 对 17 取余,得到数字12; 将12发送给服务端;同时服务端通过计算3的15次方,对17取余,得到数字6,将6发送给客户端。至此,整个交换过程完成。
3、服务端收到数字12以后,继续计算,12的15次方 对 17取余,得到 数字10。
4、客户端收到数字 6以后,继续计算,6的13次方 对 17 取余,得到数字 10。
有没有发现双方,最终得到了相同的内容10。但是这个数字10从来没有在网络过程中出现过。
好,讲到这里,可能有些人已经恍然大悟,这就是加密过程了,但是也有人会产生疑问,为什么要取数字3 和 17 呢,这里还牵涉到另一个数学知识,原根的问题。即3是17的原根。看图
有没有发现规律,3的1~16次方,对17取余,得到的整数是从1~16。这时我们称3为17的原根。也就是说上面的计算过程中有一组原根的关系。这是最早的迪菲赫尔曼秘钥交换算法。
解决了为什么取3和17的问题后,下面继续来看最终的RSA是如何产生的:
还记得我们上面提到的欧拉定理吗,其中 m 与 n 互为质数,n为质数,d 是 e 相对于 φn的模反元素。
当迪菲赫尔曼密钥交换算法碰上欧拉定理会产生什么呢?
我们得到下面的推论:
好,到这里我们是不是已经看到了整个的加密和解密过程了。
其中 m 是明文;c 是密文; n 和 e 为公钥;d 和 n 为私钥 。
其中几组数字的关系一定要明确:
1、d是e 相对于 φn 的模反元素,φn = n-1,即 e * d mod n = 1.
2、m 小于 n,上面在讲迪菲赫尔曼密钥交换算法时,提到原根的问题,在RSA加密算法中,对m和n并没有原根条件的约束。只要满足m与n互为质数,n为质数,且m n就可以了。
OK,上面就是RSA加密算法的原理了,经过上面几个数学公式的狂轰乱炸,是不是有点迷乱了,给大家一些时间理一下,后面会和大家一起来验证RSA算法以及RSA为什么安全。
本节内容中可能用到的符号说明如下:
质数和合数: 质数是指除了平凡约数1和自身之外,没有其他约数的大于1的正整数。大于1的正整数中不是素数的则为合数。如 7、11 是质数,而 4、9 是合数。在 RSA 算法中主要用到了质数相关性质,质数可能是上帝留给人类的一把钥匙,许多数学定理和猜想都跟质数有关。
[定理1] 除法定理: 对任意整数 a 和 任意正整数 n,存在唯一的整数 q 和 r,满足 。其中, 称为除法的商,而 称为除法的余数。
整除: 在除法定理中,当余数 时,表示 a 能被 n 整除,或者说 a 是 n 的倍数,用符号 表示。
约数和倍数 : 对于整数 d 和 a,如果 ,且 ,则我们说 d 是 a 的约数,a 是 d 的倍数。
公约数: 对于整数 d,a,b,如果 d 是 a 的约数且 d 也是 b 的约数,则 d 是 a 和 b 的公约数。如 30 的约数有 1,2,3,5,6,10,15,30,而 24 的约数有 1,2,3,4,6,8,12,24,则 30 和 24 的公约数有 1,2,3,6。其中 1 是任意两个整数的公约数。
公约数的性质:
最大公约数: 两个整数最大的公约数称为最大公约数,用 来表示,如 30 和 24 的最大公约数是 6。 有一些显而易见的性质:
[定理2] 最大公约数定理: 如果 a 和 b 是不为0的整数,则 是 a 和 b 的线性组合集合 中的最小正元素。
由定理2可以得到一个推论:
[推论1] 对任意整数 a 和 b,如果 且 ,则 。
互质数: 如果两个整数 a 和 b 只有公因数 1,即 ,则我们就称这两个数是互质数(coprime)。比如 4 和 9 是互质数,但是 15 和 25 不是互质数。
互质数的性质:
欧几里得算法分为朴素欧几里得算法和扩展欧几里得算法,朴素法用于求两个数的最大公约数,而扩展的欧几里得算法则有更多广泛应用,如后面要提到的求一个数对特定模数的模逆元素等。
求两个非负整数的最大公约数最有名的是 辗转相除法,最早出现在伟大的数学家欧几里得在他的经典巨作《几何原本》中。辗转相除法算法求两个非负整数的最大公约数描述如下:
例如, ,在求解过程中,较大的数缩小,持续进行同样的计算可以不断缩小这两个数直至其中一个变成零。
欧几里得算法的python实现如下:
扩展欧几里得算法在 RSA 算法中求模反元素有很重要的应用,定义如下:
定义: 对于不全为 0 的非负整数 ,则必然存在整数对 ,使得
例如,a 为 3,b 为 8,则 。那么,必然存在整数对 ,满足 。简单计算可以得到 满足要求。
扩展欧几里得算法的python实现如下:
同余: 对于正整数 n 和 整数 a,b,如果满足 ,即 a-b 是 n 的倍数,则我们称 a 和 b 对模 n 同余,记号如下: 例如,因为 ,于是有 。
对于正整数 n,整数 ,如果 则我们可以得到如下性质:
譬如,因为 ,则可以推出 。
另外,若 p 和 q 互质,且 ,则可推出:
此外,模的四则运算还有如下一些性质,证明也比较简单,略去。
模逆元素: 对整数 a 和正整数 n,a 对模数 n 的模逆元素是指满足以下条件的整数 b。 a 对 模数 n 的 模逆元素不一定存在,a 对 模数 n 的模逆元素存在的充分必要条件是 a 和 n 互质,这个在后面我们会有证明。若模逆元素存在,也不是唯一的。例如 a=3,n=4,则 a 对模数 n 的模逆元素为 7 + 4k,即 7,11,15,...都是整数 3 对模数 4 的模逆元素。如果 a 和 n 不互质,如 a = 2,n = 4,则不存在模逆元素。
[推论2] 模逆元素存在的充分必要条件是整数 a 和 模数 n 互质。
[定理3] 唯一质数分解定理: 任何一个大于1的正整数 n 都可以 唯一分解 为一组质数的乘积,其中 都是自然数(包括0)。比如 6000 可以唯一分解为 。
由质数唯一分解定理可以得到一个推论: 质数有无穷多个 。
[定理4] 中国剩余定理(Chinese remainder theorem,CRT) ,最早见于《孙子算经》(中国南北朝数学著作,公元420-589年),叫物不知数问题,也叫韩信点兵问题。
翻译过来就是已知一个一元线性同余方程组求 x 的解:
宋朝著名数学家秦九韶在他的著作中给出了物不知数问题的解法,明朝的数学家程大位甚至编了一个《孙子歌诀》:
意思就是:将除以 3 的余数 2 乘以 70,将除以 5 的余数 3 乘以 21,将除以 7 的余数 2 乘以 15,最终将这三个数相加得到 。再将 233 除以 3,5,7 的最小公倍数 105 得到的余数 ,即为符合要求的最小正整数,实际上, 都符合要求。
物不知数问题解法本质
求解通项公式
中国剩余定理相当于给出了以下的一元线性同余方程组的有解的判定条件,并用构造法给出了解的具体形式。
模数 两两互质 ,则对任意的整数: ,方程组 有解,且解可以由如下构造方法得到:
并设 是除 以外的其他 个模数的乘积。
中国剩余定理通项公式证明
RSA算法建立的理论基础是大数分解和素数检测 。
RSA是1977年由罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制 。
扩展资料:
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式。
RSA加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法,于1978年由美国麻省理工学院(MIT)的三位学着:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。
它的原理较为简单,假设有消息发送方A和消息接收方B,通过下面的几个步骤,就可以完成消息的加密传递:
消息发送方A在本地构建密钥对,公钥和私钥;
消息发送方A将产生的公钥发送给消息接收方B;
B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;
反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。
由于公钥是消息发送方A暴露给消息接收方B的,所以这种方式也存在一定的安全隐患,如果公钥在数据传输过程中泄漏,则A通过私钥加密的数据就可能被解密。
如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。
当然,这种方式可能存在数据传递被模拟的隐患,但可以通过数字签名等技术进行安全性的进一步提升。由于存在多次的非对称加解密,这种方式带来的效率问题也更加严重。
智能化时代的到来涉及了各种核心算法,保护算法就能保障开发者权益,杜绝市面上各种山寨品,加密芯片恰好能起到很好的保护作用,如何选择加密芯片呢?KEROS加密芯片专注于加密领域十余年,行业首选。
1.安全性:采用国际通用aes256算法加密并同时通过KAS传送,除基本认证之外,利用2K安全EEPROM,用户可以自己管理密钥和数据,实现双重保护。
2.唯一性:以定制的方式为每一位用户单独定制“专属型号CID”,多用户之间算法不兼容,并且采用固化的方法直接将算法固化到晶圆上而无需烧入。
3.序列号:每颗芯片制造生产时具有5字节全球唯一SN序列号,每颗芯片SN都不会重复。
4.防抄特性:每颗芯片都有自己独特的密钥系统,破解单颗芯片只对这颗芯片对应的产品有效,对整个同类型的产品是无效的,依旧无法通过验证。而且KEROS采用ASIC方法设计,芯片内为纯逻辑电路,封装内有40多层逻辑电路整合了10万多个逻辑门,爆力刨片破解难度可想而知。
5.安全存储:用户可以将保密数据加密之后安全的存放到EEPROM中。rsa加密算法基本理论的介绍就聊到这里吧,感谢你花时间阅读本站内容。
本文标签:rsa加密算法基本理论