DKIM邮件协议的部署和管理情况研究
介绍
这是一篇来自USENIX Security 2022的论文,题目是《A Large-scale and Longitudinal Measurement Study of DKIM Deployment》,该论文做的是关于DKIM邮件协议的部署和管理情况的研究。
三种电子邮件身份认证协议
由于简单邮件协议(SMTP)缺少身份验证机制,IETF提出了三种电子邮件身份协议:
- 发件人策略框架(SPF):一种以IP地址认证电子邮件发件人身份的技术,接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果有,则认为是正确的邮件,否则会认为伪造的邮件并退回。
- 域密钥识别邮件(DKIM):通过消息加密认证的方式对邮件发送域名进行验证,邮件发送方发送邮件时,利用本域私钥加密邮件生成DKIM签名,将DKIM签名及其相关信息插入邮件头。邮件接收方接收邮件时,通过DNS查询获得公钥,验证邮件DKIM签名的有效性。从而确认在邮件发送的过程中,防止邮件被恶意篡改,保证邮件内容的完整性。
- 基于域的消息身份验证、报告和一致性(DMARC):是一种基于现有的SPF和DKIM协议的可扩展电子邮件认证协议,邮件收发双方建立了邮件反馈机制,便于邮件发送方和邮件接收方共同对域名的管理进行完善和监督。
论文贡献
- 对DKIM的部署和管理进行了首次大规模纵向测量研究,发现Alexa前100万个域中有28.1%启用了DKIM保护,其中2.9%管理不当。
- 发现DKIM密钥管理和DKIM签名问题在现实世界中非常普遍。
- 向受影响的电子邮件提供商报告漏洞,并提供在线DKIM测试工具,以提高DKIM部署的安全性。
背景
DKIM签名头和DKIM记录
DKIM签名头和DKIM DNS记录由多个标记=值对表示的不同信息元素组成。
DKIM签名头
DKIM签名头是DKIM签名不包括"b="标签的部分。DKIM签名在电子邮件中的示例如下。
DKIM-Signature:v=1;a=rsa-sha256;
c=relaxed/relaxed;s=s1;d=a.com;h=From:
To:Subject;l=200;bh=vFvy46eesudgj4s....;
b=IHEFQ+7rcisqsRBSEdd83....
参数 | 意义 |
---|---|
a | 用于生成DKIM签名的算法 |
c | 消息规范化算法。默认值为“simple/simple”。simple不允许修改,relaxed允许常见修改 |
s | 选择器,这是DKIM签名中的一个属性,允许在同一个域下使用多个密钥。电子邮件接收者使用此标记通过查询s1._domainkey.a.com获得公钥。 |
d | 签名者的域 |
h | h表示受签名保护的标头列表。必须包括“发件人”标题。 |
l | 指示签名覆盖的电子邮件正文的字节数。 |
bh | 由“l=”标记限制的消息规范化正文部分的哈希 |
b | 整个电子邮件的实际数字签名,包括电子邮件正文和电子邮件标题。 |
DKIM记录
在DNS服务器上发布的DKIM记录示例如下。
v=DKIM1;k=rsa;h=sha256;
p=MIGfMA0GCSqGs......
参数 | 意义 |
---|---|
k | 密钥类型。默认类型为“rsa” |
p | 公钥。空值表示公钥已被吊销。该标记值由“k=”标记定义,然后在base64中进行编码。 |
h | 可接受的散列算法。此标记是可选的,默认允许所有算法(例如SHA-1和SHA-256)。 |
DKIM工作流程
DKIM工作的流程主要有三部分:
- 域名所有者首先生成一对密钥,并通过DNS TXT记录公布公钥(即DKIM记录),其格式为selector._domainkey.example.com。举个例子,如果a.com的所有者将s1设置为selector,DKIM记录就通过s1._domainkey.a.com的TXT记录来设置。
- 发送服务计算三个哈希值:邮件正文的哈希值(body-hash),选定的邮件标题的哈希值(h-headers),以及整个邮件的哈希值(data-hash)。其中,data-hash由body-hash、h-headers和DKIMS签名头组成(不包括"b="标签的值)。然后,电子邮件服务将签名data-hash,并将结果作为 "b="标签的值。最后,电子邮件服务将在头块中插入DKIM签名,并将电子邮件发送给收件人。</