大数据的传统的防篡改机制
一般的防篡改机制是基于加密算法的。选择密文安全(chosen ciphertext security,即CCA-security)是公钥密码中很强的安全性概念,这个概念对存在主动攻击的许多加密应用中都是充分的。构造CCA安全的公钥密码体制具有重要的意义,如Bellare和Rogaway提出的OAEP体制就成为SET协议的加密标准。
长期以来,只有很少的加密方案能在标准模型中被证明是抗选择密文攻击的,而实用的方案更少。第一个实用的方案由Cramer和Shoup 1998年提出,他们后来把该方案的构造推广成平滑hash证明系统(Smooth Hash Proof Systems,SHPS)。长期以来,利用SHPS是构造标准模型中实际可行的CCA方案的唯一方法。2004年,Canetti, Halevi和Katz提出将任意Selective-ID 安全的基于身份的加密(IBE)方案转化成CCA安全公钥加密方案的一般方法。为了加密m,加密者利用接受者的公钥PK,产生一次性签名密钥对(vk,sk)将密文(vk,Enc(vk,m),σ)发送到接受者,其中Enc(vk,m)可以看做是对m以PK为主公开参数和vk为身份的加密,σ表示以用私钥SK对前两个部分密文的签名,解密时,先验证签名的合法性,若合法,再利用主密钥提取身份vk的私钥d,并用d进行解密。可以看出,该方案相应于原来的IBE方案由明显的通信和计算负荷,因为加密时要产生一次性签名的密钥对,以及利用所产生的私钥对IBE的密文进行签名,解密时还要先验证签名的合法性,再解密。
waters方案是Adaptive-ID安全的,即攻击者可以是适应性地选择身份攻击,但Canetti , Halevi和Katz转化的是Selective-ID 安全的,即攻击者在只能非适应性地选择身份(所攻击的身份在参数产生前就已决定)攻击。
选择密文安全(chosen ciphertext security,即CCA-security):
(1)挑战者执行参数产生算法和密钥产生算法,并将公共参数Param和加密公钥PK给攻击者A;
(2)攻击者A用若干个密文询问解密预言机,挑战者challenge按照解密算法进行解密,并将解密结果给攻击者A;
(3)攻击者A选出两个等长消息m0和m1,challenge随机地选取一个比特值γ,并对mγ进行加密形成挑战密文C=E(mγ)给攻击者;
(4)攻击者A可以继续选择密文询问解密预言机,唯一的限制是不能用挑战密文C本事进行询问;
(5)最后攻击者输出一个猜测γ'。当γ'=γ时,攻击者A成功。
区块链技术的特点优势
2017年最火的是什么?大家一定会说是区块链。在这之前,先给大家介绍下比特币系统的账户模型;在比特币里,它是没有用户资产记录这样的概念,不会像在mysql里那样,用一条数据存储记录表达;它的资产,是通过把所有的交易记录串联聚合之后,得到的;而且,区块链系统明确表达了,账户里的资产来源,你可以一直向上追溯,一直追到创世块,也就是挖矿时的所得。
例如,你收到了小张50元的转账;小张转给你的50元里,有20元是来自小李的,30元是来自小王的,小李的20元有3元是来自小刘的,17元是来自小孟的……,这个资金的流动传递会在链上完整的表达出来。
下面看下区块链系统是如何做的:
所谓资金流转就是一次交易,因此比特币系统,设计了一个非常核心的数据结构,大家看下下面这张截图:
图一
MsgTx就是表达一次交易,这个交易结构体里,有个切片字段TxIn,完整的定义是紧挨着MsgTx的下一个结构体。这个结构体里,有个PreviousOutPoint,它表示的意思,就是这笔输入的来源地址;这样一笔交易信息,会先封到一个block结构体里,然后经过验证存到数据库里;前一个交易记录里,同样也会有一个PreviousOutPoint继续向前指;这样是不是就比较清楚每笔资金的具体从哪里来的了,如果你比较感兴趣,可以在数据库里一直向上追溯,直到创世块;
下面来看下防篡改;就以上面小张账户的50元说起;在这里要把P2P网络提一下,这是区块链的运转起来的基础;区块链系统是一个完全松散自治的P2P网络,这个网络,每时每刻都会有节点加入,有节点离开;而且没有中心节点来管理,每一个节点都靠算法来维护自身的数据块信息;
现在来看小张的账户;如果小张想把自己的50元账户,改成50万;他要做的第一件事情是控制全网51%以上的节点,这个从概率上来推算基本是不可能的,可以认为失败是必然的(概率上的极大似然估计法);假设一个人的运气非常好,他真的控制了全网51%的节点;下面有另外一个更严峻的挑战:拿到用户的私钥;上面我们说了,小张要把这50改成50万,需要把小张之前的小李的,小王的,小刘的,小孟的…总之和这50元相关的所有的人的私钥都窃取到,然后把数据篡改掉,才能骗过区块链系统;
这里面有两个问题:1 为什么需要改这么多人的数据?这是由于,前面说了,区块链系统会记录每笔自己的详细来源,在交易验证的时候,发现数据不对,会不断向前回溯验证的; 2 为什么要私钥?这个我们需要配合交易的数据结构来说,还是看下面这张图的最后一个数据结构TxOut
图二
该数据结构表示,用户的交易输出,例如小张50元的来源是小李的20,小王的30,那这20和30分别对应的是小李的交易输出;大家注意了,这个TxOut里有个PkScript字段,专业的说法是锁定脚本;意思是,如果想花掉这笔钱,或者动这笔钱,需要有相应的解锁脚本和锁定脚本做匹配;否则就会失败,就会被系统发现;这个锁定脚本,通常是用户的公钥,解锁脚本是用户的私钥;简单理解,就是非对称加密验证的意思;所以说,如果用户想篡改资金额度,不仅要控制全网51%以上的节点,还要窃取很多相关人的密钥,其难度可想而知。