1. 问题
result = SHA256(secret, data),要验证result,光有data是不够的,必须要有secret才能计算出result。有没有可能在不出示密钥secret的情况下,验证result和data是对应匹配的?
2. 3个特性
-
可验证性
提供一个非交互的零知识证明,用来验证该随机数输出的确是某个人生成的。eg. 强盗站在很远的地 方,能看见阿里巴巴把山门打开了,但是不知道阿里巴巴念的是什么咒语 -
唯一性
对于相同的 Input,它得到的 Output 一定是相同的。 -
随机性
任意的一个输入,获得一个随机数输出,并且均匀分布在值域范围内。
3. 实现方式
Schnorrkle库实现,Ed25519椭圆曲线
基点:G
私钥:k
公钥:K =k *G
随机数r
Alice和Bob都知道G、K、r
Alice计算K’ = k* r’ = k* (G* r)
Bob计算K’ = K* r = (k* G)* r
(阿贝尔群:满足交换律)