DKIM签名

域名密钥识别的邮件 (DKIM)是一种电子邮件认证方法,让一个组织对所发送的信息负责。它使用公钥加密技术对电子邮件进行数字 "签名",向收件人证明该邮件是由域名所有者发送的。收件人可以根据他们的域名公布的公钥检查签名,以验证签名。

本文将详细研究DKIM,并将向你概述这种电子邮件认证方法的工作原理。

什么是DKIM签名?

DKIM是DomainKeys Identified Mail的缩写。它是一个电子邮件认证系统,通过使用加密签名提供完整性和不可抵赖性。它与 签署可以帮助为你的电子邮件建立一个强大的欺骗保护基础设施。

DKIM协议为发送给收件人的每封邮件创建一个加密签名,以及一个添加到邮件头的域名签名。

这个签名被接收者用来验证该信息确实是由域名所有者发送的,而不是其他人。它也验证了信息在从发送者到接收者的过程中没有被篡改。

如果不匹配,那么要么。

  1. 信息在传输过程中被篡改,或
  2. 该信息是代表其他人发送的,他可以访问发送服务器的私钥。

在这种签名不匹配的情况下,DKIM将阻止这些邮件被传递给他们的目标收件人,因为他们无法验证这些邮件是来自你的品牌的合法邮件。

DKIM签名是如何工作的?

DKIM签名的工作原理是在电子邮件的标题中插入一个数字签名。该签名可由接收服务器验证,并用于确定电子邮件在传输过程中是否被篡改。

DKIM使用公钥加密法,它依赖于一对密钥:一个是私钥,一个是公钥。公钥被分发给任何想要它的人,而私钥则是保密的(通常是由所有者)。

当你使用DKIM签署电子邮件时,你的私钥被用来创建邮件内容的哈希值,然后用接收者的公钥对该哈希值进行加密。这个加密的哈希值随后被插入到你的邮件的标题中,在那里它可以被接收者验证。

DKIM签名的关键

DKIM签名是使用两个加密密钥生成的,一个是公钥,一个是私钥。公钥在DNS中公布,而私钥则是保密的。

当一封电子邮件被签署时,私钥被用来生成信息的哈希值。然后用公钥对这个哈希值进行加密,并与信息本身一起发送。

当收件人收到这些信息时,他们使用他们的私钥来解密哈希值,并验证它是否与信息的原始内容相符。

DKIM签名的部分内容

一个DKIM签名由两部分组成:头和正文。头部包含关于发件人身份的信息,包括他们的电子邮件地址和公钥。主体包含所发送的实际信息。

  1. 要计算DKIM签名,你首先要对你的域名(例如,"example.com")进行MD5散列,这是你的公钥。
  2. 然后,你将你的域名与SHA1哈希值相连接(例如,"sha1(example.com)"),并将其附加到所发送的原始信息中。
  3. 然后,你对这个组合字符串采取另一个MD5哈希值(例如,"md5(sha1(example.com))"),并在发送前将其作为头文件附在信息的开头。

DKIM签名涉及的步骤

开始使用DKIM。

  1. 第一步是创建一个私钥,用来签署信息。
  2. 第二步是创建一个公钥,在验证签名时使用。
  3. 第三步是生成两条DNS TXT记录:一条用于公钥,另一条用于选择器名称。
  4. 第四步是在你的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签名

  1. 生成一个公钥和私钥。
  2. 生成一个DKIM的头和脚。
  3. 用你的私钥用选定的算法签署电子邮件内容,例如,RSA-SHA256或RSA-SHA512
  4. 使用选定的算法压缩信息,例如,deflate或无。
  5. 在信息的开头,在任何MIME头之前插入DKIM头。
  6. 在任何MIME页脚之后插入DKIM页脚。

确保DKIM签名的有效性

可以采取一些步骤来确保DKIM签名是有效的。

  1. 确定你是否要使用传统的DKIM签名算法或优化的算法。
  2. 为你的信息标题和正文计算一个哈希值(这通常是SHA-256)。
  3. 选择一种适当的签名算法(如RSA或ECDSA)。
  4. 验证你的公钥是否与你在步骤1中指定的选择器相匹配(这是通过使用DNS完成的)。
  5. 使用你的私钥签署你的信息,并将其作为Base64格式的ASCII字符串存储在你的电子邮件的标题中(除了将其放入DNS)。

验证DKIM签名

DKIM签名验证很复杂。它需要大量的专业知识来设置和维护,而且它经常与其他系统如SPF一起使用,后者也很复杂。

因此,大多数电子邮件营销人员使用DKIM签名验证工具,如 DKIM记录检查器来检查他们的DKIM签名。这个工具检查已经添加到电子邮件中的DKIM密钥,并根据公共数据库对它们进行验证。如果这些密钥是有效的和可信任的,那么该电子邮件就可以被认为是合法的。

这一点很重要,原因有几个:首先,它可以确保你的电子邮件不会被ISP或ISP的客户标记为垃圾邮件;其次,它可以让你避免你的域名被其他域名列入黑名单(这被称为域名中毒);最后,它有助于确保你的电子邮件不会被卷入任何种类的中间人攻击。

总结

DKIM是一个很有前途的解决方案,它允许一个组织验证电子邮件的合法性,特别是那些来自外部发件人的电子邮件。当在整个信息传递环境中一致应用时,它为收件人提供了高度的信心,即电子邮件是由发件人域名的授权代表发出的。然而,重要的是要注意,虽然DKIM提供了一个验证机制,但它还不足以防止电子邮件欺诈攻击,如欺骗和网络钓鱼。对于这一点,一个 DMARC政策作为拒绝是强制性的。

需要帮助吗?

电子邮件认证是任何企业的数字营销战略的一个必要组成部分。由于每天有这么多的电子邮件被发送和接收,你的品牌很容易在混乱中丢失。但是通过PowerDMARC的电子邮件认证服务,你可以确保你的电子邮件被正确的人看到。 

我们的电子邮件认证解决方案将帮助你。

  • 通过验证你的域名和DKIM签名来提高电子邮件的可传递性
  • 通过向收件人展示你是一个合法的企业来提高你的品牌形象
  • 通过确保他们只看到来自你的合法信息来改善整体客户体验