常用的加解密技术(2)

2023-11-13

【公开密钥体系】

公开密钥密码体制是现代密码学的最重要的发明和进展。一般理解密码学(Cryptography)就是保护信息传递的机密性。但这仅仅是当今密码学主题的一个方面。对信息发送与接收人的真实身份的验证、对所发出/接收信息在事后的不可抵赖以及保障数据的完整性是现代密码学主题的另一方面。公开密钥密码体制对这两方面的问题都给出了出色的解答,并正在继续产生许多新的思想和方案。在公钥体制中,加密密钥不同于解密密钥。人们将加密密钥公之于众,谁都可以使用;而解密密钥只有解密人自己知道。迄今为止的所有公钥密码体系中,RSA系统是最著名、使用最广泛的一种。


1976年提出公共密钥密码体制,其原理是加密密钥和解密密钥分离。这样,一个具体用户就可以将自己设计的加密密钥和算法公诸于众,而只保密解密密钥。任何人利用这个加密密钥和算法向该用户发送的加密信息,该用户均可以将之还原。公共密钥密码的优点是不需要经安全渠道传递密钥,大大简化了密钥管理。它的算法有时也称为公开密钥算法或简称为公钥算法。

1978年提出公共密钥密码的具体实施方案,即RSA方案。

1991年提出的DSA算法也是一种公共密钥算法,在数字签名方面有较大的应用优势。

公钥体系结构中的概念

公钥体系结构中的一些基本概念与结构组成。

密钥对

在基于公钥体系的安全系统中,密钥是成对生成的,每对密钥由一个公钥和一个私钥组成。在实际应用中,私钥由拥有者自己保存,而公钥则需要公布于众。为了使基于公钥体系的业务(如电子商务等)能够广泛应用,一个基础性关键的问题就是公钥的分发与管理。

公钥本身并没有什么标记,仅从公钥本身不能判别公钥的主人是谁。

在很小的范围内,比如A和B这样的两人小集体,他们之间相互信任,交换公钥,在互联网上通讯,没有什么问题。这个集体再稍大一点,也许彼此信任也不成问题,但从法律角度讲这种信任也是有问题的。如再大一点,信任问题就成了一个大问题。

证书

互联网络的用户群决不是几个人互相信任的小集体,在这个用户群中,从法律角度讲用户彼此之间都不能轻易信任。所以公钥加密体系采取了另一个办法,将公钥和公钥的主人名字联系在一起,再请一个大家都信得过有信誉的公正、权威机构确认,并加上这个权威机构的签名。这就形成了证书。

由于证书上有权威机构的签字,所以大家都认为证书上的内容是可信任的;又由于证书上有主人的名字等身份信息,别人就很容易地知道公钥的主人是谁。

CA(Certificate Authority)

前面提及的权威机构就是电子签证机关(即CA)。CA也拥有一个证书(内含公钥),当然,它也有自己的私钥,所以它有签字的能力。网上的公众用户通过验证CA的签字从而信任CA,任何人都应该可以得到CA的证书(含公钥),用以验证它所签发的证书。

如果用户想得到一份属于自己的证书,他应先向CA提出申请。在CA判明申请者的身份后,便为他分配一个公钥,并且CA将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给那个用户(申请者)。

如果一个用户想鉴别另一个证书的真伪,他就用CA的公钥对那个证书上的签字进行验证(如前所述,CA签字实际上是经过CA私钥加密的信息,签字验证的过程还伴随使用CA公钥解密的过程),一旦验证通过,该证书就被认为是有效的。

CA除了签发证书之外,它的另一个重要作用是证书和密钥的管理。

由此可见,证书就是用户在网上的电子个人身份证,同日常生活中使用的个人身份证作用一样。CA相当于网上公安局,专门发放、验证身份证。

公开密钥算法-RSA

RSA简述

公开密钥算法是在1976年由当时在美国斯坦福大学的迪菲(Diffie)和赫尔曼(Hellman)两人首先发明的(论文"NewDirection in Cryptography")。但目前最流行的RSA是1977年由MIT教授Ronald L.Rivest,AdiShamir和Leonard M.Adleman共同开发的,分别取自三名数学家的名字的第一个字母来构成的。

1976年提出的公开密钥密码体制思想不同于传统的对称密钥密码体制,它要求密钥成对出现,一个为加密密钥(e),另一个为解密密钥(d),且不可能从其中一个推导出另一个。自1976年以来,已经提出了多种公开密钥密码算法,其中许多是不安全的,一些认为是安全的算法又有许多是不实用的,它们要么是密钥太大,要么密文扩展十分严重。多数密码算法的安全基础是基于一些数学难题,这些难题专家们认为在短期内不可能得到解决。因为一些问题(如因子分解问题)至今已有数千年的历史了。

公钥加密算法也称非对称密钥算法,用两对密钥:一个公共密钥和一个专用密钥。用户要保障专用密钥的安全;公共密钥则可以发布出去。公共密钥与专用密钥是有紧密关系的,用公共密钥加密的信息只能用专用密钥解密,反之亦然。由于公钥算法不需要联机密钥服务器,密钥分配协议简单,所以极大简化了密钥管理。除加密功能外,公钥系统还可以提供数字签名。

公钥加密算法中使用最广的是RSA。RSA使用两个密钥,一个公共密钥,一个专用密钥。如用其中一个加密,则可用另一个解密,密钥长度从40到2048bit可变,加密时也把明文分成块,块的大小可变,但不能超过密钥的长度,RSA算法把每一块明文转化为与密钥长度相同的密文块。密钥越长,加密效果越好,但加密解密的开销也大,所以要在安全与性能之间折衷考虑,一般64位是较合适的。RSA的一个比较知名的应用是SSL,在美国和加拿大SSL用128位RSA算法,由于出口限制,在其它地区(包括中国)通用的则是40位版本。

RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。

通常信息安全的目标可以概括为解决信息的以下问题:

保密性(Confidentiality)保证信息不泄露给未经授权的任何人。
完整性(Integrity)防止信息被未经授权的人篡改。
可用性(Availability)保证信息和信息系统确实为授权者所用。
可控性(Controllability)对信息和信息系统实施安全监控,防止非法利用信息和信息系统。
密码是实现一种变换,利用密码变换保护信息秘密是密码的最原始的能力,然而,随着信息和信息技术发展起来的现代密码学,不仅被用于解决信息的保密性,而且也用于解决信息的完整性、可用性和可控性。可以说,密码是解决信息安全的最有效手段,密码技术是解决信息安全的核心技术。

公用密钥的优点就在于,也许你并不认识某一实体,但只要你的服务器认为该实体的CA是可靠的,就可以进行安全通信,而这正是Web商务这样的业务所要求的。例如信用卡购物。服务方对自己的资源可根据客户CA的发行机构的可靠程度来授权。目前国内外尚没有可以被广泛信赖的CA。美国Natescape公司的产品支持公用密钥,但把Natescape公司作为CA。由外国公司充当CA在我国是一件不可想象的事情。

公共密钥方案较保密密钥方案处理速度慢,因此,通常把公共密钥与专用密钥技术结合起来实现最佳性能。即用公共密钥技术在通信双方之间传送专用密钥,而用专用密钥来对实际传输的数据加密解密。另外,公钥加密也用来对专用密钥进行加密。

在这些安全实用的算法中,有些适用于密钥分配,有些可作为加密算法,还有些仅用于数字签名。多数算法需要大数运算,所以实现速度很慢,不能用于快的数据加密。以下将介绍典型的公开密钥密码算法-RSA。

RSA算法很好的完成对电文的数字签名以抗对数据的否认与抵赖;利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。目前为止,很多种加密技术采用了RSA算法,比如PGP(PrettyGoodPrivacy)加密系统,它是一个工具软件,向认证中心注册后就可以用它对文件进行加解密或数字签名,PGP所采用的就是RSA算法。由此可以看出RSA有很好的应用。

RSA算法

1978年就出现的RSA算法,是第一个既能用于数据加密也能用于数字签名的算法。

RSA是一种公开密匙机理的加密算法。所谓公开密匙,就是每个用户拥有两个密码,一个公开(e),一个保密(d)。对明文加密,可以使用其中任一密码,但解密必须使用另一个密码。加密/ 解密算法是公开的,但是算法是不可逆的。

密钥的产生

1. 选择两个大素数,p 和q 。

2. 计算: n = p * q (p,q分别为两个互异的大素数,p,q 必须保密,一般要求p,q为安全素数,n的长度大于512bit ,这主要是因为RSA算法的安全性依赖于因子分解大数问题)。有欧拉函数 (n)=(p-1)(q-1)。

3. 然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。

4. 最后,利用Euclid 算法计算解密密钥d, 满足de≡1(mod φ(n))。其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。

加密与解密

1. 加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。

2. 对应的密文是:ci ≡mi^e ( mod n ) ( a )

3. 解密时作如下计算:mi ≡ci^d ( mod n ) ( b ) RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作 HASH 运算。

验证质数算法

想直接求一大质数是困难的,所以最好是随机选取一个大数,再来验证它是否质数。而完全验证它是否质数运算量也狠大,这里可以采用下面的方法:

如果想验证 n是否是质数:

1. 检查 n 是否能被较小的质数整除。

2. 从 { 1,2,3,4...,n-1 } 中随机选取 a

3. 测试 a,n 是否互质(辗转相除法)。且 J(a,n)-a^((n-1)/2)是否能被 n整除。这两个条件只要有一个满足,n 肯定是一合数。否则,n 是质数的概率就在1/2 以上。

附: / 1 (a=1)

J(a,n)={ J(a/2,n)*(-1)^(n^2-1)/ (a为偶数)

\ J(n mod a,a)*(-1)^((a-1)(n-1)/4) (a为其它数)

如果反复 2,3步 XXX 次,n 是质数的可能性就极大了。

由于计算机产生的是伪随机数,所以建议在多次取随机数时,多安插几次等待按键,然后用时间作种子对随机函数初始化。

关于强质数及其获得

因为幂剩余函数具有特殊的周期性,反复运算M=(C^d) mod n t 次后,将还原为最初的 M。早期的RSA 算法就曾被人用这种方法破译。所以在生成密匙时,应采用"强质数",使 t足够大。

所谓强质数 p,满足:

1. p 是个位数足够大的随机质数

2. p-1 含有一个大的质数因子 r

3. p+1 含有一个大的质数因子

4. r-1 含有一个大的质数因子 t

强质数的获得:

1. 选择两个指定长度的奇数 a,b

2. 在 a 附近产生随机质数 s ,在 b 附近产生随机质数 t

3. 由 t 产生质数 r。 (1) r=1+2t (2) 若 r 非质数,则 r=r+2t 直到 r 是质数

4. 由 r,s 生成 p (1) p=(s^(r-1)-r^(s-1)) mod (r*s) (2) 若 p 为偶数,则 p=p+r*s (3) p=p+2rs 直到 p 是质数

5. 高次幂的求模算法 ( C=(M^e) mod n )

步骤如下: ___________________________

将 e 用2进制表示 Ek Ek-1 Ek-2 ... E1 E0 Ei∈{0,1} 0<=i<=k
C=1
for i=k to 0 C=C^2 mod n
若 Ei =1 则 C=C*(M mod n)
6. 快速解密算法:

除了直接用 M=(C^d) mod n 来计算,这里给出一个快速算法。

C 为密文,p〈q

设 C1=C mod p C2=C mod q

d1=d mod (p-1) d2=d mod (q-1)

m1=m mod p=C1^d1 mod p

m2=m mod q=C2^d2 mod q A为常数,满足 A*p-1 能被 q 整除 (0<A<q-1)

则有 M=(((m2+q-m1)*A) mod q)*p+m1

RSA的缺点

RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure ElectronicTransaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。

由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。

RSA 的安全性

RSA算法之所以具有安全性,是基于数论中的一个特性事实:即将两个大的质数合成一个大数很容易,而相反的过程则非常困难。在当今技术条件下,当n足够大时,为了找到d,欲从n中通过质因子分解试图找到与d对应的p、q是极其困难甚至是不可能的。由此可见,RSA的安全性是依赖于作为公钥的大数n的位数长度的。为保证足够的安全性,一般认为现在的个人应用需要用384或512比特位的n,公司需要用1024比特位的n,极其重要的场合应该用2048比特位的n。

RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。

RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,也并没有从理论上证明破译RSA的难度与大数分解难度等价。因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

目前, RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。

RSA算法的保密强度,随其密钥的长度增加而增强。但是,密钥越长,其加解密所耗的时间也越长。因此,要根据所保护信息的敏感程度与攻击者破解所要花的代价值不值得和系统所要求的反应时间来综合考虑决定。尤其对于商业信息领域更是如此。

RSA的选择密文攻击

RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:

( XM )^d = X^d *M^d mod n

前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction对文档作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最近的破解

荷兰
早在1999年,位于荷兰的一个国际科学组织宣布他们已破解一个用於保护每天数以百万的因特网交易的国际安全密码,从而揭示出在电子商业中存在着严重的、无法保证安全的潜在可能。

该组织认为,这个密码的破解,可能会对互联网上的电子商务市场带来严重的影响。

这个科学组织是为阿姆斯特丹的数学和计算机科学协会的国家研究中心工作的,他们声称已经破解了一个类似著名的RSA-155加密系统的512位数的密码,这种加密系统是由麻省理工学院在70年代中期设计的。RSA-15系统被广泛用于保护硬件和软件上传输的电子数据。例如,RSA-155被应用在国际安全协议SSL上。尤其,该组织认为512位质因数的长度与95%的用于互联网上电子商务的密匙类似。

该组织说,"结果显示,在开始预料电子商务之前,普遍采用512位密码对于一个中等程度的黑客已不再安全。"该组织还说,"用于保护512位密匙的耗资是很大的,数十亿的美圆每天要通过财政机构投入其中。"当密码第一次创建时,人们认为512位因数实际上是不可能的,换句话说,没有人认为一个512位的密匙能被破解,但是事与愿违。为了找出质因数,该组织使用了总共300个SUN公司的SGI工作站和奔腾级的PC电脑。而破解密码要借助计算机整日整夜的运行,耗费大约35年的计算时间。一个姆斯特丹计算机学术中心的型号为CRAY C916的拥有2GB内存的超级计算机也被投入使用。

该组织说密码被破解了大约7个月。 该组织说"如果通过互联网上成百上千的参与者参加当前的大型分布式计算工程,那么就有可能把破解512位数的时间从7个月减少到一周。"

以色列Adi Shamir
以色列电脑专家发明一部新电脑,能在几日内破解目前广泛运用的密码系统,对一般的电子商务构成重大威协。

以色列魏茨曼科学院的沙米尔,正是目前市场广泛应用的密码系统"RSA公开密码本"的设计者。他新设计的电脑系统,制造费用约达200万美元,可以在两三天内,译解以五百一十二比特(512 bits)写成的RSA密码,而一些高度机密的军事、银行及其他高度保护的数据库等系统,则不在此列。

沙米尔今年5月曾公开其设计雏型,近日在麻省伍斯特理工学院的一个研讨会上,首次向在座20名电脑密码专家解释其新设计。他是从电脑二极管的闪光得到灵感,设计出15厘米乘15厘米的电脑,精密量度二极管的闪光,再加以计算,就能在两三日之间迅速破解RSA密码。

密码专家认为,这设计进一步显示目前应用的RSA密码其实十分脆弱,相信犯罪组织、政府部门、研究机构等等,都会对此新发明很感兴趣。虽然较敏感的机密系统都会用较长的密码,即一千零二十四比特(1,024bits),但基于各种考虑,美国政府要有特别批准才会出口较长的密码,而目前最流行的浏览器都是用五百一十二比特(512 bits)写成。

RSA公钥体系可用于数字签名

RSA公钥体系还可用于对数据信息进行数字签名。所谓数字签名就是信息发送者用其私钥对从所传报文中提取出的特征数据或称数字指纹进行RSA算法解密运算操作,得到发信者对该数字指纹的签名函数H(m)。签名函数H(m)从技术上标识了发信者对该电文的数字指纹的责任。因发信者的私钥只有他本人才有,所以他一旦完成了签名便保证了发信人无法抵赖曾发过该信息(即不可抵赖性)。经验证无误的签名电文同时也确保信息报文在经签名后未被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名的真实性进行验证。美国参议院已通过了立法,现在在美国,数字签名与手书签名的文件具有同等的法律效力。

在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数) 生成的, 对这些HASH函数的特殊要求是:

1.接受的输入报文数据没有长度限制;

2.对任何输入报文数据生成固定长度的摘要(数字指纹)输出;

3.从报文能方便地算出摘要;

4.难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要;

5.难以生成两个不同的报文具有相同的摘要。

RSA的实用性

公开密钥密码体制与对称密钥密码体制相比较,确实有其不可取代的优点,但它的运算量远大于后者,超过几百倍、几千倍甚至上万倍,复杂得多。

在网络上全都用公开密钥密码体制来传送机密信息,是没有必要的,也是不现实的。在计算机系统中使用对称密钥密码体制已有多年,既有比较简便可靠的,久经考验的方法,如以DES(数据加密标准)为代表的分块加密算法(及其扩充DESX和TripleDES);也有一些新的方法发表,如由RSA公司的Rivest研制的专有算法RC2、RC4、RC5等,其中RC2和RC5是分块加密算法,RC4是数据流加密算法。

在传送机密信息的网络用户双方,如果使用某个对称密钥密码体制(例如DES),同时使 用RSA不对称密钥密码体制来传送DES的密钥,就可以综合发挥两种密码体制的优点,即DES 高速简便性和RSA密钥管理的方便和安全性。

RSA算法已经在互联网的许多方面得以广泛应用,包括在安全接口层(SSL)标准(该标准是网络浏览器建立安全的互联网连接时必须用到的)方面的应用。

基于RSA算法的公钥加密系统具有数据加密、数字签名(DigitalSignature)、信息源识别及密钥交换等功能。目前,RSA加密系统主要应用于智能IC卡和网络安全产品。选用RSA算法作为公共钥加密系统的主要算法的原因是算法安全性好。在模N足够长时,每lnN个整数中就有一个大小接近于N的素数。在模长为1024bit时,可以认为RSA密码系统的可选密钥个数足够多,可以得到随机、安全的密钥对。公共钥加密系统多用于分布式计算环境,密钥分配和管理易于实现,局部攻击难以对整个系统的安全造成威胁。目前还没有攻破实际应用系统的例子。 

RSA专利

RSA算法在美国申请了专利,但在其他国家无专利。美国专利已经于2000年9月20日到期。

美国当地时间9月6日,美国公共密钥系统安全公司(RSA也称数据安全有限公司)决定放弃权利公开其严格保密的加密规则技术。RSA公司的公共密钥加密规则是一种类似于"c = me mod n"的数字式加密规则,公共密钥加密规则被认为是确保绝大多数网上电子商务安全的加密与密码技术的标准规则。

美国国家专利局称,加密通信系统与技术专利编号为No.4405829,该专利权于1983年9月20日授予了麻省理工学院,其后该专利由公共密钥安全公司完全买断,专利权限将于2000年9月20日到期。与RedHat公司公开Linux系统资源及其它公司公开技术资源的情况相似,这一公开加密规则的举动将使其竞争对手可以在自己的产品中嵌入该加密技术规则。

公共密钥安全公司的首席执行官阿特·科维罗接受InternetNews.com网站采访时称,他们相信,这一举动将进一步巩固RSA加密技术作为有线、无线应有程序及设备加密标准的地位。

RSA公司公开发表它的加密算法,任何开发工作都可以使用该算法。基于该算法的产品和解决方案可以完全自由地在美国销售。这使得所有的公司都可以免费基于它的技术开发安全解决方案。这个算法已经在Netscape的浏览器和微软公司的IE浏览器中被使用,是目前在线交易的主要安全技术。

RSA公司代表Holahan的声明称,该公司的专利已经通过建立可靠的安全标准对电子商务提供了帮助。现在公开这一专利技术将给业界的安全产品带来新变化。

RSA算法和DES算法

算法的比较

上一篇〈分组密码算法分析与改进>;中已经对DES作出了简单的分析,在这里再简单描述一下:

DES数据加密标准用于对64比特的数据进行加密和解密。DES算法所用的密钥也是64比特,但由于其中包含了8个比特的奇偶校验位,因而实际的密钥长度是56比特。DES算法多次组合迭代算法和换位算法,利用分散和错乱的相互作用,把明文编制成密码强度很高的密文。DES算法的加密和解密的流程是完全相同的,区别仅仅是加密与解密使用子密钥序列的顺序正好相反。

RSA算法是公开密钥系统中的杰出代表。RSA算法的安全性是建立在具有大素数因子的合数其因子分解困难这一法则之上的。RSA算法中加密密钥和解密密钥不相同,其中加密密钥公开,解密密钥保密,并且不能从加密密钥或密文中推出解密密钥。

DES算法和RSA算法各有优缺点,我们可以对DES算法和RSA算法在以下几个方面作一比较。

比较1

在加密、解密的处理效率方面,DES算法优于RSA算法。因为DES密钥的长度只有56比特,可以利用软件和硬件实现高速处理;RSA算法需要进行诸如200比特整数的乘幂和求模等多倍字长的处理,处理速度明显慢于DES算法。

比较2

在密钥的管理方面,RSA算法比DES算法更加优越。因为RSA算法可采用公开形式分配加密密钥,对加密密钥的更新也很容易,并且对不同的通信对象,只需对自己的解密密钥保密即可;DES算法要求通信前对密钥进行秘密分配,密钥的更换困难,对不同的通信对象,DES需产生和保管不同的密钥。

比较3

在安全性方面,DES算法和RSA算法的安全性都较好,还没有在短时间内破译它们的有效的方法。

比较4

在签名和认证方面,DES算法从原理上不可能实现数字签名和身份认证,但RSA算法能够容易地进行数字签名和身份认证。

基于的DES和RSA的新的加密方案

基于以上比较结果,DES及RSA各有短长,可设计出一种综合DES和RSA优点,同时又避免了它们各自的不足的加密方案。基本原理是:数据通信之前,用DES方法对消息明文加密,同时用RSA方法对DES密钥进行加密和实现数字签名。

设发送方为A(加密密钥为Kea,解密密钥为Kda),接收方为B(加密密钥为Keb,解密密钥为Kdb),上述加密方案的具体实现步骤如下:

1. 发送方先生成用于DES加密的密钥K,为了提高数据的安全性,每一个密钥K只用一次。

2. 发送方从密钥服务器中获取接收方的RSA的公开加密密钥Keb,并用Keb加密DES的密钥K形成密文Ck。

3. 发送方生成需要签名的信息,并用自己的RSA的解密密钥Kda和Keb共同形成数字签名。

4. 发送方用K加密明文和签名的信息,然后连同Ck一起形成密文C发往接收方。

5. 接收方接收到C后,先用自己的解密密钥Kdb解密出C中的DES密钥K,再利用K解密出明文和签名信息。

6. 接收方用发送方的公开密钥Kea和自己的解密密钥Kdb对签名信息进行身份认证,然后对签名信息作适当处理后(例如填写自己的标识号等),再形成自己的数字签名信息发往发送方。

7. 发送、接收双方均删除DES密钥K。

这样综合了DES算法和RSA算法的长处,所以具有如下优点:

加密、解密速度快。因为对数据量大的明文是采用DES算法来加密和解密的,而只有对签名信息和DES算法的密钥K这样的数据量小的信息才采用RSA算法,所以加密、解密的速度快,接近DES算法的速度。
通信双方在传输的密文中携带RSA加密的DES密钥,不用再秘密交换密钥,减小了密钥在传输过程中泄密的风险。
具有签名和认证的功能。由于采用了RSA算法,通信双方可以将自己的数字签名信息互相发给对方供保留和认证。
密钥管理方便。虽然采用了DES算法,但不是对每一通信对象都保密管理相应的DES密钥,只需保密管理自己的RSA解密密钥就行了。RSA公开密钥可以任意公开,DES密钥在通信之前产生,不必事先约定,通信结束后,销去相应的DES密钥。
其他公钥体制

人们一直努力在其他困难问题上建立公开密钥密码体制,不至于一旦一些数学难题被解决以后,没有可用的密码算法,所以出现了大量的公开密钥密码算法,包括:背包体制,POHLIG-Hellman算法,Rabin算法,ElGamal算法,SCHNORR算法,ESIGN算法,McEliece算法,OKAMOTO算法,还可以在有限域上的椭圆曲线上建立RSA,ElGamal算法等。

我们认为RSA算法是目前最好的密码算法,它不仅可以作为加密算法使用,而且可以用作数字签名和密钥分配与管理,而DSA只适合作签名,且安全强度和速度都不如RSA,椭圆曲线上的公开密钥密码系统安全强度依赖于曲线的选择和体制,我们相信它会有更高的安全强度。

目前200比特长的椭圆曲线密码体制已经有相当高的安全强度。

在几乎所有的实用公开密钥密码系统中,都涉及到大数运算和素数选择 ,模幂运算采用反复平方取模算法,素数测试一般采用Rabin-Miller算 法,还有其他素性测试算法用来选择大素数,如Solovag-Strassen 测试法,Lehmann 测试法等。

公开密钥系统的安全性

由于公钥不需要保密,因此在黑客或许会用他们自己的公钥冒充其他人的公钥进行攻击,这是这种模式的主要风险。为了防范这种攻击的发生,我们采用公钥证书。证书是一组规定了与特定公钥有关的单个计算机或主机名称的数字化数据。名称和密钥都受到一个值得信任的第三方附加的数字签名的保护:即证书机关(或CA)。

公钥领域的大多数主要厂商都可以成为证书机关,他们可以将他们的信任状(credentials)安装在 Web 浏览器。其他机构可以要求这些厂商有尝签发证书,在使用标准浏览器时,这些证书就会生效。另外,企业也可以购买软件自己签发证书。然而,被用来给这些证书签名的信任状必须安装在任何需要验证这些证书的软件 (如 Web浏览器)中。

另外,公钥长期存在的一个问题是密钥的撤消。公钥是非常易于创建和签发的。其成本主要是在撤消密钥的过程中产生的。由于公钥在签发时不需要保密,因此用户可以自由地复制和签发它们,这样其他用户在需要时就可以得到它们。然而,如果需要更换公钥,那么这个问题就成为一场噩梦。例如,黑客可能会得到属于特定公钥的私钥,这样他就可以冒充密钥的所有者和欺骗任何使用该公钥的人。如果所有者意识到这个问题,并试图更换私钥,他必须以某种方式联络曾经得到过旧的公钥的所有人和确保其他人不再使用旧的公钥。

大多数公钥系统现在都依靠撤消清单识别不应再使用的公钥。这些清单类似于以前信用卡特约商户使用的厚厚的小册子:在小册子中列出了所有丢失或被偷窃的信用卡的卡号,这些商户会查看小册子,核实某个信用卡是否被偷。其它在线证书验证技术虽然已经出现,但是还没有完全满意的解决方案应用到实践中。

随着用户的增加,密钥的数量管理也需要考虑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用的加解密技术(2) 的相关文章

  • Dynamics CRM 后台代码如何发邮件《 中秋快乐!》

    前面搞了邮箱的配置 那么就可以借助Dynamics CRM工作流来给用户发邮件了 比如签核提醒 什么的 对于这些收件人简单的固定且存在CRM中 比如用户或者联系人的 通过配置就可以实现 但是当邮件通知的人不在CRM中或者收件人cc复杂时 无

随机推荐

  • 记录xss练习 level1-level5(一)

    练习网址 http test xss tv 本人菜鸟一枚 如有分析不对的地方 望前辈们指正 话不投机 不对 话不多说直接上图 上分析 level1 很简单的一道题 从URL中我们可以分析到 xxx level1 php name test
  • 图像处理学习路线总结 python

    记录一下我的图像处理学习路线 后续有其他想法了再补充 目录 1 图像处理基础知识 1 1 数字图像处理公开课 2 利用opencv进行实现 2 1 在pycharm里安装opencv库 2 2 图像处理基础操作 2 2 1 读取图片 2 2
  • Android 控件最上层显示方法

    view bringToFront 可以讲布局在下层的控件放到上层 不被其他控件挡住
  • rails的一点点认识

    1 会开创新项目 rails new 名称 2 会创建控制类 rails g generate controller 类名 html文件名 3 会创建model rails g generate model 名称 散列属性key value
  • ipsec openswan资料搜集

    http blog csdn net rosetta article category 1190390 http blog chinaunix net uid 127037 list 1 html sid 136058 http blog
  • 大数据面试题(五)----HIVE面试题

    版权声明 本文为CSDN博主 北京小辉 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net silentwolfyh article details 103
  • 在进入微信小程序之前显示登录页面的解决方案

    这几天想要在小程序进入之前做个登陆的页面 用户输入账号密码正确才能进入小程序 但是看了因为小程序一启动就是默认进入tabar里的第一个页面 上了百度查也是没有哦好的方式 自己琢磨了以下的几种方式 1 使用路由重定向 小程序中有几个用于重新向
  • Spring整合mybatis完整maven配置

    Spring整合mybatis完整maven配置 Maven配置 2022年1月23 基本都是最新版本
  • HTML 表单标签

    一 什么是表单标签 表单是用来采集用户的输入数据 然后将数据提交给服务器 二 表单的组成 一个表单有三个基本组成部分 表单标签 这里面包含了处理表单数据所用程序的URL以及数据提交到服务器的方法 表单域 包含了文本框 密码框 隐藏域 多行文
  • #1295-D: Deprecated declaration I2C_Start - give arg types

    KEIL5编译器报警告 警告内容如下 1295 D Deprecated declaration I2C Start give arg types 警告原因无参数函数的函数声明没有标明参数为void型 在函数声明中加入void即可 警告代码
  • 1.Kubernetes基础入门学习概述系统架构及组件浅析

    目录 0x00 基础简述 1 发展经历 2 简要介绍 3 系统架构 Borg 系统 Kubernetes 系统 0x01 组件浅析 1 Kubernetes Master 2 Kubernetes Node 3 Kubernetes 插件
  • Keras利用卷积神经网络(CNN)识别手写数字(环境python3.5)

    今天介绍如何利用卷积神经网络进行MNIST数据集的手写数字识别 即将手写数字图像images识别为数字标签labels 目录 数据预处理 模型建立 评估模型准确率 进行预测 建模思路如下图 数据预处理 MNIST数据集共有训练数据60 00
  • json to dart工具

    工具链接https javiercbk github io json to dart
  • 单片机开发---ESP32S3移植lvgl+触摸屏

    书接上文 单片机开发 ESP32 S3模块上手 本章内容 熟悉一下ESP32S3的开发 修改范例程序的lvgl 使之能够匹配现在的显示屏 具体工作大概为通过SPI接口连接一块SPI串口屏幕 并且适配lvgl 最后加上触摸屏作为输入 屏幕 用
  • 判断是pc端还是移动端

    Navigator对象 Navigator 对象包含有关浏览器的信息 下面的userAgent 属性是一个只读的字符串 声明了浏览器用于 HTTP 请求的用户代理头的值 所以我们可以通过判断navigator useragent里面是否有某
  • 微信小程序-拒绝了语音权限后,重新授权

    效果图 第一步 封装在utils里 哪个页面需要的话 直接调用 export function impower var t this wx authorize scope scope record success res fail wx s
  • 递归解决八皇后回溯算法

    问题简述 八皇后问题是一个古来而著名的问题 该问题是19世纪著名的数学家高斯同学提出来的 在8 8的国际象棋上摆放八个皇后 使其不能互相的攻击 也就是说 任意的两个皇后不能放在同一行或则是同一个列或者是同一个对角线上 问有多少个摆放的方法
  • Skywalking-9.6.0系列之本地源码编译并启动

    Skywalking相信有很多人使用过 通过容器或者下载安装包进行安装的 今天从源代码角度 拉取 构建 启动 官方文档步骤简洁明了 我这边会结合自己遇到的一些问题做出总结 当前构建资源版本 MAC 10 15 7 IDEA 2021 2 n
  • 正版steam gta5如何免登录教程

    gta5中文叫做侠盗猎车手5 是一款围绕犯罪为主题的开放式动作冒险游戏 凭借其全新的雷霆引擎 不一样的战斗方式 乃至今日仍受到众多玩家的喜爱 这么受欢迎的游戏当然需要付费购买啦 这可让许多小伙伴们都望而止步 为了满足玩家们的游戏需求 小编此
  • 常用的加解密技术(2)

    公开密钥体系 公开密钥密码体制是现代密码学的最重要的发明和进展 一般理解密码学 Cryptography 就是保护信息传递的机密性 但这仅仅是当今密码学主题的一个方面 对信息发送与接收人的真实身份的验证 对所发出 接收信息在事后的不可抵赖以