密码学在以太坊中的应用与挑战:从哈希函数到同态加密
WarderPANgo
2023-11-23 17:24
订阅此专栏
收藏此文章
本文在介绍密码学概念的基础上、展开解析以太坊中常用密码组件、高级密码组件,及其在区块链中的应用。在回顾古典密码学与现代密码学的区别、发展进阶后,详细阐述哈希函数、椭圆曲线、ECIES、ECDSA 等密码组件的原理、功能,并延伸至盲签名、秘密共享、零知识证明和同态加密等高级密码组件的作用和用法。帮助读者了解密码学在以太坊中的重要性与实践意义。文章配有图片和代码,用于辅助说明密码学的内容及实现。


撰文:WarderPANgo


一、密码学前言


1.1 什么是密码学?


密码学可以分为古典密码学和现代密码学。古典密码学主要关注信息的保密书写和传递,以及相应的破译。而现代密码学不仅关注信息保密问题,同时还涉及消息完整性验证、消息的不可抵赖性以及在分布式计算中产生的所有信息安全问题。两者最重要的区别在于,前者的编译和破解通常依赖于设计者和敌手的创造力与技巧,对密码原件没有清晰的定义。而现代密码学的学术研究始于 20 世纪 70 年代,如今,密码学已经发展成为一门成熟的系统的学科,是一门很有趣的并与计算机科学、数学以及电子工程都存在交叉的学科。



20 世纪 70 年代,密码学仅应用于外交、军事和政府等领域。到了 20 世纪 80 年代,金融和通信产业都已使用了硬件加密设备。80 年代末的数字手机系统标志着密码学第一次大规模应用。如今,基本上每个人每天都会使用到密码学,比如连接无线 Wifi、二代居民身份证和更新手机软件等。


1.2 密码学的分类


我们通常使用的密码学术语其实是密码编码学,密码编码学包含了密码使用学和密码分析学。密码使用学是为了达到隐藏消息含义而使用密文书写。密码分析学是一种破译密码体制的技巧,也是确保密码体制安全的唯一方法。本贴着重介绍密码使用学(免受密码分析学的「折磨」)!



二、以太坊中的常用密码组件


2.1 哈希函数


哈希函数可以看作计算了一个消息的摘要,该摘要是非常短且固定长度的字符串,拥有以下三个安全属性:


a. 抗第一原像性(单向性):给定一个输出 z,找到满足 h(x)=z 的输入 x 是不可能的,即 h(x) 具有单向性;

b. 抗第二原像性(弱抗冲突性):给定 x_1 和 h(x_1),找到满足 h(x_1)=h(x_2) 的 x_2 在计算上不可行;

c. 抗冲突性(强抗冲突性):找到满足 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 门限秘密共享,过程如下:


【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

WarderPANgo
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开