盲签名本身的概念很好理解:rsa_fdh::blind - Rust
我尝试阅读geph的源代码但没看懂盲签名是如何保证流量不与具体用户名关联的.
源码还是没看懂(本身水平就有限(只是有一点点编程基础)加上完全没接触过Rust), 不过自认为想明白了(如果说的不对请各位不吝赐教):
原来是客户端生成随机的token在经过hash(单向不可逆变换)后变成token-hash, token-hash被blind(可以理解为使用随机密钥加密)之后连同自己的用户名和密码发给鉴权服务器, 当鉴权通过后鉴权服务器给来自用户的blinded-token-hash(被随机密钥加密的token-hash)进行签名, 此时迷雾通方面不知道原始token和token的hash, 只知道被加密后的blinded-token-hash).
用户对服务器返回的签名进行unblind操作(通过数学变换将对密文的签名转换成可以适用于明文(token-hash)的签名).
鉴权时将token-hash连同unblind操作得到的签名一起发给迷雾通的服务器,服务器验证签名之后提供服务.
即使迷雾通同时知道unblinded消息(token-hash)和blinded消息(被随机密钥加密的token-hash), 由于迷雾通方面缺少blind factor(用于加密token-hash的随机密钥), 无法通过unblinded消息得到鉴权时对应的blinded消息(被随机密钥加密的token-hash), 因此也就无法关联用户名与流量.
迷雾通使用不同的私钥/公钥对来签名并区分付费用户与免费用户, 除此之外流程与上述完全相同, 所以哪怕实名购买迷雾通, 迷雾通方面也无法根据token关联具体用户流量.
请求鉴定签名代码的位置:geph4/cache.rs at master · geph-official/geph4 · GitHub
获取签名的代码位置:geph4/cache.rs at master · geph-official/geph4 · GitHub
另外如果作者能把这个事情写明白, 让用户彻底明白他们是安全的(阐明具体过程,指出相应代码位置), 滥用情况估计或多或少会减少一些.
注意不建议照抄我这个帖子, 即使我的帖子所述正确, 因为我只是随便写写自己的理解, 我感觉还有大量词汇和表述可以优化帮助用户更快更容易的理解过程.
@nullchinchilla