證書透明化日誌工做原理

[TOC] 譯:How Log Proofs Work算法

概念

證書透明日誌使用特殊的加密算法有助於證書和日誌的公共審查。這個特殊的加密算法稱做默克哈希樹(Merkle hash tree) ,一種包含哈希葉和結點的簡單二叉樹(圖1)。葉子是已附加到日誌中的單個證書的哈希。節點是成對的子葉或成對的子節點的哈希。全部葉子和結點的根,即根哈希稱做默克樹哈希(Merkle tree hash)。當日志服務器對默克樹哈希(及其餘信息)簽名,稱爲簽名樹頭(STH:signed tree head )服務器

image

按期地,可能一小時一次,日誌服務器將新獲取到的證書追加到日誌中。經過新獲取到的證書建立單獨的默克樹哈希,該哈希和以前已在哈希樹中的舊默克樹哈希結合成新的默克樹哈希(圖2)。對新的默克樹哈希簽名建立新簽名樹頭。反反覆覆的持續,以前提交到日誌中的全部證書造成了一個不斷增加的默克樹。加密

image

一致性證實和審計證實

由於這種構造方式,默克哈希樹讓日誌高效迅速的證實兩件事:spa

  • 全部證書被一致性地附加到日誌中
  • 特定的證書附加到日誌中 日誌經過提供兩個加密證實來支持:默克一致性證實和默克審計證實。

默克一致性證實

默克一致性證實驗證一條日誌的任意兩個版本是一致的:即,新版本包含舊版本的一切,換句話說,全部新條目緊跟在上個版本的條目後。若是證實日誌是一致的,意味着沒有過時的證書且插入到日誌中,日誌中沒有證書被修改,且日誌也沒有分支過。設計

爲了演示默克一致性證實原理,假設要證實圖2和圖3中的日誌是一致的。第一步,須要證實舊默克樹哈希是新默克樹哈希的子集。而後再證實新默克樹哈希是舊默克樹哈希加上全部中間新附加證書的結點哈希。一致性證實是計算這二者所須要的最少中間節點哈希集。日誌

這種情形下,一致性證實由如下中間節點哈希組成:klm(見圖4)。用km建立舊默克樹哈希,所以證實舊樹存在且沒有被改變。而後用lk建立n,用nm建立日誌新默克樹哈希。若是計算的默克樹哈希和日誌中的相匹配,則日誌是一致性的。code

image

監視器和審計按期使用一致性證實來驗證日誌是否正常。由於監視器一般有和日誌中同樣的證書列表,能夠自行計算一致性證實,且驗證日誌中的一致性。設計能夠簡單的查詢日誌服務器,獲得任意兩個已簽名樹頭的一致性證實。get

默克審計證實

默克審計證實能夠驗證日誌中是否有特定的證書。這是一項重要的證實任務,由於證書透明模型須要的是全部TLS客戶端拒絕沒有在日誌中出現的證書。hash

爲顯示默克審計證實的原理,假設要驗證d3證書(d葉子)已經附加到圖3中裏的日誌中。默克審計證實是計算葉與樹根之間的全部節點所需的缺乏節點哈希。若是根據審計路徑計算的根哈希和當前日誌中的默克樹哈希相匹配,則該葉子存在於樹中(或換句話說,日誌中存在該證書)。監控

這個例子中,默克審計證實包含如下節點哈希:c,i,n(見圖5)。覺得d已知,則能夠用c計算出j。而後用ij計算出m,再用nm計算出該日誌的默克樹哈希。同理,若是要驗證證書d4已經被附加到日誌中,日誌給你發送f, l, m 結點哈希的一致性證實。已知葉子哈希( e),也就能用葉子哈希f計算出結點哈希k,而後用結點哈希l計算出結點哈希n,再用結點哈希mn計算出日誌的默克樹哈希。

任何人均可以請求日誌的默克樹哈希,也能驗證某個證書是否存在日誌中。審計一般發送這些類型的請求到日誌中,以便爲TLS客戶端驗證證書。若是默克審計證實沒有計算出和默克樹哈希相匹配的根哈希,則意味着日誌中不存在該證書。

image

使用證實

證實提供審計須要的加密數據。通知,審計瞭解日誌的不多信息,可是儘管瞭解有限,證實能爲審計驗證日誌的一致性和特定證書是否已附加到日誌中。

若沒有證實,審計可能訪問或回去全部的日誌記錄,以行使其職責。證實讓數據交換更高效,日誌和審計交換的數據量也少的多。舉個例子,包好1000萬個證書的日誌僅須要24個結點哈希一致性證實。若是日誌中增長到2000萬個證書,一致性證實的結點哈希數量纔到25個。

證實對於監視器也頗有用,儘管方式略有不一樣。監視器一般保存監控到的日誌副本,以便檢查日誌的每一個證書,且注意特定的證書。若是監視器檢查監控到的特定日誌的一致性,能夠本身計算出一致性證實,而後驗證日誌的一致性。一樣地,若是監視器老是須要特定的證書是否存在於日誌中,也能夠本身計算出審計證實,而後用該證實驗證證書。

相關文章
相關標籤/搜索