如何确保邮件发件人地址的真实有效性?

2020-06-27

首先提一个「简单」的问题:当你收到一封邮件,显示「发件人」(sender)是所谓的「张三」,你怎么能够确定这份邮件真的是张三发给你的?例如说你收到一封邮件显示「发件人」是”[email protected]”,你怎么确定这份邮件真的是”[email protected]”这个账户的实际控制人发给你的?或者假如说你收到一封邮件声称发件人是某某银行信用卡中心发给你的,邀请你办卡,你当然未必会相信吧?因为你可能直觉上感觉得到这封邮件有点问题,事实上它确实也可能不是什么信用卡中心发给你的,可能是群发的广告,也可能是为了诱骗你点击某些链接。

事实上,「默认」情况下,你确定不了,你收到的声称是「张三」发给你的邮件,可能并不是真的由真正的张三发给你的,可能是恶作剧,也可能是计算机程序自动发出的,反正,在整个邮件撰写之后的运输和投递过程中,如果仅依赖最基本的邮件传输协议(SMTP),你无法辨别你收到的这封邮件是否是来自它所声称的那个发送者,因为,如果邮件只是按照最基本的邮件传输协议进行传输,整个过程中没有任何一个环节会「帮你」做这个验证。一些具体的邮件收发实现作为解决方案为了帮你验证发件人的身份真实性,会做一些额外工作。我们写这篇文章,是为了普及一些常识,顺带地,倡议大家开始使用GPG对自己的邮件进行签名,以及介绍现有的一些解决这个问题的解决方案为了让有本文一开始提到的疑惑的人的内心平静下来。

前言

邮件欺骗(Email spoofing)具体是指:邮件发送者伪造邮件地址栏的发件人地址信息向他人发送电子邮件。该问题的出现原因是:最底层的邮件传输协议无力对发件人地址的真实有效合法性进行必要的检查。可能导致的后果有:信息泄露、商业欺诈、垃圾电子邮件泛滥、恶作剧、挑拨离间、假新闻、真实的发件人借此否认由自己发出的邮件等。从而有必要搞清楚问题的原因,以及邮件从撰写到到达收件人收件箱的整个过程,以及为什么无法确认邮件真伪,并了解该问题现有的解决方案。对于涉及到的技术内容,这篇文章不会讨论得太深入,仅仅是从概念上稍作介绍,以理解为主,对具体的实现我们略去不表。整个文章的脉络可以被理解为「安全吗?——不安全——为什么不安全?——什么时候不安全?——怎么样才安全?——安全了——可以更加安全吗?」,对于可能存在的和实际情况的出入:鉴于笔者所掌握的知识的范围有限,差错在所难免,对于你所发现的本文中存在的错误,恳请包容和指出。

事实上,还要知道,这个问题并不是太严重,毕竟,最基本的HTTP也是明文的,FTP本身也是明文的,世界并没有崩塌,通过采取适当的安全措施例如用TLS技术保护HTTP,用基于SSH的SFTP代替FTP,仍然可以有效的保证足够健壮且令人满意的安全性,对于SMTP也是同理,也确实有一些机制是在「保护」着SMTP,我们就打算介绍这些机制,不过在此之前,我们需要对讨论范围中出现的一些概念、对象和过程有足够的理解。

信息安全emailspoofingspfdkimgpg

小小的改进给探索子博客带来了大大的进步

近期项目进展