区块链隐私计算中的密码学原理及应用

原文标题:《区块链隐私计算中的密码学原理及应用》
原文作者:realAlitta,DaPangDun,ViewDAO

 一、引言

由于研究需要看了各类隐私项目,从匿名币到可编程隐私的独立公链、从软件为主到软硬件结合的解决方案,可以清楚的看到相关的技术方案在随着隐私板块的发展不断迭代。

(个人理解的可编程隐私:隐私公链将用来解决隐私问题的各类算法、方案以模块化的形式提供给开发者,开发者可以很方便的直接调用)

在了解项目的过程中,发现涉及了各类算法名称、术语,关系错综复杂,想着加入区块链行业前有做 AI 算法的经历,国外的大部分算法也都有了解,就决定把区块链和隐私结合后涉及到的关键技术及主要项目的方案做一个系统化的梳理,打开隐私技术的黑匣子。

考虑到相关的技术理论很多,有些信息不能从官方文档或网络上公开的资源确定,这部分内容我是通过自己的理解做了解释和推理,因此难免会有错误或遗漏的地方,欢迎大家批评指正。

二、目录

本文我们将主要从技术层面做介绍,包含以下几个部分:

1 为什么区块链需要隐私技术?

2 区块链+隐私有哪些主要问题需要解决?

3 目前区块链领域解决隐私问题有哪些工具?

4 主要隐私项目用什么工具来解决隐私问题?

三、具体内容 

1、为什么区块链需要隐私技术?

1.1 Web3.0 时代的个人数据的确权

隐私保护是用户确定数据所有权的核心技术(用户数据:指用户在链上产生的各类数据),目前几乎所有公链的数据都是完全对外开放的,技术、资金雄厚的团队 (如 nansen、footprint 等) 会通过解析、加工链上数据等方式从中获利,这种模式和 Web2.0 时代的巨头垄断模式类似,巨头获得主要收益,产生数据的用户几乎没有收益。

隐私保护将用户的元数据加上了是否需要对外开放的开关,由用户来掌控开关,用户自己可以选择是否开放自己的元数据及是否通过收费的方式向外、向数据需求方开放数据。

1.2 使个人数据更安全

隐私保护可以更好的避免用户数据被黑客攻击从而产生损失,尤其是在当前心理工程学不断发展的时代,对于隐私的保护需求越来越高。

1.3 防止信息不对称导致的被利用

隐私保护使得类似三明治交易这类抢跑交易不知道是谁在交易及在交易什么,因此抢跑失效。

2、区块链+隐私有哪些主要问题需要解决?

包含隐私功能的区块链是把区块链技术和隐私技术结合在一起,所以我们需要先了解区块链当中有哪些地方需要用到隐私。

2.1 区块链

区块链是一个去中心化分布式账本,账本上记录着交易信息,一个交易包含两个部分:

1 两个身份(交易的双方):我们需要对身份进行确认,具体来说,就是确认某个用户 (地址) 是否掌握账本上某些币的使用权限;

2 一组金额:我们需要确认账户的余额是否足够支付当前交易(用于检查花费币数量是不是小于等于账户拥有的币的数量);同时我们我们还要检查同一份币是否被使用两次,即是否存在双花问题(同一笔币转给不同的人,然后将交易信息发送给不同的节点进行验证)。

2.2 主要的隐私问题

因此,隐私问题,可以细分为四个:

1 发送者隐私;

2 接收者隐私;

3 账户余额隐私;

4 交易内容隐私。

3、目前区块链领域解决隐私问题有哪些工具?

区块链领域用来解决隐私的工具可以分为两大类:

1 纯软件的方式:依托数学难题建立的一系列密码学算法

2 软硬结合的方式:主要是融合密码学算法和 TEE(Trusted Execution Environment) 环境

软件层面

主要是密码学范畴,又可以分为:

1 密码学原型

2 密码分析

3 对称加密

4 非对称加密

5 密码协议


常见密码学的分类

3.1 密码分析

密码分析是对加密信息进行破解,密码学原型中的大质数分解问题和离散对数问题是对称加密、非对称加密、密码协议的数论基础。下面主要介绍对称加密、非对称加密、密码协议这三类关于密码学具体应用的类别。

大质数分解和离散对数对满足下面的描述:简单理解就是有个函数 y=f(x),由 x 求 y 容易,由 y 反求 x 困难,y 可以理解为公钥、x 可以理解为是私钥,要注意的是由 y 反求 x 是困难而不是不可以求,想深入了解可以从陷门函数开始

3.2 对称加密算法

简单来说,加密和解密用的是同一个秘钥,最主要的算法是 DES(Data Encryption Standard),它是一种使用秘钥加密的块算法。DES 的主要过程是通过迭代的位运算完成加密的过程,细节不做展开。

3.3 非对称加密算法

用户拥有一个密钥对,包含一个私钥和一个公钥。公钥用来加密,私钥用来解密,加密和解密的密钥不同因此称为非对称加密算法。

非对称加密算法可以用密码学原型中的两类数学难题中的任何一类为基础生成一个密钥对,RSA 是依托与大素数分解问题生成的一个非对称加密算法,ECDSA 则是依托于离散对数问题生成的一个非对称加密算法。

非对称加密算法的核心过程就是基于数字签名,下面会首先介绍下数字签名及其分类,接着讲解非对称加密签名的一般验证过程,然后介绍基于 ECC 生成公钥、私钥的 ECDSA 签名算法的验证过程,最后介绍为了保护签名者隐私而使用的环签名技术。

数字签名

这是一种功能类似写在纸上的普通签名、但是使用了公钥加密领域的技术,以用于鉴别数字信息的方法。一套数字签名通常会定义两种互补的运算,一个用于签名,另一个用于验证。依托签名人数多少可以分为两个类别:单人签名、多人签名。

数字签名的种类

一般数字签名,也就是大家平常所说的数字签名,使用单人签名鉴定数字信息。

盲签名 (Blind signatures),消息的内容在签名之前对签名者是不可见的(盲化)。得到的盲签名可以对原始的、非盲消息以常规数字签名的方式公开验证。盲签名可以有效地保护隐私,其中签名者和消息作者是不同的,用于包括电子选举和数字现金的场景。

群签名 (Group signatures),用户代表群签名消息,并在该群内保持匿名。也就是说,看到签名的人可以用公钥验证该消息是由该群成员发送的,但不知道是哪一个。可以用于大型组织机构的投票。

环签名 (Ring signatures),是群签名衍生出的一种签名方式,在后面会详细介绍。

非对称加密中的签名及验证过程

假设场景是小 B 有 10 个 BTC,现在要给小 V 发送 4 个 BTC,小 B 的私钥是 sk,公钥是 pk

1 发送方生成信息

1)对「小 B 发送 4 个 BTC 给小 V」这条信息进行 Hash 运算生成信息摘要

2、小 B 用自己的私钥 sk 对信息摘要进行加密生成密码 (又叫做数字签名)

3、小 B 将「小 B 发送 4 个 BTC 给小 V」、自己的公钥 pk、密码发送给验证者

2  验证者验证

1)验证者对收到的信息进行 hash 运算生成信息摘要 1

2)用小 B 公开的公钥对密码进行解密生成信息摘要 2

3)如果信息摘要 1 等于信息摘要 2,验证者就可以确定这条信息是小 B 所发

上述过程能完成身份认证的原因是:

1)发送者身份确认。密码能用小 B 的公钥 pk 解密证明小 B 拥有和 pk 对应的私钥 sk,因为密码是由私钥 sk 加密而来的;

2)发送者发送内容确认。由小 B 的公钥 pk 解密的密码就是小 B 发送信息的 hash 值,如果和小 B 广播信息的 hash 值相等则证明发送内容本身没问题没有被篡改过。

基于椭圆曲线 (ECC) 签名算法

简称为 ECDSA,非对称加密中常用的签名算法,验证过程如下:

1 生成签名:

2 验证签名:

3 原理如下:

环签名

Ring Signature,数字签名的一类,能保护签名者隐私的同时,又可以让验证节点验证签名的正确性。

环签名的流程(图片来自网络)

1 签名过程 (可参考上图理解)

2 验证签名:

3.4 密码协议

根据业务场景需要对 对称加密 和 非对称加密 的技术进行融合衍生出的新的协议。

DH 协议/算法

全称为「Diffie-Hellman」,是一种确保共享信息 (秘钥) 安全通过不安全网络的方法,也就是常说的秘钥一致性协议,可以做为对称加密算法共享密钥的方法。

具体过程如下:

数字信封

数字信封是一种综合利用了对称加密技术和非对称加密技术两者优点进行信息安全传输的一种技术。简单来说数字信封可以让两个人共享一个其他人不可见的信息。

通信过程如下所示:

1 发送方:

1、发送方生成对称加密密钥

2、用对称密钥对发送信息进行加密,生成信息密文

3、用接收者公开的公钥对对称加密密钥进行加密,生成密钥密文

4、信息密文、密钥密文组合在一起称为数字信封,发送数字信封给接收者

2 接收方:

1、接收者收到数字信封后,用私钥将密钥密文解密获得对称加密密钥

2、用对称加密密钥对信息密文进行解密获得信息

3、发送方、接收方实现共享了一条其他人不可见的信息

3 总结:

可以发现发送方、接收方共享信息的关键是有一个对称加密密钥,一般用户采用此种办法通信在接收方解密对称加密密钥后可能出现信息泄露,这样通信的隐私性就消失了。但 TEE 环境给了解密密钥所需的足够安全的环境,这样数字信封和 TEE 结合就可以为隐私计算中用户和验证者进行通信提供了一套可行的方案。

密码学承诺

密码学承诺是一个涉及两方的二阶段交互协议,双方分别为承诺方和接收方。

1 两个阶段:

第一阶段为承诺级阶段,承诺方选择一个消息,以密文的形式发送给接收方。

第二阶段为验证阶段,承诺方公开消息与生成密文时的相关参数,接收方用和发送方相同的办法生成一份新的密文,两份密文一致则证明承诺可靠,否则承诺不可靠。需要说明的是承诺可以理解为只有加密过程没有解密过程,在验证阶段要么通过明文几相关参数直接验证,要么通过构造零知识证明的方法在不泄露明文的情况下完成承诺验证。

2 两个性质:

密码学承诺有两个性质:隐藏性和绑定性。隐藏性是指承诺值 (密文) 不会泄露任何关于「消息」的信息;绑定性是指承诺方不能将承诺 (密文) 打开为非原「消息」的其他消息且验证通过。

3 三个类别

主要有三个类别:哈希承诺、Pederson 承诺、量子承诺。

【哈希承诺】:主要应用在隐私要求级别不高的场景中。如下载电影时,电影网站先计算一个要用下载电影的 hash 值传给用户,用户现在完电影后在本地计算一个新的关于电影 hash 值,如果二者相等就证明下载的电影是完整的;

【Pederson 承诺】:在涉及到隐私的区块链领域应用较多,后文会详细介绍。

【量子承诺】:是为了应对量子计算可能带来对经典密码学承诺的破解风险而寻找的新的承诺方案,目前处于研究的早期阶段。

 Perdeson 承诺

目前加密领域常用的承诺是 Pederson 承诺,大部分基于椭圆曲线 (EC),下面介绍计算过程。

实际应用过程举例如下:

假设小 B 有 10 个币来自两个 UTXO 记录分别为 3 个、7 个,需要转 8 个给小 V 记为 t,自己剩余 2 个记为 change,为了简单忽略矿工费用。

1 承诺生成:

2 验证承诺

3 验证者承诺验证

3.4 零知识证明

是密码协议的一类,简单来说就是验证者不需要知道被验证者所掌握的信息的情况下确认清楚被验证者确实有这个信息。本文不对零知识证明做展开。

软硬结合层面

3.5 TEE

Trusted Execution Environment,可信执行环境,是 CPU 的一块区域,可以简单理解为是一个几乎不会攻破的计算黑匣子,在隐私计算都是密文的通信环境中,TEE 接受密文输入、内部进行明文计算、计算完成后加密输出。TEE 内部是明文计算,可以在保证计算效率的前提下完成隐私保护。输入是密文因此需要 TEE 和通信的另一方 (用户/节点等) 采用上面介绍的密钥共享进行密钥共享完成数据解密。TEE 实现隐私保护时需要软件层面的密码学算法做支持。

下面举例说明区块链中结合了 TEE 后的一次通信流程:

1 发送者:

1、发送者生成 DES 密钥,并对交易信息进行加密

2、用 TEE 节点 (TEE 也有一个公钥一个私钥) 公布出的公钥对 DES 密钥进行加密

3、交易信息签名

4、交易密文、DES 密钥密文、数字签名形成的数字信封发送给 TEE 节点

2 TEE 节点:

1、TEE 用私钥解密加密信息的 DES 密钥

2、DES 密钥解密信息

3、交易信息经验证、计算、加密后输出对账本做更新

可以发现 TEE 节点公钥加密的信息只有 TEE 节点可以揭秘。因此当进行隐私交易时,用户只需把隐私信息通过 TEE 公钥进行加密并通过数字信封和 TEE 节点进行信息交互就可以。

4、主要隐私项目用什么工具来解决隐私问题?

从账本底层逻辑上看,涉及到隐私的几乎所有项目都采用了 UTXO 模型,尽管相比 UTXO 模型,账户模型有更好的编程性,但其和隐私的契合度要差很多。

从实现隐私的技术方案上看,项目团队按各自的理解,有的运用软件为主的密码学算法,有的用软硬件结合的密码学方案完成隐私项目构建。

下面分别从匿名币、layer2 隐私方案、隐私公链及其他涉及到的隐私项目四个方面介绍各自的实现技术方案选择及方案是如何做到隐私保护的。

4.1 匿名币

匿名币的主要作用是来完成交易功能本身的隐私,本身不具备可编程性,主要介绍 DASH、Monero、Zcash。

DASH

运用的主要技术是混币 (coinjoin),具体过程是:

1、混币节点收集一段时间内的有转账需求的用户的转账申请

2、将所有发送方的金额按标准数值进行拆分,基数是 0.001、0.001、0.01、0.01 等

3、将标准化的币按发送方约定数量发送给接收方

可以看出,整个过程实现了发送方和接收方的隐私 (对混币节点不匿名),金额隐私、账户隐私并未做到。身份验证、金额确认和双花问题和无隐私功能的以太坊中用到的密码学算法类似不做展开。

 Monero

1 基本情况:

采用类似 BTC 的 UTXO 账本模型,账本中维护这两个「表」(实际是两棵默克尔树),一个包含了过去的输入输出变化,另一个包含了已经花费的 UTXO 的秘钥镜像。Monero 每个用户有两个密钥对,一个叫做 secret spend key,主要用于解锁属于自己的未花费 UTXO,另一个叫做 secret view key 是发送方用来生成一次性公钥和地址的。

2 转账过程:

3 实现效果:

发送者隐私、身份认证、交易内容隐私 (交易金额隐私)、金额确认;

发送者通过一次性私钥进行环签名,并通过 Pederson 承诺的方式提交转账信息,验证者可以通过非对称加密完成身份认证,并通过 Pederson 承诺的同态可加性+零知识进行范围证明完成交易合法性认证。

4 双花问题:

每一笔输入被花费时,需要向账本提交钥匙镜像,当同一笔输入被进行多次花费时在达成共识阶段只会接受部分合法转账。

Zcash

1 账本结构:

Zcash 采用 UTXO 式的账本结构,账本中的每条输入输出记录称为一条 note,一条 note 包含有如下的变量:

持有者的公钥: a_pk,数量: v,代表 note 的代币数值,随机数: r1,随机数: r2, 是每一条 note 的唯一标识。

当一条 note 被消费了之后,这个值会被放置到 Nullifier 表中,代表这条 note 已经被消费了。一条 note 通过向量的形式可以表示为:note = <a_pk , v , r1 , r2>,每条 note 的向量表示形式如下表所示:

2 默克尔树:

在 Zcash 的账本同时还存在两个「表格」(其实是两棵默克尔树),分别是:Commitment 和 Nullifier。简单展示如下表,第一列的 Hashed notes 就是 Commitment;第二列的 Nullifier set 就是 Nullifier。Commitment 存储的是所有 note 的 hash 值,Nullifier 存储的是已经被消费的 note 的 hash 值。假设下表是当前链上所有活动记录:

可以看出,Nullifier Set 中记录了 r22 的哈希值,表明 note2 已经被消费掉,不能在继续进行使用。note1、 note3、note4、 note5 仍可继续使用。

3 Zcash 密钥系统:

Zcash 有两套密钥系统:Sprout 和 Sapling,Sapling 更复杂、隐私保护效果也更好,但为了理解主要过程,就以 Sprout 密钥系统为例进行说明。

来源:Zcash 白皮书

上图中的 Curve25519 是一种椭圆曲线 (ECC) 可以用来实现 ECDH。ECDH 是前面介绍的密钥共享协议 DH 的一种实现方式。因此可以忽略上图的具体加密算法细节,关注架构,其中:

上图解释了发送者在生成新的 note 后将使用权限通过链上发送给了接受者,具体过程如下:

下面以 Zcash 中 z-address 间隐私转账流程为例说明 Zcash 如何实现隐私保护:

完成交易后表一的内容更新为如下表所示:

上述过程中,Zcash 通过生成一次性地址实现了发送者、接收者隐私和账户隐私,通过非对称加密实现了身份认证,通过 Pederson 承诺和零知识证明完成金额隐私、金额确认 (细节可参考 Pederson 承诺介绍部分),通过账本中存储的 Nullifier 表结合共识过程解决了双花问题,通过改进版的 DH 协议将新生成 note 的使用权限分享给接收方。

4.2 隐私公链

 Secret network

1 基本情况:

1、在网络中有非隐私交易和隐私交易两种。非隐私交易和现在的公链交易类似;隐私交易在 TEE 环境中执行。

2、隐私币 sToken 的交易信息、账户信息是以加密的形式存在链上,感觉是用 TEE 环境的公钥加密的信息 (这部分未找到相关资料属于推断信息),在当 TEE 环境需要隐私信息时从链上调用到环境内进行解密。

3、没有生成过 sToken 的用户只有一个密钥对用来进行非隐私交易,生成后为了能查看 sToken 余额及和 TEE 环境进行通信完成隐私交易,本地钱包会给用户新生成一个私钥称为 viewing key。

2 交易流程:

1、用户通过数字信封技术 (参考工具部分介绍) 和 TEE(验证节点) 进行通信,通信内容是发送方、币种、数量及接收方地址

2、TEE 通过非对称加密技术验证发送者身份,并通过调用加密账本信息完成余额确认

3、账本共识

4、将共识后需要更新的账本信息用 TEE 公钥加密后存储进加密账本

5、转账完成,接收者可以通过 viewing key 查看自己的账户余额信息

3 总结:

整个转账过程中,采用非对称加密技术完成发送方身份确认;TEE 通过调用加密账本信息完成余额确认;共识过程解决双花问题;外界只知道发送者和某个 sToken 发生了交互,但具体做什么不清楚,因此保证了发送者、接收者隐私及交易金额隐私,用户隐私账户中的余额是加密的不对外可见的因此保证了账户隐私。

 以太坊 layer2——Aztec

这是一个基于 zk-SNARK 的、支持隐私的以太坊 lyer2 方案,支持编程级隐私,账本结构是 UTXO,账本中包含两个「表」,一个是所有 note 集合,一个是已花费 note 的集合,使用的编程语言比较特殊是 Nior。

下面主要介绍 Aztec 如何实现转账隐私的。

场景:小 B 有在以太坊上有 10 个 dai,需要转移 8 个给小 V 自己剩余 2 个,转移完成后双方各自退出资产回到以太坊,过程如下:

1、小 V 将以太坊上的 10 个 Dai 转移到 Aztec 中,生成 zDai。这部分是公开的。

2、类似 Secret network 用会户生成一个新的公钥、私钥对

3、小 V 生成 Pederson 承诺,并提交自己想花费 note 的 hash 和新生成 note 的哈希

4、验证者通过 Pederson 承诺的同态可加特性及零知识证明完成对余额的确认

5、更新账本中的两个「表」,完成 note 所有权转移记录

6、Aztec 将保密金额转成公开金额,然后通过跨链桥退出资产

4.3 其他隐项目

前面的文章介绍的内容更多的是「账户级别的隐私」,即使在上述各种隐私技术的保护下也是可以监控到某笔交易的发起 IP。市场内实现 IP 级别隐私+区块链的项目也在逐渐成熟,最具有代表性的就是 Nym,技术实现上可以简单理解为是暗网 (洋葱网络) 的架构加入了区块链的激励措施,基于区块链的激励机制使暗网进行 IP 匿名的混淆网络节点更多、更健壮。

由上图可以看到,Nym 相当于两个网络,一个 Nym Mix Node 网络来进行 IP 匿名,Nym blockchain 负责激励。IP 匿名的主要技术是混淆网络,混淆网络具体过程如下:

假设网络中有 n 个节点,每个节点的公钥是公开的

1、信息发送方随机选取网络中的 k 个节点作为加密路径,这 k 个节点的公钥分别是,是发送方公钥,是接收方公钥

2、发送者将钥发送的信息 m 使用 k 个公钥逐次进行加密,每次加密的信息中需要包含下一个解密节点

3、发送者发送消息,消息经过之前定义好的路径进行传送,当节点 i 时,i 用私钥解密信息

4、如果 i 是信息接收者则可以直接解密出信息,完成消息传递,如果不是,则从解密消息中确定下一个节点,然后将消息发送给从解密的信息中了解到的下一个节点

整个传输过程像一个被包裹了 k 层的包裹被逐渐打开的过程,中间节点只能知道它的上一个和它的下一个节点,但它不能确定上是否一个节点是起始点、下一个节点是终点,因此达到了 IP 保护的目的。需要说明的是整个网络比上面介绍的要复杂很多,过程中还涉及到信息的标准化、打散等操作来混淆信息,本文不做展开。

4.4 总结

整理如下:

四、总结

区块链领域关于隐私最宏大的叙事就是 Web3.0 的个人数据确权,如果数据确权成为共识,隐私保护技术将是上层所有应用的基础。但这并不容易,需要一般用户认识到数据隐私的重要性,个人认为只有在一些项目能够实现个人数据的价值发现后,数据确权才能成为共识。

鉴于以上的行业叙事需要和现实的匿名交易需求,区块链领域的隐私保护中出现了匿名币、隐私公链、IP 隐私等项目。

为了通过技术将区块链和隐私更好的结合在一起,不同的项目团队选择了。技术上从单纯的依靠密码学算法发展到了密码学算法和硬件的结合。密码学算法主要应用对称加密算法、非对称加密算法、密码共享算法、密码学承诺及基于这些基础密码学技术衍生出的混合技术。硬件主要是 TEE 环境的应用。

需要说明的是,本文从匿名币、layer2、隐私公链中选取了代表性项目进行了说明,市场上还有非常多的匿名币项目、隐私网络没有在文章中介绍,如 oasis、phala、manta 等,这些网络根据自己的项目定位确定了各自的实现方案,但其中涉及到的关键技术基本已经在上文中进行了介绍。

参考链接:
1、https://link.zhihu.com/?target=https%3A//arstechnica.com/security/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/3/
2、https://blog.csdn.net/weixin_42117918/article/details/86421877
3、https://www.uucj.com/archives/117929
4、Greg Maxwell. Confidential transactions. Xiph.org ~ greg/confidential_values.txt [On-line; accessed 04/04/2018]
5、https://zhuanlan.zhihu.com/p/66794410
6、https://blog.csdn.net/TurkeyCock/article/details/97571552
7、https://bytecoin.org/old/whitepaper.pdf
8、https://scrt.network/blog
9、https://whitepaper.io/document/13/zcash-whitepaper
10、https://aztec.network/research
11、https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A0%81%E5%AD%A6

区块链隐私计算中的密码学原理及应用

扫一扫手机访问

区块链隐私计算中的密码学原理及应用

发表评论