
一、默克尔树
默克尔树是一种树形的数据结构,一般形态是二叉树,具有树结构的所有特点。

默克尔树的叶子节点一般存储的是数据块,也可以是数据块的哈希值。
默克尔树的生成过程如下:
将一个大数据块拆分成更多小的数据块,然后对每个数据块进行哈希运算,得到所有数据块的哈希值之后,获得一个哈希列表。
接下来根据列表元素个数的奇偶特性重新再计算出哈希值,如果是偶数,则两两合并再计算哈希值,获得新的列表;
如果是奇数,则前面两两计算哈希值,最后一个单独计算哈希值。
重复上面的过程,最终得到一个哈希值,被称为根哈希。
默克尔树逐层记录哈希值的特点,使得它具有对数据修改敏感的特征。
它有一些比较典型的应用场景。
(1)快速比较大量数据。
叶子节点数据的细微改动,都会导致根节点发生变化,可以用根节点来判断数据是否发生修改。
(2)快速定位数据块的修改。
如果Data1的数据发生修改,那么就会影响H1、H4、Root。根据树的特性,从根节点到叶子节点,只需要通过O(logn)便定位到实际发生改变的数据块是Data1。
(3)零知识证明。
为了证明某个论断是否正确,通常我们需要将数据发送给验证者。默克尔树提供了一种方法,可以证明某方拥有某数据,而不需要将原始数据发给对方。

我们只需要将Data0、H1、H5、Root对外公布,任何拥有Data0的用户,经过计算可以获得同样的Root值,说明该公开用户拥有数据Data1、Data2、Data3。
二、 常见数字签名算法
数字签名中非对称加密算法主要依赖密码学领域的单向函数原理。
即正向操作非常简单,而逆向操作非常困难的函数。
密码学常用的三个单项函数原理为质数分解、离散对数和椭圆曲线问题。
质数分解(prime factorization)即数学中的整数分解,将一个整数分解成几个质数的乘积。
给出两个较大的质数,很快可以求得乘积。
但是给定它们的乘积,无法在一定时间内分解得到两个质数。
整数越大,做因数分解越困难,即满足单向函数条件。
当前流行的RSA算法就是采用质数分解原理。
| RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman于1977年一起提出的,RSA就是他们三人的姓氏开头字母拼在一起组成的,三人也于2002年因此获得图灵奖。 |
当前较短的RSA私钥可通过枚举等强力方式破解,当前应用一般推荐2048甚至更高长度的私钥。
随着计算能力的飞速提升,特别是量子计算的发展,人们普遍认为RSA算法将在不久的将来被破解,所以推荐采用加密强度更高的椭圆曲线算法。
离散对数(Discrete logarithm)是一种基于同余运算和原根的一种对数运算。
在实数中对数的定义logba是指对于给定的a和b,有一个数x,使得bx=a。
相同地,在任何群G中可为所有整数k定义一个幂数为bk,而离散对数logba是指使得bk=a的整数k。
离散对数在一些特殊情况下可以快速计算。
然而,通常没有非常高效的方法来计算它们。
公钥密码学中几个重要算法的基础,是假设寻找离散对数的问题解,在仔细选择过的群中,并不存在有效率的求解算法。
Diffie-Hellman密钥交换算法是由上面提到的离散对数难题保证的。
椭圆曲线(Ellipse Curve)为一种代数曲线。
其实椭圆曲线并不是我们高中学习的椭圆形状,其名字的由来是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程。
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合,一般形式为y2=x3+ax2+bx+c。
椭圆曲线包含两个重要特性:关于X轴水平对称;不垂直的直线穿过曲线最多三个点。
椭圆曲线在密码学中的应用正是依赖这两个特性。
椭圆曲线算法(Ellipse Curve Cryptograph, ECC)最早于1985年由Neal Koblitz和Victor Miller分别独立提出,可靠性通过“椭圆曲线上的离散对数问题”的难度保证。 该问题很难在短时间描述清楚,甚至可以单独写一本书介绍。 即使经过30多年的研究,数学界仍然没有找到一个解决问题的改进办法,同样位数长度的数字,解决椭圆曲线离散对数问题要比因式分解困难得多。 因此,相比RSA,ECC安全性能更高,160位的ECC与1024位的RSA加密强度相当。 因此ECC的密钥长度相比RSA更短,存储空间更小,带宽要求更低。 基于ECC椭圆曲线算法的数字签名算法ECDSA,是当前主流的数字签名算法,在区块链领域应用非常广泛,比特币、Hyperledger Fabric等区块链系统,都是采用的ECDSA作为数字签名算法的。 |
我国自主研发的SM2加密算法也是基于ECC实现。 SM2由国家密码管理局于2010年12月17日发布,相关标准为“GM/T的0003-2012《SM2椭圆曲线公钥密码算法》”。 在商用密码体系中,主要用于替换RSA加密算法。 我国还自主研发了密码杂凑算法SM3(类比于SHA256等Hash算法)。 在金融、政务等领域,有时需要使用基于SM2和SM3的数字签名技术。 |


