Privacy Pass: Bypassing Internet Challenges Anonymously

Privacy Pass: Bypassing Internet Challenges Anonymously

一些私貨

為啥讀論文兒

  • 真正的一手資料,比書籍更強(qiáng)的時(shí)效性和專業(yè)性

  • 啟發(fā)思維和反常理的結(jié)論

  • 讀書與工作環(huán)境的影響

讀論文兒的一些方法

image
image
image
image
image
  • 英語(yǔ)看不懂?chrome插件 劃詞翻譯
image
image
  • 數(shù)學(xué)符號(hào)?。。。無能為力,只能慢慢積累

  • 關(guān)鍵部分:Introduction!

正題:Privacy Pass

原文:https://www.petsymposium.org/2018/files/papers/issue3/popets-2018-0026.pdf

為啥看他

image
  • Privacy Pass拓展在10月發(fā)布了v3版本:https://github.com/privacypass/challenge-bypass-extension

  • CloudFlare 作為世界最大的CDN廠商最早開發(fā)了Privacy Pass體系,已經(jīng)使用了三年

  • 優(yōu)點(diǎn):

    • 最主要作用:大規(guī)模減少網(wǎng)絡(luò)上的Challenge(人機(jī)挑戰(zhàn))的流量
  • 保護(hù)用戶隱私的token,即服務(wù)端驗(yàn)證token時(shí)并無法定位具體用戶

  • 用戶可驗(yàn)證下發(fā)token不是被中間人或惡意服務(wù)偽造

  • token即使泄露也將快速消費(fèi)完,無記憶性

  • 缺點(diǎn):

LET'S DISCUSS

背景知識(shí)

一個(gè)群兒

群是一個(gè)集合,有四個(gè)主要性質(zhì)(封閉性,結(jié)合律,單位元,逆元);但我們只討論他的一個(gè)性質(zhì):階

定義一個(gè)群的階N為:任意群里的一個(gè)元素他對(duì)自己做N次定義群的運(yùn)算后會(huì)等于他自己,則該群的階為N

我們不搞抽象的,我們想一個(gè)具體的模乘群:\mathbb{Z}_p = \{1, 2, ..., p-1\}, p為質(zhì)數(shù),其階就為p

為啥?費(fèi)馬小定理,具體就不證明了:

image

VOPRF

可驗(yàn)證遺忘性偽隨機(jī)數(shù)發(fā)生器(Verifiable oblivious pseudorandom function):用人話說就是就是一個(gè)算法協(xié)議,他通過一個(gè)秘鑰K和種子S來產(chǎn)生偽隨機(jī)數(shù)R,而S是由一個(gè)消息M產(chǎn)生;該算法雖然產(chǎn)生了R,但他并不知道M是什么(遺忘性),但產(chǎn)生的R是可以驗(yàn)證一定來自該秘鑰K產(chǎn)生的(可驗(yàn)證)

零知識(shí)證明ZKP

是實(shí)現(xiàn)VOPRF可驗(yàn)證性的重點(diǎn):如何不告訴你秘鑰K的值確定產(chǎn)生的偽隨機(jī)數(shù)是來自秘鑰K?

阿里巴巴的故事
image

阿里巴巴證明自己擁有能打開CD之間的石門的咒語(yǔ)

  • 盜賊站在A,阿里巴巴在B點(diǎn)隨機(jī)選擇前往C或者D
  • 盜賊到B點(diǎn),隨機(jī)讓阿里巴巴從C或者D走出來,假如他不知道咒語(yǔ),他也有50%的成功率
  • 重復(fù)該實(shí)驗(yàn)N次,他連續(xù)成功的概率將越來越低,直到到達(dá)一個(gè)可信的范圍

離散對(duì)數(shù)問題

DH密碼協(xié)議所依賴的數(shù)學(xué)難題:

計(jì)算x, y, a \in \mathbb{Z}_p,\ y = a^x\ mod\ p是簡(jiǎn)單的,但計(jì)算x = log_ay是困難的

消息驗(yàn)證碼MAC

用人話說就是A與B共享一個(gè)秘鑰K,A給B發(fā)送一個(gè)消息m,同時(shí)用這個(gè)秘鑰K和m進(jìn)行計(jì)算生成一個(gè)消息驗(yàn)證碼c,將m和c打包發(fā)給B。由于B也擁有秘鑰K,他可以用相同的算法對(duì)收到的消息m’計(jì)算消息驗(yàn)證碼c’,比較c與c’來判斷m’有沒有遭到篡改。

比較典型的算法是HMAC與GMAC,由于MAC的前提需要有共享秘鑰,GMAC通常與AES結(jié)合使用,即AES-GCM模式。

協(xié)議分析

image

恐怖嗎?我盡量用自己的理解用人話來描述這個(gè)協(xié)議吧??,就不細(xì)說具體的嚴(yán)格證明(我也沒太看明白,民科罷了)

如何證明我擁有一個(gè)離散對(duì)數(shù)的解

DLEQ(Discrete log equivalence proofs):有一組公開的數(shù):(X,\ Y) \in \mathbb{Z}_p, Y = X^k,阿里巴巴如何證明自己擁有私鑰k值?

  1. 盜賊給阿里巴巴一個(gè)數(shù)P \in \mathbb{Z}_p
  2. 阿里巴巴計(jì)算Q = P ^ k
  3. 阿里巴巴隨機(jī)生成一個(gè)數(shù)t \in \mathbb{Z}_p
  4. 阿里巴巴計(jì)算A = X ^ t, B = P ^ t, c = Hash(X, Y, P, Q, A, B)
  5. 阿里巴巴計(jì)算s = t - ck, 最后把D_k = (Q, s, c)給盜賊
  6. 盜賊計(jì)算A' = Y^cX^s, B' = P^cQ^s, c' = Hash(X, Y, P, Q, A', B')
  7. 盜賊判斷c\ ?= c,若成立,則本次驗(yàn)證通過;且盜賊無法通過s,c => k(兩個(gè)未知數(shù),解不出);也無法通過Q => k(離散對(duì)數(shù)難題)

證明很簡(jiǎn)單:

A' = Y^cX^s = X^{ck}X^{-ck}X^{t} = X^t = A

B' = Q^cP^s = P^{ck}P^{-ck}P^t = P^t = B

僅當(dāng)s = t - ck

以上證明形式可以被表述為D_k \leftarrow \mathsf{DLEQ}_k(X, Y, P, Q)

推廣到發(fā)送多個(gè)數(shù)的乘積,Batch-DLEQ:

該結(jié)論可以同時(shí)推廣到一次通過n個(gè)數(shù)字P_i乘積,一次完成D_k的生成:

  1. 驗(yàn)證者隨機(jī)生成的n個(gè)隨機(jī)數(shù)c_1, c_2, ..., c_n并保存下來,同時(shí)發(fā)送P_1^{c_1} ,P_2^{c_2}, ..., P_n^{c_n}
  2. 證明者計(jì)算\{Q_i\}_{i \in [n]} = \{(P_i^{c_i})^k\}; \\ M = P_1^{c_1} \cdot P_2^{c_2}...\cdot P_n^{c_n}; \\ Z = M^k = (P_1^{c_1})^k \cdot (P_2^{c_2})^k...\cdot (P_n^{c_n})^k
  3. 把替換成上面的P,Q, 完成證明值\bar{D}_k \leftarrow \mathsf{DLEQ}_k(X, Y, M, Z);
  4. 證明者一次把Q_1, Q_2, ... , Q_n, \bar{D}_k發(fā)給驗(yàn)證者,驗(yàn)證者使用DLEQ驗(yàn)證方法完成驗(yàn)證

特點(diǎn):

  • 效率高,一次完成多次簽名,同時(shí)可證明
  • Batch-DLEQ的遺忘性:上面c_1, c_2, ..., c_n可以讓證明者并無法獲取具體的Pi值;此時(shí)c_1, c_2, ..., c_n被稱為 盲化因子
  • Batch-DLEQ的可驗(yàn)證性:由DLEQ保證

結(jié)論:Batch-DLEQ實(shí)現(xiàn)了一個(gè)VOPRF

此時(shí)由n個(gè)隨機(jī)數(shù)組成的DLEQ被稱為n-DLEQ,用符號(hào)通常表示為(用Pi,Qi來替代了上面的M,Z)\bar{D}_k \leftarrow n\text{-}\mathsf{DLEQ}_k(X, Y, \{P_i\}_{i \in [n]}, \{Q_i\}_{i \in [n]})

Privacy Pass正式協(xié)議

整個(gè)協(xié)議其實(shí)分為兩個(gè)階段,簡(jiǎn)單來說就是,Token組簽署下發(fā)階段和Token組贖回階段

Token組簽署下發(fā)階段
  1. 服務(wù)器發(fā)起挑戰(zhàn)
  2. 客戶端響應(yīng)挑戰(zhàn),并根據(jù)Batch-DLEQ的第一步,隨機(jī)生成n個(gè)隨機(jī)數(shù)P_1, ... ,P_n,和n個(gè)盲化因子c_1, c_2, ..., c_n, 保存下來,同時(shí)完成上面M的計(jì)算,將M隨挑戰(zhàn)響應(yīng)回復(fù)給服務(wù)器
  3. 服務(wù)器驗(yàn)證挑戰(zhàn),若驗(yàn)證失敗則協(xié)議結(jié)束
  4. 服務(wù)器驗(yàn)證挑戰(zhàn)成功,計(jì)算Z,完成\bar{D}_k \leftarrow n\text{-}\mathsf{DLEQ}_k(X, Y, \{P_i\}_{i \in [n]}, \{Q_i\}_{i \in [n]})并下發(fā)結(jié)果
  5. 客戶端驗(yàn)證下發(fā)結(jié)果,驗(yàn)證該Token的合法性
  6. 去盲化:\{P_i^k\}_{i \in [n]} = \{Q_i^{1/c_i}\}_{i \in [n]}, 將(P_i, P_i^k)成對(duì)保存下來,形成n個(gè)Token

這一階段主要保證了

  • Token的可驗(yàn)證性:Token一定來自可信服務(wù)端,無法被中間人偽造
  • Token的隱私性:因?yàn)槊せ蜃拥拇嬖冢M(fèi)Token時(shí)并不知道原本的隨機(jī)數(shù)P_i,即使服務(wù)器記錄了這些M也無法追蹤客戶端

這正是VOPRF的特性

Token組贖回

即客戶端消費(fèi)Token:

  1. 服務(wù)器下發(fā)挑戰(zhàn),預(yù)期的計(jì)算結(jié)果為R'
  2. 客戶端取出一個(gè)Token,使用一個(gè)協(xié)議好的哈希函數(shù)計(jì)算出MAC所使用的keyK = H(P_i, P_i^k)
  3. 計(jì)算挑戰(zhàn)結(jié)果R, 并計(jì)算MAC:C = MAC_{K}(R),將兩者和P_i一起響應(yīng)給服務(wù)端
  4. 服務(wù)端先驗(yàn)證R ?= R',若不通過則挑戰(zhàn)失敗
  5. 服務(wù)器取出計(jì)算私鑰k, 計(jì)算MAC所需秘鑰K' = H(P_i, P_i^k)
  6. 服務(wù)器計(jì)算對(duì)應(yīng)MAC值,C' = MAC_{K'}(R')
  7. 挑戰(zhàn)響應(yīng)成功當(dāng)且僅當(dāng)C == C'

主要優(yōu)點(diǎn)

  • 一次有感挑戰(zhàn)后,可以完成多次無感挑戰(zhàn),提升體驗(yàn),減少消耗
  • 驗(yàn)證結(jié)果可驗(yàn)證,是來自擁有Token的用戶
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容