ViewDAO

Posted on Mar 30, 2022Read on Mirror.xyz

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

Author:ViewDAO.realAlitta(Reviewers:ViewDAO.DaPangDun推特链接

🚫请注意:本文内容较长,技术术语相当多,非常硬核,对原理不感兴趣的不推荐阅读。

一、引言

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

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

在了解项目的过程中,发现涉及了各类算法名称、术语,关系错综复杂,想着加入区块链行业前有做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