Privacy Pass: Bypassing Internet Challenges Anonymously
一些私货
为啥读论文儿
真正的一手资料,比书籍更强的时效性和专业性
启发思维和反常理的结论
读书与工作环境的影响
读论文儿的一些方法
搜论文:google scholar: https://scholar.google.com/
读新不读旧?查论文反引:
- 站在巨人的肩膀上,跟踪大佬的研究路径 dblp:https://dblp.org/
- 论文质量?看发表期刊/会议的水平:CCF官网:A B C 分级 https://www.ccf.org.cn/Academic_Evaluation/By_category/
- 英语看不懂?chrome插件 划词翻译
数学符号?。。。无能为力,只能慢慢积累
关键部分:Introduction!
正题:Privacy Pass
原文:https://www.petsymposium.org/2018/files/papers/issue3/popets-2018-0026.pdf
为啥看他
- Google Chrome上的新功能,Trust Token:https://web.dev/trust-tokens/#sample-api-usage,Privacy Pass是其Token生成与消费的基础密码协议
Privacy Pass拓展在10月发布了v3版本:https://github.com/privacypass/challenge-bypass-extension
CloudFlare 作为世界最大的CDN厂商最早开发了Privacy Pass体系,已经使用了三年
-
优点:
- 最主要作用:大规模减少网络上的Challenge(人机挑战)的流量
保护用户隐私的token,即服务端验证token时并无法定位具体用户
用户可验证下发token不是被中间人或恶意服务伪造
token即使泄露也将快速消费完,无记忆性
缺点:
LET'S DISCUSS
背景知识
一个群儿
群是一个集合,有四个主要性质(封闭性,结合律,单位元,逆元);但我们只讨论他的一个性质:阶
定义一个群的阶N为:任意群里的一个元素他对自己做N次定义群的运算后会等于他自己,则该群的阶为N
我们不搞抽象的,我们想一个具体的模乘群:, p为质数,其阶就为p
为啥?费马小定理,具体就不证明了:
VOPRF
可验证遗忘性伪随机数发生器(Verifiable oblivious pseudorandom function):用人话说就是就是一个算法协议,他通过一个秘钥K和种子S来产生伪随机数R,而S是由一个消息M产生;该算法虽然产生了R,但他并不知道M是什么(遗忘性),但产生的R是可以验证一定来自该秘钥K产生的(可验证)
零知识证明ZKP
是实现VOPRF可验证性的重点:如何不告诉你秘钥K的值确定产生的伪随机数是来自秘钥K?
阿里巴巴的故事
阿里巴巴证明自己拥有能打开CD之间的石门的咒语
- 盗贼站在A,阿里巴巴在B点随机选择前往C或者D
- 盗贼到B点,随机让阿里巴巴从C或者D走出来,假如他不知道咒语,他也有50%的成功率
- 重复该实验N次,他连续成功的概率将越来越低,直到到达一个可信的范围
离散对数问题
DH密码协议所依赖的数学难题:
计算是简单的,但计算是困难的
消息验证码MAC
用人话说就是A与B共享一个秘钥K,A给B发送一个消息m,同时用这个秘钥K和m进行计算生成一个消息验证码c,将m和c打包发给B。由于B也拥有秘钥K,他可以用相同的算法对收到的消息m’计算消息验证码c’,比较c与c’来判断m’有没有遭到篡改。
比较典型的算法是HMAC与GMAC,由于MAC的前提需要有共享秘钥,GMAC通常与AES结合使用,即AES-GCM模式。
协议分析
恐怖吗?我尽量用自己的理解用人话来描述这个协议吧🙄,就不细说具体的严格证明(我也没太看明白,民科罢了)
如何证明我拥有一个离散对数的解
DLEQ(Discrete log equivalence proofs):有一组公开的数:,阿里巴巴如何证明自己拥有私钥k值?
- 盗贼给阿里巴巴一个数
- 阿里巴巴计算
- 阿里巴巴随机生成一个数
- 阿里巴巴计算
- 阿里巴巴计算, 最后把给盗贼
- 盗贼计算
- 盗贼判断,若成立,则本次验证通过;且盗贼无法通过(两个未知数,解不出);也无法通过(离散对数难题)
证明很简单:
仅当
以上证明形式可以被表述为
推广到发送多个数的乘积,Batch-DLEQ:
该结论可以同时推广到一次通过n个数字乘积,一次完成的生成:
- 验证者随机生成的n个随机数并保存下来,同时发送
- 证明者计算
- 把替换成上面的, 完成证明值;
- 证明者一次把发给验证者,验证者使用DLEQ验证方法完成验证
特点:
- 效率高,一次完成多次签名,同时可证明
- Batch-DLEQ的遗忘性:上面可以让证明者并无法获取具体的值;此时被称为 盲化因子
- Batch-DLEQ的可验证性:由DLEQ保证
结论:Batch-DLEQ实现了一个VOPRF
此时由n个随机数组成的DLEQ被称为n-DLEQ,用符号通常表示为(用Pi,Qi来替代了上面的M,Z)
Privacy Pass正式协议
整个协议其实分为两个阶段,简单来说就是,Token组签署下发阶段和Token组赎回阶段
Token组签署下发阶段
- 服务器发起挑战
- 客户端响应挑战,并根据Batch-DLEQ的第一步,随机生成n个随机数和n个盲化因子, 保存下来,同时完成上面M的计算,将M随挑战响应回复给服务器
- 服务器验证挑战,若验证失败则协议结束
- 服务器验证挑战成功,计算Z,完成并下发结果
- 客户端验证下发结果,验证该Token的合法性
- 去盲化:, 将成对保存下来,形成n个Token
这一阶段主要保证了
- Token的可验证性:Token一定来自可信服务端,无法被中间人伪造
- Token的隐私性:因为盲化因子的存在,消费Token时并不知道原本的随机数,即使服务器记录了这些M也无法追踪客户端
这正是VOPRF的特性
Token组赎回
即客户端消费Token:
- 服务器下发挑战,预期的计算结果为
- 客户端取出一个Token,使用一个协议好的哈希函数计算出MAC所使用的key
- 计算挑战结果, 并计算MAC:,将两者和一起响应给服务端
- 服务端先验证,若不通过则挑战失败
- 服务器取出计算私钥, 计算MAC所需秘钥
- 服务器计算对应MAC值,
- 挑战响应成功当且仅当
主要优点
- 一次有感挑战后,可以完成多次无感挑战,提升体验,减少消耗
- 验证结果可验证,是来自拥有Token的用户