?
This document uses PHP Chinese website manual Release
在此頁面上,您將看到公證服務體系結(jié)構(gòu)的概述。
本文檔假定您熟悉更新框架,但這里簡要回顧一下 TUF 角色和相應的密鑰層次結(jié)構(gòu):
根元數(shù)據(jù)文件,其中列出了根,目標,快照和時間戳公鑰的 ID??蛻舳耸褂眠@些公鑰來驗證存儲庫中所有元數(shù)據(jù)文件的簽名。這個密鑰由一個集合所有者持有,并且應該保持離線和安全,比其他密鑰更重要。
快照鍵簽名快照元數(shù)據(jù)文件,文件枚舉集合的根,目標和委托元數(shù)據(jù)文件的文件名,大小和散列值。該文件用于驗證其他元數(shù)據(jù)文件的完整性??煺贞P鍵字由集合所有者/管理員持有,或由公證服務持有以便于多個協(xié)作者通過委派角色進行簽名。
時間戳記密鑰為時間戳記元數(shù)據(jù)文件簽名,文件通過使任何特定元數(shù)據(jù)的到期時間最短并通過指定集合的最近快照的文件名,大小和散列來為集合提供新鮮度保證。它用于驗證快照文件的完整性。時間戳密鑰由公證服務持有,因此時間戳可以在服務器請求時自動重新生成,而不是要求集合所有者在每個時間戳到期之前聯(lián)機。
目標鍵對目標元數(shù)據(jù)文件進行簽名,目標元數(shù)據(jù)文件列出集合中的文件名,以及它們的大小和相應的散列值。該文件用于驗證存儲庫某些或全部實際內(nèi)容的完整性。它也用于通過委派角色將信任委托給其他協(xié)作者。目標鍵由集合所有者或管理員持有。
委托鍵為委托元數(shù)據(jù)文件簽名,其中列出了集合中的文件名以及它們的大小和相應的散列。這些文件用于驗證存儲庫某些或全部實際內(nèi)容的完整性。它們還用于通過較低級別的委派角色將信任委托給其他協(xié)作者。委托密鑰由集合所有者或管理員到集合協(xié)作者的任何人持有。
公證人客戶從一個或多個(遠程)公證服務中提取元數(shù)據(jù)。一些公證客戶將把元數(shù)據(jù)推送到一個或多個公證服務。
公證服務由公證服務器組成,公證服務器存儲和更新關聯(lián)數(shù)據(jù)庫中多個可信集合的簽名 TUF 元數(shù)據(jù)文件,以及公證簽名人,公證簽名人存儲私鑰并為公證服務器簽署元數(shù)據(jù)。下圖說明了這種架構(gòu):
根,目標和(有時)快照元數(shù)據(jù)由客戶端生成并簽署,客戶端將元數(shù)據(jù)上傳到公證服務器。服務器負責:
確保上傳的元數(shù)據(jù)有效,簽名和自我一致
生成時間戳(有時是快照)元數(shù)據(jù)
存儲并向客戶提供任何可信收集的最新有效元數(shù)據(jù)
公證人簽名人負責:
將使用 Javascript 對象簽名和加密進行打包和加密的私人簽名密鑰存儲在與公證服務器數(shù)據(jù)庫分開的數(shù)據(jù)庫中
每當公證服務器請求時使用這些密鑰執(zhí)行簽名操作
下圖說明了公證客戶端,服務器和簽署者之間的交互:
公證服務器可選擇支持使用 JWT 令牌的客戶端進行身份驗證。這需要一個管理訪問控制的授權(quán)服務器,以及來自該授權(quán)服務器的包含用于簽署令牌的公鑰的證書包。如果在公證服務器上啟用令牌認證,則任何沒有令牌的連接客戶端將被重定向到授權(quán)服務器。有關更多信息,請參閱 Docker Registry v2身份驗證的文檔。
客戶端將通過基于 HTTPS 的基本身份驗證登錄授權(quán)服務器,獲取不記名令牌,然后在將來的請求中將令牌提供給公證服務器。
當客戶端上傳新的元數(shù)據(jù)文件時,公證服務器會針對任何以前的版本檢查沖突,并驗證上傳的元數(shù)據(jù)的簽名,校驗和和有效性。
一旦所有上傳的元數(shù)據(jù)都得到驗證,公證服務器就會生成時間戳(也可能是快照)元數(shù)據(jù)。它將這個生成的元數(shù)據(jù)發(fā)送給公證簽名者進行簽名。
公證人簽名人從其數(shù)據(jù)庫中檢索必要的加密私鑰(如果有的話),解密密鑰并使用它們簽署元數(shù)據(jù)。如果成功,它將簽名發(fā)送回公證服務器。
公證服務器是可信數(shù)據(jù)集狀態(tài)的真實來源,將客戶端上傳的和服務器生成的元數(shù)據(jù)存儲在 TUF 數(shù)據(jù)庫中。生成的時間戳和快照元數(shù)據(jù)證明客戶端上傳的元數(shù)據(jù)文件是該受信任集合的最新信息。最后,公證服務器將通知客戶他們的上傳成功了。
客戶端現(xiàn)在可以立即從服務器下載最新的元數(shù)據(jù),使用仍然有效的持票人令牌進行連接。公證服務器只需要從數(shù)據(jù)庫中獲取元數(shù)據(jù),因為沒有元數(shù)據(jù)已經(jīng)過期。在時間戳已過期的情況下,公證服務器將遍歷整個序列,并在其中生成新時間戳,請求公證簽名人簽名,將新簽名的時間戳存儲在數(shù)據(jù)庫中。然后它將這個新的時間戳以及剩余的元數(shù)據(jù)發(fā)送給請求客戶端。
服務器和簽名者都是針對公證服務的所有用戶的潛在攻擊媒介??蛻舳嗣荑€也是潛在的攻擊媒介,但并不一定針對所有的集合。本節(jié)討論我們的架構(gòu)是如何設計來處理妥協(xié)的。
在公證服務器遭到破壞的情況下,攻擊者可直接訪問存儲在數(shù)據(jù)庫中的元數(shù)據(jù)以及訪問用于與公證人簽名人進行通信的憑證,因此可以使用簽署人持有的任何密鑰訪問任意簽署操作。
拒絕服務 - 攻擊者可以拒絕客戶端請求并破壞或刪除數(shù)據(jù)庫中的元數(shù)據(jù),從而阻止客戶端下載或上傳元數(shù)據(jù)。
惡意內(nèi)容 - 攻擊者可以為一個或多個可信集合創(chuàng)建,存儲和提供任意元數(shù)據(jù)內(nèi)容。但是,他們無權(quán)訪問任何客戶端密鑰,如根,目標以及潛在的現(xiàn)有可信集合的快照密鑰。只有那些從未見過可信集合的客戶,以及沒有任何形式固定信任的客戶,可能會被誘騙下載并信任這些可信集合的惡意內(nèi)容。之前與任何受信任集合進行交互或?qū)⑵湫湃喂潭ǖ郊系奶囟ㄗC書的客戶端將立即檢測到內(nèi)容是惡意的,并且不會相信這些集合的任何根目標或(可能)快照元數(shù)據(jù)。
回滾,凍結(jié),混合和匹配 - 攻擊者可以請求公證簽名者簽署他們想要的任意時間戳(也許是快照)元數(shù)據(jù)。攻擊者可以發(fā)起凍結(jié)攻擊,并根據(jù)快照鍵是否可用,進行混合匹配攻擊,直到目標文件到期。只要攻擊者確保其惡意元數(shù)據(jù)的版本號高于任何客戶端可能擁有的最新優(yōu)質(zhì)元數(shù)據(jù)的版本號,那么無論是否擁有固定信任的客戶都將容易受到這些攻擊。
請注意,時間戳和快照鍵不能在僅服務器折衷方案中受到影響,因此不需要按鍵輪換。例如,一旦服務器妥協(xié)被緩解,攻擊者將無法生成有效的時間戳或快照元數(shù)據(jù),并將其提供給惡意鏡像。
如果公證簽名者受到損害,攻擊者可以訪問存儲在數(shù)據(jù)庫中的所有(時間戳和快照)私鑰。如果密鑰存儲在 HSM 中,他們將能夠使用或刪除 HSM 中的密鑰來簽署任意內(nèi)容,但不能泄露私有資料。
拒絕服務 - 攻擊者可能會拒絕所有公證服務器請求并破壞或刪除數(shù)據(jù)庫中的密鑰(甚至從 HSM 中刪除密鑰),從而阻止公證服務器簽名生成的時間戳或快照。
密鑰泄漏 - 如果公證簽名人使用數(shù)據(jù)庫作為其后端,攻擊者可以泄露所有(時間戳和快照)私人資料。請注意,攻擊者的功能與公證服務器在簽署任意元數(shù)據(jù)方面的功能相同,在這種情況下,重要的細節(jié)是關鍵循環(huán)將有必要從攻擊中恢復。
用戶持有和管理的密鑰的安全取決于用戶采取的措施。如果公證客戶端 CLI 用于創(chuàng)建它們,則它們受密碼保護,公證 CLI 不會提供以明文形式導出它們的選項。
用戶可以選擇適當?shù)拿艽a,并保護密鑰免受離線強力攻擊。
信任收集所有者/管理員的解密密鑰的破壞程度取決于被破壞的密鑰的類型和組合(例如,快照密鑰和目標密鑰,或者僅僅是目標密鑰)。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
授權(quán)密鑰 | 沒有 | 沒有 | 沒有 |
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
授權(quán)密鑰 | 有限,也許* | 有限,也許* | 有限,也許* |
*如果公證服務持有快照密鑰并且攻擊者擁有公證服務寫入憑證,則他們可以有效訪問快照和時間戳記密鑰,因為服務器將為其生成并簽署快照和時間戳記。
攻擊者可以添加惡意內(nèi)容,從集合中刪除合法內(nèi)容,并混合集合中的目標,但只能在密鑰可以簽名的特定代理角色中進行。根據(jù)對該角色的限制,他們可能會受限于他們可以修改的內(nèi)容類型。他們還可以添加或刪除其下的其他代表團鍵在鍵層次的功能(例如,如果DelegationKey2
在上面的密鑰層次被泄露,也只是能夠修改的能力DelegationKey4
和DelegationKey5
)。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
授權(quán)密鑰,快照密鑰 | 沒有 | 沒有 | 沒有 |
攻擊者無法訪問由公證服務始終持有的時間戳密鑰,并且無法設置惡意鏡像。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
授權(quán)密鑰,快照密鑰 | 有限 | 有限 | 有限 |
公證服務始終保存時間戳記密鑰。如果攻擊者具有公證服務寫入憑證,則他們可以有效訪問時間戳記密鑰,因為服務器將為其生成并簽署時間戳記。
攻擊者可以添加惡意內(nèi)容,從集合中刪除合法內(nèi)容,并混合集合中的目標,但只能在密鑰可以簽名的特定代理角色中進行。根據(jù)對該角色的限制,他們可能會受限于他們可以修改的內(nèi)容類型。他們還可以添加或刪除其下的其他代表團鍵在鍵層次的功能(例如,如果DelegationKey2
在上面的密鑰層次被泄露,也只是能夠修改的能力DelegationKey4
和DelegationKey5
)。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
目標關鍵 | 沒有 | 沒有 | 沒有 |
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
目標關鍵 | 也許* | 也許* | 有限,也許* |
*如果公證服務持有快照密鑰并且攻擊者擁有公證服務寫入憑證,則他們可以有效訪問快照和時間戳記密鑰,因為服務器將為其生成并簽署快照和時間戳記。
攻擊者可以添加任何惡意內(nèi)容,從集合中刪除任何合法內(nèi)容,并混合集合中的目標。他們還可以添加或刪除任何頂級代表團鍵或角色的能力(例如Delegation1
,Delegation2
和Delegation3
在密鑰層次結(jié)構(gòu)圖)。如果他們完全刪除角色,他們會將信任鏈分解為較低的委派角色(例如Delegation4
,Delegation5
)。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
目標鍵,快照鍵 | 沒有 | 沒有 | 沒有 |
攻擊者無法訪問由公證服務始終持有的時間戳密鑰,并且無法設置惡意鏡像。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
目標鍵,快照鍵 | 是 | 是 | 有限 |
公證服務始終保存時間戳記密鑰。如果攻擊者具有公證服務寫入憑證,則他們可以有效訪問時間戳記密鑰,因為服務器將為其生成并簽署時間戳記。
攻擊者可以添加任何惡意內(nèi)容,從集合中刪除任何合法內(nèi)容,并混合集合中的目標。他們還可以添加或刪除任何頂級代表團鍵或角色的能力(例如Delegation1
,Delegation2
和Delegation3
在密鑰層次結(jié)構(gòu)圖)。如果他們完全刪除角色,他們會將信任鏈分解為較低的委派角色(例如Delegation4
,Delegation5
)。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
所有的鑰匙 | 是 | 是 | 是 |
不需要其他密鑰,因為攻擊者可以隨意旋轉(zhuǎn)或全部旋轉(zhuǎn)到他們生成的密鑰。利用這些密鑰,他們可以設置一個鏡像來提供惡意數(shù)據(jù) - 任何惡意數(shù)據(jù),因為他們可以訪問所有密鑰。
密鑰泄露 | 惡意內(nèi)容 | 回滾,凍結(jié),混合和匹配 | 拒絕服務 |
---|---|---|---|
所有的鑰匙 | 是 | 是 | 是 |
*如果公證服務持有快照密鑰并且攻擊者擁有公證服務寫入憑證,則他們甚至不必旋轉(zhuǎn)快照和時間戳密鑰,因為服務器將為其生成并簽署快照和時間戳。
如果檢測到根密鑰泄露,則根密鑰持有者應聯(lián)系運行公證服務的人員手動反轉(zhuǎn)對存儲庫的任何惡意更改,并立即旋轉(zhuǎn)根密鑰。這將創(chuàng)建存儲庫歷史記錄的分支,從而打破已下載任何惡意更改的現(xiàn)有客戶端。
如果檢測到目標密鑰泄露,則根密鑰持有者必須旋轉(zhuǎn)已泄密的密鑰并使用新密鑰推送干凈的一組目標。
如果檢測到授權(quán)密鑰泄露,則更高級別的密鑰(例如,如果Delegation4
已被泄密,則Delegation2
;如果Delegation2
已泄密,則Targets
密鑰)持有者必須旋轉(zhuǎn)已泄密的密鑰,并使用新密鑰推送干凈的一組目標。
如果檢測到公證服務憑證泄密,則應立即更改憑證。