WeDPR-Lab 用户文档

WeDPR-Lab是什么

WeDPR是一系列即时可用场景式隐私保护高效解决方案套件和服务(参见WeDPR白皮书),由微众银行区块链团队自主研发。方案致力于解决业务数字化中隐私不“隐”、共享协作不可控等隐私保护风险痛点,消除隐私主体的隐私顾虑和业务创新的合规壁垒,助力基于隐私数据的核心价值互联和新兴商业探索,营造公平、对等、共赢的多方数据协作环境,达成数据价值跨主体融合和数据治理的可控平衡。

WeDPR具备以下特色和优势:

  • 场景式解决方案:已基于具有共性的场景需求,提炼出公开可验证密文账本、多方密文决策、多方密文排名、多方密文计算、多方安全随机数生成、选择性密文披露等高效技术方案框架模板,可应用于支付、供应链金融、跨境金融、投票、选举、榜单、竞拍、招标、摇号、抽检、审计、隐私数据聚合分析、数字化身份、数字化资质凭证、智慧城市、智慧医疗等广泛业务场景。
  • 即时可用:高性能、高易用、跨平台跨语言实现、不依赖中心化可信服务、不依赖可信硬件、支持国密算法标准、隐私效果公开可验证,5分钟一键构建示例应用。
  • 透明可控:隐私控制回归属主,杜绝数据未授权使用,在『数据可用而不可见』的基础上,进一步实现数据使用全程可监管、可追溯、可验证。

WeDPR全面拥抱开放,将陆续开源一系列核心算法组件,进一步提升系统安全性的透明度,提供更透明、更可信的隐私保护效果。WeDPR-Lab就是这一系列开源的核心算法组件的集合。

为什么使用WeDPR-Lab

WeDPR-Lab目前主要包含两个开源仓库隐私保护场景式解决方案WeDPR-Lab-Core和密码组件WeDPR-Lab-Crypto。

WeDPR-Lab-Core: https://github.com/WeBankBlockchain/WeDPR-Lab-Core https://gitee.com/WeBankBlockchain/WeDPR-Lab-Core

WeDPR-Lab-Crypto: https://github.com/WeBankBlockchain/WeDPR-Lab-Crypto https://gitee.com/WeBankBlockchain/WeDPR-Lab-Crypto

  • 丰富的多语言接口

对于隐私保护场景式解决方案WeDPR-Lab-Core和密码组件WeDPR-Lab-Crypto,我们均提供了Java和C的FFI适配接口,具有涵盖桌面端、服务端、移动端的全平台SDK, 实现了跨语言、跨平台的适配。

  • 可插拔的接口级设计

WeDPR倡导“依赖解耦、配置灵活”的设计理念,设计上极致模块化,每个算法都可独立复用。用户可按照实际所需功能定制化WeDPR使用接口,最小化减少依赖,实现了开发者对WeDPR系列开发包的自由裁剪和轻量部署。

  • 高性能,高安全

WeDPR系列开发包具有高效的内存利用率与运行速度,性能与C和C++实现匹敌,同时具有内存安全与线程安全,为开发者提供了高性能、高安全的隐私保护算法组件及易用、易扩展的使用体验。

WeDPR-Lab-Crypto v1.1.0版本开源主要内容如下:

  • 核心密码算法组件,包括:
    • 分组加密算法:包括AES-256、国密SM4;
    • 哈希算法:包括SHA3、BLAKE2、RIPEMD-160;
    • 椭圆曲线计算:包括椭圆曲线BN128的点加、点乘及双线性对操作;
    • 数字签名算法:包括Ed25519;
    • 零知识证明的聚合验证:包括加和证明的聚合验证、乘积证明的聚合验证。
  • 二进制接口,包括所有核心密码算法的高性能二进制接口;
  • FFI接口,支持交叉编译跨语言、跨平台所调用的FFI适配接口。

WeDPR-Lab-Crypto v1.0.0版本开源主要内容如下:

  • 核心密码算法组件,包括:
    • 基础编解码;
    • 公钥加解密算法,包括基于Secp256k1曲线的ECIES加解密;
    • 哈希算法,包括Keccak256哈希算法与国密SM3;
    • 签名及验证,包括ECDSA签名与国密SM2;
    • 离散对数系统的零知识证明算法,包括加和证明及验证、乘积证明及验证;
    • 零知识范围证明及验证;
    • 基于椭圆曲线的可验证随机函数VRF(Verifiable Random Functions)。
  • FFI接口,支持交叉编译跨语言、跨平台所调用的FFI适配接口。

WeDPR-Lab-Core v1.3.0版本开源主要内容如下:

  • 密钥生成及管理的核心算法,包括:
    • 密钥助记词的生成
    • 基于助记词的密钥生成
    • 基于分层结构的密钥派生
  • Rust SDK,封装底层算法,提供易用、易扩展、跨语言的编程接口;
  • FFI接口,支持交叉编译跨语言、跨平台所调用的FFI适配接口;
  • 其他基础工具代码。

WeDPR-Lab-Core v1.2.0版本开源主要内容如下:

  • SCD场景式解决方案核心算法,支持多种断言证明的高效稳定实现;
  • SCD场景式解决方案的一个交互式样例,实现以下主要功能:
    • 选择性披露证书颁发
    • 零知识断言披露证明
    • 零知识断言披露验证
    • 选择性属性明文披露和验证
  • Rust SDK,封装底层算法,提供易用、易扩展、跨语言的编程接口;
  • FFI接口,支持交叉编译跨语言、跨平台所调用的FFI适配接口;
  • 其他基础工具代码。

WeDPR-Lab-Core v1.1.0版本开源主要内容如下:

提供更为丰富的密码学算法组件,具体包括:

  • 密码算法组件
    • 签名验证
    • 哈希算法
    • 公钥加解密ECIES
  • FFI接口,新增支持交叉编译、跨语言、跨平台所调用的FFI适配接口。

WeDPR-Lab-Core v1.0.0版本开源主要内容如下:

  • 公开可验证密文账本的一个交互式样例,实现以下主要功能:
    • 密文金额发行
    • 密文金额四则运算关系验证
    • 密文金额范围验证
  • 三类零知识证明算法的高效稳定实现,包括
    • 密文加和关系证明
    • 密文乘积关系证明
    • 密文范围证明
  • Rust SDK,封装底层算法,提供易用、易扩展、跨语言的编程接口;
  • FFI接口,支持交叉编译跨语言、跨平台所调用的FFI适配接口;
  • 其他基础工具代码。

我们期望能够通过代码开源的方式:

  • 有效降低使用隐私保护算法组件的技术门槛;
  • 减少业务系统集成隐私保护特性的开发成本;
  • 助力全行业伙伴安全、合规地开展数据业务。

欢迎社区伙伴参与WeDPR-Lab的共建,一起为可信开放数字新生态的构建打造坚实、可靠的技术底座。

安装

WeDPR-Lab核心库使用跨平台的系统语言Rust编写,体验前需要安装相关的开发环境。

安装Rust环境

  1. 安装nightly版本的Rust开发环境,可参考示例安装指引
  2. 若有疑问,可进一步参考Rust官方文档

拉取WeDPR-Lab源代码

使用git命令行工具,执行如下命令。

git clone https://github.com/WeBankBlockchain/WeDPR-Lab-Core.git

git clone https://gitee.com/WeBankBlockchain/WeDPR-Lab-Core.git

公开可验证密文账本场景方案

VCL解决方案优势

公开可验证密文账本(Verifiable Confidential Ledger, VCL)具有以下核心优势:

  • 全密文记账,满足企业级安全和性能要求
  • 账目密文数值之间的算术、逻辑全关系证明
    • A + B = C, A * B = D
    • A > B, A != B

其典型的应用场景如下:

  • 涉及数字化资产流通的场景
    • 支付、清算
  • 涉及多方之间共享账本信息的场景
    • 供应链金融
    • 跨境金融服务

其重要功能和指标如下:

  • 功能特性(以支付类应用为例)
    • 支持任意数据类型的资产或权益类型(数值型和非数值形)
    • 交易者身份和交易金额隐匿
    • 基于零知识证明算法
    • 不依赖可信硬件执行环境
    • 不依赖可信第三方服务
    • 国密算法和监管支持
  • 性能指标
    • 百字节记录大小
    • 微秒级交易处理延时
    • 万级每秒交易并发量

VCL目标场景业务痛点示例 – 支付中的隐私风险

实习生美丽终于毕业啦!来到新城市工作的美丽决定不时去花店买几束花装饰自己的出租屋。

美丽每次都会在楼下花店买玫瑰和桔梗。买了几次之后,每次美丽准备第二天再去采购的时候,就会收到了花店发来的短信:“美丽小姐您好,明早新到一批您喜爱的玫瑰与桔梗,欢迎前来选购”。美丽一边惊喜一边又诧异她怎么知道我的买花习惯,于是去花店的时候和店员聊起这件事。店员自豪地说她们会定期整理花店账本,并对每个顾客的支付记录进行分析,就可以提前“贴心”提醒顾客啦。美丽听完恍然大悟,才知道原来自己日常的买花喜好及行为仿佛已经完全被花店“监控”了。不仅是花店提醒短信,自从买花以来美丽就经常收到花瓶推荐广告、驱虫广告等,美丽心想应该也是花店账目信息出售或泄露导致的吧,心里有种说不上来的滋味,决定利用自己穿越时空的超能力改变这一现状。

美丽之前在花店的支付,泄露了所有支付明细,包括买花类别、数量、消费金额、消费时间等。花店及入侵者通过账本记录,配合大数据分析等手段,分析出了美丽的消费习惯:一般什么时候来买花、喜欢什么花、消费水平等,及由此推测出的其他日常行为,导致了严重的美丽隐私泄露问题。

美丽心想,花店其实只需确定她每次支付完成后,账本记账是正确的就可以了,于是这次美丽选择采用WeDPR-Lab提供的方案进行支付。这次,美丽实现了对自己交易内容的完全隐匿,花店记账时再也无法看到美丽具体的支付细节内容,但又可以验证美丽本次的支付是有效且正确的,也能通过将本次消费与历史账目加和来更新得到最新账目,也就是说在保证美丽隐私的同时又能保证正常的记账规则。而且,由于花店账本也没有记录美丽的消费具体内容,所以即便有黑客等入侵,得到的也只是一堆密文,无法获得任何有用的信息。美丽再也不会担心自己被花店监控而收到花店的“关怀”提醒短信,也不用担心自己的消费信息泄露而被其他服务商“热心”推荐了。

在传统支付方案中,隐私保护需要完全依赖于信任一个第三方平台,譬如上述场景中的花店支付系统,但这个第三方平台的安全性又如何保证呢?公开可验证密文账本VCL方案,完全不依赖支付中间服务商的信任,仅依靠密码学困难性理论,通过密码学承诺、场景化高效零知识证明,在遵循账本记账规则的同时,既能保证账本维护者甚至外部监管机构对账本正确性的验证,又能有效保护用户支付明细的隐私安全。

VCL核心算法组件特性

WeDPR-Lab开源社区版中提供了VCL解决方案的核心算法组件和使用示例,具体包括:

  • 公开可验证密文账本的Demo示例
  • 明文账本数据向密文凭证转换的通用方法
    • 明文账本数据转换为密文凭证
    • 密文状态下证明密文凭证的所有权
  • 密文凭证之间的代数约束关系的零知识证明
    • 密文状态下证明v1 + v2 =? v3
    • 密文状态下证明v1 * v2 =? v3
  • 密文凭证的范围约束关系的零知识证明
    • 密文状态下证明v1 > 0
  • 其他基础工具代码

VCL示例快速体验

完成安装步骤之后,进入示例目录,运行公开可验证密文账本Demo。

cd WeDPR-Lab-Core/solution/verifiable_confidential_ledger
cargo run

cargo run之后按照demo指引,设置中文或英文作为演示语言,按步骤输入即可进行体验。

具体流程描述如下:

  1. 用户对于自己输入的数值金额v1, v2, v3,生成密文凭证c1, c2, c3。
  2. 在密文状态下,用户生成三类金额的数值关系的零知识证明,具体包括:
    • 加法关系证明:v1 + v2 = v3;
    • 乘法关系证明:v1 * v2 = v3;
    • 非负数证明:v1 > 0
  3. 验证以上三类零知识证明的正确性。
  4. 与明文账本对比,体验密文账本数据效验的隐私保护效果。

VCL示例流程图

范围证明:

_images/prove_range.png

选择性认证披露场景方案

SCD隐私保护解决方案

在信息时代,信息披露无处不在,无论是个人还是企业,在日常活动中,都需要向不同实体披露经过认证的信息。例如,个人每次入住旅店时,需要出示本人身份证;企业每次参与竞标,需要提供经过相关部门认证的资质证明。

在传统方式中,为了获得此类认证后的凭证,用户往往需要向认证部门提供一系列认证材料,并完成相关认证手续,才能获得由相关部门签发的凭证,交互代价很高,往往只能支持捆绑认证,即多项数据只能一同认证且一同披露明文。

回到入住旅店的场景,虽然旅店要求客人出示身份证的主要目的是验证其为合法且满足年龄要求的公民,但这一看似平常的行为,也泄露了客人额外的敏感信息,如家庭住址、身份证号码等。在类似的企业资质证明中,尽管很多时候,仅需要证明企业特定财务情况满足一定的下限,而在传统的信息披露方式中,却不得不要求企业披露完整的敏感财务信息,由此未能实现隐私数据最小化信息披露,带来了不必要的隐私数据泄露风险。

_images/SCD.jpg

针对这类场景痛点,WeDPR选择性认证披露解决方案,提供了最小化认证数据披露效果,仅需认证一次,在随后的信息披露过程中,用户可以自主选择需要披露的证书属性值明文,或者使用更为神奇的零知识断言披露方式,仅需提供“自身证书属性值满足认证条件”的断言证明(例如,证明我的年龄大于20岁,但不告诉对方具体几岁),而不提供任何隐私数据明文信息。

在技术层面,选择性认证披露的核心功能包括:用户可以在不依赖可信第三方服务的前提下,支持已认证证书中任意类型的属性集合任意子集的隐私数据披露,并支持基于属性值的零知识断言披露,从而实现用户在证明自身具备某些属性值同时,完美保护了隐私属性值的明文和其他不必要披露的隐私属性值。

此外,选择性认证披露还进一步支持多个属性值同时进行零知识断言披露,仅当所有属性值都满足条件时,才能验证通过,当任一条件不满足时,不会泄露其他条件的满足情况,真正意义上实现了认证隐私数据的最小化信息披露

SCD场景式解决方案实现了“属性隐私同时可认证可监管”的业务模型,支持二次开发,能快速满足有“隐私认证身份凭证”需求的业务场景,如私密数字凭证、智慧医疗金融等。SCD场景式解决方案目前已经集成到微众银行自主研发并开源的WeIdentity 分布式数字身份解决方案中(WeIdentity github仓库地址WeIdentity gitee仓库地址)。

SCD核心算法组件特性

WeDPR-Lab开源社区版中提供了SCD解决方案的核心算法组件和使用示例,具体包括:

  • 选择性认证披露的Demo示例
  • 选择性披露证书的全流程功能
    • 选择性披露证书的颁发
    • 选择性披露证书的混淆
    • 选择性披露认证的零知识断言证明
    • 选择性披露认证的零知识断言验证
    • 选择性属性明文披露和验证
  • 各类数值逻辑关系的零知识断言的证明和验证
    • 相等
    • 大于
    • 小于
    • 大于等于
    • 小于等于
  • 其他基础工具代码

SCD示例快速体验

为了便于用户更易理解选择性认证披露的效果,我们在SCD Demo中设定了如下具体示例应用场景:

用户申请“优秀青年”奖项,该奖项的申请条件为:年龄在[18,40]区间内,且贡献级大于6。根据具体贡献值,奖项又划分为:

  • 贡献级 = 10,为 一等奖;
  • 贡献级 = 9 ,为 二等奖;
  • 贡献级 = 7或8 ,为 三等奖。

奖项授予方通过审核用户提供的个人认证信息,向用户反馈其是否具有该奖项的申请资格及对应的奖项评级。

完成安装步骤之后,进入示例目录,运行:

cd WeDPR-Lab-Core/solution/selective_certificate_disclosure
cargo run

cargo run之后按照Demo指引,设置中文或英文作为演示语言,按步骤输入即可进行体验。

体验流程描述如下:

  1. 用户基于属性模板填写个人凭证信息:年龄及贡献级。

  2. 用户请求权威机构进行个人凭证信息认证,获得认证后的凭证。

  3. 为防止权威机构对认证凭证的使用进行跟踪,用户对认证后的凭证进行混淆,获得混淆凭证。

  4. 用户选择个人信息凭证披露方式(分别描述为以下5、6步骤)。

  5. 用户仅提供断言证明,证明满足全部申报条件, 但不透露任何字段值。

    • 用户生成并向奖项授予方提交“自身凭证信息满足奖项申请条件”的断言证明。

    (这种披露方式,奖项授予方无法直接获得用户个人凭证信息的明文,但通过对其断言证明的验证,即可判断该用户是否具有奖项申请资格。)

  6. 用户提供贡献级明文信息及其正确性证明, 但不透露年龄。

    • 用户为其贡献级信息生成正确性证明。
    • 用户生成“自身年龄满足奖项的年龄申请条件”的断言证明。
    • 用户向奖项授予方提交贡献级明文、贡献级正确性证明、年龄断言证明。

    (这种披露方式,奖项授予方直接获得用户个人凭证信息中的贡献级明文,从而进行奖项等级评定;但无法直接获得用户的年龄信息,只能通过对其年龄断言证明的验证,判断该用户是否满足奖项的年龄申请条件。)

  7. 用户获得奖项授予方验证并返回的奖项资格验证结果。

SDK

WeDPR Lab提供多种SDK调用方式,开发者可在多种平台、多种终端使用WeDPR Lab的密码组件,构建不同的隐私保护应用场景。

Java SDK

环境依赖

WeDPR Lab Java SDK 依赖如下:

依赖软件 支持版本
Java JDK1.8+

快速体验

下载仓库
git clone https://github.com/WeBankBlockchain/WeDPR-Lab-Java-SDK.git && cd ./WeDPR-Lab-Java-SDK

git clone https://gitee.com/WeBankBlockchain/WeDPR-Lab-Java-SDK.git && cd ./WeDPR-Lab-Java-SDK
根据操作系统访问release页面获取对应动态库,以linux为例,支持mac、linux和windows版本
curl -LO https://gitee.com/WeBankBlockchain/WeDPR-Lab-Core/releases/v1.2.0-Java-SDK/libffi_java_crypto.so
curl -LO https://gitee.com/WeBankBlockchain/WeDPR-Lab-Core/releases/v1.2.0-Java-SDK/libffi_java_vcl.so
curl -LO https://gitee.com/WeBankBlockchain/WeDPR-Lab-Core/releases/v1.2.0-Java-SDK/libffi_java_scd_1_1.so
拷贝动态库至加载路径
cp ./*.so ./demo/src/main/resources/WeDPR_dynamic_lib
编译项目
bash ./gradlew clean build
进入项目目录
cd demo/dist
运行demo
java -cp "apps/*:conf/:libs/*" com.webank.wedpr.demo.DemoMain
FAQ

当提示The WeDPR dynamic library was not found时,请检查并下载对应操作系统的动态库防止于WeDPR_dynamic_lib文件夹下

当系统openssl版本为1.0.x时,scd动态库为1_0版本,当系统openssl版本为1.1.x时,scd动态库为1_1版本

Android SDK

环境依赖

WeDPR Lab Android SDK 依赖如下:

依赖软件 支持版本
Java JDK1.8+
Android Studio 4.1+
Android NDK 21+

快速体验

编译项目前,需要准备好 Android Studio、并安装NDK

  • 下载仓库
git clone https://github.com/WeBankBlockchain/WeDPR-Lab-Android-SDK.git && cd ./WeDPR-Lab-Android-SDK

git clone https://gitee.com/WeBankBlockchain/WeDPR-Lab-Android-SDK.git && cd ./WeDPR-Lab-Android-SDK
  • 获取动态库库:根据需求访问依赖库地址页面下载对应版本的动态库
  • 拷贝动态库至加载路径:将解压好的动态库放至demo/app/src/main/jniLibs对应路径下
  • 查看demo:查看MainActivity.java

iOS SDK

环境依赖

WeDPR Lab iOS SDK 依赖如下:

依赖软件 支持版本
xcode-toolchain 12.1

快速体验

编译项目前,需要准备好 xcode、安装cocoapods,并注册ios开发者账号

  • 下载仓库
git clone https://github.com/WeBankBlockchain/WeDPR-Lab-iOS-SDK.git && cd ./WeDPR-Lab-iOS-SDK

git clone https://gitee.com/WeBankBlockchain/WeDPR-Lab-iOS-SDK.git && cd ./WeDPR-Lab-iOS-SDK
  • 获取静态库:访问依赖库地址页面下载对应版本的动态库
  • 添加静态库至xcode:将libffi_c_crypto.a与libffi_c_vcl.a添加至xcode
  • 查看demo:查看ViewController.m了解demo调用页面

接口文档

VCL接口说明文档:点击这里

SCD接口说明文档:点击这里

密码模块接口说明文档:点击这里

常见问题解答

  • 问:WeDPR安全吗?
  • 答:WeDPR依托区块链等分布式可信智能账本技术,融合零知识证明、安全多方计算、同态加密等密码学前沿技术,为数据安全和数据隐私提供技术保障。WeDPR-Lab系列核心算法组件代码完全公开透明,安全性可由开源社区和合作伙伴公开检验。

  • 问:WeDPR符不符合国密?
  • 答:方案设计完全符合国密算法标准,可以自由替换适配国密算法接口,支持国密相关的证书体系、软硬件安全产品的无缝扩展对接。

  • 问:WeDPR和区块链有什么关系?
  • 答:WeDPR的核心理念是提供场景优化的高效隐私保护解决方案,其中重要的目标场景之一就是弱信任模型下的分布式多方协作场景,这与区块链技术的定位非常契合。WeDPR相关方案也结合了区块链的特性进行设计,解决了对应区块链应用中的隐私痛点,两者联合实现了 1+1 > 2 的效果。

  • 问:有技术问题需要咨询?
  • 答:如在实操方面遇到阻碍或想和开发者们随时随地交流,欢迎关注【微众银行区块链】公众号,回复【小助手】进群。