免费个人网站建站源码,中国十大热门网站排名,网络营销专业专升本,wordpress 512一、PGP#xff08;Pretty Good Privacy#xff09;
PGP是一种邮件加密手段#xff0c;他在发邮件一方加密#xff0c;然后发给发送方邮件服务器#xff0c;发送方邮件服务器再发送给接收方邮件服务器#xff0c;然后接收方再从接收方邮件服务器pop出来#xff0c;这整…一、PGPPretty Good Privacy
PGP是一种邮件加密手段他在发邮件一方加密然后发给发送方邮件服务器发送方邮件服务器再发送给接收方邮件服务器然后接收方再从接收方邮件服务器pop出来这整个过程都是pgp加密过的接收方拿到之后才会解密。
所以整体走的发邮件流程还是先前提到的SMTP那套只不过在源加了密在接收方解了密。
1.PGP加密流程
这个流程包括了Authentication 和 Confidentiality看看他是怎么做的
首先邮件消息哈希之后用A的私钥签名连接到原来的消息上这一步做了认证。
然后刚才的消息加签名过压缩。
然后A自己生成一个session key这个是对称加密用来加密消息的他用这个session key加密刚刚压缩完的东西同时他也需要把这个session key告诉B啊他用B的公钥加密session key然后把他连接到刚才用session key加密过的东西上这一步提供了机密性。
然后这就是最终加过密的消息了。
所以说整个过程不管是认证还是加密都是基于双方非对称密钥的安全的因为如果非对称密钥被妥协了那么整个流程就不安全了。 在考虑一个问题压缩的目的是什么为什么要在加签名之后加密之前压缩
首先压缩最根本的是为了减少传输的字节其次压缩同时消除了原文的统计特性减少了被crypto analysis的风险。
在签名之后压缩是基于签名的意义那就是对数据完整性提供认证而如果对压缩过后的信息签名那虽然也能达到同样的效果但是丢失了原本的含义。同时我认为这是某种设计理念但是目前还不是很能理解。
在加密之前压缩一方面是可以减少加密和解密的时间另一方面就是刚才说的如果压缩在加密黑客拿到的是加密的压缩文件是没法进行crypto analysis从而进行唯密文攻击的而如果是先加密再压缩黑客拿到了压缩的加密文件那他只要解压缩之后就可以进行crypto analysis从而进行唯密文攻击了。
还有一个比较扯淡的说法是说如果是先压缩再签名那么接收方就需要存压缩文件来验证签名尽管我看不出来这有什么问题。他还说如果想不存压缩文件的话那就需要解压缩之后再压缩这更是扯淡如果先压缩在签名对称解密完就是签名和压缩文件直接验证就好了哪还需要重复压缩。 2.PGP解密
那就是刚才拿到用公钥加密的session key和加密消息的连接那就先拿自己的私钥把session key解出来。
然后就可以拿session key解密加密的压缩文件了。
然后再解压缩拿到签名和原文用A的公钥解签名对原文做哈希比对来验证签名也就是数据完整性。 3.PGP提供的邮件适应性
因为之前说了SMTP只传7-bit ASCII码所以刚才那一套认证、加密走完之后的8-bit octets stream也就是字节流要想进SMTP他需要转换成7-bit ASCII码。
它采用的是Radix-64 algorithm他把原来的字节流的每6bit映射成一个Radix-64的ASCII字符包括26个大写字母A-Z、26个小写字母a-z、10个数字0-9以及两个额外的符号通常是和/或者从字节角度理解就是把每3字节24bit映射成4个Radix-64的ASCII字符。
他还增加CRC。
所以看下面整体的PGP发送的格式从下往上看数据部分签名部分这两部分是对称加密的然后上面就是对称加密的session key。整体的消息会过一遍64-radix。
这里的两个公钥上面都有一个id这涉及下面要说的PGP的公钥管理。 4.PGP公钥管理
从上面的PGP流程可以看出非对称密钥安全是整个加密安全的保障因为对称密钥也要通过非对称加密来传。
PGP用户没人维护两个表一个私钥表Private-key ring一个公钥表Public-key ring私钥表存自己的公私钥对公钥表存别人的公钥id和公钥。
PGP每个用户可能有多个公私钥对。
私钥表比较好理解每个entry如下主要就是这个公私钥对的id公钥以及使用passphrase key加密的私钥。 这个passphrase key就相当于是对自己的私钥提供了一层额外的保障黑客只有同时妥协了passphrase key和私钥表才能有他的私钥。
公钥表较复杂 除了key id公钥所有者id以外还有一堆trust什么的传统的对称密钥通过一个公认的CA签名来确保公钥的合法性PGP系统里使用这些信任来确定这里一个一个看。
Owner trust就是我是否相信这个人给别人签的名当然这里是一个degree。
signature就是某个人给这个公钥签的名signature trust就是我是否相信这个签名。
key legitimacy是PGP系统算出来的就是通过所有拥有这个公钥对应签名的人的signature trust来算出来的。 5.总结
总结以上内容再来看一版完整版的PGP发送和接收流程。
发送的时候还是先hash这里签名之前先要找到私钥那就是先选择key id然后去私钥表里找到加密过的私钥用Passphrase key来解出来私钥再来签名签完名再把这个id和签名一起连接到原来的消息上。
然后还是压缩。
然后生成session key对压缩文件进行加密之后要用B的公钥加密session key首先要找到B的公钥他选择一个B的公钥id去公钥表里找到B的公钥加密session key再把这个公钥id和加密的session key以及加密后的消息连接这就是最终的发送的东西了。 再来看解密拿到之后先拆开处理session key部分用这个公钥id去自己的私钥表里找到对应的加密过的私钥然后用Passphrase key解密出来私钥再用私钥来解密session key。
有了session key就可以解密了解出来是压缩文件。
解压缩出来是签名部分和原文部分。
先处理签名部分根据这个A的key id去自己的公钥表里找对应的A的公钥然后解签名出来一个哈希值同时自己在对原文做一遍哈希对比是否一致。 以上就是完整的流程了。 二、SMIME
这个比较简单和PGP类似但没有那么复杂的钥匙管理。
发送方就是哈希出来一个消息摘要私钥签名然后生成一个content-encryption key对称加密AES-128加CBC然后再用对方的公钥加密这个对称密钥附上一起传过去。 解密就是先拆出来对称密钥用自己的私钥解密然后把用对称密钥解密消息然后拆出来签名用对方的公钥验证签名。 公钥管理采用X.509 v3公钥证书。