开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 26天,点击查看活动详情
基本原理
电子邮件在我们日常生活中应用十分广泛,它的出现在很大程度上可以取代传统的邮件通信。但最初设计电子邮件时,由于考虑欠缺导致存在一些安全性问题。例如:常见的垃圾邮件、钓鱼式攻击、邮件炸弹和最早期的网络蠕虫也是利用邮件进行传播的。
那么作为一个安全的网络应用,我们需要它满足以下几个方面的需求:
- 机密性:邮件在传输过程中不可能被第三方阅读到,只有邮件接收人才有权利阅读。
- 完整性:邮件在传输过程中不会发生被篡改的行为,若发生了,也能通过完整性校验检测出来。
- 身份认证性:电子邮件的发送源头不可能被假冒,接收方能够确认发送方的身份
- 抗抵赖性:发送方是无法对已发送的邮件进行抵赖的。接收方可以预防发送方抵赖自己的发送行为。
另外电子邮件系统具有单向性和非实时性的特性,发送方可以利用用户代理来编写邮件,发送到对应注册的邮件服务器,由邮件服务器来决定在一个合适的时期发送到接收方的服务器,最后接收方服务器负责将邮件推送到接收方的邮箱中,从而接收方可以在自己的邮箱中读取到该邮件。
安全标准
最早的安全电子邮件标准是在1991年提出的名为PGP(Pretty Good Privacy)的标准。其可以免费运行于各种操作系统上,在报文加密算法这块更是包含了公钥加密算法、对称加密算法、散列算法等一系列经过验证为安全可靠的算法。
所以PGP是可以提供诸如邮件加密、报文完整性等服务的。满足了电子邮件对网络安全方面的需求。下面我们简单来看一个演示案例
发送邮件加密阶段
邮件发送阶段,发送者首先对报文m使用SHA-1进行散列,使用自己的私钥Ka-,通过公钥加密算法RSA对摘要进行数字签名,得到Ka-(H(m)),然后PGP会将报文m和数字签名进行压缩;再使用对称加密算法3DES进行对称加密,对称密钥为Ks;然后通过接收者的公开密钥Kb+对Ks进行加密后分发给接收者;加密的密钥和压缩报文将会再进行一次Base64编码后通过SMTP进行传输。(传输过程中也有可能会进行分段,因为PGP对报文大小有要求。)
接收邮件解密阶段
接收者在接收到邮件后,先利用Base64解密还原内容,再将内容分开;利用自身的私钥Kb-解密得到对称密钥Ks;再利用Ks进行3DES解密,然后再进行解压缩后将内容分离;对数字签名Ka-(H(m))使用发送者的公钥Ka+进行解密得到H(m);对原报文m利用相同的散列函数H进行散列,最后比较两个H(m)即可验证报文的完整性。