整理 | Carol
布隆过滤器是一种基于 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 对证书的签名算法和签名值等。证书的颁发者还需要对证书内容利用自己的私钥进行签名,以防止他人篡改证书内容。
CA:全称Certification Authority,负责证书的颁发和吊销,接收来自 RA 的请求。
RA:全称Registration Authority,对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA;
证书数据库:存放证书,多采用 X.500 系列标准格式。可以配合LDAP 目录服务管理用户信息。
回顾下本文,我们主要讲解了密码学中的一些核心问题和经典算法。相信读者已经对现代密码学的发展状况和关键技术有了初步了解。
掌握这些知识,对于理解区块链系统如何实现隐私保护和安全防护很有帮助。现代密码学安全技术在设计上基于专业的现代数学知识,如果想深入学习其原理,则需要更深入的学习现代的数学科学,尤其是数论、抽象代数。
区块链和密码学是相互促进发展的一个过程,区块链中大量使用了密码学的知识;同样的,为了满足区块链的不同场景,也反向促进了密码学的进一步发展。
看完本文,你有什么想法?欢迎评论区和我们一起讨论哦!
最新报告:区块链应用程序交易量下降近40%,博彩类仍为最受欢迎项目……
“国家队”入局! 中移动、银联等宣布区块链服务网络(BSN)正式内测!
老铁在看了吗?