读书笔记-《第四章-认证加密》

书籍信息

书名:《深入浅出密码学》

作者:[ 美 ] 戴维 • 王(David Wong)

译者:韩露露 ,谢文丽 ,杨雅希


  1. 机密性(保密性或隐私性)是指向无权访问数据者隐藏真实的数据,而加密可以实现这一目标。发明密码学的初衷就是加密。
  2. 在《第三章-消息认证码》一章中,我们已经了解了明文通信时使用MAC来确保消息完整性的方法【具体来说就是:(1)场景:我们想和别人交流,但并不在乎别人是否读过我们的消息(消息也不需要保密),我们真正关心的是消息的完整性:消息不能被篡改!(2)解决方案就是让我们与通信的用户使用相同的密钥来计算消息的MAC,从而保护通信过程中消息的完整性(比如使用HMAC-SHA256)算法来计算消息的MAC;(3)对于接收方,它所做的与发送方类似,在收到消息及其认证标签后,接收方可以使用相同的密钥对消息生成自己的认证标签,然后判断接收到的认证标签是否与自己计算的认证标签相同,就可以判断消息是否被篡改】
  3. 在本章<认证加密>中,我们可以学习到加密通信时使用MAC确保消息完整性的方法,即:我们要保证通信的内容是保密的,并且还要对加密后的密文进行认证(比如AES-CBC-HMAC算法)。
  4. 接第3点,现在我有一个疑问了:为什么需要认证加密呢,即:为什么加密之后还需要认证呢?如果中间人篡改了密文,解密者解密不成功不就可以知道密文被篡改了嘛,所以为什么还需要对加密后的密文进行认证呢?解释如下: 

        认证加密的主要原因在于保障数据的完整性和真实性。虽然加密可以确保数据在传输或存储过程中不被泄露,但它并不能防止数据在传输过程中被篡改。以下是一些需要认证加密的原因:    

  • 防止数据篡改:即使数据已经加密,但如果在传输过程中遭到篡改,解密后的数据可能会变得无效甚至危险。通过对加密后的数据进行认证,可以确保数据在传输过程中没有被篡改。

  • 确保数据来源真实性:认证可以确保数据的来源是合法可信的。在某些场景下,确保数据的来源真实性也是非常重要的,这可以通过认证来实现。

  • 防止重放攻击:在某些情况下,攻击者可能会截获加密数据并多次重复发送以达到攻击目的。认证加密可以防止这种重放攻击。

        综上所述,认证加密是为了保障数据的完整性和真实性,以及防止数据在传输过程中被篡改。虽然解密失败可以暗示数据被篡改,但通过认证加密可以更加直接地验证数据的完整性,从而提高数据传输过程中的安全性。

5. 总结3、4点:消息认证码和认证加密的主要区别在于,消息认证码不对通信内容加密,而认证加密需要对通信内容加密

  • 消息认证码(MAC)和认证加密的主要区别在于它们对通信内容的处理方式。
  • 消息认证码(MAC)是一种用于验证消息完整性和认证来源的技术。它使用密钥和哈希函数或加密算法来生成一个短的固定长度的认证标签,这个标签可以附加到消息中。接收方使用相同的密钥和算法来计算认证标签,并将其与接收到的标签进行比较,以验证消息的完整性和真实性。MAC只关注消息的完整性和真实性,不涉及对消息内容的加密。
  • 而认证加密(Authenticated Encryption)则包含了消息认证和对消息内容的加密。它不仅提供了消息的完整性和真实性验证功能,还对消息进行了加密保护。认证加密算法使用密钥和加密算法来加密消息,并生成一个认证标签。接收方使用相同的密钥和算法来解密消息并验证认证标签,确保消息的完整性、真实性和机密性。
  • 因此,认证加密同时提供了消息的完整性、真实性和机密性保护,而消息认证码只关注消息的完整性和真实性。

6. 通常,我们同构比较加密算法提供的安全级别、分组大小和执行效率来判断它们的优劣。那么AES算法的安全级别、分组大小和执行效率如何呢?解释如下:

  • 安全级别】AES算法有3种不同的版本(即:也可以说AES算法的安全级别有三级):AES-128的密钥长度为128比特(16字节),AES-192的密钥长度为192比特(24字节),AES-256的密钥长度为256比特(32字节),密钥长度决定了AES的安全级别,密钥越长,安全级别越高。
  • AES算法的接口要求:
    • 算法要求输入一个变长密钥(如上三种安全级别对应密钥长度)
    • 算法还要去输入一段长度恰好为128比特的明文;
    • 算法输出一段长度恰好为128比特的密文。
  • 分组大小】由于AES算法加密的明文长度总是固定的(即:原始的AES算法只能加密固定长度的明文,具体来说,AES算法一次只能加密长度为128比特的明文,即AES算法的分组大小是128比特)所以我们称它为分组密码(Block Cipher)。(后面会提到如何让AES加密任意长度的明文,涉及到填充方式)
  • 解密操作是加密操作的逆过程。向解密算法输入与加密时相同的密钥和128比特密文,它会输出密文对应的128比特原始消息。实际上,解密操作会还原加密结果。这是可以实现的,加密和解密都是确定性的。(此处的确定性的:即:无论调用它们多少次,只要密钥不变,相同的明文总是产生相同的密文)。
  • 【执行效率】就加密速度而言,许多CPU供应商已经在硬件中实现了AES算法,这使得AES算法在实践中拥有极高的执行速度。

7. 那么AES算法怎么加密小于或者超过128比特的消息呢?

  • 如果要加密的消息长度小于128比特,就必须对消息进行填充并且还要使用特定的操作模式(Mode of Operation); 比如要加密一个非常长的消息,最简单的方法就是把消息分成长度为16字节的块(每块长度等于AES算法分组的大小)。如果最后一块明文小于16字节,则可以在其末尾追加一些字节,使得明文长度刚好为16字节。填充的目的就在于此,用于填充字节的方法有很多,但是对填充方法最重要的要求是它必须可逆,这样一来,解密完密文后就能剔除填充的字节,进而提取出原始消息。
  • 填充方式:NoPadding, PKCS5Padding, PKCS7Padding
  • 还有一个问题:为了加密一个消息,我们选择将长消息拆分成16字节的块(或许,需要对最后一个块进行填充),再逐块加密,这种加密消息的方式称为电码本(Electronic Codebook, ECB)模式。这种加密方法是确定性的,因此对相同的明文进行加密会产生相同的密文(想一想那个企鹅图片加密后的样子,就会知道这种加密方法的缺陷),所以为了加密长度大于128比特的明文,我们需要一个支持“随机化”加密的操作模式。AES算法最常用的操作模式是密码块链接(Cipher Block Chaining, CBC)模式【其他操作模式:CFB, OFB,CTR】。CBC模式适用于任何确定性分组密码(不止有AES,其他分组密码:SM1, SM4, SM7, DES, TDES),使用CBC操作模式需要有一个额外输入,称为初始向量(Initialization Vector, IV), IV可对加密结果进行随机化。因此IV的大小应等于分组密码的分组长度,如AES算法的IV应为16字节,而且IV必须是唯一的,不可预测的。
  • 注意除了ECB操作模式不需要IV值,其他操作模式都需要。

8. 即使对加密算法用上了操作模式和填充策略,算法也还不能用于实际加密,因为攻击者可能修改CBC操作模式加密下的密文,也可能改变以明文形式发送的IV。确实,我们还没有采用任何的完整性校验机制去阻止这样的攻击。(解密者不希望密文和IV有任何的改变,想一想这个场景,小红给使用AES-CBC给你发送了一段加密后的密文,并通过网络把密文和IV值传递给你了,你接收到消息的时候,没有立即解密,而是把对应的明文和IV值存储到了数据库中,然后某一天你要从数据库中取出这个密文和其对应的IV值,发现解密失败... 此时是不是很尬尴,所以为什么需要进行认证,即完整性校验。可以看上面第4点)。

        所以密码算法(AES)和操作模式(ECB, CBC, CFB ,OFB,CTR)不能按照原始的方式使用。原始的加密算法和操作模式缺乏某种完整性保护机制,算法应该确保敌手无法再未被察觉的情况下修改密文及其相关参数(此处的参数为IV)。

        为了检测密文的改变,可以使用第3章学的消息认证码(MAC)算法。对于AES-CBC算法,通常使用HMAC(基于哈希的MAC算法)结合哈希函数SHA-256来提供完整性校验。具体来说:先对完成填充的明文进行加密,再用MAC算法认证密文和IV。这样一来,即便敌手串改了密文和IV,也无法生成合法的认证标签。

        生成认证标签后,把认证标签,IV及密文一起发送给接收方(注意,在实际应用中,加密算法AES-CBC和认证算法HMAC应该使用不同的密钥)

        解密前,接收方会先验证标签的合法性。这些算法(AES-CBC、HMAC)最终组合成的算法被称为AES-CBC-HMAC,在更新型的一体式构造出现之前,该算法是应用最广泛的认证加密算法之一。

        注意:

        (1)加密和认证这两个操作有先后之分,而我们应该使用先加密再认证(Encrypt-then-MAC, EtMAC)。如果使用先认证再加密(MAC-then-Encrypt, MACtE),有时会导致巧妙的攻击(如Vaudenay 填充预言攻击),因此在实践中应避免采用先认证再加密的方法。

        (2)AES-CBC-HMAC算法不是开发者友好型算法。因为开发者很容易误用这个算法,比如每次加密时,IV必须是不可预测的等。所以就出现了下面的认证加密算法的一体式构造,这种算法可以达到简化开发人员使用加密技术的目的

        

9. 具有认证机制的对称加密算法:

  • AES-CBC-HMAC
  • 认证加密算法的一体式构造
    • 有附加数据的认证加密(Authenticated Encryption With Associated Data, AEAD),这种结构与AES-CBC-HMAC的构造方式非常接近,它不仅可以保证明文的机密性,还可以检测到对密文所做的任何修改。此外,该构造还允许对附加数据进行认证。(附加数据是可选的,它既可以为空,也可以包含加密和解密明文相关的数据。附加数据不会被加密,但是会与密文一起发送给对方。此外,密文会包含一个附加的认证标签(通常会附加到密文末尾),因此密文的长度要大于明文)。AEAD型算法主要有如下两种:
      • AES-GCM: 是计数器(CTR)操作模式和GMAC消息认证码结合体。这个算法广泛应用于各种加密协议,如网络安全链接的TLS协议就用到该算法。实际上,我们可以说AES-GCM算法对这个网络通信进行了加密。
      • ChaCha20-Poly1305算法:这也是一个AEAD型算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值