Openssl及加密解密(一)数据加密解密及CA原理

  1. 云栖社区>
  2. 博客>
  3. 正文

Openssl及加密解密(一)数据加密解密及CA原理

技术小胖子 2017-11-08 00:54:00 浏览641
展开阅读全文

明文:plaintxt或者cleartext,也就是没有加密的,直接可以看懂的内容。密文就是通过特殊方式处理过的内容,无法直接看懂。

常见的加密方式:

  • 对称加密

  • 公钥加密

  • 单向加密

加密原理:将原文按固定大小切割成数据块,逐个数据块进行加密,因为逐字符加密的速度太慢了。在加密是通常把第一个块加密,然后再把第二个块加密,输出的第二个块还不是加密以后的第二个块,而是将第一个块加密后的结果和第二个块加密后的结果做异或操作作为第二个块的输出,所以你每拿到一个块之后要想还原就必须拿到前一个块,来做异或操作。


秘钥交换(IKE):DH算法。也就是在秘钥交换过程中没有发送任何密码,A经过计算生成一些数据给了B,B自己再生成一些数据传给A,A和B拿着对方给的数据经过计算得出口令,而且这个口令是一样的。


对称加密:

加密算法+口令,把要转换的数据也就是明文数据,通过加密算法内部转换明文变成密文。这个算法可能是公开的,但口令只有你自己知道。为了更加安全,那么加密本身不能过于依赖算法,因为算法固定而且一旦算法遭到破解,那么基于这个算法的所有密文都可以破解,所以算法固然重要,但是最重要的是口令,口令可以变,就算算法破解了,口令不知道也是没有用的。对称加密是加密和解密都使用相同的口令。比如DES(56bits)、AES(128bits)、AES(192bits)、AES(256bits)、3DES。

对称加密有个问题,算法对方可以拿到,但是口令呢?所以这是它最大的问题。如果通信涉及到多个方面而且口令不能使用相同的,那么你需要记录的密码就非常多。所以对称加密无法解决秘钥交换的问题,还有我给你密码如何保证收到密码的就是你也就是认证问题,另外就是别人截获密文然后做了修改收到的人解密后信息不对但是他并不知道这就数据完整性问题。

公钥加密(非对称加密):

相对于对称加密而言,公钥加密是非对称加密,它会生成公钥和私钥,公钥可以给任何人是公开的,A使用B的公钥进行加密,B使用自己的私钥进行解密。它解决了对称加密中需要记录众多口令的问题。但是公钥加密的密码长度很长,早期的512位到现在的2048位,这种加密方式造成加密速度很慢所以公钥加密一般不用来加密数据,而是用来加密口令,数据还是用对称加密。A生成口令加密数据,然后用B的公钥加密口令,然后把加密后的口令和数据传递给A,A用私钥解密口令,得到口令后再用口令解密数据。常用的公钥加密算法:RSA、DSA、DES、AES

这个过程也实现了秘钥交换过程,同时它还可以实现用户身份的认证即发信息的人是它声称的人,它是这么实现的,A用自己的私钥加密,如果要想解密就只能使用A的公钥,虽然公钥任何人都能获得,但是你用A的公钥一旦解密了信息,就证明这个信息是用A的私钥加密的,只有A才有A自己的私钥,所以就证明了发信息的这个人就是A。这时候你会想到,用自己的私钥加密数据那不等于没加密一样么,因为公钥谁都可以得到。再说公钥加密算法速度慢,用私钥加密也一样。所以通常都在引入另外一种方式,也就是单向加密。

单向加密:

单向加密可以保证数据完整性,经过加密的数据如何保证不被篡改,它本身不是一种加密技术而是一种不可逆的抽取数据指纹的技术,常见的有MD5、SHA1、SHA512、CRC32等。那么如果篡改了如何发现?A对数据抽取一段使用单向加密来获取特征码,也叫指纹信息。但是如何保证指纹信息不被篡改和重新生成呢?这就是上面说的和公钥加密结合。A抽取数据一段进行单向加密,生成特征码,然后用自己的私钥加密特征码,发送给B,这时候C截获了数据,然后使用A的公钥解密了特征码,然后再篡改了数据,这时候C再想加密特征码而他没有A的私钥所以C只能用自己的私钥加密特征码,当B收到数据以后,B使用单向加密获取数据的特征码,然后用A的公钥来解密发过来的加密特征码,显然无法成功,假设C没有篡改特征码而是修改的数据,那么B使用单向加密获取数据特征码,然后用A的公钥解密加密的特征码,两者一对比肯定不一样。虽然上述过程没有考虑数据本身的加密,但由于可非对称加密结合,实现了秘钥交换、身份验证、数据完整性,但无法保证数据私密性。那如何同时实现数据加密、数据完整性和身份认证呢


那如何同时实现数据加密、数据完整性和身份认证呢

三种方法融合在一起

  1. A生成原始数据,使用单向加密计算数据特征码(保证数据完整性),然后用A自己的私钥加密特征码(保证身份验证)

  2. A再找一个密码,用对称加密算法把数据、特征码整体加密(实现了对数据的加密,因为对称加密算法速度快)

  3. A再使用B的公钥,第二不中的对称加密算法中的密码进行加密。

  4. 上述三步完成后,发送给B。

第三方如果截获了数据,它没有B的私钥所以无法获得解密数据的密码,从而无法解密数据。下面是B获得数据后的步骤:

  1. B使用自己的私钥解密获取密码(因为只有自己的私钥才可以解密,证明是发给自己的,实现了秘钥交换)

  2. B使用获得的对称加密密码进行解密数据(原始数据和数据特征码),(实现了数据加密和解密)

  3. B使用A的公钥解密特征码,然后使用单向加密算法计算数据特征码(实现了身份验证,因为只有A的公钥才能解密A的私钥加密的数据)

  4. 对比解密后的特征码和计算后的特征码,如果一致说明数据没有篡改(实现了数据完整性)


上面的过程看似完美,但实际上还有很大漏洞,A发送给B之前肯定向B索取B的公钥,而且A拿到之后必须要相信这个公钥就是B的,但如果C截取了信息,C把自己的公钥给了A,并声称自己是B,那么A是无法验证的,同样C也依然可以冒充A。所以整个过程最薄弱的环节就是交换公钥的环节。为了解决这个问题这就是需要第三方机构,也就是我们要说的CA。那么申请方向CA提交信息进行审核其中最重要的是公钥,审核通过后CA会把产生一个证书,之后把证书发给申请方。为了避免证书发送过程中伪造,则CA会计算申请者提交信息的特征码,然后用自己的私钥(CA自己的证书是自己给自己颁发的)进行加密后一起发送给申请方。申请方用CA的公钥解密,如果成功就证明是CA发的。CA对特征码进行加密就是电子签名。

这时候A要给B通讯,A向B要证书(证书中包含B的公钥,当然也可以同时包含公钥和私钥),然后A去CA获取CA的公钥,然后用公钥解密证书的数字签名得到特征码,如果成功就证明证书是CA颁发的且没有被篡改。但这里又出现上面的问题,A向CA索要公钥,万一有人冒充CA怎么办?这就是在操作系统中内置全球知名CA的公钥。你只要是通过正规渠道获取的正版系统,那么所包含的公钥都是真实可靠的。


PKI(Public Key Infrastucture):公钥基础设施,公钥发放吊销等机制。


上面都是概念,而实现这些概念的软件常用的就是openssl、gpg.



      本文转自linuxjavachen  51CTO博客,原文链接:http://blog.51cto.com/littledevil/1924650,如需转载请自行联系原作者






网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注