一、前言
由于工作原因涉及到国密算法,加上自身对密码学的相关知识又不是很了解。经过一段时间的查找资料、请教公 司同事之后,诞生了这篇对密码学的知识梳理。
首先我们先回答一个问题信息
二、为什么要进行加密?
所谓加密,就是对信息进行重新编码,从而达到隐藏信息内容,使非法用户无法获取信息真实内容的一种技术手段。发送方用加密密钥,通过算法(或加密设备),将信息加密后发送出去。接收方在收到密文后,用解密密钥将密文解密,恢复为明文。即使信息在传输过程中被窃取,窃取者也只能得到无法理解的密文,从而对信息起到保密作用。任何一个加密系统至少包括四个组成部分:未加密的报文(明文)、加密后的报文(密文)、用于加解密的设备或算法和用于加解密的密钥。
加密技术用于提供以下功能:
• 机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将明文转换为密文,并使用相应的解密算法将密文转换回明文。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。
• 数据完整性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。
• 身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。
加密技术分为两类:即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以数据加密标准(DES,Data Encryption Standard)算法为典型代表,非对称加密通常以RSA(Rivest Shamir Ad1eman)算法为代表。对称加密的加密密钥和解密密钥相同,而非对称加密的加密密钥(公钥)和解密密钥(私钥)不同,加密密钥可以公开而解密密钥需要保密。
三、加密和编码的区别
我们需要弄清什么是编码,什么是加密,什么是摘要。
3.1编码
编码的本质是信息形式的转化。编码的目的不是为了加密信息,而是将消息转化成统一的格式,方便在不同系统之中传输。例如最常见的ASCII字符编码。由于网络上只能传输二进制数据,任何数据。如果想要经由网络传输,就必须先转化成二进制,ASCII 提供了一个将A、B、C等字母转化为二进制的规则。信息—>编码—>二进制—>解码—>信息。解码是编码的逆过程。从概念上可以看出,编码知识表现形式的转换,并没有保密作用。因为编码和解码的算法是公开的,只要知道是什么编码的内容,任何人都可以轻松地解码。常用的编码:Base64,16进制、Base32、UTF-8、GBK等等。对于无损编码,我们都可以通过解码的方式恢复出原文。
3.2 加密
加密就是对明文按照某种算法进行处理,是其变成不可读的一段代码,达到一种保护数据的目的。加密算法分为:对称加密和非对称加密。有的笔者把hash算法也算成一种加密,这是有争议的。严格的讲,hash算法并不能起到加密的作用,它是不可逆的,而且有些算法已经通过碰撞被破解了。这里我把它单独拿出来。
四、什么是对称加密技术?
在对称加密体系中,对信息的加密和解密都使用相同的密钥,信息的发送者和接收者在进行信息的传输与处理时,必须共同持有该对称密钥。最典型的对称加密算法有美国的DES(数据加密标准)和欧洲的IDEA(国际数据加密算法)。
对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DNS的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。
对称加密系统的安全性依赖于以下两个因素。第一,加密算法必须是足够强的,仅仅基于密文本身去解密信息在实践上是不可能的;第二,加密方法的安全性依赖于密钥的秘密性,而不是算法的秘密性。因算法不需要保密,所以制造商可以开发出低成本的芯片以实现数据加密,这些芯片有着广泛的应用,适合于大规模生产。对称加密的优点是计算开销小,加解密速度快,保密性强,适合大数据量的加密。对称加密最主要的问题是密钥的分发和管理非常复杂、代价高昂。由于对称加密在发送、接收数据之前必须完成密钥的分发,而且必须为每个传送的对象创建不同的单一密钥,这样导致随着用户的增加,密钥的需求量成倍增加。比如对于具有n个用户的网络,需要n(n-1)/2个密钥。密钥的分发与管理是该加密体系中的最薄弱的环节,各种基本的手段均很难保障安全地完成此项工作。对称加密算法另一个缺点是不能实现数字签名。
五、什么是非对称加密技术?
公开密钥密码体系是现代密码学的最重要的发明和进展。保护信息传递的机密性仅仅是当今密码学主题的一个方面;对信息发送与接收人真实身份的验证、对所发出/接收信息的不可抵赖以及保障数据的完整性正是现代密码学主题的另一方面。公开密钥密码体系对这两方面的问题都给出了出色的解答,并正在继续产生许多新的思想和方案。
在公钥密码体系中,每个实体都有一对互相匹配的密钥:公开密钥和私有密钥。公开密钥为一组用户所共享,用于加密或验证签名;私有密钥仅为证书拥有者本人所知,用于解密或签名。这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。若以公钥作为加密密钥,以私钥作为解密密钥,则可实现多个用户加密的信息只能由一个用户解读;反之,以用户私钥作为加密密钥而以公钥作为解密密钥,则可实现由一个用户加密的信息而多个用户解读。前者可用于数字加密,后者可用于数字签名。常用的公开密钥算法有RSA、DSA和Diffie Hellman等。
公钥加密技术适应网络的开放性要求,解决了密钥的发配和管理问题,比如对于具有n个用户的网络,仅需要2n个密钥。另外,使用公钥加密还能够很容易地实现数字签名,从而使进行数据通信的双方可以安全地确认对方身份。公钥加密的缺点是其算法复杂,加密数据的速度较低,不适合大数据量的加密。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
RSA算法是Rivest、Shamir和Adleman于1977年提出的第一个完善的公钥密码体制,其安全性是基于分解大整数的困难性。在RSA体制中使用了这样一个基本事实:到目前为止,无法找到一个有效的算法来分解两大素数之积。RSA算法的描述如下:
公开密钥:n=pq(p、q分别为两个互异的大素数,p、q必须保密)
e与(p-1)(q-1)互素
私有密钥:d=e-1 {mod(p-1)(q-1)}
加密:c=me(mod n),其中m为明文,c为密文。
解密:m=cd(mod n)
利用目前已经掌握的知识和理论,分解2048bit的大整数已经超过了64位计算机的运算能力,因此在目前和预见的将来,它是足够安全的。
对称加密算法的难点在于密钥的分发,非对称加密的算法的缺点是性能比较低。结合二者的优点,使用非对称加密算法协商密钥(密钥一般都不长),使用对称加密算法加密发送的内容,可以有效地解决两种加密算法的缺点,SSL/TLS正式这种思想的一个实现。
六、消息摘要算法
消息摘要算法即采用单向HASH算法将需要加密的明文进行摘要,而产生的具有固定长度的单向散列(HASH)值。其中,散列函数是一种将大量数据映射到较小量数据的单向数学函数,满足:对原信息的少量改动(即使是一个BIT),可以导致结果的巨大变化。消息摘要算法主要有SHA1、MD5、MD2等标准,一般用于和公钥加密一起提供安全的数字签名方法。
MD2,MD4和MD5(MD表示信息摘要)是由Ron Rivest 设计的专门用于加密处理的,并被广泛使用的HASH函数,它们产生一种128位信息摘要,除彻底地搜寻外,没有更快的方法对其加以攻击,而其搜索时间一般需要1025年之久。
单向HASH函数用于产生信息摘要。HASH函数主要可以解决以下两个问题:在某一特定的时间内,无法查找经HASH操作后生成特定HASH值的原报文;也无法查找两个经HASH操作后生成相同HASH值的不同报文。这样在数字签名中就可以解决验证签名和用户身份验证、不可抵赖性的问题。
信息摘要(Message Digest)简要地描述了一份较长的信息或文件,它可以被看作一份长文件的“数字指纹”。信息摘要用于创建数字签名,对于特定的文件而言,信息摘要是唯一的。信息摘要可以被公开,它不会透露相应文件的任何内容。
举一个例子:
第一步:A要给B发送一个文件,他首先用哈希算法对文件进行加密得到哈希值,称之为摘要,取名HashA。
第二步:对生成的哈希值进行私钥加密,称之为数字签名。
第三步:A将数字签名和文件一起发送给B。
第四步:B对数字签名进行公钥解密得到Hash值即摘要,如果成功表示来自A。
第五步:B和A一样对正文进行摘要得到Hash值,取名HashB,对比同A的HaahA.如果一致表示文件没有被篡改。
关于加解密,主要内容就这么多。
欢迎关注我的个人公众号,一起探讨开发相关的知识。

401



被折叠的 条评论
为什么被折叠?



