查看原文
其他

布隆过滤器、同态加密、PKI体系……一文告诉你密码学在区块链中能做什么!

CSDN App 区块链大本营 2019-10-30
来源 | CSDN博客
作者 | 孙启超

整理 | Carol

出品 | 区块链大本营(blockchain_camp)



密码学是区块链技术的核心。所有交易信息都被编码进区块当中,而这些区块连接在一起则形成区块链结构。

随着计算机时代的到来,密码学跃升到了一个新的高度。那么,密码学在区块链当中又能做些什么、发挥什么作用呢?今天我们就来聊一聊这个话题。


本篇会讲述密码学在区块链中的具体的使用,从而理解为什么区块链可以防止消息被篡改、怎么进行数字身份认证。比特币中是如何通过多重签名实现多个人共同管理某个账户的比特币交易。


 
布隆过滤器


布隆过滤器是一种基于 Hash 的高效查找结构,能够快速判断某个元素是否在一个集合内。


首先回顾一下基于Hash的快速查找,由于Hash算法具有一一对应的特点,即一个内容对应一个Hash值,而Hash值最终是可以转化为二进制编码,这就天然的构成了一个 “ 内容 - 索引 ” 的一个结构。


假如给定一个内容和存储数组,通过构造Hash函数,使Hash值总量不超过数组的大小,就可以实现快速的基于内容的查找。如 “算法改变人生” 的 Hash 值如果是 “1000”,则存放到数组的第 1000 个单元上去。如果需要快速查找任意内容,如 “算法改变人生” 字符串是否在存储系统中,只需要计算 Hash 值,并用 Hash 值查看系统中对应元素即可。


布隆过滤器采用了多个 Hash 函数来提高空间利用率。对同一个给定输入来说,多个 Hash 函数计算出多个地址,分别在对应的这些地址上标记为 1。进行查找时,进行同样的计算过程,并查看对应元素,如果都为 1,则说明较大概率是存在该输入。


布隆过滤器相对单个 Hash 算法查找,大大提高了空间利用率,可以使用较少的空间来表示较大集合的存在关系。上面讲的Hash查找和布隆过滤器,基本思想都是基于内容的编址。


布隆过滤器示例图(仅供参考)

 

同态加密


同态加密可以对密文直接进行处理,跟对明文进行处理后再对处理结果加密,得到的结果相同。同态加密可以保证实现处理者无法访问到数据自身的信息。


什么是同态呢?它来自代数领域,包括四种类型:加法同态、乘法同态、减法同态和除法同态。同时满足加法同态和乘法同态,则意味着是代数同态,即全同态。同时满足四种同态性,则被称为算数同态。


在计算机中如果实现了全同态意味着对于所有处理都可以实现同态性。只能实现部分特定操作的同态性,被称为特定同态。


区块链中的应用:使用同态加密技术,运行在区块链上的智能合约可以处理密文,而无法获知真实数据,极大的提高了隐私安全性。


虽然同态加密的优势很明显,并且已经实现,但是存在的问题就是需要较高的计算时间或存储成本,相比传统加密算法的性能和强度还有差距。所以困难与机会同在,谁解决了这些困难,谁就把握住了这个机会。

同态加密示例图(仅供参考)



数字签名


数字签名可以证实某数字内容的完整性和确认其来源,也就是不可抵赖性。理论上所有的非对称加密算法都可以用来实现数字签名,常用算法包括 DSA(Digital Signature Algorithm,基于 ElGamal 算法)和 ECSDA(Elliptic Curve Digital Signature Algorithm,基于椭圆曲线算法)等。针对一些特定的安全需求,产生了一些特殊数字签名技术:


盲签名:签名者需要在无法看到原始内容的前提下对信息进行签名。实现对所签名内容的保护,防止签名者看到原始内容;同时实现防止追踪,签名者无法将签名内容和签名结果进行对应。


多重签名:当 x 个签名者中,收集到至少 y 个(x >= y >= 1)的签名,即认为合法。x 是提供的公钥个数,y 是需要匹配公钥的最少的签名个数。它可以有效地被应用在多人投票共同决策的场景中。比特币交易中就支持多重签名,可以实现多个人共同管理某个账户的比特币交易。


群签名:群组内某一个成员可以代表群组进行匿名签名。签名可以验证来自于该群组,却无法准确追踪到签名的是哪个成员。同样存在一些问题,就是群签名需要存在一个群管理员来添加新的群成员,因此存在群管理员可能追踪到签名成员身份的风险。


环签名:签名者首先选定一个包括签名者自身的临时签名者集合。用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名,而无需他人的帮助。签名者集合中的其他成员可能并不知道自己被包含在最终的签名中。环签名的主要用途在保护匿名性,属于一种简化的群签名。

 


数字证书

数字证书分为两类:

  • 加密数字证书:用于保护用于加密用途的公钥。

  • 签名验证数字证书:保护用于签名用途的公钥。


两种类型的公钥也可以同时放在同一证书中。同时证书需要由证书认证机构CA来进行签发和背书。权威的商业证书认证机构包括 DigiCert、GlobalSign等。用户也可以自行搭建CA 系统,在私有网络中进行使用。


一个数字证书内容可能包括证书域(证书的版本、序列号、签名算法类型、签发者信息、有效期、被签发主体、签发的公开密钥)、CA 对证书的签名算法和签名值等。证书的颁发者还需要对证书内容利用自己的私钥进行签名,以防止他人篡改证书内容。


 

PKI体系


PKI的全称是Public Key Infrastructure公钥基础设施,是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架。包含3个核心组件:


  1. CA:全称Certification Authority,负责证书的颁发和吊销,接收来自 RA 的请求。


  2. RA:全称Registration Authority,对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA;


  3. 证书数据库:存放证书,多采用 X.500 系列标准格式。可以配合LDAP 目录服务管理用户信息。


CA 是最核心的组件,负责完成对证书信息的维护。通常的操作流程为:
用户通过 RA 登记申请证书,提供身份和认证信息等 → CA 审核后完成证书的制造,颁发给用户 → 用户如果需要撤销证书则需要再次向 CA 发出申请。



总结

回顾下本文,我们主要讲解了密码学中的一些核心问题和经典算法。相信读者已经对现代密码学的发展状况和关键技术有了初步了解。


掌握这些知识,对于理解区块链系统如何实现隐私保护和安全防护很有帮助。现代密码学安全技术在设计上基于专业的现代数学知识,如果想深入学习其原理,则需要更深入的学习现代的数学科学,尤其是数论、抽象代数。


区块链和密码学是相互促进发展的一个过程,区块链中大量使用了密码学的知识;同样的,为了满足区块链的不同场景,也反向促进了密码学的进一步发展。


看完本文,你有什么想法?欢迎评论区和我们一起讨论哦!




关于【联盟链】,你了解多少?

市面上不同品牌的联盟链,到底有什么差异?该如何选择?


为了更好地为开发者服务,我们希望倾听大家的声音,了解开发者对于联盟链🔗 的疑虑和意见!


长按下图参与有奖调研  ,还有机会获得CSDN码书商城代金券噢



推荐阅读:


猛戳"阅读原文"有惊喜哟


老铁在看了吗?👇

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存