网站建设邀请招标书,wordpress获得链接地址,网站开发的三个流程,商城网站模块区块链的定义
区块链的定义#xff0c;应当是#xff1a;区块链是一种按照时间顺序将数据进行分布式存储的块链式数据结构#xff0c;它利用共识机制进行数据验证#xff0c;利用密码学进行数据保护和用户安全访问#xff0c;利用智能合约来操作数据#xff0c;从而成为…区块链的定义
区块链的定义应当是区块链是一种按照时间顺序将数据进行分布式存储的块链式数据结构它利用共识机制进行数据验证利用密码学进行数据保护和用户安全访问利用智能合约来操作数据从而成为不可篡改和不可伪造的分布式账本。所以分布式存储、共识机制、密码学原理和智能合约构成区块链的核心技术内容。
区块链和密码学之间的关系
区块链和密码学是相互促进发展的一个过程区块链中大量使用了密码学的知识同样的为了满足区块链的不同场景也反向促进了密码学的进一步发展。
引言
本篇会讲述密码学在区块链中的具体的使用从而理解为什么区块链可以防止消息被篡改、怎么进行数字身份认证。比特币中是如何通过多重签名实现多个人共同管理某个账户的比特币交易。密码学分类
古典密码学主要关注信息的保密书写和传递以及与其相对应的破译方法。现代密码学不只关注信息保密问题还同时涉及信息完整性验证消息验证码、信息发布的不可抵赖性数字签名、以及在分布式计算中产生的来源于内部和外部的攻击的所有信息安全问题。总而言之现代密码学是互联网安全的基石。
密码学知识
Hash函数
在有限合理的时间内将任意长度的消息压缩为固定长度的输出值并且是不可逆的。其输出值称为哈希值也称为散列值。Hash函数常用于实现数据完整性和实体认证同时也构成多种密码体制和协议的安全保障
哈希函数的评价标准
正向快速给定明文和Hash算法在有限时间和有限资源内能计算得到Hash值逆向困难给定若干Hash值在有限时间内很难基本不可能逆推出明文输入敏感原始输入信息发生任何改变新产生的Hash值都应该出现很大不同冲突避免很难找到两段内容不同的明文使得它们的Hash值一致发生碰撞。
例子
如果对于先前的输入做一点点的更改输出的结果也会发生变化碰撞
碰撞是指两个不同的消息在同一个哈希函数作用下具有相同的哈希值。哈希函数的安全性是指在现有的计算资源包括时间、空间、资金等下找到一个碰撞是不可行的。冲突避免有时候又称为“抗碰撞性”分为“弱抗碰撞性”和“强抗碰撞性”。如果给定明文前提下无法找到与之碰撞的其他明文则算法具有“弱抗碰撞性”如果无法找到任意两个发生Hash碰撞的明文则称算法具有“强抗碰撞性”。
哈希函数的种类
目前常见的Hash算法包括MD和SHA系列算法。具体分类如下MD4RFC 1320是MIT的Ronald L.Rivest在1990年设计的MD是Message Digest的缩写。其输出为128位。MD4已被证明不够安全。MD5RFC 1321是Rivest于1991年对MD4的改进版本。它对输入仍以512位进行分组其输出是128位。MD5比MD4更加安全但过程更加复杂计算速度要慢一点。MD5已被证明不具备“强抗碰撞性”。SHASecure Hash Algorithm并非一个算法而是一个Hash函数族。NISTNational Institute of Standards and Technology于1993年发布其首个实现。 目前知名的SHA-1算法在1995年面世它的输出为长度160位的Hash值抗穷举性更好。SHA-1设计时模仿了MD4算法采用了类似原理。SHA-1已被证明不具备“强抗碰撞性”。 NIST还设计出了SHA-224、SHA-256、SHA-384和SHA-512算法统称为SHA-2跟SHA-1算法原理类似。 SHA-3相关算法也已被提出.目前MD5和SHA1已经被破解一般推荐至少使用SHA2-256或更安全的算法。
Hash函数在区块链中的应用
SHA256和RIPEMD160RIPEMD160主要用于生成比特币地址。SHA256是构造区块链所用的主要密码哈希函数。在HyperLedger-Fabric区块链平台中Hash函数主要用于检测数据未经授权的修改签名者的身份识别和抗抵赖。
加密解密算法
加解密算法是密码学的核心技术。
分类 组成
现代加解密系统的典型组件一般包括加解密算法、加密密钥、解密密钥。在加解密系统中加解密算法自身是固定不变的并且一般是公开可见的密钥则是最关键的信息需要安全地保存起来甚至通过特殊硬件进行保护。一般来说对同一种算法密钥需要按照特定算法每次加密前随机生成长度越长则加密强度越大。加解密的基本过程如下图所示加密过程中通过加密算法和加密密钥对明文进行加密获得密文。解密过程中通过解密算法和解密密钥对密文进行解密获得明文。根据加解密过程中所使用的密钥是否相同算法可以分为对称加密symmetric cryptography又称公共密钥加密common-key cryptography和非对称加密asymmetric cryptography又称公钥加密public-key cryptography。两种模式适用于不同的需求恰好形成互补。某些时候可以组合使用形成混合加密机制比如数字信封。
安全技术
消息认证码与数字签名
消息认证码和数字签名技术通过对消息的摘要进行加密可用于消息防篡改和身份证明问题。
关于消息验证码
消息认证码全称是“基于Hash的消息认证码”Hash-based Message Authentication CodeHMAC。
消息验证码基于对称加密可以用于对消息完整性integrity进行保护。基本过程为对某个消息利用提前共享的对称密钥和Hash算法进行加密处理得到HMAC值。该HMAC值持有方可以证明自己拥有共享的对称密钥并且也可以利用HMAC确保消息内容未被篡改。一般用于证明身份的场景 如Alice、Bob提前共享和HMCA的密钥和Hash算法Alice需要知晓对方是否为Bob可发送随机消息给Bob。Bob收到消息后进行计算把消息HMAC值返回给AliceAlice通过检验收到HMAC值的正确性可以知晓对方是否是Bob。注意这里并没有考虑中间人攻击的情况假定信道是安全的。关于数字签名
数字签名基于非对称加密既可以用于证实某数字内容的完整性又同时可以确认来源或不可抵赖Non-Repudiation。
数字签名的全过程分两大部分即签名与验证。一侧为签名一侧为验证过程。签名过程发方将原文用哈希算法求得数字摘要用签名私钥对数字摘要加密得数字签名发方将原文与数字签名一起发送给接受方。 (Q: 为什么要将原文进行数字摘要之后利用私钥和摘要对原文进行签名而不是直接用对原文进行签名A原因有二 一是因为非对称加密算法的加密速度远小于对称加密速度。直接对原文进行签名消耗较大而是因为非对称加密对加密信息的长度有着严格的要求只能用于少量数据的加密。比如RSA加密算法要求加密的数据不得大于53个字节。 )验证过程 收方验证签名即用发方公钥解密数字签名得出数字摘要收方将原文采用同样哈希算法又得一新的数字摘要将两个数字摘要进行比较如果二者匹配说明经数字签名的电子文件传输成功。用于防止消息篡改的场景 Alice通过信道发给Bob一个文件一份信息Bob如何获知所收到的文件即为Alice发出的原始版本 Alice可以先对文件内容进行摘要然后用自己的私钥对摘要进行加密签名之后同时将文件和签名都发给Bob。 Bob收到文件和签名后用Alice的公钥来解密签名得到数字摘要与收到文件进行摘要后的结果进行比对。 如果一致说明该文件确实是Alice发过来的别人无法拥有Alice的私钥并且文件内容没有被修改过摘要结果一致数字签名的目的
数字签名可以证实某数字内容的完整性和确认其来源也就是不可抵赖性。理论上所有的非对称加密算法都可以用来实现数字签名常用算法包括 DSADigital Signature Algorithm基于 ElGamal 算法和 ECSDAElliptic Curve Digital Signature Algorithm基于椭圆曲线算法等。
数字签名与消息验证码的区别
消息验证码是基于对称加密可以用于对消息完整性integrity进行保护。通信双方需要提前共享的对称密钥和Hash算法。数字签名是基于非对称加密MAC不仅能够保证完整性还能够保证真实性。双方不需要共享密钥私钥仅仅需要被一方掌握。
特殊的数字签名算法
盲签名
签名者需要在无法看到原始内容的前提下对信息进行签名。实现对所签名内容的保护防止签名者看到原始内容同时实现防止追踪签名者无法将签名内容和签名结果进行对应。
多重签名
当 x 个签名者中收集到至少 y 个x y 1的签名即认为合法。x 是提供的公钥个数y 是需要匹配公钥的最少的签名个数。它可以有效地被应用在多人投票共同决策的场景中。比特币交易中就支持多重签名可以实现多个人共同管理某个账户的比特币交易。
群签名
群组内某一个成员可以代表群组进行匿名签名。签名可以验证来自于该群组却无法准确追踪到签名的是哪个成员。同样存在一些问题就是群签名需要存在一个群管理员来添加新的群成员因此存在群管理员可能追踪到签名成员身份的风险。
环签名
签名者首先选定一个包括签名者自身的临时签名者集合。用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名而无需他人的帮助。签名者集合中的其他成员可能并不知道自己被包含在最终的签名中。环签名的主要用途在保护匿名性属于一种简化的群签名。
数字证书
解决的问题公钥可能被篡改的危机对于非对称加密算法和数字签名来说很重要的一点就是公钥的分发。理论上任何人可以公开获取到对方的公钥。然而这个公钥有没有可能是伪造的呢传输过程中有没有可能被篡改掉呢一旦公钥自身出了问题则整个建立在其上的安全体系的安全性将不复存在。数字证书机制正是为了解决这个问题它就像日常生活中的一个证书一样可以证明所记录信息的合法性。比如证明某个公钥是某个实体如组织或个人的并且确保一旦内容被篡改就能被探测出来从而实现对用户公钥的安全分发。
分类
加密数字证书用于保护用于加密信息的公钥。签名验证数字证书进行解密签名进行身份验证的公钥。两种类型的公钥也可以同时放在同一证书中。同时证书需要由证书认证机构CA来进行签发和背书。权威的商业证书认证机构包括 DigiCert、GlobalSign等。用户也可以自行搭建CA 系统在私有网络中进行使用。证书作为公钥信任的基础。怎么用证书来实现公钥的安全分发呢在HyperLedger-Fabric中使用的是PKI体系来保证的。一个数字证书内容可能包括证书域证书的版本、序列号、签名算法类型、签发者信息、有效期、被签发主体、签发的公开密钥、CA 对证书的签名算法和签名值等。证书的颁发者还需要对证书内容利用自己的私钥进行签名以防止他人篡改证书内容。
PKI体系 在非对称加密中公钥可以通过证书机制来进行保护但证书的生成、分发、撤销等过程并没有在X.509规范中进行定义。在实际工程中安全地管理和分发证书可以遵循PKIPublic Key Infrastructure体系来完成。PKI体系核心解决的是证书生命周期相关的认证和管理问题在现代密码学应用领域处于十分基础和重要的地位。在HyperLedger-Fabric区块链系统中就是用PKI体系来对证书进行管理的。 PKI的全称是Public Key Infrastructure公钥基础设施是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架。包含3个核心组件
CA全称Certification Authority负责证书的颁发和吊销接收来自 RA 的请求。RA全称Registration Authority对用户身份进行验证校验数据合法性负责登记审核过了就发给 CA证书数据库存放证书多采用 X.500 系列标准格式。可以配合LDAP 目录服务管理用户信息。
CA 是最核心的组件负责完成对证书信息的维护。通常的操作流程为用户通过 RA 登记申请证书提供身份和认证信息等 → CA 审核后完成证书的制造颁发给用户 → 用户如果需要撤销证书则需要再次向 CA 发出申请。
证书的签发
CA对用户签发证书实际上是对某个用户公钥使用CA的私钥对其进行签名。这样任何人都可以用CA的公钥对该证书进行合法性验证。验证成功则认可该证书中所提供的用户公钥内容实现用户公钥的安全分发。用户证书的签发可以有两种方式
1一种是由CA直接来生成证书内含公钥和对应的私钥发给用户 2另一种是由用户自己生成公钥和私钥然后由CA来对公钥内容进行签名。后者情况下用户一般会首先自行生成一个私钥和证书申请文件Certificate Signing Request即csr文件该文件中包括了用户对应的公钥和一些基本信息如通用名common name即cn、组织信息、地理位置等。CA只需要对证书请求文件进行签名生成证书文件颁发给用户即可。整个过程中用户可以保持私钥信息的私密性不会被其他方获知包括CA方。
证书的撤销
证书超出有效期后会作废用户也可以主动向CA申请撤销某证书文件。由于CA无法强制收回已经颁发出去的数字证书因此为了实现证书的作废往往还需要维护一个撤销证书列表Certificate Revocation ListCRL用于记录已经撤销的证书序号。因此通常情况下当第三方对某个证书进行验证时需要首先检查该证书是否在撤销列表中。如果存在则该证书无法通过验证。如果不在则继续进行后续的证书验证过程。Merkle树结构
Merkle默克尔树又叫哈希树是一种典型的二叉树结构由一个根节点、一组中间节点和一组叶节点组成。在区块链系统出现之前广泛用于文件系统和P2P系统中。其基本结构如下图所示 其主要特点为
· 最下面的叶节点包含存储数据或其哈希值· 非叶子节点包括中间节点和根节点都是它的两个孩子节点内容的哈希值。进一步地默克尔树可以推广到多叉树的情形此时非叶子节点的内容为它所有的孩子节点内容的哈希值。默克尔树逐层记录哈希值的特点让它具有了一些独特的性质。例如底层数据的任何变动都会传递到其父节点一层层沿着路径一直到树根。这意味树根的值实际上代表了对底层所有数据的“数字摘要”。
Merkle树应用场景
1.快速比较大量数据
对每组数据排序后构建默克尔树结构。当两个默克尔树根相同时则意味着两组数据必然相同。否则必然存在不同。由于Hash计算的过程可以十分快速预处理可以在短时间内完成。利用默克尔树结构能带来巨大的比较性能优势。
2.快速定位修改
例如上图Merkle树结构图中。如果D1中数据被修改会影响到N1、N4和Root。因此一旦发现某个节点如Root的数值发生变化沿着Root→N4→N1最多通过Olgn时间即可快速定位到实际发生改变的数据块D1。布隆过滤器
布隆过滤器是一种基于 Hash 的高效查找结构能够快速判断某个元素是否在一个集合内。首先回顾一下基于Hash的快速查找由于Hash算法具有一一对应的特点即一个内容对应一个Hash值而Hash值最终是可以转化为二进制编码这就天然的构成了一个 “ 内容 - 索引 ” 的一个结构。假如给定一个内容和存储数组通过构造Hash函数使Hash值总量不超过数组的大小就可以实现快速的基于内容的查找。如 “孤独寂寞冷” 的 Hash 值如果是 “1000”则存放到数组的第 1000 个单元上去。如果需要快速查找任意内容如 “孤独寂寞冷” 字符串是否在存储系统中只需要计算 Hash 值并用 Hash 值查看系统中对应元素即可。布隆过滤器采用了多个 Hash 函数来提高空间利用率。对同一个给定输入来说多个 Hash 函数计算出多个地址分别在对应的这些地址上标记为 1。进行查找时进行同样的计算过程并查看对应元素如果都为 1则说明较大概率是存在该输入。布隆过滤器相对单个 Hash 算法查找大大提高了空间利用率可以使用较少的空间来表示较大集合的存在关系。上面讲的Hash查找和布隆过滤器基本思想都是基于内容的编址。下图是一个布隆过滤器的示意图布隆过滤器Bloom Filter的核心实现是一个超大的位数组和几个哈希函数。假设位数组的长度为m哈希函数的个数为k以上图为例具体的操作流程
假设集合里面有3个元素{x, y, z}哈希函数的个数为3。首先将位数组进行初始化将里面每个位都设置位0。 对于集合里面的每一个元素将元素依次通过3个哈希函数进行映射每次映射都会产生一个哈希值这个值对应位数组上面的一个点然后将位数组对应的位置标记为1。 查询W元素是否存在集合中的时候同样的方法将W通过哈希映射到位数组上的3个点。如果3个点的其中有一个点不为1则可以判断该元素一定不存在集合中。反之如果3个点都为1则该元素可能存在集合中。 可以从图中可以看到假设某个元素通过映射对应下标为456这3个点。虽然这3个点都为1但是很明显这3个点是不同元素经过哈希得到的位置因此这种情况说明元素虽然不在集合中也可能对应的都是1这是误判率存在的原因。布隆过滤器因为其高效性大量应用于网络和安全领域例如信息检索BigTable和HBase、垃圾邮件规则、注册管理等。
同态加密 介绍
同态加密是一种加密形式它允许人们对密文进行特定的代数运算得到仍然是加密的结果将运算后的数据进行解密其解密所得到的结果与对明文进行同样的运算结果一样。传统的加密方案关注的都是数据存储安全。即发送者要给接收者发送加密的东西需要对数据进行加密后再发送。没有密钥的接收者不可能从加密结果中得到有关原始数据的任何信息。只有拥有密钥的接收者才能够正确解密得到原始的内容。需要注意到这个过程中用户是不能对加密结果做任何操作的只能进行存储、传输。对加密结果做任何操作都将会导致错误的解密甚至解密失败同态加密提供了一种对加密数据进行处理的功能。也就是说其他人可以对加密数据进行处理但是处理过程不会泄露任何原始内容。同时拥有密钥的用户对处理过的数据进行解密后得到的正好是处理后的结果。区块链中的应用使用同态加密技术运行在区块链上的智能合约可以处理密文而无法获知真实数据极大的提高了隐私安全性。
例子
A和B两个用户。A需要把自己的数据给B处理。 有两种方式 方式一A把自己的数据进行加密发送给B。B将数据解密后对数据进行处理然后得到目标结果Result。最后把处理后的结果发送给A。 方式二 A把自己的数据进行加密发送给B。B直接对加密的数据进行处理然后得到处理的结果Result*.A收到Result*之后通过私钥解密Result*最终得到Result。方式二用到的方法就是同态加密。 在方式二的方式中B完成了对A数据的处理目的并且保证了A用户的隐私补充
什么是同态呢它来自代数领域包括四种类型加法同态、乘法同态、减法同态和除法同态。同时满足加法同态和乘法同态则意味着是代数同态即全同态。同时满足四种同态性则被称为算数同态。在计算机中如果实现了全同态意味着对于所有处理都可以实现同态性。只能实现部分特定操作的同态性被称为特定同态。
意义
换言之这项技术令人们可以在加密的数据中进行诸如检索、比较等操作得出正确的结果而在整个处理过程中无需对数据进行解密。其意义在于真正从根本上解决将数据及其操作委托给第三方时的保密问题例如云计算。
问题
虽然同态加密的优势很明显并且已经实现但是存在的问题就是需要较高的计算时间或存储成本相比传统加密算法的性能和强度还有差距。困难与机会同在。参考链接
密码学在区块链中的应用区块链中的密码学与安全技术