【Web3技术分享系列专题】- 以太坊中的密码学技术
一、密码学前言
1.1 什么是密码学?
密码学可以分为古典密码学和现代密码学。古典密码学主要关注信息的保密书写和传递,以及相应的破译。而现代密码学不仅关注信息保密问题,同时还涉及消息完整性验证、消息的不可抵赖性以及在分布式计算中产生的所有信息安全问题。两者最重要的区别在于,前者的编译和破解通常依赖于设计者和敌手的创造力与技巧,对密码原件没有清晰的定义。而现代密码学的学术研究始于20 世纪70 年代,如今,密码学已经发展成为一门成熟的系统的学科,是一门很有趣的并与计算机科学、数学以及电子工程都存在交叉的学科。
20 世纪70 年代,密码学仅应用于外交、军事和政府等领域。到了20世纪80 年代,金融和通信产业都已使用了硬件加密设备。80 年代末的数字手机系统标志着密码学第一次大规模应用。如今,基本上每个人每天都会使用到密码学,比如连接无线Wifi、二代居民身份证和更新手机软件等。
1.2 密码学的分类
我们通常使用的密码学术语其实是密码编码学,密码编码学包含了密码使用学和密码分析学。密码使用学是为了达到隐藏消息含义而使用密文书写。密码分析学是一种破译密码体制的技巧,也是确保密码体制安全的唯一方法。本贴着重介绍密码使用学(免受密码分析学的“折磨”)!
二、以太坊中的常用密码组件
2.1 哈希函数
哈希函数可以看作计算了一个消息的摘要,该摘要是非常短且固定长度的字符串,拥有以下三个安全属性:
- 抗第一原像性(单向性):给定一个输出z,找到满足h(x)=z的输入x是不可能的,即h(x)具有单向性;
- 抗第二原像性(弱抗冲突性):给定x_1和h(x_1),找到满足h(x_1)=h(x_2)的x_2在计算上不可行;
- 抗冲突性(强抗冲突性):找到满足h(x_1)=h(x_2)的一对x_1≠x_2在计算上不可行。
在以太坊中常用的哈希函数有KeccaK-256、SHA-256、RIPEMD-160、Blake2b,主要用于计算区块和交易的摘要、Merkle Patricia Tree、工作量证明、签名、计算地址、合约等,整理了在以太坊源码中上述哈希函数所对应的功能及代码目录。
2.2 椭圆曲线
2.2.1 椭圆曲线基本概念
素数域Z_p (p>3)上的椭圆曲线指满足以下条件的所有对(x,y)∈Z_p 的集合 y^2=x^3+a∙x+b mod p 以及一个无穷大的虚数点(单位元)θ,其中a,b∈Z_p 并且满足条件4∙a^3+27∙b^2≠0 mod p,即该曲线是非奇异的。
椭圆曲线的加法为,假设有一椭圆曲线:,曲线上点P(x_1,y_1)和Q(x_2,y_2),计算P+Q=R,其中R为(x_3,y_3),结果为:
椭圆曲线点乘运算为,假设存在一点P(x_1,y_1) ,计算2∙P=R,其中R为(x_2,y_2),2倍点乘即为在点P切线,交于椭圆曲线上的一点为P',该点与X轴坐标对称的点为2∙P。
椭圆曲线常见的术语:
椭圆曲线上点的阶:若P为椭圆曲线上的点, n⋅P=无穷远点, n取最小整数,即n为P的阶;
基点:椭圆曲线参数之一,用G表示,是曲线上的一个点;
椭圆曲线参数:素数域(p,a,b,G,n),其中p为素数,确定F_p,a和b确定椭圆曲线方程, G为基点,n为G的阶。
2.2.2 以太坊中使用的椭圆曲线
以太坊使用的椭圆曲线有secp256k1、bls12_381、bn256等,下面为源码中secp256k1的椭圆曲线参数。
2.2.3 ECIES
ECIES(Elliptic Curve Integrated Encryption Scheme)为基于椭圆曲线的整合加密方案,可以理解成集成了ECDH + Symmetric encryption + MAC,具体算法过程如下:其中模数为p,素数阶为n,生成元为G
2.2.3 ECDSA
ECDSA(Elliptic Curve Digital Signature Algorithm)是一种从从椭圆曲线密码学派生的数字签名算法,算法过程如下:
三、以太坊中的高级密码组件
3.1 概述
区块链作为公开账本解决了各方信任问题,但在公开账本上,用户的隐私如何得到保证?以及想要实现一些看起来更“神奇”的功能,该怎么办呢?常用的用于保护区块链中用户隐私的常见手段如下:
3.2 盲签名算法
签名者无法获取所签署消息具体内容的情况下所采取的一种特殊的数字签名技术,满足如下两个性质:
- 签名者不知道所签署消息的具体内容;
- 当签名消息被公布后,签名者无法知道这是他哪次签署的;
基于ECC 的盲签名有很多方案,我们介绍最为经典的一个方案Schnnor盲签名。
签名者Bob每次盲签名都会新生成一对临时签名公私钥对,用户Alice想让签名者对消息m进行盲签名,流程如下:
3.3 秘密共享
秘密共享是指将秘密以适当的方式拆分,拆分后的每一个份额由不同的参与者管理,单个参与者无法恢复秘密信息,只有若干个参与者一同协作才能恢复秘密消息。
本贴介绍下经典的秘密共享方案Shamir门限秘密共享,过程如下:
参考文献:
[1] Liu J K, Wei V K, Wong D S. Linkable spontaneous anonymous group signature for ad hoc groups[C]//Australasian Conference on Information Security and Privacy. Springer, Berlin, Heidelberg, 2004: 325-335.
[2] Fujisaki E, Suzuki K. Traceable ring signature[C]//International Workshop on Public Key Cryptography. Springer, Berlin, Heidelberg, 2007:181-200.
[3] Abe M, Okamoto T. Provably secure partially blind signatures[C]//Annual International Cryptology Conference. Springer,
Berlin, Heidelberg, 2000: 271-286.
[4] https://docs.gnosischain.com
[5] Shamir A. How to share a secret[J]. Communications of the ACM, 1979,22(11): 612-613.
[6] Schoenmakers B. A simple publicly verifiable secret sharing scheme and its application to electronic voting[C]//Annual International Cryptology Conference. Springer, Berlin, Heidelberg, 1999: 148-164.
[7] Mignotte, M., How to share a secret, in: T. Beth, editor, Cryptography-Proceedings of the Workshop on Cryptography, Burg Feuerstein, 1982, Lecture Notes in Computer Science 149 (1983), pp. 371–375
[8] Blakley G R. Safeguarding cryptographic keys[C]//1979 International Workshop on Managing Requirements Knowledge (MARK). IEEE, 1979: 313-318.
[9] Parno B, Howell J, Gentry C, et al. Pinocchio: Nearly practical verifiable computation[C]//2013 IEEE Symposium on Security and Privacy. IEEE, 2013: 238-252.
[10] Ben-Sasson E, Bentov I, Horesh Y, et al. Scalable, transparent, and post-quantum secure computational integrity[J]. IACR Cryptology ePrint Archive, 2018, 2018: 46.
[11] Bünz B, Bootle J, Boneh D, et al. Bulletproofs: Short proofs for confidential transactions and more[C]//2018 IEEE Symposium on Security and Privacy (SP). IEEE, 2018: 315-334.
[12] https://en.wikipedia.org/wiki/Paillier_cryptosystem
[13] ElGamal T. A public key cryptosystem and a signature scheme based on discrete logarithms[J]. IEEE transactions on information theory, 1985, 31(4): 469-472.
[14] Brakerski Z, Gentry C, Vaikuntanathan V. (Leveled) fully homomorphic encryption without bootstrapping[J]. ACM Transactions on Computation Theory (TOCT), 2014, 6(3): 1-36.
- 点赞
- 收藏
- 关注作者
评论(0)