Meta向社羣開源了 匿名憑證服務(Anonymous Credential Service,ACS) ,這是一個高可用的多租户服務,供客户端能夠以去識別化的方式,進行使用者身分驗證。
ACS可以應用的情境有很多,Meta以自家的日誌紀錄應用來解釋開發ACS的原因。Meta在日誌紀錄實施資料最小化精神,僅收集支援服務所需要的最少資料,目標是要在提高用户體驗的同時,收集和使用更少的資料。
在Meta大多數日誌紀錄用例中,用户身分並非必要,因此需要從日誌紀錄資料中排除,官方提到,移除身分驗證是刪除可辨識碼的一種方法,但是這樣卻會使系統容易受到包括資料注入等攻擊。為此Meta建立了一個更好的去識別身分驗證方法ACS,從高層次來看,ACS透過將身分驗證分為權杖發行和權杖兑換(Token Redemption)兩個階段,來進行去識別化身分驗證。
在權杖發行階段,客户端透過身分驗證的通道聯繫伺服器發送權杖,伺服器會簽署權杖並將其送回,接著去識別化身分驗證,也就是權杖兑換階段,客户端使用去識別化通道提交資料,並使用權杖的變異形式,而非以用户ID進行身分驗證。
匿名憑證協定建立在VOPRF(Verifiable Oblivious Pseudorandom Function)和盲簽名技術之上。以日誌紀錄為例,Meta將工作流程拆分成兩個步驟解決日誌去識別化的問題,首先客户端會經過身分驗證,連線到伺服器進一步獲得匿名憑證,之後每當客户端需要上傳日誌的時候,便會連同匿名憑證和日誌,一起發送到伺服器未經身分驗證的連接中,而匿名憑證便用做客户端真實性的證明。
Meta解釋,之所以這個協定有效,是因為業務資料和身分驗證資料分離,業務資料使用非盲權杖發送,而身分資料則使用盲權杖發送。不過權杖發行和權杖兑換不會同時發生,客户端可以將權杖儲存數小時甚至數天,當客户端想要紀錄資料卻沒有權杖,可以獲取權杖並且立刻進行兑換,只不過這兩步驟會在單獨的請求中,避免任何人可從資料中推斷出使用者身分。
但要將匿名憑證用於現實的大規模系統仍需要解決一些挑戰,第一是權杖兑換的計數,在理想情況,一個憑證應該只能兑換一次,但是在實作中,由於要減少伺服器負擔,Meta接受多次兑換憑證,Meta使用安全的計數服務來限制權杖兑換次數。
另外,匿名憑證協議需要一個金鑰對,伺服器使用金鑰對權杖進行簽章,以便驗證兑換請求,客户端則需要一個對應的公鑰來解鎖權杖,Meta提到,金鑰輪換對於ACS來説非常重要,這能夠減輕萬一使用者在獲得憑證才遭竊產生的影響。
Meta在ACS儲存庫釋出了一個可擴充C函式庫,其主要元件包括VOPRF協定,用於客户端權杖盲化、非盲化,以及生成用於權杖兑換的共享祕密。ACS儲存庫還有屬性金鑰衍生函式、離散日誌證明,Meta還用C++實作了用於演示的伺服器和客户端程式。