区块链本质上是加密算法,基于哈希值256位算法原理,实现信息安全;现代信息的应用将越来越趋于全球化以及全民化,对于信息的安全除了防篡改、抗抵赖、可信等基础需求之外,更需要加强隐私方面的保护,区块链技术是因为现代密码学发展才产生的,现今应用的密码学是20年前的的密码学成果,因此要将区块链技术应用于更多参与场景,特别是应用于互联网经济等方面,现有的加密技术是否满足需求还需要更多的验证,需要更深入的整合密码学前沿技术,不断创新。
密码学技术是区块链技术的核心。区块链的密码技术有数字签名算法和哈希算法。
数字签名算法
数字签名算法是数字签名标准的一个子集,表示了只用作数字签名的一个特定的公钥算法。密钥运行在由SHA-1产生的消息哈希:为了验证一个签名,要重新计算消息的哈希,使用公钥解密签名然后比较结果。缩写为DSA。

数字签名是电子签名的特殊形式。到目前为止,至少已经有 20 多个国家通过法律 认可电子签名,其中包括欧盟和美国,我国的电子签名法于 2004 年 8 月 28 日第十届全 国人民代表大会常务委员会第十一次会议通过。数字签名在 ISO 7498-2 标准中定义为: “附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。数字签名机制提供了一种鉴别方法,以解决伪造、抵赖、冒充和篡改等问题,利用数据加密技术、数据变换技术,使收发数据双方能够满足两个条件:接收方能够鉴别发送方所宣称的身份;发送方以后不能否认其发送过该数据这一 事实。
数字签名是密码学理论中的一个重要分支。它的提出是为了对电子文档进行签名,以 替代传统纸质文档上的手写签名,因此它必须具备 5 个特性。
(1)签名是可信的。
(2)签名是不可伪造的。
(3)签名是不可重用的。
(4)签名的文件是不可改变的。
(5)签名是不可抵赖的。
哈希(hash)算法
Hash,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,其中散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,但是不可逆向推导出输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
哈希(Hash)算法,它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。
以比特币区块链为代表,其中工作量证明和密钥编码过程中多次使用了二次哈希,如SHA(SHA256(k))或者RIPEMD160(SHA256(K)),这种方式带来的好处是增加了工作量或者在不清楚协议的情况下增加破解难度。
以比特币区块链为代表,主要使用的两个哈希函数分别是:
1.SHA-256,主要用于完成PoW(工作量证明)计算;
2.RIPEMD160,主要用于生成比特币地址。如下图1所示,为比特币从公钥生成地址的流程。
密码学是在区块链技术中承担着非常重要的角色,但其实,在互联网中,也大量的使用着密码学的技术,本文将介绍现代密码学中的早期加密方法,这将有助于我们理解区块链中的复杂算法。
第二次大战之后,从军方演化而来的互联网慢慢的进入了寻常百姓家,我们能够将一切事物都电子化处理,交易也不例外,于是电子银行也出现了,所有交易都可以通过网络进行。随着互联网用户越来越多,新的问题产生了,加密需要双方共享一个秘密的随机数,也就是秘钥,但从未谋面的两个人,如何就此共享密钥达成一致,而又不让第三方监听这知道呢?这将是现代密码学的目标。
1976年,维特菲尔德和马丁赫尔曼找到了一种巧妙的解决方法,让我们用颜色为比喻来讲解该技巧是如何实现的:
首先,明确我们的目标,发送者和接受者就秘密颜色达成一致,而不让窃听者知道,于是需要采用一种技巧,该技巧基于两点:
一、混合两种颜色得到第三种颜色很容易;
二、得到这种混合色后,想在此基础上知道原来的颜色就很难了, 这就是锁的原理。
朝一个方向容易,朝反方向难,这被称作是单向函数。解决方案是这样的,首先,他们公开对某种颜色达成一致,假设是黄色,然后发送者和接收者随机选取私有颜色,混到公共的黄色中,从而掩饰掉他们的私有颜色,并且将混合颜色发给接收者,接收者知道自己的私有颜色,并将它的混合颜色发给发送者,
然后就是技巧的关键了,发送者和接收者将各自私有颜色加入到另一个人的混合色中,然后得到一种共享秘密颜色,此时,窃听者无法确定这种颜色,她必须有一种私有颜色才能确定,技巧就是这样,对密码学的世界中, 我们需要一个数值的运算过程,这个过程向单一方向很容易,反方向会很难。
我们需要一种朝一方向易,反方向难的数值过程,于是密码学家找到了模算数,也就是取余的函数,(比如46除12的余数是10)。
假设我们考虑用质数做模型,比如17,我们找到17的一个原根,这里是3,它具有如下重要性质,取不同幂次时,结果会在时钟上均匀分布,3是一个生成元,取3的X次方,结果会等可能地出现在0和17中间任何整数上。
但相反的过程就难了,比如给定12,要求这是3的多少次方,这被称为离散对数问题,这样我们就有了单向函数,一个方向计算很容易,但反方向就很难了,已知12,我们只能采用试错法,求出匹配的质数。
这有多难呢?如果数字很小,这还很容易,但模数是长达数百位的质数,那么,想解密是不切实际的,即便借助世界上最强大的计算机,要遍历所有可能的情况,也需要上千年的时间,单向函数的强度取决于反向过程所需要的时间。
解决方案是这样的,首先,发送者和接收者公开质模数和生成元,这里的例子中也就是17和3,然后发送者选择一个私有的随机数,比如15,计算315 mod 17(结果为6),然后公开将此结果发送给接收者,之后接收者选择自己的私有随机数,比如13,计算313mod 17(结果为12),然后公开将此结果发送给对方。
关键在于,将接收者的公开结果,取她的私有数字次方,以获得共享密钥,这里是10,接收者将发送者的公开结果,取她的私有数字次方,结果得到相同的共享密钥,可能大家还不好理解,但他们实际上进行了相同的运算。
考虑发送者,她从接收者接收到的是12,来自313 mod 17,所以她的计算实际上是3∧13∧15 mod 17,而接收者,他从发送者那里接收6,来自315mod17,所以他的计算实际上是3∧15∧13mod17,两种计算结果是相同的,只是指数的顺序不同,调换指数顺序,结果不会改变,他们的结果都是,3取两人私有数字次幂,没有这些私有数字,15或13,第三方将无法求出结果。
第三方会被困在离散对数问题之中,数字足够大时,实践中,她在合理时限内,几乎不可能破解,这就解决了交换密钥的问题,这可以同伪随机数生成器结合使用,为从未谋面的人提供通信加密。
现在区块链常用的算法,如sha256,都是继承单向函数的设计思维,一个方向计算容易,反过来几乎不能破解,来保证安全。
1983年 - David Chaum描述的盲签
1997年 - Adam Back发明的HashCash(工作证明制度的一个例子)
2001年 - Ron Rivest,Adi Shamir和Yael Tauman向加密社区提出了环签名
2004年 - Patrick P. Tsang和Victor K.提出使用环签名系统进行投票和电子现金;
2008年 - 由Satoshi Nakamoto出版的Bitcoin白皮书
2011年 - 比特币系统中的匿名分析,Fergal Reid和Martin Harrigan
2012 - 目的地址比特币匿名(CryptoNote中的一次性地址)。
安全多方计算起源于1982年姚期智的百万富翁问题。后来Oded Goldreich有比较细致系统的论述。
姚氏百万富翁问题是由华裔计算机科学家、图灵奖获得者姚启智教授首先提出的。该问题表述为:两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方知道自己财富的任何信息。该问题有一些实际应用:假设Alice希望向Bob购买一些商品,但她愿意支付的最高金额为x元;Bob希望的最低卖出价为y元。Alice和Bob都非常希望知道x与y哪个大。如果xy,他们都可以开始讨价还价;如果zy,他们就不用浪费口舌。但他们都不想告诉对方自己的出价,以免自己在讨价还价中处于不利地位。
该方案用于对两个数进行比较,以确定哪一个较大。Alice知道一个整数i;Bob知道一个整数j, Alice与B0b希望知道究竟i=j还是ji,但都不想让对方知道自己的数。为简单起见,假设j与i的范围为[1,100】。Bob有一个公开密钥Eb和私有密钥Db。
安全多方计算(Secure Multi-Party Computation)的研究主要是针对无可信第三方的情况下, 如何安全地计算一个约定函数的问题. 安全多方计算在电子选举、电子投票、电子拍卖、秘密共享、门限签名等场景中有着重要的作用。
同态加密(Homomorphic Encryption)是很久以前密码学界就提出来的一个Open Problem。早在1978年,Ron Rivest, Leonard Adleman, 以及Michael L. Dertouzos就以银行为应用背景提出了这个概念[RAD78]。对,你没有看错,Ron Rivest和Leonard Adleman分别就是著名的RSA算法中的R和A。
什么是同态加密?提出第一个构造出全同态加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry给出的直观定义最好:A way to delegate processing of your data, without giving away access to it.
这是什么意思呢?一般的加密方案关注的都是数据存储安全。即,我要给其他人发个加密的东西,或者要在计算机或者其他服务器上存一个东西,我要对数据进行加密后在发送或者存储。没有密钥的用户,不可能从加密结果中得到有关原始数据的任何信息。只有拥有密钥的用户才能够正确解密,得到原始的内容。我们注意到,这个过程中用户是不能对加密结果做任何操作的,只能进行存储、传输。对加密结果做任何操作,都将会导致错误的解密,甚至解密失败。
同态加密方案最有趣的地方在于,其关注的是数据处理安全。同态加密提供了一种对加密数据进行处理的功能。也就是说,其他人可以对加密数据进行处理,但是处理过程不会泄露任何原始内容。同时,拥有密钥的用户对处理过的数据进行解密后,得到的正好是处理后的结果。
有点抽象?我们举个实际生活中的例子。有个叫Alice的用户买到了一大块金子,她想让工人把这块金子打造成一个项链。但是工人在打造的过程中有可能会偷金子啊,毕竟就是一克金子也值很多钱的说… 因此能不能有一种方法,让工人可以对金块进行加工(delegate processing of your data),但是不能得到任何金子(without giving away access to it)?当然有办法啦,Alice可以这么做:Alice将金子锁在一个密闭的盒子里面,这个盒子安装了一个手套。工人可以带着这个手套,对盒子内部的金子进行处理。但是盒子是锁着的,所以工人不仅拿不到金块,连处理过程中掉下的任何金子都拿不到。加工完成后。Alice拿回这个盒子,把锁打开,就得到了金子。
这里面的对应关系是:盒子:加密算法盒子上的锁:用户密钥将金块放在盒子里面并且用锁锁上:将数据用同态加密方案进行加密加工:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理开锁:对结果进行解密,直接得到处理后的结果同态加密哪里能用?这几年不是提了个云计算的概念嘛。同态加密几乎就是为云计算而量身打造的!我们考虑下面的情景:一个用户想要处理一个数据,但是他的计算机计算能力较弱。这个用户可以使用云计算的概念,让云来帮助他进行处理而得到结果。但是如果直接将数据交给云,无法保证安全性啊!于是,他可以使用同态加密,然后让云来对加密数据进行直接处理,并将处理结果返回给他。这样一来:用户向云服务商付款,得到了处理的结果;云服务商挣到了费用,并在不知道用户数据的前提下正确处理了数据;
聚合签名由Boneh等人提出,主要是通过聚合多个签名为一个签名,来提高签名与验证的效率。要对多个用户的数据进行签名,聚合签名能够极大地降低签名计算复杂度。CL就是聚合签名。
零知识证明过程有两个参与方,一方叫证明者,一方叫验证者。证明者掌握着某个秘密,他想让验证者相信他掌握着秘密,但是又不想泄漏这个秘密给验证者。
双方按照一个协议,通过一系列交互,最终验证者会得出一个明确的结论,证明者是或不掌握这个秘密。
对于比特币的例子,一笔转帐交易合法与否,其实只要证明三件事:
发送的钱属于发送交易的人
发送者发送的金额等于接收者收到金额
发送者的钱确实被销毁了
整个证明过程中,矿工其实并不关心具体花掉了多少钱,发送者具体是谁,接受者具体是谁。矿工只关心系统的钱是不是守恒的。
zcash 就是用这个思路实现了隐私交易。
零知识证明的三条性质对应:
(1)完备性。如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。
(2)合理性。没有人能够假冒证明方,使这个证明成功。
(3)零知识性。证明过程执行完之后,验证方只获得了“证明方拥有这个知识”这条信息,而没有获得关于这个知识本身的任何一点信息。
只有环成员,没有管理者,不需要环成员之间的合作,签名者利用自己的私钥和集合中其他成员的公钥就能独立的进行签名,不需要其他人的帮助,集合中的其他成员可能不知道自己被包含在了其中。
环签名可以被用作成一种泄露秘密的方式,例如,可以使用环形签名来提供来自“白宫高级官员”的匿名签名,而不会透露哪个官员签署了该消息。 环签名适用于此应用程序,因为环签名的匿名性不能被撤销,并且因为用于环签名的组可以被即兴创建。
1)密钥生成。为环中每个成员产生一个密钥对(公钥PKi,私钥SKi)
2)签名。签名者用自己的私钥和任意n个环成员的公钥为消息m生成签名a
3)签名验证。签名者根据环签名和消息m,验证签名是否是环中成员所签。如果有效就接收,如果无效就丢弃。
群签名的一般流程
盲数字签名(Blind Signature)简称盲签名——是一种数字签名的方式,在消息内容被签名之前,对于签名者来说消息内容是不可见的。1982年大卫·乔姆首先提出了盲签名的概念。盲签名因为具有盲性这一特点,可以有效保护所签署消息的具体内容,所以在电子商务和电子选举等领域有着广泛的应用。
类比例子:对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
所谓盲签名,就是先将隐蔽的文件放进信封里,而除去盲因子的过程就是打开这个信封,当文件在一个信封中时,任何人不能读它。对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
一般来说,一个好的盲签名应该具有以下的性质:
不可伪造性。除了签名者本人外,任何人都不能以他的名义生成有效的盲签名。这是一条最基本的性质。
不可抵赖性。签名者一旦签署了某个消息,他无法否认自己对消息的签名。
盲性。签名者虽然对某个消息进行了签名,但他不可能得到消息的具体内容。
不可跟踪性。一旦消息的签名公开后,签名者不能确定自己何时签署的这条消息。
满足上面几条性质的盲签名,被认为是安全的。这四条性质既是我们设计盲签名所应遵循的标准,又是我们判断盲签名性能优劣的根据。
另外,方案的可操作性和实现的效率也是我们设计盲签名时必须考虑的重要
因素。一个盲签名的可操作性和实现速度取决于以下几个方面:
1,密钥的长度;
2,盲签名的长度;
3,盲签名的算法和验证算法。
盲签名具体步骤
1,接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。
2,经签名者签名后再发给接收者。
3,接收者对签名再作去盲变换,得出的便是签名者对原数据的盲签名。
4,这样便满足了条件①。要满足条件②,必须使签名者事后看到盲签名时不能与盲数据联系起来,这通常是依靠某种协议来实现的。
本文介绍一种利用区块链技术配合个人存储设备进行网络安全验证的方法
以微嘟为代表的不记密码快捷加密存储设备,已经完美做到了快捷安全存储,但美中不足的是无法通过网络查询设备何时被使用,以及无法预知极端情况下设备被离线破解等。
利用区块链技术可以解决此问题,具体工作原理:
在设备连接PC端,并检测到射频ID验证通过后,接入设备内的特定硬件,此时自动通过安装在PC端的程序向特定的区块链网络上广播设备打开时间的等信息。在得到区块链网络确认后,才授权设备后级存储用户重要数据的存储颗粒接入。因为每次设备打开都需要网络授权及相关的信息都存储在区块链网络上了,所以有效的避免了不明目的的人在用户不知情的情况下偷偷地打开设备。
多了一层区块链的网络验证是不是发现设备的安全性提高了好多?
下面以微嘟链安全验证为示意:
1、区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了过去十分钟内所有比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。是比特币的底层技术,像一个数据库账本,记载所有的交易记录。
2、广义定义:利用加密链式结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(智能合约)来变成和操作数据的一种全新的去中心化基础架构与分布式计算范式。
3、狭义定义:按照时间顺序将数据区块以链条的方式组合成特定数据结构,并以密码学方式保证的不可篡改和不可伪造的去中心化共享账户。
4、区块链的特点:去中心化:区块链数据的验证、记账、存储、维护和传输等过程均是基于分布式系统机构,采用纯数学方法而不是中心结构来建立分布式节点间的信任关系,从而形成去中心化的可信任的分布式系统。
5、时序数据:区块链采用带有时间戳的链式区块结构存储数据,从而为数据增加了时间维度,具有极强的可验证性和可追溯性。
6、集体维护:区块链系统采用特定的经济激励机制来保证分布式系统中所以节点均可参与数据区块的验证过程,并通过共识算法来选择特定的节点将新区快添加到区块链。
7、可编程:区块链技术提供灵活的脚本代码系统,支持用户创建高级的智能合约、货币或其他去中心化应用。
8、安全可信:区块链技术采用非对称密码原理对数据进行加密,同时借助分布式系统各节点的工作量证明等共识算法形成的强大算力来抵御外部攻击、保证区块链数据不可篡改和不可伪造,因而具有较高的安全性。
9、区块链应用场景:数字货币:以比特币为代表,本质上是由分布式网络系统生成的数字货币,其发行过程不依赖特定的中心化机构。