說明:本文並不是逐字翻譯,加入了自己的理解和梳理。
原文作者:Ahto Buldas, Andres Kroonmaa, and Risto Laanoja
原文作者公司:Guardtime AS
基本介紹
KSI不是沒有密鑰體系,數字簽名驗證的時候仍然需要密鑰。但是KSI基礎設施中簽名驗證不再依賴密鑰的持續安全性,密鑰丟失對簽名檔驗證沒有影響。傳統的PKI體系與時間戳強相關,所以密鑰丟失會對PKI系統造成影響。因為在無密鑰系統中,簽名者的識別和證據完整性保護是分開的。例如,簽名者識別仍然可以通過使用非對稱密碼來完成,但是簽名的完整性可以通過使用無密鑰密碼(單向無碰撞哈希函數,不涉及任何秘密密鑰的公共標准轉換)來保護。
無密鑰簽名的步驟如下:
(1)哈希過程:對需要簽名的所有文件進行哈希計算,得到對應哈希列表
(2)聚合:第一輪對哈希列表中的所有hash進行簽名,並根據簽名創建全局的臨時哈希樹,該步驟持續時間長短不一,設置的時間是1s。
(3)發布:上一輪中創建的哈希樹根被收集到永久哈希樹,並生為永久哈希樹生成最高哈希值,該哈希值被設定為新的信任錨。
KSI中的哈希樹(Hash Trees)和哈希日歷(Hash Calenders)
Merkle哈希樹是KSI中的基礎,但是KSI中的哈希樹叫哈希日歷。 哈希日歷是單向增長的哈希樹:每秒鍾(UTC時間)新的哈希樹都會聚合到左側已有的哈希樹上,生成新的最高哈希值。新的哈希值的生成算法有兩種:一種方法是確定性算法可以計算鏈接哈希樹的頂部,從而每秒提供一個不同的頂級哈希值。另一種算法,用於從鏈接哈希樹的形狀中提取每秒的時間值,從而為每個已發行令牌提供難以修改的時間值。
在哈希日歷中,無法向已經聚合的哈希樹中添加請求,從而保證了哈希日歷中的哈希樹的單向性、抗沖突性,保證了回溯的安全性。
哈希日歷的頂層哈希計算算法流程如下圖所示:
KSI服務設計原則
(1)提供全局擴展的時間戳。
(2)易於審核和認證,高效和高魯棒性。
(3)底層數據結構保證無法發布虛假、回溯的或者其他有誤導性的簽名令牌。
(4)通過構建冗余集群,消除單點故障,提供可靠的KSI核心網絡環境。
(5)每一次聚合操作都是不可撤銷的
(6)每次計算之后的頂層哈希都需要上傳到難以修改的媒體介質,比如報紙、流行的微博平台、電子分發和經過數字簽名的出版物清單。具體發布介質根據實際需求修改。
KSI聚合
聚合流程
(1)應用程序通過工具對文檔生成簽名(或時間戳)。
(2)應用程序發起聚合請求,請求被發送到網關(發送服務到終端用戶)。
(3)網關對在其聚合周期中接收到的請求進行初始聚合。
(4)網關將其聚合請求發送到上游聚合集群。
(4)請求通過多層聚合服務器進行聚合,並由核心集群選擇全局唯一的頂級哈希值。
(5)通過聚合層發送響應。
說明:每個聚合周期的頂級哈希值存儲在“日歷數據庫”中,並通過“日歷緩存”層分發到擴展程序服務,該服務通常與網關主機位於同一位置。 客戶端應用程序通過擴展程序服務進行驗證。
上述KSI聚合流程如下圖所示:
多層聚合服務器
(1)在多層聚合服務器中,來自上游組件對同一回合的后續響應將被忽略,因此可以並行運行多個聚合器以提高可用性。
(2)臨時聚合樹在水平方向上分為四層(如下圖),並依此構建基礎結構,以使頂層與核心群集相鄰。 兩個中間層提供了地理范圍。 底層與網關捆綁在一起,並托管在終端用戶附近。 每個聚合器通過將其下游客戶名稱哈希到哈希樹中來標記其下游客戶。 這些前向安全標簽用於標識不同服務終端的分層名稱空間。
(3)上述的聚合樹在線性水平上非常容易擴展。目前為了提高效率,只有1個簽名哈希令牌。初始設定的哈希樹的深度是50層,則可以包含的簽名容量是:(250 ≈1015)/秒。該初始容量設定基本可以滿足大多數服務需求。
(4)每個網關和聚合服務器都生成不變的上游網絡流量,該流量與負載無關。這種設置使網管、聚合服務器與客戶端分離,不會造成實際服務使用情況信息泄漏,同時提供拒絕服務攻擊隔離。
(5)為了避免多層聚合服務器的單點故障,聚合服務器是物理上分散的並行工作的集群。這樣低層的服務器可以把聚合請求傳給所有上層的聚合服務器,然后將最快反饋的聚合服務器作為下一層的聚合服務提交者。同時,聚合服務器支持不停服配置和擴容。
核心服務器集群
(1)核心服務器是一台分布式同步計算機,負責對每個聚合周期的最高哈希達成共識,並將其持久化存儲在日歷數據庫中,同時將結果返回到聚合網絡。
(2)內核保持准確的時鍾值,該時鍾值作為每個簽名的時間戳呈現給客戶。
(3)日歷數據庫使用“dumb”緩存層將日歷數據庫分發到擴展服務器,以進行簽名驗證。
(4)核心服務器集群達成共識策略(比如服務為送達,接收到不同序列的請求,部分機器宕機的情況等):多方協議。具體做法:將其頂級哈希值傳播到所有核心節點,其中在每個可能重疊的回合結束時,大多數核心服務器具有相同的頂級哈希值集,則具有不同集合的服務器將知道它們不屬於多數服務器。只有屬於多數服務器的核心服務器節點可以把最高哈希值寫入到日歷數據庫。基於多方協議策略,核心服務器集群中的節點可以自動從網絡連接錯誤或其他問題中恢復。多方協議平均協議時間是(連接的)核心服務器之間往返的1.5倍(未考慮惡意安全模型——拜占庭模型)。
網關
(1)網關是協議適配層,接收(RFC3161, OpenKSI )類型的請求
(2)轉發請求到指定的聚合服務器,通常第一層聚合服務器在網關服務器上,以此降低聚合帶寬。
(3)網關一般運行着一個驗證服務——簽名驗證助手。該服務通過拷貝最新日歷緩存來驗證簽名的合法性。
(4)哈希鏈式通過客戶端API生成。令牌的合法性在應用層確定。應用層會存儲所有令牌的詳細信息,以便進行重新創建哈希鏈表,因為應用層不會將網關認為是可信第三方。
KSI驗證
KSI可以為電子數據提供獨立並且永久的完整性證明,當客戶端需要提起數據驗證時需要提供如下材料進行驗證:
(1)原始文件數據
(2)聚合層返回的無鑰簽名信息(包含類似merkle樹的SPV(簡單支付驗證)驗證路徑。)
(3)完整碼(當時時間片生成的Top Hash,日歷數據,可從公共媒體庫上獲取)
上述的擴展程序服務(包含“日歷緩存”層數據)根據客戶的提交的信息進行驗證:
(1)根據原始數據根據哈希算法計算文件哈希
(2)根據文件哈希和無鑰簽名信息使用對應計算規則生成完整碼
(3)將步驟(2)中的完整碼與KSI公共媒體庫上的完整碼進行比對,返回驗證結果信息。
KSI服務優化
本部分討論如何優化延遲並消除KSI服務響應時間的“長尾”。
簡化方法(同層聚合服務器集群)
由於聚合網絡為了消除單點故障的可能,所以聚合網絡都是冗余建設,聚合網絡集群越大,聚合網絡的時間延遲(Merkle哈希樹構建,頂層哈希計算,發送請求到上層聚合服務器)越嚴重。
(1)假設聚合周期為 d(上面已經說過聚合服務器的周期是固定的)
(2)一個請求從創建到到達聚合服務器的時間為 t,則對應請求的延遲是 d-t,所以請求越晚到達,則延遲越小。因此,優化的目的是如何合理設置聚合周期,使得聚合延遲最小。
如果聚合服務器集群中各個聚合服務器順序(這樣才能說通下面的公式)進行聚合,則聚合延遲時間如下:(后面部分的推導是自己的理解,如果不對請更正)
(1)假設有2個聚合服務器,聚合周期是 d ,則請求到達第2個聚合服務器的時間是 d/2(而不是0),所以此種情況下,平均延時時間是 d/4(不是 d/2)。此種情況下聚合延遲與時間的關系式是:
其中:t 屬於[0, d]
(2)基於上述公式得到的平均值是 d/4。
(3)如果集群中有m個聚合器,則到達第i個聚合器的時間是 i/m。則對應的時間關系式是:
則平均延遲時間是: d/2m。
通過上述分析,減小聚合延遲的方法是在群集中通過交錯聚合回合來減少服務延遲。
實用方法(跨層聚合服務器C to P)
引起跨層傳輸延遲的原因:
(1)跨層的時間延遲主要是由於傳輸距離(地理位置、網線長度等)引起,這種延遲是無法進行優化的。
(2)全局的網絡路由選擇傳輸路徑策略導致的延遲。
(3)網絡抖動導致的傳輸延遲。
上述的幾種情況導致的95%延遲的時間在25-40ms(毫秒),所以,可以通過將聚合層 P的時間周期設置為 t+40ms。 其中t為 聚合層 C 請求到達聚合層 P 的時間。在實際應用中,這種延遲的時間遠低於d / m。
經驗實驗總結
論文中的數據測試環境是:在日本東京、長野和歐洲的實驗室。核心服務器在歐洲。
實驗數據實在環境比較簡陋的實驗室,數據時長是24小時。
通過實驗得出如下結論:
(1)請求幾乎沒有失敗的情況,因為網絡各層都有自動重試機制。
(2)聚合延遲主要由底層網絡引起:從AN到ATL的往返延遲約為270ms,其他網絡延遲則小得多。 所有層的時鍾漂移小於4ms,核心協議投票時間為48ms。
所以優化的總結如下:
(1)通過交錯聚合來同步聚合周期可以減小聚合延遲。
(2)通過200 ~400ms的聚合時間可實現最低的延遲。 實驗從200毫秒開始,后來又恢復到400毫秒,以減少數據流量。
(3)在冗余集群中,虛擬服務器更優。3台虛擬服務器比2台物理機花費更少時間同時提供更好的服務。
(4)虛擬服務器的時間流可能不穩定,但它有助於使本地磁盤IO保持最小。 需要設置網絡日志記錄。
(5)基於TCP的服務雖然更容易實現,但是它有些無法避免的問題,比如“Idle之后啟動比較緩慢”的問題。
生產環境部署建議
(1)合理的NTP時間同步配置
(2)根據每個聚合層的每個聚合服務器站點之間的實測RTT,配置最佳時序偏移
(3)集群配置2~3個聚合服務器可以滿足需求
(4)核心服務器不需要任何修改,因為它的時鍾已經使用原子鍾,該始終已經與高質量的UTC時間源同步了。
(5)一天中不允許SysOps(系統操作)接觸多個群集成員
(6)網絡協議必須具有版本控制機制,以支持部分推出新版本
(7)測試必須在完全獨立的系統上執行
以上是對論文《Keyless Signatures' Infrastructure: How to Build Global Distributed Hash-Trees》的翻譯和理解,如果不對和不足的地方歡迎提出修改意見。