【笔记】密码学与安全技术概要总结(一)

  工程领域从来没有黑科技;密码学不仅是工程。
  密码学和安全领域所涉及的知识体系十分繁杂,本文简述密码学领域中跟区块链相关的一些基础知识,包括Hash算法与数字摘要、加密算法、数字签名、数字证书、PKI体系、Merkle树、布隆过滤器、同态加密等。

一、Hash算法与数字摘要

1.Hash定义

  Hash算法能将任意长度的二进制明文串映射为较短的(通常是固定长度的)二进制串(Hash值),并且不同的明文很难映射为相同的Hash值。

  Hash值在应用中又常被称为指纹或摘要。Hash算法那的核心思想也经常被应用到基于内容的编址或命名算法中。

  Hash算法将能实现如下功能:

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

  冲突避免又是又被称为**“抗碰撞性”**,分为“弱抗碰撞性”和“强抗碰撞性”。如果给定明文的前提下,无法找到与之碰撞的其他明文,则算法具有“弱抗碰撞性”;如果无法找到任意两个发生Hash碰撞的明文,则称算法具有“强抗碰撞性”。

2.常见算法

  常见的Hash算法包括MD5和SHA系列算法。

  MD4输出是128位,已被证明不够安全。MD5是对MD4的改进版本,也已被证明不具备“强抗碰撞性”。
  SHA是一个Hash函数组。目前指明的SHA-1算法,输出为160位的Hash值,模仿了MD4算法那,采用了类似原理,也已被证明不具备“强抗碰撞性”。
  SHA-2包括SHA-224、SHA-256、SHA-384和SHA-512算法等,跟SHA-1算法原理类似。
  SHA-3相关算法也已被提出用来改进SHA-2算法。

  目前,MD5和SHA-1已经被破解,一般推荐至少使用SHA-256或更安全的算法。

3.性能

  Hash算法一般都是计算敏感型的。可以通过硬件加速来提升Hash计算的吞吐量。
  也有一些Hash算法不是计算敏感型的。例如scrpy算法。计算过程需要大量的内存资源,节点不能简单地增加更多CPU来获得Hash性能的提升。这样的Hash算法那经常用在避免算力攻击的场景。

4.数字摘要

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

5.Hash攻击与防护

  有人专门是搜集常见口令,计算对应的Hash值,制作成字典。这样通过Hash值可以快速反查到原始口令。这一类型以空间换时间的攻击方法包括字典攻击和彩虹表攻击(只保存一条Hash链的首位值,相对字典攻击可以节省存储空间)等。
  为了防范这一类攻击,一般采用加盐的方法。保存的不是口令明文的Hash值,而是口令明文再加上一段随机字符串(即“盐”)之后的Hash值。Hash结果和“盐”分别存放在不同的地方,这样只要不是两者同时泄漏,攻击者就很难破解了。

二、加解密算法

  加解密算法是密码学的核心技术,从设计理念上可以分为两大基本类型。
在这里插入图片描述

1.加解密系统基本组成

  现代加解密系统的典型组件一般包括:**加解密算法、加密密钥、解密密钥。**加解密的基本过程如图所示。
在这里插入图片描述
  加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文。
  解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。

  根据加解密过程中所使用的密钥是否相同,算法可分为对称加密非对称加密。两种模式适用于不同的需求,恰好形成互补。某些时候可以组合使用,形成混合加密机制

2.对称加密算法

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

  对称密码从实现原理上可以分为两种:分组密码序列密码。牵着将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。
  分组对称加密代表算法包括DES、3DES、AES、IDEA等:

  • DES:经典的分组加密算法,采用FIPS-46-3,将64位明文加密为64位的密文,其密钥长度为64位(包含8位校验位)。现在已经很容易被暴力破解。
  • 3DES:三重DES操作:加密—>解密—>加密,处理过程和加密强度优于DES,但现在也被认为不够安全;
  • AES:Rijndael算法作为AES,标准为FIPS-197。AES也是分组算法那,分组长度为128、192、256位三种。AES的优势在于处理速度快,整个过程可以用数学描述,目前尚未有有效的破解手段。
  • IDEA:设计类似于3DES,密钥长度增加到128位,具有更好的加密强度。

  序列密码,又称流密码。要实现绝对安全的完善保密性,可以通过“一次性密码本”的对称加密处理。即通信双方每次使用跟明文等长的随机密钥串对明文进行加密处理。序列密码采用了类似的思想,每次通过伪随机数生成器来生成伪随机密钥串。代表算法包括RC4等。
  对称加密算法那适用于大量数据的加解密过程;不能用于签名场景;并且往往需要提前分发好密钥。

3.非对称加密算法

  非对称加密算法中,加密密钥和解密密钥是不同的,分别称为公钥和私钥。私钥一般需要通过随机数算法生成,公钥可以根据私钥生成,公钥一般是公开的,他人可获取的;私钥一般是个人持有,他人不能获取。
  优点是公私钥分开,不安全通道也可使用。缺点是处理速度(特别是生成密钥和解密过程)往往比较慢,一般比对称加密算法慢2~3个数量级;同时加密强度也往往不如对称加密算法。

  主要有基于大数质因子分解、离散对数、椭圆曲线等经典数学难题进行保护。代表算法那包括:RSA、EIGamal、椭圆曲线(ECC)、SM2等系列算法。

  • RSA:利用了对大数进行质因子分解困难的特性;
  • Diffie-Hellman密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方写上一个公共密钥;
  • EIGamal:利用了模运算下求离散对数困难的特性。被应用在PGP等安全工具中;
  • 椭圆曲线算法(ECC):基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。ECC系列算法那一般被认为具备较高的 安全性,但加解密计算过程往往比较费时;
  • SM2:国家商用密码算法,同样基于椭圆曲线算法,加密强度优于RSA系列算法。

  非对称加密算法一般适用于签名场景或密钥协商,但不适于大量数据的加解密。

4.选择明文攻击

  在非对称加密中,由于公钥是公开可以获取的,因此任何人都可以给定明文,获取对应的密文,这就带来选择明文攻击的风险。
  对同样的明文使用同样密钥进行多次加密,得到的结果完全不同,这就避免了选择明文攻击的破坏。
  一种是对明文先进行变形,添加随机的字符串或标记,再对添加后结果进行处理。另外一种是先用随机生成的临时密钥对明文进行对称加密,然后再对对称密钥进行加密,即混合利用多种加密机制。

5.混合加密机制

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

  典型的应用案例是现在大家常用的HTTPS协议。HTTPS协议在传统的HTTP层和TCP层之间通过引入TLS/SSL加密层来实现可靠的传输。
  TLS协议是IETF基于SSL协议提出的安全标准。除了Web服务外,TLS协议也被广泛应用于Email、实用消息、音视频通话等领域。
  采用HTTPS建立安全连接(TLS握手协商过程)的基本步骤如下
在这里插入图片描述

  1. 客户端浏览器发送信息到服务器,包括随机数R1、支持的加密算法类型、协议版本、压缩算法等。该过程为明文。
  2. 服务端返回消息,包括随机数R2、选定加密算法类型、协议版本以及服务器证书。该过程为明文。
  3. 浏览器检查带有该网站公钥的证书。该证书需要由第三方 CA来签发,浏览器和操作系统会预置权威CA的根证书。如果证书被篡改作假(中间人攻击),很容易通过CA的证书验证出来。
  4. 如果证书没问题,则客户端用服务端整数中的公钥加密随机数R3(又叫PreMasterSecret),发送给服务器。此时,只有客户端和服务器都拥有R1、R2和R3信息,基于随机数R1、R2和R3,双方通过伪随机数函数来生成共同的对称会话密钥MasterSecret。
  5. 后续客户端和服务端的通信都通过对称加密算法(如AES)那进行保护。

  该过程的主要功能是在防止中间人窃听和篡改的前提下完成会话密钥的协商。为了保障前向安全性,TLS对每个会话连接都可以生成不同的密钥,避免某次会话密钥泄露之后影响了其他会话连接的安全性。TLS协议过程支持加密算法方案较多,要合理地选择安全强度高的算法,如DHE-RSA、ECDHE-RSA和ECDHE-ECDSA

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

  DH协议的设计基于离散对数问题(DLP)。离散对数问题是指对于一个很大的素数p,已知g为p的模循环群的原根,给定任意x,求解X = g^x mod p是可以很快获取的。但在已知p、g和X的前提下,逆向求解x目前没有多想时间实现的算法。该问题同时也是ECC类加密算法的基础。
  DH算法的基本交换过程如下:

  1. Alice和Bob两个人协商密钥,先公开商定p,g;
  2. Alice自行选取私密的整数x,计算X = g^x mod p,发送X给Bob;
  3. Bob自行选取私密的整数y,计算Y = g^y mod p,发送Y给Alice;
  4. Alice根据x和Y,求解共同密钥Z_A = Y^x mod p;
  5. Bob根据x和Y,求解共同密钥Z_B = Y^y mod p。

  在mod p的前提下,Y ^ x = (g ^ y) ^ x = g ^ (xy) = (g ^ x) ^ y = X ^ y。而信道监听者在已知p、g、X、Y的前提下,无法求得Z。

发布了123 篇原创文章 · 获赞 119 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/cbwem/article/details/104344514