[ DKIM ]

透過MIME和傳輸編碼更改診斷DKIM故障

比較序列化訊息,以區分視覺上相同的內容和DKIM實際驗證的位元組。

由EmailAuth研究團隊提供

[ 重點 ]

  • DKIM對編碼的正文表示進行雜湊處理,而不是對解碼的附件內容進行雜湊處理。
  • MIME部分標頭和邊界是主體位元組;外部標頭使用基於 h 的覆蓋範圍。
  • 在最終適當的簽章操作之前完成MIME序列化。
在此頁面上

兩個訊息在郵件用戶端中可能看起來相同,但仍然會產生不同的結果 DKIM 正文哈希值。 DKIM在指定後驗證傳輸的表示形式 規範化,而不是讀者的解碼視圖。因此,當訊息僅在處理服務之後失敗時, MIME重建、內容傳輸轉換和邊界變更屬於調查的早期階段。

將外觀與表現分開

MIME訊息可以包含純文字、HTML、附件和巢狀的多部分結構。 RFC 2046 §5.1.1 將MIME部分標頭和邊界定界符放置在多部分主體內。將文字部分從 Quoted-printable 重新編碼為 Base64 可以保留使用者讀取的內容,同時變更呈現給DKIM的位元組。重新包裝編碼行也可以更改這些位元組。 寬鬆的規範化 是定義的空白轉換,而不是MIME解碼器或渲染內容的等效測試。

RFC 6376 §5.3 建議在簽章之前轉換為適當的MIME傳輸編碼,以減少傳輸轉換。它特別要求在傳輸之前發生變化的本地表示在簽名之前進行標準化。操作原理很簡單:在接收者希望看到的表格上簽名。

找到序列化更改

在簽署者輸出、可疑網關輸出和最終接收者處取得原始訊息。儲存原件,無需透過標準化行結尾的編輯器開啟和儲存它們。請注意收集方法,因為匯出工具本身可以更改表示形式。

比較外部訊息和每個相關MIME部分的 Content-Type 和 Content-Transfer-Encoding 欄位。檢查邊界字串、附件編碼、折疊線和字元集轉換。確定 h 中是否包含更改的外部標頭以及簽名主體內部是否出現更改的部分標頭。分別對待這兩個位置:外部標頭可能會導致簽章驗證失敗,而MIME部分標頭通常參與簽章驗證。 正文哈希.

完成編碼範例

說明性測試規範:在應用程式對訊息進行簽署之前,使用quoted-printable 準備包含非ASCII 字元的文字部分。下游服務對該部分進行解碼並將其序列化為 base64。顯示的句子保持不變,但規範化主體可能不同,原始簽名可能會失敗。僅使用受控內容執行此轉換並檢查實際位元組差異,而不是假設每個服務都執行此轉換。

建立一個小型測試集,其中包含純 ASCII 純文字、非 ASCII 文字、多部分 HTML 和一個小附件。透過直接控制路徑和生產等效處理路徑發送每個路徑。如果只有後者改變表示,則邊界比較會識別要研究的組件。如果兩者都失敗,請先檢查簽署者自己的序列化和規範化。

修復邊界

在簽章之前優先選擇最終的MIME構造和傳輸編碼選擇。如果安全服務必須重寫內容,請在最終序列化後安排授權簽章步驟。確認其自訂網域支援和所有權模型;不相關服務網域下的簽章可能會在不對齊的情況下透過DKIM DMARC 在下面 RFC 9989 §4.4.1.

請勿就地修復樣品並將其作為生產已修復的證據。修改後的樣本僅檢驗假設。更改負責的配置,發送新的受控訊息並捕獲其原始接收器結果。避免僅僅為了保留簽名而廣泛繞過內容檢查而不審查安全後果。

保留有用的事件記錄

記錄序列化內容分歧的第一個邊界、受影響的MIME欄位或部分、簽署者和 選擇器,以及每個測試變體的結果。保持測試訊息不含客戶資料。網關升級和附件處理更改後重新運行套件。已完成的修復解釋了舊表示失敗的原因,並表明新發出的郵件在完全受支援的路由中仍然存在。

比較具體的編碼表示

對於表示 é 的 UTF-8 位元組 C3 A9,帶引號的可列印表示為 =C3=A9; Base64 表示是 w6k=。使用適當的MIME標頭,兩者都會解碼為相同的字符,但編碼的字串不同。 RFC 2045 §6.7 和 RFC 2045 §6.8 定義編碼; RFC 6376 §3.7 需要在傳輸編碼之後和驗證期間解碼之前進行雜湊。這個孤立的表示範例不是完整的MIME訊息或執行的簽名測試。如果使用主體長度限制,請確定已變更的位元組是否在覆蓋範圍內,而不是假設每個部分都受到保護。

[ 外帶 ]

DKIM對編碼的正文表示進行雜湊處理,而不是對解碼的附件內容進行雜湊處理。 MIME部分標頭和邊界是主體位元組;外部標頭使用基於 h 的覆蓋範圍。在最終適當的簽章操作之前完成MIME序列化。

[ 按角色 ]

這對您意味著什麼

選擇您的角色以執行後續實際步驟。

IT/郵件管理員

比較序列化表格

識別第一個更改的MIME部分,而不是依賴螢幕截圖。

後續步驟

  1. 保護原料出口。
  2. 在簽章之前測試傳輸編碼。

CISO / SecOps

將檢驗與真實性結合在一起

選擇在最終簽名邊界之前檢查內容的設計。

後續步驟

  1. 檢查任何提議的旁路。
  2. 限制對捕獲訊息的存取。

創辦人/非技術人員

保護豐富的客戶訊息

基本測試電子郵件不涵蓋發票和報告使用的格式。

後續步驟

  1. 包括帶有合成資料的真實訊息格式。
  2. 指定處理服務的所有者。

[ 常見問題解答 ]

常見問題

相同的顯示文字可以有不同的正文哈希嗎?

是的。即使郵件用戶端呈現相同的文本, MIME序列化和傳輸編碼也可能不同。

RFC 6376 §3.7

DKIM是否對附件進行雜湊處理?

DKIM對規範化後的訊息正文表示進行操作,而不是對單獨解碼的附件檔案進行操作。

RFC 6376 §3.7

是否包含MIME部分標頭?

它們出現在訊息正文內部並參與其規範化位元組。全身覆蓋,它們都包括在內; l 限制可能會將後面的部分排除在覆蓋範圍之外。

RFC 2046 §5.1.1 RFC 6376 §3.7

寬鬆模式可以解碼 Base64 嗎?

不。它的轉換是定義的空白規則;它不解碼MIME傳輸編碼。

RFC 6376 §3.4.4

什麼時候該選擇編碼?

在簽名之前,在訊息被標準化為傳輸中預期的表示之後。

RFC 6376 §5.3

為什麼要保護原料出口?

渲染視圖隱藏了MIME和編碼差異,而編輯器可以引入自己的變更。

我們可以繞過安全閘道嗎?

受控比較路徑可以診斷問題,但生產旁路需要單獨的安全決策。

哪些迴歸樣本有用?

純文字、非 ASCII 內容、多部分 HTML 和附件公開不同的序列化路徑。

[ 來源 ]

來源

  1. RFC 6376

    部分 §1 · §3.4 · §3.4.4 · §3.5 · §3.7 · §5.3

  2. RFC 9989

    部分 §4.4.1

  3. RFC 8601

    部分 §1.2

  4. RFC 2045

    部分 §1 · §6.7 · §6.8

  5. RFC 2046

    部分 §5.1.1

[ 詞彙表 ]

詞彙表

MIME
表示結構化部分和編碼的訊息格式。

RFC 2045 §1 RFC 2046 §5.1.1

傳輸編碼
用於攜帶正文內容的編碼表示形式,例如quoted-printable或base64。

RFC 2045 §6.7 RFC 2045 §6.8

多部分邊界
標識MIME正文部分之間分隔的分隔符號。

RFC 2046 §5.1.1

規範化
DKIM位元組準備,不解碼MIME傳輸編碼。

RFC 6376 §3.4 RFC 6376 §3.7

企業出處

為什麼頂級金融機構和政府 退役了他們的電子郵件安全儀表板。

傳統的電子郵件驗證平台會向您出售儀表板並要求您的工程師來完成這項工作。在高風險環境中,手動監督意味著延遲執行、配置漂移和不受監控的影子域。

EmailAuth是代理電子郵件來源平台。 我們的代理人強制執行 p=reject,保持第三方寄件者一致並將您的網域移至完整狀態 RFC 9989 合規性、新的DMARC標準,以及人機互動審核能力。

政府 大型企業 一級金融機構

SaaS · 專用租賃 · 氣隙本地部署 · BYOK 加密

知識庫