上海騰曦網(wǎng)絡(luò)服務(wù)有限公司
騰訊企業(yè)郵箱上海經(jīng)銷商
當(dāng)前位置:騰訊企業(yè)郵箱-> 新聞資訊
作者:騰訊郵箱 發(fā)布時(shí)間:2024-12-04 16:34:48 訪問量:662
導(dǎo)讀:郵件發(fā)送方發(fā)送郵件時(shí),利用本域私鑰加密郵件生成DKIM簽名,將DKIM簽名及其相關(guān)信息插入郵件頭。郵件接收方接收郵件時(shí),通過DNS查詢獲得公鑰,驗(yàn)證郵件DKIM簽名的有效性。從而確認(rèn)在郵件發(fā)送的過程中,防止郵件被惡意篡改,保證郵件內(nèi)容的完整性。
DKIM指引
一、DKIM(DomainKeys Identified Mail)
DKIM是一種防范電子郵件欺詐的驗(yàn)證技術(shù),通過消息加密認(rèn)證的方式對(duì)郵件發(fā)送域名進(jìn)行驗(yàn)證。
郵件發(fā)送方發(fā)送郵件時(shí),利用本域私鑰加密郵件生成DKIM簽名,將DKIM簽名及其相關(guān)信息插入郵件頭。郵件接收方接收郵件時(shí),通過DNS查詢獲得公鑰,驗(yàn)證郵件DKIM簽名的有效性。從而確認(rèn)在郵件發(fā)送的過程中,防止郵件被惡意篡改,保證郵件內(nèi)容的完整性。
二、DKIM簽名頭字段參數(shù)
1、例子:
DKIM-Signature: v=1; a=rsa-sha256; d=example.net; s=brisbane;
c=simple; q=dns/txt; i=@eng.example.net;
t=1117574938; x=1118006938;
h=from:to:subject:date;
z=From:foo@eng.example.net|To:joe@example.com|Subject:demo=20run|Date:July=205.=202005=203:44:08=20PM=20-0700;
bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR
2、解析:
v= 版本號(hào)(純文本,必要的),值為1
格式:v=1*DIGIT
a= 生成簽名的算法(純文本,必要的),驗(yàn)證者必須支持“rsa-sha1”和“rsa-sha256”兩種算法,簽名者使用“rsa-sha256”簽名。
格式:a=rsa-sha1或者a=rsa-sha256
b= 簽名數(shù)據(jù)(base64.必要的)
格式:b=base64string
bh= 消息的規(guī)范化主體的哈希值,受“l(fā)=”標(biāo)簽限制(base64.必要的)。
格式:bh=base64string
c= 消息規(guī)范化算法(純文本,可選的,默認(rèn)為“simple/simple”),”/“兩邊分別對(duì)應(yīng)頭部和主體的規(guī)范化算法,當(dāng)“c=simple”或者“c=relaxed”時(shí),表示頭部規(guī)范化算法使用simple或者relaxed,而主體規(guī)范化算法默認(rèn)為simple。
格式:c=sig-c-tag-alg[“/“sig-c-tag-alg]
sig-c-tag-alg=”simple”/“relaxed”
d= Signing Domain Identifier ,即SDID (純文本,必要的)
格式:d=domain-name
h= 簽名的頭字段(純文本,必要的),提交給簽名算法的頭字段名稱列表,用“:”分隔。
格式:h=hdr-name*(“:”hdr-name)
i= Agent or User Identifier ,即AUID,值為@domain
格式:i=[Local-part]”@”domain-name
Local-part為空,domain-name與“d=”的值一樣或者是其子域。
l= 主體長(zhǎng)度數(shù)(純文本無符號(hào)十進(jìn)制整型,可選的,默認(rèn)為整個(gè)主體)
格式:l=1*76DIGIT
q= 一個(gè)查詢方式的列表,以冒號(hào)分隔,用于檢索公鑰(純文本,可選的,默認(rèn)為“dns/txt”),每個(gè)查詢方式的形式為“type[/options]”。
格式:q=dns/txt
s= selector,(純文本,必要的)
格式:s=selector
t= 簽名時(shí)間戳(純文本無符號(hào)十進(jìn)制整型;推薦的,默認(rèn)為一個(gè)未知的創(chuàng)建時(shí)間)。
格式:t=1*12DIGIT
x= 簽名到期時(shí)間(純文本無符號(hào)十進(jìn)制整型;推薦的,默認(rèn)永不過期)
格式:x=1*12DIGIT
z= 復(fù)制的頭字段(dkim-quoted-printable,可選的,默認(rèn)為null)
格式:z=sig-z-tag-copy*(”|”sig-z-tag-copy)
sig-z-tag-copy= hdr-name”:”qp-hdr-value
三、DKIM DNS TXT記錄
1、例子:
$ORIGIN _domainkey.example.org.
brisbane IN TXT (“v=DKIM1;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ”
“KBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYt”
“IxN2SnFCjxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v”
“/RtdC2UzJ1lWT947qR+Rcac2gbto/NMqJ0fzfVjH4OuKhi”
“tdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB”)
2、解析:
v= DKIM密鑰記錄的版本(純文本,推薦的,默認(rèn)為“DKIM1”)
格式:v=DKIM1
p= 公鑰數(shù)據(jù)(base64.必要的)。值為空表示公鑰已被撤銷。
格式:p=base64string
h= 可接受的哈希算法(純文本,可選的,默認(rèn)允許所有算法),以冒號(hào)分隔。
格式:h= key-h-tag-alg*(“:” key-h-tag-alg)
key-h-tag-alg= “sha1”/“sha256”
k= 密鑰類型(純文本,可選的,默認(rèn)為“rsa”)
格式:k=rsa
n= 可能感興趣的人(qp-setion,可選的,默認(rèn)為空)。
格式:n=qp-setion
s= 服務(wù)類型(純文本,可選的,默認(rèn)為“”),用冒號(hào)分隔。目前定義的服務(wù)類型有兩種,一是“”,匹配所有服務(wù)類型;二是“email”,電子郵件,不限于SMTP。
格式:s=key-s-tag-type*(“:”key-s-tag-type)
key-s-tag-type=”email”/“*”
t= 標(biāo)記,表示以冒號(hào)分隔的名稱列表(純文本,可選的,默認(rèn)沒有標(biāo)記)。定義的標(biāo)記有兩種,一是“y”,表示該域正在測(cè)試DKIM;二是“s”,“i=”標(biāo)簽的domain必須與“d=”標(biāo)簽一致。
格式:t=key-t-tag-flag*(“:”key-t-tag-flag)
key-t-tag-flag=”y”/“s”
注意:所有DKIM密鑰存儲(chǔ)在一個(gè)子域,命名為“_domainkey”。給定DKIM簽名字段d=example.com,s=foo.bar,DNS查詢?yōu)椋骸癴oo.bar._domainkey.example.com”。
四、規(guī)范化算法
1、頭部規(guī)范化算法
(1)“simple”頭部規(guī)范化算法
不以任何方式改變頭字段。提交給簽名或驗(yàn)證算法的頭字段必須和被簽名或驗(yàn)證消息時(shí)一致。尤其是,頭字段名稱禁止大小寫轉(zhuǎn)換,空白不可改變。
(2)“relaxed” 頭部規(guī)范化算法
①所有頭字段名稱(不是頭字段的值)轉(zhuǎn)化為小寫。例如,將“SUBJect: AbC”轉(zhuǎn)化為“subject: AbC”。
②展開所有頭字段的續(xù)行,特別是,帶有嵌入在頭字段值的終止符(即在CRLF后接有WSP)的行需解釋為不帶CRLF。實(shí)現(xiàn)時(shí)需在頭字段值末尾去掉CRLF。
③將所有由一個(gè)或多個(gè)WSP字符組成的序列轉(zhuǎn)化為單個(gè)SP字符。這里WSP字符包括在一行的之前和之后那些字符。
④刪除所有在每一個(gè)展開的頭字段的值末尾處的WSP字符。
⑤刪除所有在用于分隔頭字段名稱和頭字段值的冒號(hào)之前和之后剩下的WSP字符。必須保留分號(hào)分隔符。
2、主體規(guī)范化算法
(1)“simple”主體規(guī)范化算法
忽略信息主體末尾處所有空白行;如果沒有主體或者在消息主體中沒有末尾CRLF,需添加一個(gè)CRLF;一個(gè)完全空的或者缺失的主體需標(biāo)準(zhǔn)化為一個(gè)“CRLF”,即標(biāo)準(zhǔn)化長(zhǎng)度為2字節(jié)。
(2)“relaxed”主體規(guī)范算法
①減少空白:
a.略行末尾所有空白。實(shí)現(xiàn)時(shí)禁止刪除行末尾的CRLF;
b.行中WSP的所有序列轉(zhuǎn)化為單個(gè)SP字符;
②.忽略消息主體末尾處所有空白行。如果主體非空白且不以CRLF結(jié)尾,則需添加CRLF。
3、例子
A:< SP>X< CRLF>
B < SP> : < SP> Y < HTAB>< CRLF>
< HTAB> Z < SP>< SP>< CRLF>
< CRLF>
< SP> C < SP>< CRLF>
D < SP>< HTAB>< SP> E < CRLF>
< CRLF>
< CRLF>
(1)頭部
simple:
A: < SP> X < CRLF>
B < SP> : < SP> Y < HTAB>< CRLF>
< HTAB> Z < SP>< SP>< CRLF>
relaxed:
a:X < CRLF>
b:Y < SP> Z < CRLF>
(2)主體
simple:
< SP> C < SP>< CRLF>
D < SP>< HTAB>< SP> E < CRLF>
relaxed:
< SP> C < CRLF>
D < SP> E < CRLF>
五、簽名算法
1、簽名算法的偽代碼:
body-hash = hash-alg (canon-body, l-param)
data-hash = hash-alg (h-headers, D-SIG, body-hash)
signature = sig-alg (d-domain, selector, data-hash)
2、解析:
body-hash:是使用哈希算法哈希主體的輸出值
hash-alg:是“a”參數(shù)指定的哈希算法
canon-body:主體的規(guī)范化表示,按“c”參數(shù)指定的規(guī)范化算法生成的,排除DKIM簽名字段。
l-param:是“l(fā)”參數(shù)的值,主體的長(zhǎng)度。
data-hash:使用hash-alg算法哈希頭部的輸出,包括DKIM簽名頭部和主體哈希值。
h-headers:“h”參數(shù)指定的被簽名的頭字段列表。
D-SIG:規(guī)范化的DKIM簽名字段,去除參數(shù)簽名值部分即為一個(gè)空的參數(shù)值。
signature:簽名算法生成的簽名值
sig-alg:“a”參數(shù)指定的簽名算法。
d-domain:“d”參數(shù)指定的域名
selector:“s”參數(shù)指定的selector值。
注意:許多數(shù)字簽名API提供RSA私鑰的哈希和應(yīng)用,使用原始的“sign()”。當(dāng)使用這樣的API時(shí),算法的最后兩個(gè)步驟可能會(huì)合并成一個(gè)調(diào)用,執(zhí)行“a-hash-alg”和“sig-alg”。
六、驗(yàn)證結(jié)果
簽名驗(yàn)證結(jié)果的三種狀態(tài):
1、SUCCESS:返回一個(gè)成功驗(yàn)證
2、PERMFAIL:返回一個(gè)永久的、不可恢復(fù)的錯(cuò)誤,例如簽名驗(yàn)證失敗
3、TEMPFAIL:返回一個(gè)暫時(shí)的、可恢復(fù)的錯(cuò)誤,例如DNS查詢超時(shí)
七、簽名者操作
簽名者按下面步驟順序執(zhí)行。
1、確定郵件是否要簽名,應(yīng)由誰簽名。
簽名者可以簽名某域的郵件,該域需要滿足以下條件:有一個(gè)私鑰,相應(yīng)公鑰的必要知識(shí)和selector信息。
2、選擇一個(gè)私鑰和相應(yīng)的selector信息
3、規(guī)范化信息以防傳輸過程中被修改
4、確定要簽名的頭字段
建議的簽名內(nèi)容,選擇構(gòu)成消息內(nèi)容的核心字段,如地址字段和與主體相關(guān)的文本內(nèi)容字段:
o From (REQUIRED;)
o Reply-To
o Subject
o Date
o To, Cc
o Resent-Date, Resent-From, Resent-To, Resent-Cc
o In-Reply-To, References
o List-Id, List-Help, List-Unsubscribe, List-Subscribe, List-Post,List-Owner, List-Archive
不建議簽名的字段:
o Return-Path
o Received
o Comments, Keywords
o DKIM-Signature field
5、計(jì)算消息的哈希和簽名
6、插入DKIM簽名頭字段
點(diǎn)贊 0 來源:qq366.cn
相關(guān)推薦:
騰訊企業(yè)微信郵箱免費(fèi)版限容該怎么辦?上海騰曦網(wǎng)絡(luò)服務(wù)公司是騰訊企業(yè)郵箱官方授權(quán)經(jīng)銷商;騰訊企業(yè)郵箱又叫QQ企業(yè)郵箱,可以與微信完美結(jié)合的企業(yè)郵箱,可以在微信中收發(fā)郵件的企業(yè)郵箱。