ZKLBS项目简介 & 零知识技术简述
零知识证明
零知识证明是一种密码学技术,用于向另一方证明某个陈述的真实性,而不需要透露陈述的具体内容。在密码学领域,零知识证明已经应用多个方面,与公钥加密、数字签名、身份认证、区块链、隐私计算等技术相结合。
零知识证明种类
- 交互式零知识证明
- 非交互式零知识证明
- 基于二次算术程序QAP的零知识证明
- 基于双向高效交互式证明DEIP的零知识证明
- 基于内积论证IPA的零知识证明
- 基于MPC-in-the-head的零知识证明
Snark友好哈希函数
- MIMC
- POSEIDON
ZKLBS 基于零知识的位置证明
概念
ZKLBS是将零知识证明应用于LBS位置服务中。为了解决个人位置信息泄露可能带来的问题,依据零知识位置证明(zk-PoL)协议,实现了ZKLBS零知识证明项目。
使用场景
ZKLBS项目的使用场景有景区、商家评价、特定地区消费券领取等。在只提供经纬度坐标作为公开参数的情况下,确保参与评价的用户的确抵达过该景区或商家。
等级划分
- 等级1:这可以用来证明某人在特定时间出现在商家指定的范围内,适用于诸如景点评价授权的情况。在这种情况下,游客必须证明他曾经去过某个旅游区,才能获得评论许可。
- 等级2:用户公开自己的位置坐标。这可以用来证明某人出现在特定的位置,并且可以应用于场景,例如定点打卡领取优惠券服务,用户需要在特定位置打卡从而得到优惠券。
- 等级3:用户公开自己的位置坐标以及获取该坐标的时间。这可以用来证明某人在特定的时刻出现在一个特定的地点,可以应用于基于位置的实时推荐,用户必须证明他现在处在一个特定的位置,以获得精确的推荐。
- 等级4:用户公开自己的位置坐标、获取该坐标的时间以及身份标识。这可以用来证明一个特定的人在特定的时刻出现在特定的地点。例如,嫌疑人需要不在场证明来证明他在特定的时间不在犯罪现场。
创新特色
- ZKLBS项目基于零知识证明实现LBS位置服务,创新性的将零知识证明应用于位置服务中。能够在不泄露位置关联隐私数据的前提下,实现基于精准位置的LBS服务,解决了传统位置证明服务容易泄露用户隐私的问题。
- ZKLBS项目实现了四个等级下的基于零知识证明的LBS服务。依据不同等级的需求,用户需要公开不同的数据,进而生成不同的零知识证明完成验证。
- ZKLBS项目使用三方架构模拟零知识证明过程,包含用户、服务方、验证方,证书序列号、证书生成时间、用户数据摘要都由可信方生成,保证数据无法造假,提升了安全性。
- 验证方:也就是服务提供方,在验证成功后,验证方可以提供给用户。
- 可信第三方:提供证书的序列号和时间给用户,提供哈希值给验证方。
- 用户:获取证书,生成证明,提供给验证方验证,
底层实现
零知识证明基于Groth16协议实现,Groth16是一种高性能的零知识证明算法,通信复杂度和计算复杂度较低。
基于Groth16算法的zkSnark步骤为
- Statement:描述证明的目标和业务,并基于目标和业务抽象出计算逻辑。
- Circuit:将计算转换为算术电路,即描述计算约束的高级语言程序,
- RICS:将电路转换成1阶约束系统。将算术电路编程多个的门电路。
R1CS模型描述了一组约束,其中每个约束都是形如A * B = C的等式,其中A、B和C是向量,可以是公共输入、私有输入或中间变量。 - QAP:将R1CS转换成多项式形式。
QAP描述了一个多项式关系,其中包含三个多项式:主多项式、辅助多项式和约束多项式。QAP的基本形式如下:P(x) * Q(x) - R(x) = H(x) * Z(x)。
QAP的主要思想是将证明的生成和验证过程转化为多项式的求解问题。 - Setup:设置公共挑战参数等。
在这个阶段,需要定义系统的安全参数和协议的相关参数。该阶段生成用于ZK-SNARK协议的证明密钥和验证密钥。 - Prove:生成证明。
证明者使用证明密钥、公有输入数据和私有输入数据来生成一个证明,证明该输入数据满足某个声明。 - Verify:验证证明。
验证者使用验证密钥、公有输入数据和证明来验证证明的正确性。验证者可以通过执行一系列的计算步骤来验证证明,而无需了解证明的生成过程。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Writer-X!