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

时间:2024-05-18 22:02:26

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


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中文手册之密码学理论基础(未完待续)
  上面一轮中“右侧”根本就没有被加密,因此需要用不同的子**对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调,如下图的3轮加密计算:
OpenSSL中文手册之密码学理论基础(未完待续)
   用相同的子**运行两次Feistel网络就能够将数据还原,Feistel3轮解密:
OpenSSL中文手册之密码学理论基础(未完待续)
OpenSSL中文手册之密码学理论基础(未完待续)

   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中文手册之密码学理论基础(未完待续)
  解密:
OpenSSL中文手册之密码学理论基础(未完待续)

3.1.2 AES算法

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

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中文手册之密码学理论基础(未完待续)
OpenSSL中文手册之密码学理论基础(未完待续)

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中文手册之密码学理论基础(未完待续) 
    OpenSSL中文手册之密码学理论基础(未完待续)

* 3.1.3.3 CFB* 

  • CFB模式与流密码

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

  • 对CFB模式的攻击

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

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

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

3.1.3.4 OFB 

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

3.1.3.5 CRT 

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

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

3.1.3.6 比较 

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

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体系


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