王立成:博士,2007年毕业于上海交通大学;2009年至2010年赴日本国立通信技术研究所任访问研究员。主要研究方向包括密码算法/协议的设计与分析、可证明安全理论、抗量子算法攻击的新型密码原语、加密货币和区块链技术等。
在本文中,我们总结了一些将在区块链中使用的密码原语。什么是密码“原语”?不同于操作系统“原语”的概念,(OK区块链工程院注:操作系统原语是操作系统或计算机网络的术语范畴。它是一个不可分割的过程,由几个指令组成,用来完成某种功能。密码学原语强调的是“动机”,可以简单理解为:你想做什么?比如加密和签名是原语,密钥交换和零知识证明也是原语。
第一级的图元可能有十几个,由第一级的图元派生而来,可能有大大小小几千个,结合各种属性。
一些密码学家在互联网上做了一个非常有趣的组合。左边选原语,右边选属性,不同的原语和属性,不同的公平认证框架,可以产生成千上万的应用,也就是新的密码原语。
而区块链是密码密集型,比特币是区块链的典型代表。其基本结构可以概括为“双链哈希锁”,其特点体现在:
是全新的分布式账簿;他是“只增不变”;
这两点怎么理解?其实杨一贤曾经打过一个比方。他把区块链比作《安全简史》年的家谱。相当于,我说话的时候,在广场上方举着高音喇叭,我说的话被很多人听到。当我想反悔的时候,只要有足够多的人证明你说过的话,你就不能反悔,这样才能保证你说的话只会增加不会改变。
比特币的核心密码学原语是签名算法(ECDSA)和哈希算法(Hash)。事实上,区块链中使用的密码原语有很多,如哈希、数字签名等。而且数字签名不仅使用标准数字签名,还使用环签名、可连通环签名、一次性签名、Borome环签名,以及多重签名、同态加密、同态承诺、累加器、零知识证明等。以及最近流行的口令抽奖。
(1)散列函数
目前,我们使用的大多数哈希函数分为三类:SHA1、SHA2和SHA3。目前比特币还有一个主要是SHA0。当然,其中一些已经在SHA3中使用了。
(OK区块链工程院说明:SHA(Secure Hash Algorithm)是加密哈希函数的一个家族,是FIPS认证的安全哈希算法。沙家族、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512这五种算法是由美国国家安全局(NSA)设计的,并由美国国家标准与技术研究院(NIST)公布。
SHA3的优势在于由非NSA设计。非NSA设计的一个好处就是里面有后门(OK区块链工程院注:后门一般是指那些绕过安全控制获取程序或系统访问权限的程序方法)。
从密码算法的角度来看,如果“后门”是设计者故意隐藏的,那么理论上是可以不可区分的,也就是说,其他想找出“后门”存在的人将面临一个非常困难的数学问题。
为了便于比较,我们通过破解MD5进行比较,可以用位运算和不大于2的64次方的逻辑运算来实现。目前工业上主要使用SHA—256,目前尚未破解。
OK区块链工程院注:MD5是一种广泛使用的密码哈希函数,可以生成一个128位(16字节)的哈希值,保证信息传输的完整性和一致性。MD5由美国密码学家Ronald Linn Rivest设计,并于1992年发表,以取代MD4算法。
当我们提到哈希函数时,就不可避免地要考虑哈希函数的开放性这个概念。在区块链,目前大多数应用是单向的。经常看到一些业内人士谈论块哈希加密。其实Hash不叫加密,只是取个摘要。
哈希函数的设计需要满足防冲突的要求。防撞从攻击角度要求最低,安全目标角度很高。也就是说,如果攻击者连最低的目标都达不到,就说明有最高的安全性。
还有一些典型的用于区块链的哈希函数,如Equihash、Ethash、sCrypt,这些已经在推荐标准草案中公布。
最后总结一下“挖掘”和“反挖掘”,这是围绕Hash技术研究的“攻击”和“防御”两个概念。这是一件非常奇怪的事情。我们在研究Hash的时候从来没有想过降低Hash的速度,但是区块链出来之后,让反挖掘成为了一个新的研究方向。
所谓反挖矿,就是要求计算速度不能太快,因为追求计算速度就意味着不公平。比如过去十年,100兆的哈希运算在1秒内完成,14 T的用ASIC芯片就能完成。
而抵制挖矿的一个办法就是提高硬件内存的门槛,比如Ethash和Scrypt。另一种是X11这样的串行设计方案。String要调用11种哈希函数,而X17是17种。目的是使散列计算变慢,同时仍然保持防冲突特征。
到目前为止,从密码学的原理来看,这样做的方法并没有增强安全性。大家把Hash函数串在一起可能更难,更安全,但理论上不是。
(2)签名
一次性签名结合了签名和一次性秘密的概念,这意味着一个签名私钥只能使用一次。如果要用两次,就有危险:之前的私钥会泄露。这个概念很早就提出来了,主要是Lamport提出来的,他本人就是一个分布式的人。
OK区块链工程研究所注:Leslie B. Lamport是美国计算机科学家。它以在分布式系统方面的开创性工作和文档准备系统LaTeX的原始开发者而闻名。也是2013年图灵奖的获得者,他设计了重要的算法,并开发了形式建模和验证协议,以提高真实分布式系统的质量。这些贡献提高了计算机系统的正确性、性能和可靠性。
(3)环签名
环签名最大的特点是匿名性,曾被形容为“把你拉进环里,跟你有什么关系”。也就是说,为了实现匿名,我可以拉一些人组成这个圈子,代表一个组织发布消息,只要我知道这些人的公钥。
比如我们把一个人的名字作为公钥,那么我就可以把它和特朗普的名字结合起来,发布一个虚假的消息,然后说这个消息是特朗普发布的,特朗普确实可以发布这个东西。它的匿名是无条件的。只要知道一个人的名字,不需要征得他的同意,就可以被拉入这个圈子。
OK区块链工程院注:环签名是一种数字签名方案,最初由Rivest等人提出,环签名是一种简化的群签名。在环签名中,只有环成员而没有管理者,所以环成员之间不需要合作。
好的环签名必须满足以下安全要求:
1)无条件匿名。即使攻击者非法获取了所有可能签名者的私钥,他能够确定真实签名者的概率也不超过1/n,其中n是环成员(可能签名者)的数量。
2)难以忘怀。在不知道任何成员私钥的情况下,即使外部攻击者能够从一个随机产生环签名的预言家那里得到任意消息M的签名,他成功伪造合法签名的概率也可以忽略不计。
3)环签名具有良好的特性。可以实现签名者的无条件匿名;签名者可以自由指定他们的匿名范围;形成一个漂亮的循环逻辑结构;它可以在不需要可信第三方或群管理员的情况下实现群签名的主要功能。
环签名是一种特殊的群签名,它没有可信中心,没有群建立过程。对于验证者来说,签名者是完全正确和匿名的。签名提供了一种匿名揭露秘密的巧妙方法。这种签名的无条件匿名性在一些信息需要长期保护的特殊环境中非常有用。例如,即使RSA被攻破,匿名也必须得到保护。
(4)可连接环签名
签名的匿名性很好,但是太强了,经常被用来洗钱做坏事。于是人们对环签名提出了一些限制,即可连接环签名,即环中同一个人的两个环签名可以连接起来,但签名的身份对你仍然是匿名的。
其实在这个层面上,环签名和群签名有点类似。群签名的概念是由Chaum在1991年提出的。Chaum也是盲签名的支持者。第二次货币研究开始于1981或80年。十年后,他提出了群签名的概念。
群签名对验证者来说是匿名的,但对群管理员来说不是匿名的,所以我们可以找出是谁签名的。
可连接群签名和可连接环签名这两个概念在一开始就有各自的发展,并且都是在区块链使用的。最后,将这些技术结合起来实现了环签名交易,这是门罗币隐藏交易金额的一项关键技术。
(5)博洛梅环签名
门罗币起初想用博罗梅戒指的签名来证明交易金额的范围,想隐瞒。后来因为Borome环签名效率低而放弃了。
博罗米有一个历史渊源。一个非常古老的家族,博罗米家族,用三个环绕的圆环做了一个家族标志。这是数学中抽象的东西。当这三个环中的任何一个被打开时,另外两个环已经同时被打开。
如上所述,环签名是匿名的。把多个环签名放在一起,通过OR运算就可以把它们看成每个签名人。
例如,这个签名由X1、X2或Xn签署。这一块代表真实,意味着有一个人已经签字了。另外,另一个Y1或Y2签名也是同样的原理。每个签名的人都是匿名的。匿名性是通过或逻辑实现的,有效性是通过与逻辑实现的。
波罗梅环签名是指一个环签名是匿名的,所以把多个环签名放在一起就完成了一个交易金额的证明。一旦一环公开或一环匿名丢失,整个匿名丢失。这是博罗梅戒指的签名。
(6)多重签名和聚合签名
多重签名的概念与聚合签名略有不同,聚合签名比聚合签名略简单。多重签名是指同一消息的多个不同签名的聚合,最终验证只有一次,即不同的人对同一消息进行签名,这在区块链很少使用。
聚合签名的范围比多重签名更广,聚合签名可以把“相同”一词变成“不同”。签名聚合是指不同消息的多个签名。不同的签名者可以对不同的消息进行签名,也可以聚合成一个签名,最后的签名可以是相同的。目前,在区块链项目中还没有发现聚合签名,但是多重签名确实被使用。
(7)同态加密
同态加密一直是区块链和加密货币行业讨论的焦点。大家都很关注这项技术,但是后来发现,目前同态加密技术还是比较简单的,在区块链很少使用。
同态加密的概念是不需要解密,基于密文(OK区块链工程院注:密文是加密的文本,明文是加密前的文本。密文是用明文加密的消息)可以做一些运算,在安全计算和云计算中应用广泛。为了理解同态加密,我们可以从“加法同态”入手,即两个密文加在一起,然后解密,相当于两个消息加在一起。
而“乘法同态”是指两个密文相乘(特殊乘法),然后解密。“同态”是指同时支持一组逻辑上完整的运算。其实数学已经证明,任何环上的一个定义只有满足加法和乘法才是最完备的,所以只要同时实现了加法同态和乘法同态,就相当于实现了全同态。
同态加密尚未在区块链直接使用。Zcash在第一种结构的证明中只使用了一步同态加密,而且是线性同态加密,不是全同态加密。
(8)同态承诺
目前,许多人所说的同态加密对区块链来说非常重要,但实际描述的是同态承诺。同态承诺在区块链确实用得很多。承诺加密和承诺加密有什么区别?
承诺不需要打开或者只有在有争议的情况下才能打开。任何加密方案都可以成为承诺方案。promise方案在各方面都比加密方案简单,在逻辑上也简单得多。
从密码结构和原子度结构来看,承诺是使用任意单个函数,也就是说我只用一个哈希函数就可以构造出来。哈希函数通常被认为是非常有效的单一函数。但到目前为止,如果只依赖单一函数,还无法构造加密。
(9)蓄能器
累加器的作用一方面是构造环签名,另一方面是直接在区块链中使用,在门罗币中可能有用。累加器在中国也被翻译成聚合器,这是一个很好的概念。
它可以把很多物体压缩到一个空间,压缩后的空间几乎和每个物体原来的空间一样大。但与此同时,根据具体情况,会构建“原始证据”和“非原始证据”。比如有一半可以证明你在里面或者不在里面。这就需要一个累加器,可以概括为八个字:“诸人合一,真假可辨”。
这种潜力是巨大的,我肯定希望在区块链使用这样的东西。比如把很多交易压缩成一个交易,传输非常快,如果我真的拿出一个交易,也可以证明你在里面或者不在里面。
当然,有一个误区必须消除。比如我给你一个压缩的东西,你不能把那个东西从这个里面“拉”出来。
基于信息论,信息压缩丢失。比如把1gb的信息压到1K,肯定会有信息损失,但我的结构很巧妙。你拿一个原始形式的东西,你问它是不是我的压缩形式。我可以证明它在不在里面。这就是它的奇妙之处,但它是抽不出来的。
比如有一个秘密包,里面装着每个人一半的头发,因为每个人的基因都不一样。我可以用你一半的头发证明你是否在这个秘密盒子里。但是从基因的秘密盒子中克隆一个完整的人是不够的。
这对许多应用程序都有好处。目前,我们对聚合器在区块链的应用还没有进行足够的探索。如果能找到直接使用它们的方法就最好了。
(10)零知识证明
顾名思义,零知识证明是指在你能充分证明自己是某项权益的合法所有人,且不泄露相关信息的情况下,对外界给予的“了解”是“零”。其实早在16世纪文艺复兴时期,意大利就有两位数学家为了争夺一元三次方程根公式发现者的桂冠,采用了零知识证明的方法。
当时的数学家Tartari Ya和Fio都声称自己掌握了求根公式。为了证明自己没有说谎,也没有公布公式的具体内容(也许当时数学公式也是技术秘密),他们设置了一个挑战:双方各给对方30个一元三次方程求解,谁能解出都表明谁掌握了公式。
比赛结果显示,Tartari Ya解了Fio的全部30个方程,但Fio一个也解不出来。于是人们相信,鞑靼亚才是一元三次方程开根公式的真正发现者,虽然在当时,除了鞑靼亚没有人知道这个公式是什么样子的。从这个故事中,我们可以初步理解零知识证明的概念。
知识的零证明是由S.Goldwasser、S.Micali和C.Rackoff在20世纪80年代初提出的。这意味着证明者可以让验证者相信一个断言是正确的,而无需向验证者提供任何有用的信息。
零知识证明本质上是一个涉及两方或多方的协议,即两方或多方完成一项任务需要采取的一系列步骤。证明者向验证者证明,并使他相信他知道或拥有某个消息,但证明过程不能向验证者透露任何关于已验证消息的信息。
大量事实证明,零知识证明在密码学中非常有用。如果可以用零知识证明进行验证,很多问题都可以有效解决。
关于区块链,人们还是比较关心零知识证明,尤其是Zcash提出了相关技术ZK-斯纳克。
(OK区块链工程院注:Zcash是第一个使用零知识证明机制的区块链系统。它可以提供完全的支付保密性,同时仍然通过使用公共区块链来维护分散的网络。和比特币一样,Zcash代币(ZEC)总量为2100万。不同的是,Zcash交易会自动隐藏区块链中所有交易的发送者、接收者和金额。只有持有查看密钥的人才能看到交易内容。用户拥有完全控制权,他们可以选择向其他人提供查看密钥。)
ZK-斯纳克的建筑形式非常复杂,可以说是“十八般武艺”的大融合。它是基于同态加法的多项式盲计算和盲验证的综合,然后基于这种二次算术规划的任意算术证明,再基于椭圆曲线的第一次乘法配对。它还引入了公共引用字符串,起到随机嵌入的作用,试图实现去中心化。
(11)密码投掷标志
密码透支的基本思路是通过抽签决定或筛选出潜在参与者,然后参与者再进行抽签。最后,第I个用户是被选为R轮潜在领袖的条件。以满足在R轮的步骤S中第I个用户被选为验证者的条件。这个签名里有历史签名,别人无法篡改,所以只是随手拈来。
相当于把整个历史看成一个随机的字符串。然后通过调整P1和P2参数,可以证明其中的分岔概率可以忽略,这是一个非常强大的概念。只要系统参数足够长,概率按指数规律下降,可以忽略不计。万分之一,百万分之一,千万分之一都不是可以忽略的。可忽略比任何多项式的DOS都要小,而且化简的速度还要快,称为可忽略。
来源:OK区块链工程院