不久前,Cloudflare 推出了用 USB 安全密鑰替代 CAPTCHA 人格加密證明(Cryptographic Attestation of Personhood),現(xiàn)在我們宣布了對設備內置生物識別硬件的額外支持。在做這項工作時,我們突然想到,硬件證明,即用硬件證明用戶的身份或其他屬性,可以有更廣泛的應用,而不僅僅是 CAPTCHA 替代方案和通過 WebAuthn 的用戶身份驗證。確實如此,如果某個人自己受信任的設備可以證明其存在,為何他/她需要擁有一個賬戶來作為證明呢?
WebAuthn 標準中的證明讓網站知道你的安全密鑰是真實的。它被設計成具有良好的隱私屬性,并被寫入設備制造商必須遵守的策略中。你的安全密鑰發(fā)送到網站的信息與無數(shù)其他密鑰的信息是無法區(qū)分的。即便如此,我們還是想做得更好。如果我們把證明從認證中分離出來,那么我們只需要了解你的安全密鑰是真實的——事實上,我們已經為瀏覽器設計了一種新的零知識證明來做到這一點。
這是我們?yōu)楦纳普麄€互聯(lián)網隱私所做工作的一部分。我們尚未將這種人格證明投入生產,但你可以看到該技術的實際演示。我們已經看到它與 YubiKeys 等一起使用。最重要的是,我們將開源代碼,以便每個人都可以從中受益并做出貢獻。閱讀以下內容以了解詳細信息以及后續(xù)步驟。
簡介
WebAuthn 認證向要求認證的網站識別硬件安全密鑰的制造商。它旨在部署于封閉環(huán)境中,例如金融機構和內部服務,這些網站與你預先建立了關系。由于登錄可識別你的身份,對隱私的影響微乎其微。相比之下,任何使用認證的開放網站都會了解你所用密鑰的品牌和型號。
品牌和型號信息似乎沒有那么敏感。但是,當與用戶代理、語言偏好、一天中的時間等信息結合起來時,它有助于構建用戶的形象——就像人口統(tǒng)計信息、身高、體重和服裝與汽車的品牌和型號結合起來后,就能更容易在高速公路上找到特定的汽車。因此,在網站獲得這一證明時,瀏覽器就會進行對話,以確保用戶了解網站正在獲取可能有助于識別他/她們的信息。Cloudflare 非常重視隱私,希望避免獲取任何可以識別你的信息。
我們從證明中看到的信息證明你的安全密鑰的制造商確實制造了該密鑰。它是由安全密鑰在安全區(qū)中保管的私鑰所作的數(shù)字簽名,帶有指向制造商的證書鏈。這些鏈使任何服務器都能看到硬件安全密鑰是真實的。對于人格加密證明,我們想要的只是一點:你擁有一個值得信任的硬件安全密鑰,并且不用提供有關制造商或型號的任何詳細信息。
在過去,證明在只有少數(shù)幾家制造商被認可的環(huán)境中使用。例如,大型金融機構相當保守。在這種環(huán)境中,披露制造商是必須的。在開放的供應商設計中,我們不想向任何特定制造商提供特權,而只是想知道密鑰是值得信任的。
可信度由 FIDO 元數(shù)據(jù)服務確定。這是為制造商維護根證書的 FIDO2 聯(lián)盟提供的一項服務。當這些密鑰被泄露時,它們會在 FIDO 系統(tǒng)中列出。我們有自動腳本來下載這些根并將它們插入到我們的軟件版本中。這可確保我們在新制造商出現(xiàn)或舊設備因攻擊者提取密鑰或密鑰處理不當而遭到泄漏時始終保持最新狀態(tài)。
值得稱贊的是,F(xiàn)IDO 聯(lián)盟要求不少于 10 萬臺設備共享一個證明密鑰,對設備匿名集大小設置下限,以最大限度地減少信息收集的影響??上У氖?,實際情況并非總是如此。一些制造商永遠達不到以上批量,用戶不應該為保護他們的隱私而涌向最大的制造商。Cloudflare 實施了強有力的隱私政策來管理我們使用這些信息的方式,但我們更希望完全不知道你的密鑰的制造商。正如我們刪除了不再需要的 cookie,并在我們自己無法看到的情況下記錄客戶調試自己防火墻規(guī)則的日志數(shù)據(jù)一樣,我們一直在設法減少我們可以看到的信息。
同時,我們需要確保響應我們請求的設備是真正的安全密鑰,而不是自動程序運行的某種軟件仿真。從本質上講,我們希望在不了解任何其他信息的情況下證明憑據(jù)的合法性。
然而,這些方案通常要求實施憑據(jù)證明的硬件或軟件在設計時就要將某一種方案考慮在內。我們無法直接去說服制造商在幾個月內添加功能,更不用說取代世界上所有的硬件身份驗證安全密鑰了。相反,我們必須尋找與現(xiàn)有硬件兼容的解決方案。
零知識證明概要介紹
零知識證明,通??s寫為 ZKP。零知識證明的一個經典示例是向某人展示你知道《尋找威利》(Where’s Wally)中的威利在哪里。若你能在圖中指出威利,就能告訴別人威利的具體位置。但是,如果你用一大張紙蓋住圖片,僅留一個小洞露出威利,那么別人只能看到威利在圖中某處,但不清楚具體在哪里。他們會知道你知道威利在哪里,但他們自己不知道威利在哪里。
密碼學家設計了大量零知識證明以及將它們連接在一起的方法。將它們連接在一起的核心部分是承諾,一個加密信封。承諾防止篡改創(chuàng)建時放入其中的值,稍后可開啟以顯示放入其中的內容。我們在現(xiàn)實生活中使用承諾機制。魔術師可在信封中密封一張紙,向觀眾保證他不能觸碰或篡改它,然后讓人打開信封,揭示他的預測。在無聲拍賣中,人們將競價放入密封的信封中,然后一起打開,確保沒有人能在看到其他人的競價后調整其自己的競價。
承諾像電線一樣將零知識證明聯(lián)系在一起,從簡單的證明生成更大、更復雜的證明。通過證明承諾中的值具備不同零知識證明的兩個不同屬性,我們就能證明兩個屬性對該值都成立。
我們的瀏覽器零知識證明系統(tǒng)
在人格加密認證中,服務器向瀏覽器發(fā)送硬件安全簽名,證明其真實性。在我們使用零知識證明時,客戶端不會發(fā)送簽名,而是發(fā)送一個證明,證明該簽名是由服務器提供的列表中的密鑰產生的。
由于我們僅向服務器發(fā)送證明,服務器只知道證明的存在,而不知道哪一個硬件安全密鑰生成它。這保證了隱私。但我們需要確保證明和驗證的執(zhí)行能大規(guī)模高效執(zhí)行,以提供一個可部署的解決方案。
我們研究了很多潛在機制,包括 SNARKS 。不幸的是,SNARK 的代碼大小、工具鏈要求和證明的復雜性令人望而卻步。
對于我們支持的硬件安全密鑰,證明中的數(shù)字簽名是由橢圓曲線數(shù)字簽名算法 (ECDSA) 生成的。ECDSA 本身類似于我們使用的許多零知識證明。
不幸的是,通常提出的驗證方程涉及一些需要將值從一種形式轉換為另一種形式的操作。在零知識證明中,這些操作既復雜又昂貴,有很多步驟。為了將 ECDSA 轉換為我們可以使用的方案,我們做了很多調整。調整后,任何人都可以在不使用任何秘密知識的情況下獲取 ECDSA 簽名并將其轉換為我們調整方案的簽名,反之亦然,因此它與 ECDSA 一樣安全。
由于我們要證明的陳述有兩個部分——“消息由密鑰簽名”和“密鑰在列表中”——很自然地,證明該陳述的問題也分成兩個部分。首先,證明者證明承諾內部的密鑰簽署了消息,然后證明者證明提交的密鑰在列表中。驗證者同樣檢查這兩部分,如果兩部分都有效,則表明證明有效。
設計更加有效的曲線
為此,我們設計了更加有效的曲線,我們將關于 ECDSA 簽名的陳述轉化為關于 P-256 橢圓曲線上的點的陳述,然后轉化為關于 P-256 定義域中的算術陳述。如果我們有一個大小與字段大小匹配的組,這些語句更容易證明,因此我們必須找到一個。
我們這里想要的是具有給定點數(shù)的曲線,因此不得不使用一些相當高級的數(shù)論機制來確定這條曲線。如此做法對我們的零知識證明盡可能有效發(fā)揮巨大作用。
我們的勞動結晶
除此之外,還需要進行大量額外的工程工作,以通過少許優(yōu)化使證明更快運行。我們可以在幾秒鐘內生成證明,并在幾百毫秒內對其進行驗證。這一速度已足夠滿足實踐需要,也就是說,想要驗證安全密鑰的安全性的網站可以如愿,不會對隱私有負面影響。
使用我們技術的網站只需要了解,簽名是否由一個認證密鑰在其所提供的列表上的令牌生成的。與直接使用 WebAuthn 不同,它們不會獲得任何更詳細的信息,即使制造商意外使批量變得過小也無妨。與其使用基于策略的方法來保護用戶隱私,我們移除了麻煩的信息。
后續(xù)工作-社區(qū)努力!
我們的演示表明,我們能基于零知識證明來增強隱私保護。我們正在不斷改進,添加更多的性能和安全特性。但是,只有擁有在每個瀏覽器中都可以使用的隱私保護 WebAuthn 擴展,讓用戶確信自己的數(shù)據(jù)不會離開瀏覽器,我們的任務才算完成。
我們已經做到的是演示可能做到什么:使用零知識證明來將 WebAuthn 認證變成一個在設計上平等對待每一個制造商、保護用戶隱私并可被每一個網站使用的系統(tǒng)。大規(guī)模使用證明而產生的用戶隱私挑戰(zhàn)是可以解決的。
要形成高質量、可靠的系統(tǒng),需要遠遠不止核心加密技術方面的見解。為了使用戶體驗不涉及有關我們零知識證明丟棄的信息,我們需要與瀏覽器進一步集成。我們還需要一種安全的方法,以便不在我們列表中的設備的用戶將其密鑰發(fā)給我們,并表明其值得信任;需要一種方法來確保該列表未被濫用以嘗試確定密鑰。
SNARKS 在這方面具備巨大優(yōu)勢,但代價是演示的代碼體積太大。最終將這些改進納入 web 生態(tài)系統(tǒng)的核心部分,需要與用戶、瀏覽器和其他參與者合作,找到對他們有效的解決方案。如果你希望為這個過程作出貢獻,歡迎通過電子郵件 ask-research@cloudflare.com 與我們聯(lián)系