日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

邮件安全之DKIM

發布時間:2023/12/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 邮件安全之DKIM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0x1: DKIM是郵件發件人身份驗證技術實現方式之一,數字簽名在其中的應用同時保證了發件人身份可靠以及郵件內容的完整,用于防護發件人欺詐,是攔截垃圾郵件及釣魚郵件的有效手段。

我們先來看一個DKIM簽名,如下:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=<sender domain>;
?s=selector1;
?h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
?bh=0yxAGQYAXZRrgDxuKKJ/yZaxG5v3IDluFDDN4tzAZFM=;
?b=OYCVOTGgcZlZwAWYtmUsWIGev+zMqVCE0mVuqVQvhWfxwcG7W7tcdq5ObEPYvZTf2W8PK8U9bMI2QAnA9fB9lfqW/ndfy00k5lGJk6igZlyH2Hr3FC+A/8EcYBifWdqz2AbTVDo8uwHYVK5RZjgHPohzypyDsR+o4f1qXqLfjYc=
?

簽名中各標簽的含義,這里不作解釋。我們將在這篇文章里通過手動驗證這個數字簽名來了解DKIM簽名驗證過程。

0x2: 執行DKIM的手動驗證,關鍵點是對郵件正文及信頭的規范化(Canonicalization)。relaxed/relaxed是廣泛使用的處理方式,允許郵件服務器對郵件內容的少量變更,比如插入空行等。

The "simple" Header Canonicalization Algorithm
‘Simple’方式的郵件信頭的規范化處理不對信頭做任何修改,保留原始信頭原。但是需按照DKIM簽名里的h標簽值中信頭列表的順序排列信頭。

The "relaxed" Header Canonicalization Algorithm
‘Relaxed’方式的信頭規范化處理需要按下面列出的要求進行:
a.?? ?將所有header name轉換為小寫字母書寫。
b.?? ?分行(folding,參考RFC5322)處理的信頭需要刪除多余的CRLF,恢復為一行,保留行末尾的CRLF。
c.?? ?將連續的空白字符(包括空格、制表符TAB)轉換為單個空格字符。
d.?? ?刪除header value末尾的空白符。
e.?? ?Header name和value是由冒號分隔,需刪除冒號前后的空格
f.?? ?需按照DKIM簽名里的h標簽值中信頭列表的順序排列信頭。

The "simple" Body Canonicalization Algorithm
‘Simple’方式的郵件信體的規范化處理的要點為:
a.?? ?刪除空白行
b.?? ?刪除信體末尾多余的換行符CRLF,僅保留一個。

The "relaxed" Body Canonicalization Algorithm
‘Relaxed’方式的郵件信體的規范化處理的要點為:
a.?? ?刪除每行末尾的空白字符。需保留換行符。
b.?? ?每行中連續的空字符轉換為單個空格符。
c.?? ?刪除信體末尾的空白行,需保留一個CRLF.

首先驗證郵件正文的hash值是否匹配
將郵件正文按照DKIM簽名里指定的規范化處理方式處理后,按SHA256方式計算正文的hash值并將Hex格式的結果轉換為base64.

驗證正文hash值匹配后,執行簽名的驗證,分兩步進行:
Step 1:
從郵件DKIM簽名中提取b標簽的值,如下:
‘OYCVOTGgcZlZwAWYtmUsWIGev+zMqVCE0mVuqVQvhWfxwcG7W7tcdq5ObEPYvZTf2W8PK8U9bMI2QAnA9fB9lfqW/ndfy00k5lGJk6igZlyH2Hr3FC+A’
這是base64格式的數據,需轉換為原始數據,并保存到文件hash.dat.

通過DNS查詢,獲取該數字簽名對應的公鑰'Public Key',保存到文件domain.pem.

使用openssl工具來驗證數字簽名,

openssl rsautl -verify -inkey domain.pem -pubin -in hash.dat -asn1parse


驗證結果是SHA256的哈希值,如下:

0:d=0 hl=2 l= 49 cons: SEQUENCE2:d=1 hl=2 l= 13 cons: SEQUENCE4:d=2 hl=2 l= 9 prim: OBJECT :sha25615:d=2 hl=2 l= 0 prim: NULL17:d=1 hl=2 l= 32 prim: OCTET STRING0000 - 5e a1 08 c3 a6 c1 fd 52-83 d7 eb c9 ec 86 25 35 ^......R......%50010 - 2b 1a c5 85 42 74 5e 0c-45 49 0f bb 06 3c 54 49 +...Bt^.EI...<TI


哈希值為:'5ea108c3a6c1fd5283d7ebc9ec8625352b1ac58542745e0c45490fbb063c5449'

Step 2:

規范化處理郵件信頭,需將DKIM簽名信頭規范化處理后放置在指定信頭后面。
將處理后的信頭提交進行SHA256計算,得到哈希值:
'5ea108c3a6c1fd5283d7ebc9ec8625352b1ac58542745e0c45490fbb063c5449'

該哈希值和Step 1中驗證計算得到的哈希值相同,即通過DKIM驗證。

由于驗證需要使用指定域名的公鑰,從而可以驗證發件人身份可靠。郵件正文的哈希值加入了標簽b的驗證,可以保證數據的完整,沒有被篡改。

總結

以上是生活随笔為你收集整理的邮件安全之DKIM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。