OpenSSL中文手册之密码学理论基础(未完待续)

  版权声明 未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


1 导语

  最早计算之间的通信是明文的,在互联网上通信的内容,传输的数据都可以被截取都和阅读。比如你下载的某动作片,和朋友的聊天,邮件 都可以被第三者截取、获取有效的内容和修改内容
  针对数据被截取,最有效的办法当然就是专用网络,除此外则是加强传输过程中的防御,此外也别无他法。
  针对数据可以被获知有效信息,最有效的方法就是加密。对数据加密的方分为对称加密,和非对称加密
  针对数据被修改,最好的办法就是利用摘要,一旦数据被修改,摘要也就随之变化。

2 密码学术语

中文 英语 中文 英语
发送者 sender 接收者 receiver
消息 message 窃听者 eavesdropper
破译者 cryptanalyst 密码破译 cryptanalysis
加密 encrypt 解密 decrypt
明文 plaintext 密文 ciphertext
算法 algorithm 密钥 key
对称密码 symmetric cryptography 公钥密码 public-key cryptography
非对称密码 asymmetric cryptography 混合密码系统 hybrid cryptosystem
中文 英语 含义
单向散列函数 one-way hash function 可以检测出数据是否被篡改过,保证数据完整性(integrity)
消息认证码 message authentication code 不但能够确认消息是否被篡改过,而且能够确认消息是否来自所期待的通信对象,是一种能保证完整性和提供认证(authentication)的密码技术。
数字签名 digital signature 能够防止伪装、篡改和否认等威胁的技术。
伪随机数生成器 Pseudo Random Number Generator,PRNG 是一种能够模拟产生随机数列的算法。

3 对称加密

  核心理论:同一密钥对明文异或后,再对得到密文异或就可得到明文。

  显著特点:
  (1)加密和解密 使用同一个密钥
  (2)加密和解密过程完全相同

  优点:加解密的高速度和使用长密钥时的难破解性。
  缺点:假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。

  对称加密又分为:分组加密和流加密。

3.1 分组加密

  分组加密是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组(block)。一个分组的比特数就称为分组长度(block lenght)。常见的分组算法有:DES、3DES、DESX、Blowfish、IDEA、RC2、RC5、RC6和AES,以及中国的SSF33、SM1、SM4。
  分组加密又可以根据其迭代模式分为ECB,CBC,OFB,CFB,CTR。

3.1.1 DES算法

  DES算法又分为标准的DES,演进的3DES

3.1.1.1 标准DES

  DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每个7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特。(DES已经能够被暴力破解,因此现在不应该再使用DES了。)
  DES的结构(Feistel网络):
OpenSSL中文手册之密码学理论基础(未完待续)_第1张图片
  上面一轮中“右侧”根本就没有被加密,因此需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调,如下图的3轮加密计算:
OpenSSL中文手册之密码学理论基础(未完待续)_第2张图片
   用相同的子密钥运行两次Feistel网络就能够将数据还原,Feistel3轮解密:
OpenSSL中文手册之密码学理论基础(未完待续)_第3张图片
OpenSSL中文手册之密码学理论基础(未完待续)_第4张图片

   Feistel网络的性质:
   (1)Feistel网络的轮数可以任意增加
   (2)加密时无论使用任何函数作为轮函数都可以正确解密
   (3)加密和解密可以用完全相同的结构来实现

3.1.1.2 3DES

  三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,通常缩写为3DES,当三重DES中所有的密钥都相同时,三重DES就等同于普通的DES了。这是因为在两步加密、解密之后,得到的就是最初的明文。因此,以前用DES加密的密文,就可以通过这种方式用三重DES来进行解密,也就是说三重DES对DES具备向下兼容性。
  按照使用的密钥,分为DES-EDE2和DES-EDE3。如果密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥(也就是只使用两个DES密钥),这种三重就称为DES-EDE2。密钥1、密钥2、密钥3全部使用不同的比特序列的三重DES称为DES-EDE3。
  加密:
OpenSSL中文手册之密码学理论基础(未完待续)_第5张图片
  解密:
OpenSSL中文手册之密码学理论基础(未完待续)_第6张图片

3.1.2 AES算法

  AES采用的是Rijndael算法,Rijndel的分组长度为128比特,密钥长度可以以32比特为单位在128比特到256比特的范围内进行选择(不过在AES的规格中,密钥长度只有128、192和256比特三种)。
  AES 加密中的一轮
OpenSSL中文手册之密码学理论基础(未完待续)_第7张图片
  AES 解密密中的一轮
OpenSSL中文手册之密码学理论基础(未完待续)_第8张图片

3.1.3 迭代模式

  分组密码算法只能加密固定长度的分组,但是我们需要加密的明文长度可能会超过分组密码的分组长度,这时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就称为分组密码的迭代模式(mode)。
  ECB模式:Electronic CodeBook mode(电子密码模式)
  CBC模式:Cipher Block Chaining mode(密码分组链接模式)
  CFB模式:Cipher FeedBack mode(密文反馈模式)
  OFB模式:Output FeedBack mode(输出反馈模式)
  CTR模式:CounTeR mode(计数器模式)

3.1.3.1 ECB

  在ECB模式中,将明文分组加密之后的结果直接成为密文分组。当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充(padding)。  

  • 优点:简单,有利于并行计算,误差不会被传送;
    缺点:
    • 不能隐藏明文的模式。ECB的明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都会将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在风险的。
    • 可能对明文进行主动攻击。假如存在主动攻击者Mallory,它能够改变密文分组的顺序。当接收者对密文进行解密时,由于密文分组的顺序被改变了,因此相应的明文分组的顺序也会改变。也就是说,攻击者Mallory无需破译密码就能够操纵明文。 

OpenSSL中文手册之密码学理论基础(未完待续)_第9张图片
OpenSSL中文手册之密码学理论基础(未完待续)_第10张图片

3.1.3.2 CBC 

  初始化向量:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量,通常缩写为IV。

  • 优点
    • 明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和2的值是相等的,密文分组1和2的值也不一定是相等的。这样ECB模式的缺陷在CBC模式中就不存在了。
    • 在解密过程中,假设CBC模式加密的密文分组中有一个分组损坏。在这种情况下只要密文分组的长度没有发生变化,则解密时最多只会有2个分组受到数据损坏的影响
  • 缺点

    • 在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。
    • 如果密文分组中有一些比特缺失了,即便只缺失了1比特,那么缺失比特的位置之后的密文分组也就全部无法解密了。
    • 加密过程是串行的,无法被并行化(在解密时,从两个邻接的密文块中即可得到一个平文块。因此,解密过程可以被并行化);
    • 误差传递 
    • 发送方和接收方都需要知道初始化向量
    • 每个密文块依赖于所有的信息块
    • 明文消息中一个改变会影响所有密文块
  • 对CBC模式的攻击
      假设主动攻击者Mallory的目的是通过修改密文来操纵解密后的明文。如果Mallory能够对初始化向量中任意比特进行反转,则解密后得到的明文分组中相应的比特也会被反转。

  • CBC的应用实例
      确保互联网安全的通信协议之一SSL与IPsec,就是使用CBC模式来确保通信机密性的。此外,CBC模式还被用于叫作Kerberos version 5的认证系统中。
    OpenSSL中文手册之密码学理论基础(未完待续)_第11张图片 
    OpenSSL中文手册之密码学理论基础(未完待续)_第12张图片

* 3.1.3.3 CFB* 

  • CFB模式与流密码

      CFB模式中由密码算法所生成的比特序列称为密钥流(key stream)。在CFB模式中,密码算法就相当于用来生成密钥流的伪随机数生成器,而初始化向量就相当于伪随机数生成器的“种子”。它的明文数据可以被逐比特加密,因此可以将CFB模式看做是一种使用分组密码来实现流密码的方式。可以将块密码变为自同步的流密码;工作过程亦非常相似。

  • 对CFB模式的攻击

      对CFB模式可以实施重放攻击(replay attack):

  • 与CBC相似,明文的改变会影响接下来所有的密文,因此加密过程不能并行化;而同样的,与CBC类似,解密过程是可以并行化的。

OpenSSL中文手册之密码学理论基础(未完待续)_第13张图片

3.1.3.4 OFB 

  • OFB模式与流密码
      可以将块密码变成同步的流密码。它产生密钥流的块,然后将其与平文块进行异或,得到密文。与其它流密码一样,密文中一个位的翻转会使明文中同样位置的位也产生翻转。这种特性使得许多错误校正码,例如奇偶校验位,即使在加密前计算而在加密后进行校验也可以得出正确结果。
    每个使用OFB的输出块与其前面所有的输出块相关,因此不能并行化处理。然而,由于明文文和密文只在最终的异或过程中使用,因此可以事先对IV进行加密,最后并行的将平文或密文进行并行的异或处理。
  • 可以利用输入全0的CBC模式产生OFB模式的密钥流。这种方法十分实用,因为可以利用快速的CBC硬件实现来加速OFB模式的加密过程。
    OpenSSL中文手册之密码学理论基础(未完待续)_第14张图片

3.1.3.5 CRT 

  • CTR模式的特点
      CTR模式的加密和解密使用了完全相同的结构,因此在程序实现上比较容易。这一特点和同为流密码的OFB模式是一样的。
      CTR模式中可以以任意顺序对分组进行加密和解密,因此在加密和解密时需要用到的“计数器”的值可以由nonce和分组序号直接计算出来。能够以任意顺序处理分组,就以为着能够实现并行计算。在支持并行计算的系统中,CTR模式的速度是非常快的

  • 错误与机密性
      假设CTR模式的密文分组中有一个比特被反转了,则解密后明文分组中仅有与之对应的比特会被反转,这一错误不会放大,这一弱点和OFB模式是相同的。
      在OFB模式中,如果对密钥流的一个分组进行加密后其结果碰巧和加密前是相同的,那么这一分组之后的密钥流就会变成同一值的不断反复。在CTR模式中就不存在这一问题。
    OpenSSL中文手册之密码学理论基础(未完待续)_第15张图片

3.1.3.6 比较 

OpenSSL中文手册之密码学理论基础(未完待续)_第16张图片

3.2 流加密

  流加密是对数据流进行连续处理的一类密码算法。流密码中一般以1比特、8比特、或32比特等为单位进行加密和解密。常见的:RC4
  注: 分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;相对地,流密码是对一串数据进行连续处理,因此需要保持内部状态。

4 非对称加密

4.1 DH

4.2 RSA

4.3 DSA

4.4 ECC

5 摘要

6 应用

5.1 HMAC

5.2 数字签名

5.3 数字信封

5.4 数字证书

5.5 X500

5.6 PKI体系


  版权声明 未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


你可能感兴趣的:(OpenSSL中文手册)