隆重介紹適用于跨/多廠商硬件私有Web認(rèn)證的Cloudflare零知識證明

來源: Cloudflare
作者:Cloudflare
時(shí)間:2021-09-13
16873
不久前,Cloudflare 推出了用 USB 安全密鑰替代 CAPTCHA 人格加密證明(Cryptographic Attestation of Personhood),現(xiàn)在我們宣布了對設(shè)備內(nèi)置生物識別硬件的額外支持。

不久前,Cloudflare 推出了用 USB 安全密鑰替代 CAPTCHA 人格加密證明(Cryptographic Attestation of Personhood),現(xiàn)在我們宣布了對設(shè)備內(nèi)置生物識別硬件的額外支持。在做這項(xiàng)工作時(shí),我們突然想到,硬件證明,即用硬件證明用戶的身份或其他屬性,可以有更廣泛的應(yīng)用,而不僅僅是 CAPTCHA 替代方案和通過 WebAuthn 的用戶身份驗(yàn)證。確實(shí)如此,如果某個(gè)人自己受信任的設(shè)備可以證明其存在,為何他/她需要擁有一個(gè)賬戶來作為證明呢?

WebAuthn 標(biāo)準(zhǔn)中的證明讓網(wǎng)站知道你的安全密鑰是真實(shí)的。它被設(shè)計(jì)成具有良好的隱私屬性,并被寫入設(shè)備制造商必須遵守的策略中。你的安全密鑰發(fā)送到網(wǎng)站的信息與無數(shù)其他密鑰的信息是無法區(qū)分的。即便如此,我們還是想做得更好。如果我們把證明從認(rèn)證中分離出來,那么我們只需要了解你的安全密鑰是真實(shí)的——事實(shí)上,我們已經(jīng)為瀏覽器設(shè)計(jì)了一種新的零知識證明來做到這一點(diǎn)。

這是我們?yōu)楦纳普麄€(gè)互聯(lián)網(wǎng)隱私所做工作的一部分。我們尚未將這種人格證明投入生產(chǎn),但你可以看到該技術(shù)的實(shí)際演示。我們已經(jīng)看到它與 YubiKeys 等一起使用。最重要的是,我們將開源代碼,以便每個(gè)人都可以從中受益并做出貢獻(xiàn)。閱讀以下內(nèi)容以了解詳細(xì)信息以及后續(xù)步驟。

簡介

WebAuthn 認(rèn)證向要求認(rèn)證的網(wǎng)站識別硬件安全密鑰的制造商。它旨在部署于封閉環(huán)境中,例如金融機(jī)構(gòu)和內(nèi)部服務(wù),這些網(wǎng)站與你預(yù)先建立了關(guān)系。由于登錄可識別你的身份,對隱私的影響微乎其微。相比之下,任何使用認(rèn)證的開放網(wǎng)站都會了解你所用密鑰的品牌和型號。

品牌和型號信息似乎沒有那么敏感。但是,當(dāng)與用戶代理、語言偏好、一天中的時(shí)間等信息結(jié)合起來時(shí),它有助于構(gòu)建用戶的形象——就像人口統(tǒng)計(jì)信息、身高、體重和服裝與汽車的品牌和型號結(jié)合起來后,就能更容易在高速公路上找到特定的汽車。因此,在網(wǎng)站獲得這一證明時(shí),瀏覽器就會進(jìn)行對話,以確保用戶了解網(wǎng)站正在獲取可能有助于識別他/她們的信息。Cloudflare 非常重視隱私,希望避免獲取任何可以識別你的信息。

我們從證明中看到的信息證明你的安全密鑰的制造商確實(shí)制造了該密鑰。它是由安全密鑰在安全區(qū)中保管的私鑰所作的數(shù)字簽名,帶有指向制造商的證書鏈。這些鏈?zhǔn)谷魏畏?wù)器都能看到硬件安全密鑰是真實(shí)的。對于人格加密證明,我們想要的只是一點(diǎn):你擁有一個(gè)值得信任的硬件安全密鑰,并且不用提供有關(guān)制造商或型號的任何詳細(xì)信息。

在過去,證明在只有少數(shù)幾家制造商被認(rèn)可的環(huán)境中使用。例如,大型金融機(jī)構(gòu)相當(dāng)保守。在這種環(huán)境中,披露制造商是必須的。在開放的供應(yīng)商設(shè)計(jì)中,我們不想向任何特定制造商提供特權(quán),而只是想知道密鑰是值得信任的。

可信度由 FIDO 元數(shù)據(jù)服務(wù)確定。這是為制造商維護(hù)根證書的 FIDO2 聯(lián)盟提供的一項(xiàng)服務(wù)。當(dāng)這些密鑰被泄露時(shí),它們會在 FIDO 系統(tǒng)中列出。我們有自動腳本來下載這些根并將它們插入到我們的軟件版本中。這可確保我們在新制造商出現(xiàn)或舊設(shè)備因攻擊者提取密鑰或密鑰處理不當(dāng)而遭到泄漏時(shí)始終保持最新狀態(tài)。

值得稱贊的是,F(xiàn)IDO 聯(lián)盟要求不少于 10 萬臺設(shè)備共享一個(gè)證明密鑰,對設(shè)備匿名集大小設(shè)置下限,以最大限度地減少信息收集的影響??上У氖?,實(shí)際情況并非總是如此。一些制造商永遠(yuǎn)達(dá)不到以上批量,用戶不應(yīng)該為保護(hù)他們的隱私而涌向最大的制造商。Cloudflare 實(shí)施了強(qiáng)有力的隱私政策來管理我們使用這些信息的方式,但我們更希望完全不知道你的密鑰的制造商。正如我們刪除了不再需要的 cookie,并在我們自己無法看到的情況下記錄客戶調(diào)試自己防火墻規(guī)則的日志數(shù)據(jù)一樣,我們一直在設(shè)法減少我們可以看到的信息。

同時(shí),我們需要確保響應(yīng)我們請求的設(shè)備是真正的安全密鑰,而不是自動程序運(yùn)行的某種軟件仿真。從本質(zhì)上講,我們希望在不了解任何其他信息的情況下證明憑據(jù)的合法性。

然而,這些方案通常要求實(shí)施憑據(jù)證明的硬件或軟件在設(shè)計(jì)時(shí)就要將某一種方案考慮在內(nèi)。我們無法直接去說服制造商在幾個(gè)月內(nèi)添加功能,更不用說取代世界上所有的硬件身份驗(yàn)證安全密鑰了。相反,我們必須尋找與現(xiàn)有硬件兼容的解決方案。

零知識證明概要介紹

零知識證明,通??s寫為 ZKP。零知識證明的一個(gè)經(jīng)典示例是向某人展示你知道《尋找威利》(Where’s Wally)中的威利在哪里。若你能在圖中指出威利,就能告訴別人威利的具體位置。但是,如果你用一大張紙蓋住圖片,僅留一個(gè)小洞露出威利,那么別人只能看到威利在圖中某處,但不清楚具體在哪里。他們會知道你知道威利在哪里,但他們自己不知道威利在哪里。

密碼學(xué)家設(shè)計(jì)了大量零知識證明以及將它們連接在一起的方法。將它們連接在一起的核心部分是承諾,一個(gè)加密信封。承諾防止篡改創(chuàng)建時(shí)放入其中的值,稍后可開啟以顯示放入其中的內(nèi)容。我們在現(xiàn)實(shí)生活中使用承諾機(jī)制。魔術(shù)師可在信封中密封一張紙,向觀眾保證他不能觸碰或篡改它,然后讓人打開信封,揭示他的預(yù)測。在無聲拍賣中,人們將競價(jià)放入密封的信封中,然后一起打開,確保沒有人能在看到其他人的競價(jià)后調(diào)整其自己的競價(jià)。

承諾像電線一樣將零知識證明聯(lián)系在一起,從簡單的證明生成更大、更復(fù)雜的證明。通過證明承諾中的值具備不同零知識證明的兩個(gè)不同屬性,我們就能證明兩個(gè)屬性對該值都成立。

我們的瀏覽器零知識證明系統(tǒng)

在人格加密認(rèn)證中,服務(wù)器向?yàn)g覽器發(fā)送硬件安全簽名,證明其真實(shí)性。在我們使用零知識證明時(shí),客戶端不會發(fā)送簽名,而是發(fā)送一個(gè)證明,證明該簽名是由服務(wù)器提供的列表中的密鑰產(chǎn)生的。

由于我們僅向服務(wù)器發(fā)送證明,服務(wù)器只知道證明的存在,而不知道哪一個(gè)硬件安全密鑰生成它。這保證了隱私。但我們需要確保證明和驗(yàn)證的執(zhí)行能大規(guī)模高效執(zhí)行,以提供一個(gè)可部署的解決方案。

我們研究了很多潛在機(jī)制,包括 SNARKS 。不幸的是,SNARK 的代碼大小、工具鏈要求和證明的復(fù)雜性令人望而卻步。

對于我們支持的硬件安全密鑰,證明中的數(shù)字簽名是由橢圓曲線數(shù)字簽名算法 (ECDSA) 生成的。ECDSA 本身類似于我們使用的許多零知識證明。

不幸的是,通常提出的驗(yàn)證方程涉及一些需要將值從一種形式轉(zhuǎn)換為另一種形式的操作。在零知識證明中,這些操作既復(fù)雜又昂貴,有很多步驟。為了將 ECDSA 轉(zhuǎn)換為我們可以使用的方案,我們做了很多調(diào)整。調(diào)整后,任何人都可以在不使用任何秘密知識的情況下獲取 ECDSA 簽名并將其轉(zhuǎn)換為我們調(diào)整方案的簽名,反之亦然,因此它與 ECDSA 一樣安全。

由于我們要證明的陳述有兩個(gè)部分——“消息由密鑰簽名”和“密鑰在列表中”——很自然地,證明該陳述的問題也分成兩個(gè)部分。首先,證明者證明承諾內(nèi)部的密鑰簽署了消息,然后證明者證明提交的密鑰在列表中。驗(yàn)證者同樣檢查這兩部分,如果兩部分都有效,則表明證明有效。


設(shè)計(jì)更加有效的曲線

為此,我們設(shè)計(jì)了更加有效的曲線,我們將關(guān)于 ECDSA 簽名的陳述轉(zhuǎn)化為關(guān)于 P-256 橢圓曲線上的點(diǎn)的陳述,然后轉(zhuǎn)化為關(guān)于 P-256 定義域中的算術(shù)陳述。如果我們有一個(gè)大小與字段大小匹配的組,這些語句更容易證明,因此我們必須找到一個(gè)。

我們這里想要的是具有給定點(diǎn)數(shù)的曲線,因此不得不使用一些相當(dāng)高級的數(shù)論機(jī)制來確定這條曲線。如此做法對我們的零知識證明盡可能有效發(fā)揮巨大作用。

我們的勞動結(jié)晶

除此之外,還需要進(jìn)行大量額外的工程工作,以通過少許優(yōu)化使證明更快運(yùn)行。我們可以在幾秒鐘內(nèi)生成證明,并在幾百毫秒內(nèi)對其進(jìn)行驗(yàn)證。這一速度已足夠滿足實(shí)踐需要,也就是說,想要驗(yàn)證安全密鑰的安全性的網(wǎng)站可以如愿,不會對隱私有負(fù)面影響。

使用我們技術(shù)的網(wǎng)站只需要了解,簽名是否由一個(gè)認(rèn)證密鑰在其所提供的列表上的令牌生成的。與直接使用 WebAuthn 不同,它們不會獲得任何更詳細(xì)的信息,即使制造商意外使批量變得過小也無妨。與其使用基于策略的方法來保護(hù)用戶隱私,我們移除了麻煩的信息。

后續(xù)工作-社區(qū)努力!

我們的演示表明,我們能基于零知識證明來增強(qiáng)隱私保護(hù)。我們正在不斷改進(jìn),添加更多的性能和安全特性。但是,只有擁有在每個(gè)瀏覽器中都可以使用的隱私保護(hù) WebAuthn 擴(kuò)展,讓用戶確信自己的數(shù)據(jù)不會離開瀏覽器,我們的任務(wù)才算完成。

我們已經(jīng)做到的是演示可能做到什么:使用零知識證明來將 WebAuthn 認(rèn)證變成一個(gè)在設(shè)計(jì)上平等對待每一個(gè)制造商、保護(hù)用戶隱私并可被每一個(gè)網(wǎng)站使用的系統(tǒng)。大規(guī)模使用證明而產(chǎn)生的用戶隱私挑戰(zhàn)是可以解決的。

要形成高質(zhì)量、可靠的系統(tǒng),需要遠(yuǎn)遠(yuǎn)不止核心加密技術(shù)方面的見解。為了使用戶體驗(yàn)不涉及有關(guān)我們零知識證明丟棄的信息,我們需要與瀏覽器進(jìn)一步集成。我們還需要一種安全的方法,以便不在我們列表中的設(shè)備的用戶將其密鑰發(fā)給我們,并表明其值得信任;需要一種方法來確保該列表未被濫用以嘗試確定密鑰。

SNARKS 在這方面具備巨大優(yōu)勢,但代價(jià)是演示的代碼體積太大。最終將這些改進(jìn)納入 web 生態(tài)系統(tǒng)的核心部分,需要與用戶、瀏覽器和其他參與者合作,找到對他們有效的解決方案。如果你希望為這個(gè)過程作出貢獻(xiàn),歡迎通過電子郵件 ask-research@cloudflare.com 與我們聯(lián)系

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Cloudflare,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個(gè)人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家