Meta向社群開源了匿名憑證服務(wù)(Anonymous Credential Service,ACS),這是一個(gè)高可用的多租戶服務(wù),供客戶端能夠以去識別化的方式,進(jìn)行用戶身份驗(yàn)證。
ACS可以應(yīng)用的場景有很多,Meta以自家的日志記錄應(yīng)用來解釋開發(fā)ACS的原因。Meta在日志記錄實(shí)施資料最小化精神,僅收集支持服務(wù)所需要的最少資料,目標(biāo)是要在提高用戶體驗(yàn)的同時(shí),收集和使用更少的資料。
在Meta大多數(shù)日志記錄用例中,用戶身份并非必要,因此需要從日志記錄資料中排除,官方提到,移除身份驗(yàn)證是刪除可識別碼的一種方法,但是這樣卻會(huì)使系統(tǒng)容易受到包括資料注入等攻擊。為此Meta創(chuàng)建了一個(gè)更好的去識別身份驗(yàn)證方法ACS,從高層次來看,ACS通過將身份驗(yàn)證分為權(quán)限發(fā)行和權(quán)限兌換(Token Redemption)兩個(gè)階段,來進(jìn)行去識別化身份驗(yàn)證。
在權(quán)限發(fā)行階段,客戶端通過身份驗(yàn)證的信道聯(lián)系服務(wù)器發(fā)送權(quán)限,服務(wù)器會(huì)簽署權(quán)限并將其送回,接著去識別化身份驗(yàn)證,也就是權(quán)限兌換階段,客戶端使用去識別化信道提交資料,并使用權(quán)限的變異形式,而非以用戶ID進(jìn)行身份驗(yàn)證。
匿名憑證協(xié)議創(chuàng)建在VOPRF(Verifiable Oblivious Pseudorandom Function)和盲簽名技術(shù)之上。以日志記錄為例,Meta將工作流程拆分成兩個(gè)步驟解決日志去識別化的問題,首先客戶端會(huì)經(jīng)過身份驗(yàn)證,連接到服務(wù)器進(jìn)一步獲得匿名憑證,之后每當(dāng)客戶端需要上傳日志的時(shí)候,便會(huì)連同匿名憑證和日志,一起發(fā)送到服務(wù)器未經(jīng)身份驗(yàn)證的連接中,而匿名憑證便用做客戶端真實(shí)性的證明。
Meta解釋,之所以這個(gè)協(xié)議有效,是因?yàn)闃I(yè)務(wù)資料和身份驗(yàn)證資料分離,業(yè)務(wù)資料使用非盲權(quán)限發(fā)送,而身份資料則使用盲權(quán)限發(fā)送。不過權(quán)限發(fā)行和權(quán)限兌換不會(huì)同時(shí)發(fā)生,客戶端可以將權(quán)限存儲數(shù)小時(shí)甚至數(shù)天,當(dāng)客戶端想要記錄資料卻沒有權(quán)限,可以獲取權(quán)限并且立刻進(jìn)行兌換,只不過這兩步驟會(huì)在單獨(dú)的請求中,避免任何人可從資料中推斷出用戶身份。
但要將匿名憑證用于現(xiàn)實(shí)的大規(guī)模系統(tǒng)仍需要解決一些挑戰(zhàn),第一是權(quán)限兌換的計(jì)數(shù),在理想情況,一個(gè)憑證應(yīng)該只能兌換一次,但是在實(shí)例中,由于要減少服務(wù)器負(fù)擔(dān),Meta接受多次兌換憑證,Meta使用安全的計(jì)數(shù)服務(wù)來限制權(quán)限兌換次數(shù)。
另外,匿名憑證協(xié)議需要一個(gè)密鑰對,服務(wù)器使用密鑰對權(quán)限進(jìn)行簽章,以便驗(yàn)證兌換請求,客戶端則需要一個(gè)對應(yīng)的公鑰來解鎖權(quán)限,Meta提到,密鑰輪換對于ACS來說非常重要,這能夠減輕萬一用戶在獲得憑證才遭竊產(chǎn)生的影響。
Meta在ACS存儲庫發(fā)布了一個(gè)可擴(kuò)展C函數(shù)庫,其主要組件包括VOPRF協(xié)議,用于客戶端權(quán)限盲化、非盲化,以及生成用于權(quán)限兌換的共享秘密。ACS存儲庫還有屬性密鑰衍生函數(shù)、離散日志證明,Meta還用C++實(shí)例了用于演示的服務(wù)器和客戶端程序。