对称加密、非对称加密、摘要、数字签名、数字证书

对称加密、非对称加密、摘要、数字签名、数字证书,第1张

作为一个开发人员,或多或少都听说过对称加密、非对称加密、摘要、数字签名、数字证书这几个概念,它们是用来保证在互联网通信过程中数据传输安全的。有人可能会有疑惑,我给传输数据加个密不就安全了,为什么还要搞这么多花样出来?本文主要通过一个案例来讲解这几个概念的实际作用。

在此之前,我先简单介绍一下这几个概念。

对称加密是指用来加密和解密的是同一个秘钥。其特点是加密速度快,但是秘钥容易被黑客截获,所以安全性不高。常见的有AES、DES算法

非对称加密是指用来加密和解密的是不同的秘钥,它们是成对出现的,称为公钥和私钥,知道其中一个秘钥是无法推导出另外一个秘钥的。用公钥加密的内容需要用私钥才能解密,用私钥加密的内容需要用公钥才能解密。非对称加密的特点是安全性高,缺点是加密速度慢。常见的有RSA算法。

所谓的摘要就是一段信息或者一个文件通过某个哈希算法(也叫摘要算法)而得到的一串字符。摘要算法的特点就是不同的文件计算出的摘要是不同的(也有可能相同,但是可能性非常非常低),比如一个1G的视频文件,哪怕只是改动其中一个字节,最后计算得到的摘要也是完全不同的,所以摘要算法通常是用来判断文件是否被篡改过。其还有一个特点就是通过摘要是无法推导出源文件的信息的。常用的摘要算法有MD5、SHA等。

数字签名就是一个文件的摘要加密后的信息。数字签名是和源文件一起发送给接收方的,接收方收到后对文件用摘要算法算出一个摘要,然后和数字签名中的摘要进行比对,两者不一致的话说明文件被篡改了。

数字证书是一个经证书授权中心生成的文件,数字证书里一般会包含公钥、公钥拥有者名称、CA的数字签名、有效期、授权中心名称、证书序列号等信息。其中CA的数字签名是验证证书是否被篡改的关键,它其实就是对证书里面除了CA的数字签名以外的内容进行摘要算法得到一个摘要,然后CA机构用他自己的私钥对这个摘要进行加密就生成了CA的数字签名,CA机构会公开它的公钥,验证证书时就是用这个公钥解密CA的数字签名,然后用来验证证书是否被篡改。

场景:

张三要找人装修一个房子,原则是谁的出价便宜就给谁装修,所以对于报价文件就是属于机密文件。下面我们来看下不同的方式传输报价文件都会有什么风险。

现在李四想接这个装修的活,他做了一份报价文件(文件名: lisi.txt ,文件内容: 报价50万 )。然后李四用一个对称秘钥 123 对这个文件进行加密。最后李四将这个秘钥和加密的文件发给张三,张三收到后用这个秘钥解密,知道了李四的报价是50万。

同时王五也想接这个装修的活,他本来是想报价55万的,但是又担心报价太高而丢掉这个活。恰巧王五是个黑客高手,于是他截获了李四发给张三的秘钥和加密文件,知道了李四报价是50万。最后王五将自己的报价改成了49万发给张三,结果王五接下了这个装修活。

结论:

用对称加密的话,一旦秘钥被黑客截获,加密就形同虚设,所以安全性比较低。

首先张三会生成一对秘钥,私钥是 zhangsan1 ,公钥是 zhangsan2 ,私钥张三自己保存,将公钥公布出去。

李四将报价文件 list.txt 用张三公布的公钥 zhangsan2 进行加密后传给张三,然后张三用私钥 zhangsan1 进行解密得到李四的报价是50万。

这个时候即使王五截获到了李四发给张三的报价文件,由于王五没有张三的私钥,所以他是无法解密文件的,也就无法知道李四的报价。最后王五因为报价55万而丢掉了这个装修的机会。

所以用非对称加密是可以保证数据传输安全的。不过这里说一句题外话,既然非对称加密安全性高,那为什么不淘汰掉对称加密呢?其实关键就在于加密速度,非对称加密计算量很大,所以加密速度是很慢的,如果发送消息非常频繁,使用非对称加密的话就会对性能造成很大影响。所以在实际开发过程中通常是对称加密和非对称加密结合使用的。也就是对称加密的秘钥是用非对称加密后发送的,这样能保证对称加密的秘钥不被黑客截获,然后在发送业务数据时就用对称加密。这样既保证了安全性也保证了加密速度。

结论:

非对称加密可以防止黑客截获加密后的内容,安全性高。

前面都说了非对称加密是安全的,那为什么还要数字签名呢?

设想一下,王五截获了李四的报价文件,王五虽然无法知道李四的实际报价,但是他完全可以伪造一份李四的报价(文件名: lisi.txt ,文件内容: 报价60万 ),然后将这份伪造文件用张三公布的公钥 zhangsan2 进行加密后替换原来的报价文件。张三收到后解密发现报价是60万,于是张三就以为李四报的价是60万,最后决定将装修的活给报价55万的王五来做。

发生这个问题的关键就在于张三无法知道报价文件是否被篡改过。要解决这个问题就需要用到数字签名。

首先李四需要自己生成一对非对称加密的秘钥,私钥 lisi1 自己保存,公钥 lisi2 发给张三。然后李四对自己的报价文件通过摘要算法得到一个摘要(假设摘要是 aaa ),再用自己的私钥 lisi1 加密这个摘要就得到了报价文件的数字签名,最后将加密的报价文件和数字签名一起发给张三,张三收到后先用李四发过来的公钥 lisi2 解密数字签名得到摘要 aaa ,然后用自己的私钥 zhangsan1 解密加密的文件得到报价源文件,然后对报价源文件进行摘要算法,看计算得到的结果是不是 aaa ,如果不是 aaa 的话就说明报价文件被篡改了。

在这种情况下,如果王五截获了李四发给张三的文件。王五是无法解密报价文件的。如果王五伪造一份报价文件的话,等张三收到后就会发现报价文件和数字签名不匹配。那王五能不能伪造报价文件的同时也伪造签名呢?因为王五没有李四的私钥,所以没法对伪造的报价文件的摘要进行加密,所以也就没法伪造签名。

结论:

非对称加密虽然能确保加密文件内容不被窃取,但不能保证文件不被篡改。数字签名就是用来验证文件是否被篡改过。

既然非对称加密可以保证文件内容的安全性,数字签名又可以保证文件不被篡改,那还要数字证书有什么用呢?

我们再来设想一下,王五自己也生成了一对用于非对称加密的秘钥,私钥是 wangwu1 ,公钥是 wangwu2 。前面李四将自己的公钥 lisi2 发给张三的过程中被王五给截获了,王五用自己的公钥 wangwu2 替换了李四的公钥 lisi2 ,所以张三最后收到的公钥实际上是王五的,但张三对这并不知情。后面李四发的数字签名和加密的报价文件都被王五截获,并且王五伪造了一份报价文件,同时用自己的私钥加密报价文件的摘要生成伪造的签名并发给张三,张三收到后进行验证发现数字签名和报价文件是匹配的,就以为这份报价文件是真实的。

出现这个问题的关键就在于张三没法确认收到的公钥到底是不是李四发的,这个时候数字证书就起到作用了。李四到权威的数字证书机构申请数字证书,证书里面包含了公钥( lisi2 )和公钥的拥有者( 李四 )等相关信息,然后李四将证书发给张三,张三通过证书里面的信息就可以知道公钥到底是不是李四的了。

那证书在发送过程中有没有可能被王五截获并篡改呢?要知道证书里面还包含CA的数字签名,这个签名是证书机构用他们自己的私钥对证书的摘要进行加密的,而公钥是公开的。所以即便王五截获并篡改了证书内容,他也无法伪造证书机构的签名,张三在收到证书后通过验证签名也会发现证书被篡改了。所以到这一步才能保证数据传输的真正安全。

本文描述了MD5报文摘要算法,此算法将对输入的任意长度的信息进行计算,产生一个128位

长度的“指纹”或“报文摘要”,假定两个不同的文件产生相同的报文摘要或由给定的报文摘要产生

原始信息在计算上是行不通的。MD5算法适合用在数据签名应用中,在此应用中,一个大的文件必

须在类似RSA算法的公用密钥系统中用私人密钥加密前被“压缩”在一种安全模式下。

MD5算法能在32位机器上能以很快的速度运行。另外,MD5算法不需要任何大型的置换列表。

此算法编码很简洁。MD5算法是MD4报文摘要算法的扩展。MD5算法稍慢于MD4算法,但是在设

计上比MD4算法更加“保守”。设计MD5是因为MD4算法被采用的速度太快,以至于还无法证明

它的正确性,因为MD4算法速度非常快,它处在遭受成功秘密攻击的“边缘”。MD5后退了一步,

它舍弃了一些速度以求更好的安全性。它集中了不同的评论家提出的建议,并采取了一些附加的优化

措施。它被放在公共的地方以求公众的评论意见,它可能当作一个标准被采纳。

作为基于OSI的应用,MD5的对象标识符是:

md5OBJECTIDENTIFIER::=

iso(1)member-body(2)US(840)rsadsi(113549)digestAlgorithm(2)5}

在X.509类型AlgorithmIdentifier[3]中,MD5算法参数应该包括NULL类型。

2 术语和符号

本文中一个“字”是32位,一个“字节”是8位。一系列位串可看成是一系列字节的普通形式,

其中的连续的8位看成一个字节,高位在前,同理一系列字节串可看成是一系列32位的字,其中每

个连续的4个字节当作一个字,地位在前。

我们定义x_i代表“x减去I".如果下划线左边的是一个表达式,则用括号括住,如:

x_{i+1}。同样我们用^代表求幂,这样x^i则代表x的i次幂。

符号“+”代表字的加,X<<<s代表32位的值X循环左移s位,not(X)代表X的按位

补运算,XvY表示X和Y的按位或运算,XxorY代表X和Y的按位异或运算,XY代表

X和Y的按位与运算。

3 MD5算法描述

我们假设有一个b位长度的输入信号,希望产生它的报文摘要,此处b是一个非负整数,b也可

能是0,不一定必须是8的整数倍,它可能是任意大的长度。我们设想信号的比特流如下所示:

m_0m_1...m_{b-1}

下面的5步计算信息的报文摘要。

(1)补位

MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。即数

据扩展至K*512+448位。即K*64+56个字节,K为整数。补位 *** 作始终要执行,即使数据长度LEN

对512求余的结果已是448。

具体补位 *** 作:补一个1,然后补0至满足上述要求。总共最少要补一位,最多补512位。

(2)补数据长度

用一个64位的数字表示数据的原始长度b,把b用两个32位数表示。那么只取B的低64位。

当遇到b大于2^64这种极少遇到的情况时,这时,数据就被填补成长度为512位的倍数。也就是说,

此时的数据长度是16个字(32位)的整数倍数。用M[0...N-1]表示此时的数据,其中的N是16

的倍数。

(3)初始化MD缓冲器

用一个四个字的缓冲器(A,B,C,D)来计算报文摘要,A,B,C,D分别是32位的寄存器,初

始化使用的是十六进制表示的数字

A=0X01234567

B=0X89abcdef

C=0Xfedcba98

D=0X76543210

(4)处理位 *** 作函数

首先定义4个辅助函数,每个函数的输入是三个32位的字,输出是一个32位的字。

X,Y,Z为32位整数。

F(X,Y,Z)=XYvnot(X)Z

G(X,Y,Z)=XZvYnot(Z)

H(X,Y,Z)=XxorYxorZ

I(X,Y,Z)=Yxor(Xvnot(Z))

这一步中使用一个64元素的常数组T[1...64],它由sine函数构成,T[i]表示数组中的第i个元

素,它的值等于经过4294967296次abs(sin(i))后的值的整数部分(其中i是弧度)。T[i]为32位

整数用16进制表示

MD5信息摘要算法一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。

扩展资料

1991年,Rivest开发出技术上更为趋近成熟的MD5算法。它在MD4的基础上增加了"安全带"(safety-belts)的概念。虽然MD5比MD4复杂度大一些,但却更为安全。

这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。

Den boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。

参考资料来源:百度百科-MD5值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11720181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存