区块链学习之密码学安全技术(五)

Hash 算法与数字摘要

Hash (哈希或散列)算法它能将任意长度的二进制明文串映射为较短的(一般是固定长度的)二进制串(Hash值),而且不一样的明文很难映射为相同的Hash值。算法

Hash 定义

Hash (哈希或散列): 能将任意长度的二进制明文串映射为较短的(一般是固定长度的)二进制串(Hash值),而且不一样的明文很难映射为相同的 Hash 值。
Hash 值在应用中又常被称为指纹或摘要(digest)。Hash 算法的核心思想也常常被应用到基于内容的编址或命名算法中数据库

一个优秀的Hash算法将能实现以下功能:数组

  • 正想快速: 给定明文和 Hash 算法,在有限时间和有限资源内能计算获得Hash值
  • 逆向困难: 给定(若干)Hash值,在有限时间内很难(基本不可能)逆推出明文
  • 输入敏感: 原始输入信息发生任何改变,新产生的 Hash 值都应该出现很大不一样
  • 冲突避免: 很难找到两端内容不一样的明文,使得它们的 Hash 值一致(发生碰撞)、

冲突避免:有时候又称为“抗碰撞性”,分为:安全

  • 弱抗碰撞性: 若是给定明文前提下,没法找到与之碰撞的其余明文,则算法具备“弱碰撞性”
  • 强抗碰撞性: 若是没法找到任意两个发生 Hash 碰撞的明文,则算法具备“强抗碰撞性”

常见算法

目前常见的 Hash 算法包括 MD5 和 SHA系列算法,MD5算法和SHA1已经被破解,通常推荐使用SHA2-256或更安全的算法网络

性能

Hash算法分为:框架

  • 计算敏感型(通常都是): 意味着计算资源是瓶颈,主频越高的 CPU 运行Hash 算法的速度也越快。所以能够经过硬件加速来提高Hash计算的吞吐量。
  • 非计算敏感型: 例如 scrypt 算法,计算过程须要大量的内存资源,节点不能经过简单地增长更多的 CPU 来得到 Hash 性能的提高。这样的Hash算法常常用于在 避免算力攻击的场景

数字摘要

数字摘要:对数字内容进行Hash运算,获取惟一的摘要值来指代原始完整的数字内容。数字摘要是 Hash算法最重要的一个用途。利用Hash函数的抗碰撞性特色,数字摘要能够解决确保内容未被篡改过的问题。函数

Hash攻击与防御

Hash 算法并非一种加密算法,不能用于对信息的保护。但Hash算法经常使用于对口令的保存上。例如用户登陆网站,网站后台保存口令的Hash值,每次登陆进行比对便可,即使数据库泄露,也没法从 Hash值还原口令,只能进行穷举。性能

Hash攻击: 因为有时用户设置口令的强度不够,只是一些常见的简单字符串,如password,123456等。有人专门搜集了这些常见口令,计算对应的Hash值,制做成字典。这样经过Hash值能够快速反查到原始口令。这一类以空间换时间的攻击方法包括字典攻击彩虹表攻击(只保存一条Hash链的首尾值,相对字典攻击能够节省存储空间)等。学习

Hash攻击防范方法:为了防范这一类攻击,通常采用加盐(salt)的方法。保存的不是口令明文的 Hash值,而是口令明文再加上一段随机字符串(即“盐”)以后的Hash值。Hash结果和“盐”分别存放在不一样的地方,这样只要不是二者同时泄露,攻击者就很难破解了。区块链

加解密算法

加解密算法是密码学的核心技术,可分为两大基本类型:

clipboard.png

加解密系统基本组成

现代加解密系统的典型组件通常包括: 加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,而且通常是公开可见的。密钥则是关键的信息,须要安全地保存起来,甚至经过特殊硬件进行保护。对同一种算法,密钥须要按照特定算法每次加密前随机生成,长度越长,则加密强度越大。加解密基本过程以下:

clipboard.png

根据加解密过程当中使用的密钥是否相同,算法能够分为对称加密非对称加密,两种模式适用于不一样的需求,刚好造成互补,某些时候能够组合使用,造成混合加密机制。

密码学实现的安全每每是经过算法所依赖的数学问题来提供,而并不是经过对算法的实现过程进行保密。

对称加密算法

对称加密算法,加密和解密过程的密钥是相同的。

  • 优势:加解密效率(速度快,空间占用小)和加密强度都很高。
  • 缺点:参与方都须要提早持有密钥,一旦有人泄露则安全性被破坏,另外如何在不安全通道中提早分发密钥也是个问题,须要借助Diffie-Hellman协议或非对称加密方式来实现。

对称密码从实现原理上能够分为两种:

  • 分组密码: 将明文切分为定长数据块做为基本加密单位,应用最为普遍。分组对称加密表明算法包括 DES、3DES、AES、IDEA等
  • 序列密码: 每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如:数字媒介的加密等。序列密码,又称流密码,每次经过伪随机数生成器来生成伪随机密钥串。

对称加密算法适用于大量数据的加解密过程;不能用于签名场景;而且每每须要提早分发好密钥;

非对称加密算法

非对称加密能够很好的解决对称加密中提早分发密钥的问题。非对称加密中,私钥通常须要经过随机数算法生成,公钥能够根据私钥生成。公钥通常公开,他人可获取的;私钥通常是我的持有,他人不能获取

非对称加密算法:

  • 优势: 是公私钥分开,不安全通道也可以使用。
  • 缺点:是处理速度(特别是生成密钥和解密过程)每每比较慢,通常比对称加解密算法慢2~3个数量级;同时加密强度也每每不如对称加密算法。

非对称加密算法的安全性每每须要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等经典数学难题进行保护。表明算法包括: RSA、ElGamal、椭圆曲线(ECC)、SM2等系列算法。目前广泛认为RSA类算法可能在不远的未来被破解,通常推荐可采用安全强度更高的椭圆曲线系列算法。

选择明文攻击

在非对称加密中,因为公钥是公开能够获取的,所以任何人均可以给定明文,获取对应的密文,这就带来选择明文攻击的风险。 在已知明文攻击、已知密文攻击、选择明文攻击中,最有威胁的为选择明文攻击。

  • 已知明文攻击: 获得了一些给定的明文和对应的密文
  • 已知密文攻击: 只知道密文,只能经过统计特性分析其中有什么规律了
  • 选择明文攻击:经过公钥加密一些经常使用语,截取发送方的密文和公钥加密后的密文对比获取信息。

为了规避选择明文攻击这种风险,现有的非对称加密算法都引入了必定的保护机制。对一样的明文使用一样密钥进行屡次加密,获得的结果彻底不一样,这就避免了选择明文攻击的破坏。实现上有多种思路:

  • 对明文先进行变形,添加随机的字符串或标记,再对添加后结果进行处理。
  • 先用随机生成的临时密钥对明文进行对称加密,而后再对对称密钥进行加密,即混合利用多种加密机制。

混合加密机制

混合加密机制同时结合了对称加密和非对称加密的优势。先用计算复杂度高的非对称加密协商出一个临时的对称加密密钥(也称为会话密钥)而后双方经过对称加密算法传递的大量数据进行快速的加解密处理。

HTTPS 在传统的HTTP层和TCP层之间经过引入 Transport Layer Security/Secure Socket Layer(TLS/SSL)加密层来实现可靠的传输
HTTPS 为典型应用案例:

clipboard.png

该过程的主要功能:在防止中间人窃听和篡改的前提下完成会话密钥的协商。

离散对数与Diffie-Hellman 密钥交换协议

Diffie-Hellman(DH)密钥交换协议是一个经典协议,使用该协议能够在不安全信道完成对称密钥的协商,以便后续通讯采用对称加密。

DH的缺点:

  • 阻塞性攻击:没有提供双方身份的任何信息. 它是计算密集性的,所以容易遭受阻塞性攻击,即对手请求大量的密钥.受攻击者花费了相对多的计算资源来求解无用的幂系数而不是在作真正的工做.
  • 容易遭受中间人的攻击

消息认证与数字签名

消息认证码和数字签名技术经过对消息的摘要进行加密,可用于消息放篡改和身份证实问题。

消息认证码

消息认证码: 全称是“基于Hash的消息认证码”。消息认证码基于对称加密,能够用于对消息完整性进行保护。

基本过程: 对某个消息利用提早共享的对称密钥和Hash算法进行加密处理,获得HMAC值。该HMAC值持有方能够证实本身拥有共享的对称密钥,而且也能够利用HMAC确保消息内容未被篡改。

消息认证码通常用于证实身份的场景, 主要问题是须要共享密钥

数字签名

数字签名基于非对称加密,既能够用于证明某数字内容的完整性,又同时能够确认来源。

典型的场景: A经过信道发给B一个文件(一份信息),B如何获知收到的文件即为A发出的原始版本?A能够先对文件内容进行摘要,而后用本身的私钥对摘要进行加密(签名),以后同时将文件和签名发给B。B收到文件和签名后,用A的公钥来解密签名,获得数字摘要,与收到文件进行摘要后的结果进行比对。若是一致,说明该文件确实是A发的(别人没法拥有A的私钥),而且文件内容没有被修改过(摘要结果一致)

知名的数字签名算法包括DSA 和 安全强度更高的ECSDA等。
除普通的数字签名应用场景外,针对一些特定的安全需求,产生了一些特殊数字签名技术:

  • 盲签名: 签名者须要在没法看到原始内容的前提下对信息进行签名。盲签名能够实现对所签名内容的保护,防止签名者看到原始内容。另外一方面,盲签名还能够实现防止追踪,签名者没法将签名内容和签名结果进行对应。
  • 多重签名:即n个签名者中,收集到至少m个(n>=m>=1)的签名,即认为合法。其中,n是提供的公钥高数,m是须要匹配公钥的最少的签名个数
  • 群签名:即某个群组内一个成员能够表明群组进行匿名签名。签名能够验证来自于该群组,却没法准确追踪到签名的是哪一个成员
  • 环签名: 环签名是一种简化的群签名。签名者首先选定一个临时的签名者集合,集合中包括签名者自身。而后签名者利用本身的私钥和签名集合中其余人的公钥就能够独立地产生签名,而无需他人的帮助。签名者集合中的其余成员可能并不知道本身被包含在最终的签名中 。环签名在保护匿名性方面有不少的用途。

安全性

数字签名算法自身的安全性由数学问题进行保障,但在使用上,系统的安全性也十分关键。目前常见的数字签名算法每每须要选取合适的随机数做为配置参数,配置参数不合理的使用或泄露都会形成安全漏洞,须要进行安全保护。

数字证书

对于非对称加密算法和数字签名来讲,很重要的一点就是公钥的分发。但在传输过程当中,公钥有没有多是伪造的呢?传输过程当中有没有可能被篡改?一旦公钥出了问题,则整个创建在其上的安全体系的安全性将不复存在。

数字证书机制: 能够证实所记录信息的合法性,好比证实某个公钥是某个实体(如组织或我的)的,而且确保一旦内容被篡改能被探测出来,从而实现对用户公钥的安全分发。

根据保护公钥的用途,能够分为:

  • 加密数字证书:用于保护用于加密信息的公钥
  • 签名验证数字证书:用于保护用于进行解密签名进行身份验证的公钥

通常状况下,证书须要由证书认证机构来进行签发和背书

证书规范

通常来讲,一个数字证书内容可能包括基本数据(版本、序列号)、所签名对象信息(签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥)、CA的数字签名,等等。目前使用最普遍的标准为ITU和ISO联合制定的X.509的 v3 版本规范
证书的颁发者还须要对证书内容利用本身的私钥添加签名,以防止别人对证书内容进行篡改。

证书格式

X.509规范中通常推荐使用PEM格式来存储证书相关的文件。证书文件的文件名后缀通常为.crt或.cer,对应私钥文件的文件名后缀通常为.key,证书请求文件的文件名后缀为.csr。有的时候也统一用.pem做为文件名后缀。此外还有DER格式,是采用二进制对证书进行保存,能够与PEM格式互相转换。

证书信任链

证书中记录了大量信息,其中最重要的包括“签发的公开密钥”和“CA数字签名”两个信息。所以,只要使用CA的公钥再次对着个证书进行签名比对,就能证实某个实体的公钥是不是合法的。

那么怎么证实用来验证对实体证书进行签名的CA公钥自身是否合法呢?

  • 能够经过上层的CA颁发的证书来进行认证
  • 某些根CA能够经过预先分发证书来实现信任基础

证书做为公钥信任的基础,对其生命周期进行安全管理十分关键。

PKI 体系

在非对称加密中,公钥能够经过证书机制来进行保护,但证书的生成、分发、撤销等过程并无在X.509规范中进行定义。安全地管理和分发证书能够遵循PKI(Public Key Infrastructure)体系来完成。PKI体系核心解决的是证书生命周期相关的认证和管理问题。PKI是创建在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架,并不表明某个特定的密码学技术和流程。

PKI 基本组件

PKI至少包括以下核心组件:

  • CA(Certification Authority): 负责证书的颁发和做废,接收来自RA的请求,是最核心的部分。(主要完成对证书信息的维护)
  • RA(Registration Authority): 对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给CA
  • 证书数据库: 存放证书,多采用X.500系列标准格式。能够配合LDAP目录服务管理用户信息

操做流程: 用户经过RA登记申请证书,提供身份和认证信息等;CA审核后完成证书的制造,颁发给用户。用户若是须要撤销证书则须要再次向CA发出申请。

证书的签发

CA对用户签发证书其实是对某个用户公钥,使用CA的私钥对其进行签名。这样任何人均可以用CA的公钥对该证书进行合法性验证。验证成功则承认该证书中所提供的用户公钥内容,实现用户公钥的安全分发。

用户证书的签发能够有两种方式:

  • 由CA直接来生成证书(内含公钥)和对应的私钥发给用户
  • 由用户本身生成公钥和私钥,而后由CA来对公钥内容进行签名(这种方式整个过程当中,用户能够保持私钥信息的私密性,不会被其余方获知包括CA方)

证书的撤销

证书超过有效期后会做废,用户也能够主动向CA申请撤销某证书文件。

CA 没法强制收回已经颁发出去的数字证书,所以为了实现证书的做废,每每还须要维护一个撤销证书列表,用于记录已经撤销的证书序号。(因此第三方验证某个证书时,第一步就是检查该证书是否在撤销列表中,若是存在则没法验证经过。若是不在则继续后续验证)

Merkle 树结构

Merkle(默克尔)树:又叫哈希树,是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成。区块链出现以前,普遍用于文件系统和P2P系统中。

clipboard.png

主要特色:

  • 最下面的叶节点包含存储数据或其哈希值
  • 非叶子几点(包括中间节点和根节点)都是它的两个孩子节点内容的哈希值

默克尔树逐层记录哈希值的特色,让它具备了一些独特的性质。例如,底层数据的任何变更,都会传递到其父节点,一层层沿着路径一直到树根。这意味着树根的值实际上表明了对底层全部数据的“数字摘要”

默克尔树的应用场景有以下:

  • 快速比较大量数据:对每组数据排序后构建默克尔树结构。当两个默克尔树根相同时,则意味着两组数据必然相同。不然,必然存在不一样。(因为Hash计算的过程能够十分迅速,预处理能够在短期内完成。利用默克尔树结构能带来巨大的比较性能优点)
  • 快速定位修改: 一旦发现某个节点如Root的数值发生变化,沿着Root->N4->N1,便可快速定位到实际发生改变的数据块D1
  • 零知识证实: 如何向他人证实拥有某组数据(D0...D3)中包括给定某个内容D0而不暴露其余任何内容。方法:经过构造如上图所示的一个默克尔树,公布N一、N五、Root。D0拥有者经过验证生成的Root是否跟提供的值一致,便可很容易检测D0包括D一、D二、D3的存在。整个过程没法获知其余内容。

布隆过滤器

布隆过滤器: 是一种基于Hash的高效查找结构,可以快速(常数时间内)回答“某个原始是否在一个集合内”的问题。

应用场景:布隆过滤器由于其高效性大量应用于网络和安全领域,例如信息检索、垃圾邮件规则、注册管理等

基于Hash的查找

基于Hash的快速查找算法: Hash能够将任意内容映射到一个固定长度的字符串,并且不一样内容映射到相同串的几率很小。所以,可构成以个很好的“内容——》索引”的生成关系。(内容Hash后为索引经过索引可在数组中快速的查找当前内容)

基于Hash的快速查找算法的缺点:当映射后的值限制在必定范围(如总数组的大小)内时,会发现 Hash 冲突的几率会变高,并且范 围越小,冲突几率越大。不少时候,存储系统的大小又不能无限扩展,这就形成算法效率的降低。为了提升空间利用率,后来人们基于Hash算法思想设计出了布隆过滤器结构。

更高效的布隆过滤器

布隆过滤器: 采用多个Hash函数来提升空间利用率。对于同一个给定输入来讲,多个Hash函数计算出多个地址,分别在位串的这些地址上标记为1。进行查找时,进行一样的计算过程,并查看对应原始,若是都为1,则说明较大几率是存在该输入。

优势:大大提升了空间利用率,可使用较少的空间来表示较大集合的存在关系。

总结: 不管是Hash算法,仍是布隆过滤器,基本思想都是基于内容的编址。Hash函数存在冲突,布隆过滤器也存在冲突。这就形成了两种方法都存在误报的状况,但绝对不会漏报。

同态加密

同态加密

同态加密: 是一种特殊的加密方法,容许对密文进行处理获得任然是加密的结果。即对密文直接进行处理,跟对明文进行处理后再对处理结果加密,获得的结果相同。
优势:同态加密能够保证明现处理者没法访问到数据自身的信息

问题与挑战

同态加密的两个应用场景:

  • 同态加密在云计算和大数据时代意义十分重大。从安全角度讲,用户还不敢将敏感信息直接放到第三方云上进行处理。若是有了比较实用的同态加密技术,则能够放心实用各类云服务,同时各类数据分析过程也不会泄露用户隐私
  • 对于区块链技术,实用同态加密技术,运行在区块链上的只能合约能够处理密文,而没法获知真实数据,极大地提升了隐私安全性。

目前全同态的加密方案主要包括“基于理想个的方案”、“基于整数上近似GCD问题的方案”、“基于带扰动学习问题的方案”。已知的同态加密技术每每须要较高的计算时间或存储成本,相比传统加密算法的性能和强度还有差距。

函数加密

同态加密保护的是数据自己,而函数加密保护的是处理函数自己,即让第三方看不处处理过程的前提下,对数据进行处理。

其余问题

零知识证实

零知识证实: 证实者在不想验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。

零知识证实至少要知足三个条件:

  • 完整性: 真实的证实可让验证者成功验证
  • 可靠性: 虚假的证实没法让验证者保证经过验证,但容许存在小几率例外
  • 零知识: 若是获得证实,没法从证实过程当中获知除了所证实信息以外的任何信息

量子密码学

量子密码学:随着量子计算和量子通讯的研究而受到愈来愈多的关注,将会对已有的密码学安全机制产生较大的影响。

社交工程学

即使存在理论上完美的技术,也不存在完美的系统!
我的理解:系统中有人的组成部分并非坚不可破的,由于人带有社会属性,经过社会学攻击能够轻易的攻破理论上完美的系统。

总结

clipboard.png

相关文章
相关标签/搜索