域名密钥识别的邮件 (DKIM)是一种电子邮件认证方法,让一个组织对所发送的信息负责。它使用公钥加密技术对电子邮件进行数字 "签名",向收件人证明该邮件是由域名所有者发送的。收件人可以根据他们的域名公布的公钥检查签名,以验证签名。
本文将详细研究DKIM,并将向你概述这种电子邮件认证方法的工作原理。
什么是DKIM签名?
DKIM 签名是 DKIM 协议为发送给收件人的每封邮件创建的加密签名,以及添加到邮件头的域签名。
这个签名被接收者用来验证该信息确实是由域名所有者发送的,而不是其他人。它也验证了信息在从发送者到接收者的过程中没有被篡改。
如果不匹配,那么要么。
- 信息在传输过程中被篡改,或
- 该信息是代表其他人发送的,他可以访问发送服务器的私钥。
在这种签名不匹配的情况下,DKIM将阻止这些邮件被传递给他们的目标收件人,因为他们无法验证这些邮件是来自你的品牌的合法邮件。
DKIM签名是如何工作的?
DKIM签名的工作原理是在电子邮件的标题中插入一个数字签名。该签名可由接收服务器验证,并用于确定电子邮件在传输过程中是否被篡改。
DKIM使用公钥加密法,它依赖于一对密钥:一个是私钥,一个是公钥。公钥被分发给任何想要它的人,而私钥则是保密的(通常是由所有者)。
当你使用DKIM签署电子邮件时,你的私钥被用来创建邮件内容的哈希值,然后用接收者的公钥对该哈希值进行加密。这个加密的哈希值随后被插入到你的邮件的标题中,在那里它可以被接收者验证。
使用 PowerDMARC 简化 DKIM!
DKIM签名的关键
DKIM签名是使用两个加密密钥生成的,一个是公钥,一个是私钥。公钥在DNS中公布,而私钥则是保密的。
当一封电子邮件被签署时,私钥被用来生成信息的哈希值。然后用公钥对这个哈希值进行加密,并与信息本身一起发送。
当收件人收到这些信息时,他们使用他们的私钥来解密哈希值,并验证它是否与信息的原始内容相符。
DKIM签名的部分内容
一个DKIM签名由两部分组成:头和正文。头部包含关于发件人身份的信息,包括他们的电子邮件地址和公钥。主体包含所发送的实际信息。
- 要计算DKIM签名,你首先要对你的域名(例如,"example.com")进行MD5散列,这是你的公钥。
- 然后,你将你的域名与SHA1哈希值相连接(例如,"sha1(example.com)"),并将其附加到所发送的原始信息中。
- 然后,你对这个组合字符串采取另一个MD5哈希值(例如,"md5(sha1(example.com))"),并在发送前将其作为头文件附在信息的开头。
DKIM签名涉及的步骤
开始使用DKIM。
- 第一步是创建一个私钥,用来签署信息。
- 第二步是创建一个公钥,在验证签名时使用。
- 第三步是生成两条DNS TXT记录:一条用于公钥,另一条用于选择器名称。
- 第四步是在你的DNS区域文件中发布这些记录。
签署DKIM所涉及的步骤。
1.发件人生成一个带有唯一标识符的信息,称为加密哈希函数(通常是SHA-256)。这个唯一的标识符被称为DKIM-签名头字段,包含了关于谁签名以及何时签名的信息。
2.发件人在信息中添加额外的头字段,包含有关信息。
- 该信息应被视为多长时间内有效
- 应多长时间重新检查一次签名的有效性
- 签名是否应使用外部服务,如SPF(发件人政策框架)进行验证。
- 用什么钥匙来签署这个信息
3.最后,想要验证这些签名的收件人将使用他们的DNS记录或中间服务(如SenderID或Mailgun)中的发件人公钥副本,然后用它来验证任何附加有DKIM头的邮件。
了解DKIM签名中使用的标签
这是一个DKIM签名记录的例子,它可能是这样的。
DKIM-Signature: v=1; a=rsa-sha256。 s=jun2005.eng; c=宽松/放松。 d=example.com。 s=dkim; t=1526555738; bh=mhU6OJb5ldZf+z/pX9+0Nc4tj/lmyYHWbR8LgI2Q=; h=To:From:Subject:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; b=s1sdZCzdX9vxocsMSlT7cOrYixl1g8wfkdzrVe7BGN6ZdPV9xu2A |
v= 这个标签告诉我们DKIM的版本。
a= 这指定了签名者用于生成其公钥的算法。它可以是RSA1_5、RSA-SHA1或RSASSA-PSS中的一种。如果缺少此标签,则假定为RSA-SHA1。
c= 它指定了用于根据 [BCP14] 的要求从头域生成哈希值的规范化算法。后面是一个用逗号分隔的1个或多个规范化算法的列表(例如,"c=relaxed")。如果省略了这个标签,那么就会假定放松的规范化。
d= 它指定了在为该服务器(或其他收件人)发出的邮件生成签名时应使用哪个域名。
s= "s "标签是选择器字符串,它被接收服务器用来确定应该用什么公钥来验证签名。
t= 时间戳标签用于记录签名的创建时间,通常表示为Unix的时间戳(自1970年1月1日起的秒数)。
bh= 这个标签代表正文哈希值,它是你的邮件内容(包括标题)的加密版本。这有助于防止邮件在被DKIM签名后,在到达预定收件人之前被篡改。
h= 头部哈希值包含所有头的全部内容(包括那些由发件人政策框架或DomainKeys Identified Mail签署的头),除了那些通过将其列入排除列表而明确排除的头。这个值必须使用SHA-1或MD5计算。
b= "b "标签是一个加密哈希函数的base64编码表示,在信息的规范化主体上(即,在MIME编码被移除后)。
生成一个DKIM签名
- 生成一个公钥和私钥。
- 生成一个DKIM的头和脚。
- 用你的私钥用选定的算法签署电子邮件内容,例如,RSA-SHA256或RSA-SHA512
- 使用选定的算法压缩信息,例如,deflate或无。
- 在信息的开头,在任何MIME头之前插入DKIM头。
- 在任何MIME页脚之后插入DKIM页脚。
确保DKIM签名的有效性
可以采取一些步骤来确保DKIM签名是有效的。
- 确定你是否要使用传统的DKIM签名算法或优化的算法。
- 为你的信息标题和正文计算一个哈希值(这通常是SHA-256)。
- 选择一种适当的签名算法(如RSA或ECDSA)。
- 验证你的公钥是否与你在步骤1中指定的选择器相匹配(这是通过使用DNS完成的)。
- 使用你的私钥签署你的信息,并将其作为Base64格式的ASCII字符串存储在你的电子邮件的标题中(除了将其放入DNS)。
验证DKIM签名
DKIM签名验证很复杂。它需要大量的专业知识来设置和维护,而且它经常与其他系统如SPF一起使用,后者也很复杂。
因此,大多数电子邮件营销人员使用DKIM签名验证工具,如 DKIM记录检查器来检查他们的DKIM签名。这个工具检查已经添加到电子邮件中的DKIM密钥,并根据公共数据库对它们进行验证。如果这些密钥是有效的和可信任的,那么该电子邮件就可以被认为是合法的。
这一点很重要,原因有几个:首先,它可以确保你的电子邮件不会被ISP或ISP的客户标记为垃圾邮件;其次,它可以让你避免你的域名被其他域名列入黑名单(这被称为域名中毒);最后,它有助于确保你的电子邮件不会被卷入任何种类的中间人攻击。
总结
DKIM 是一种很有前途的解决方案,它允许企业验证电子邮件的合法性,尤其是来自外部发件人的电子邮件。当在整个信息环境中一致应用时,它能让收件人高度确信电子邮件是由发件人域名的授权代表发送的。但需要注意的是,虽然 DKIM 提供了一种验证机制,但它还不足以防范欺骗和网络钓鱼等电子邮件欺诈攻击。为此,需要 DMARC 策略设置为拒绝是必须的。
需要帮助吗?
电子邮件认证是任何企业的数字营销战略的一个必要组成部分。由于每天有这么多的电子邮件被发送和接收,你的品牌很容易在混乱中丢失。但是通过PowerDMARC的电子邮件认证服务,你可以确保你的电子邮件被正确的人看到。
我们的电子邮件认证解决方案将帮助你。
- 通过验证你的域名和DKIM签名来提高电子邮件的可传递性
- 通过向收件人展示你是一个合法的企业来提高你的品牌形象
- 通过确保他们只看到来自你的合法信息来改善整体客户体验
- 2025 年起支付卡行业将强制执行 DMARC- 2025 年 1 月 12 日
- 国家计算机安全委员会邮件检查变化及其对英国公共部门电子邮件安全的影响- 2025 年 1 月 11 日
- DMARC aspf 标签解释指南- 2025 年 1 月 7 日