Message Authentication Codes

3.6 Modes of Operation and Encryption in Practice

讨论安全加密方案的底层构建块——即伪随机生成器和伪随机排列——如何在现实世界中分别使用流密码Stream Ciphers 和块密码Block Ciphers进行实例化。

3.6.1 Stream Ciphers

流密码的基本结构如下:
在这里插入图片描述
从某个初始状态st0开始,可以通过多次重复调用Next来生成任何所需的位数。
进一步简化,定义了GetBits算法。定义如下:
在这里插入图片描述
其实和上面的定义本质上没有区别,只是更加形式化的进行了定义,给定一个初始状态s0,调用Next函数来生成下一位,直到最后生成一个 ℓ \ell 长度的串,也就是密钥。
pseudorandom generator
两种形式
在这里插入图片描述
在这里插入图片描述
区别在于IV,initialization vector可选的初始化向量,这是可选的,具体的用法在下一节会讲到。主要是同步和不同步消息的区别。
实际的流密码通常不支持任意的n值(它决定了种子和IV的长度),而是只对某些固定的n值有效。

Constructing stream ciphers from pseudorandom functions
利用伪随机函数构造流密码
The basic idea is to use the seed s for the stream cipher as a key for F, and to evaluate Fs on a sequence of consecutive inputs starting from a value determined by IV
其基本思想是使用流密码的种子作为F的键,并在从IV确定的值开始的连续输入序列上计算Fs
在这里插入图片描述
denotes the binary encoding of integer i as an n/4-bit string.代表整数i的二进制串表示(长度为n/4),这个地方比较容易搞混。因为IV的长度为3n/4,所以需要n/4才可以拼接成一个长度为n的串

3.6.2 Stream-Cipher Modes of Operation

我们讨论了使用流密码(Init,Next)加密任意长度消息的两种操作模式:同步模式和非同步模式。
synchronized mode
在这里插入图片描述
unsynchronizedmode
在这里插入图片描述
同步模式并没有使用到了IV,同时也没有密文拓展,即接收到的密文长度和明文长度是相等的。
在这里插入图片描述
这张图在第三版中不再出现,但是这张对于理解同步模式和非同步模式的加密显得更加清晰。

3.6.3 Block Ciphers and Block-Cipher Modes of Operation

A block cipher is simply another name for a (strong) pseudorandom permutation
一个块密码只是一个(强的)伪随机排列的另一个名称。
块密码和伪随机排列之间的主要区别是,前者通常只支持一组特定的键/块长度,特别是不支持任意长度的键。

主要介绍了以下四种模式。(假设所有被加密的消息m的长度都是n的倍数(F的块长度),并写m=m1,m2,……,m ℓ \ell ,其中每个mi∈{0,1}n代表一个明文块。(如果长度不是n的倍数的消息,这个假设并不是失去了一般性,可以通过添加一个1后加上足够多的0来明确地填充成长度为n的倍数,)分组密码(块)操作模式提供了一种使用较短密钥加密任意长度消息的方法。
Book(ECB)mode
在这里插入图片描述
ECB加密是确定性的,所以并不能是CPA安全。为什么说是确定性呢,Fk明明是伪随机函数,但是对每个明文块都是使用同一个Fk函数,本质是可以说是对整个明文都是采用同一个函数加密。更糟糕的是,ECB加密都不能算是EAV安全。因为如果有两个明文块相同的话,密文也会出现两个相同的块。给出的例子使用于图像加密,可以很清楚的看到这个加密方案的不安全。

Cipher Block Chaining(CBC)mode
在这里插入图片描述
文字描述看着很多,其实也可以看下面的图,一目了然,就是注意c0=IV。将初始化向量作为c0
在这里插入图片描述
加密按顺序排列,因为需要前一个密文块ci−1来处理下一个明文块mi。因此,如果并行处理可用,cbc模式加密可能不是最有效的选择。这也是CBC的缺陷
有一种CBC的变形,也就是加密第二条消息的时候,使用第一条消息的最后一个密文快作为IV输入。
在这里插入图片描述
虽然这种处理方式很大程度上减少了IV的传输,但是面对选择明文攻击时,显得不堪一击。这说明了,不要瞎改,改动一点可能就会出现很大的问题。
Output Feedback(OFB)mode
在这里插入图片描述
第三种模式可以看作是一种非同步的流密码模式,其中流密码是以一种特定的方式从底层的块密码中构造出来的。

这里其实可以看到伪随机流和加密流其实是独立的,也就是说,Fk并一定有逆函数,也可以实现解密。当然了,还有一个优点,有状态变体(其中最终的值被用作加密下一个消息的IV,并且不被发送)

如果F是一个伪随机函数,则OFB模式可以被证明是cpa安全的。虽然加密必须按顺序进行,但该模式相对于CBC模式具有优势,即大部分计算(即伪随机流的计算)可以独立于要加密的实际消息来完成。也就是说,可以使用预处理提前生成一个伪随机流,在此之后,对明文(一旦已知)的加密速度令人难以置信地快。虽然看上去必须等前一个密文块完成才能加密下一个密文块,但是伪随机流是独立的,可以分开进行计算,加快运算速度。
Counter(CTR)mode
在这里插入图片描述
与前面讨论的所有安全模式相比,CTR模式的优点是加密和解密可以完全并行化,因为伪随机流的所有块都可以相互独立地计算。仅使用f的单一评估也可以从密文中恢复明文的第i个块。这些特征使CTR模式在实践中是一个有吸引力的选择。因为前面的三个模式基本上都可以算作串行。这个和OFB模式有一个共同点。Fk并不需要存在逆函数也可以进行解密
在这里插入图片描述
证明略,证明主要是靠对抗性猜测实验,这个和前面的实验的区别在于在1/2的基础上增加了一个黑盒猜测的概率,即假设访问黑盒的次数为去q(n),总的可能性为2^ ℓ {\ell} ,其中 ℓ {\ell} 为密钥长度。

Message tampering
消息认证主要第四章讲到,这里简单提一下
在许多文本中,操作模式也会根据它们对密文的对抗性修改的保护程度进行了比较。我们在这里不包括这样的比较,因为消息完整性或消息身份验证的问题必须与保密分开处理,我们将在下一章中这样做。以上所有的模式都不能达到我们将在那里定义的消息的完整性。消息完整性和保密并不是等价的

3.6.4 *Nonce-Based Encryption

(A “nonce”refers to a value that is supposed to be used once, and never repeated)
主要是讲nonce只出现一次,不会重复使用,所以出现了基于nonce的加密和解密。
在这里插入图片描述
既然涉及到一次性加密,就需要考虑多次加密的问题,如何保证多次加密的安全呢,这个时候就得提到前面的LR 对抗性试验了
在这里插入图片描述
在这里插入图片描述
如果满足这条件,就说明了Nonce-Based Encryption对于多次加密具有同样的安全性。

修改CTR模式很容易获得基于cpa安全的nonce加密方案:在加密时,IV现在被设置为等于作为输入提供的nonce,而不是统一选择。通过这个可以发现,基于nonce的加密方案可以是cpa安全的,即使它是确定性的。

Advantages of nonce-based encryption
明明都有了标准的随机函数加密方案,为什么还要研究基于nonce的加密方案呢?

  1. 首先,基于cpa安全的一次性加密在生成高质量随机性的代价昂贵。在这种情况下,使用计数器作为nouce可能比均匀生成容易得多
  2. 其次,可能会有使用短消息是合适的设置,例如,只有很少的消息将被加密。在这种情况下,均匀地选择nonce可能会导致重复的nonce,其概率高得不可接受。
  3. 最后,有时可以通过强制执行非重复的nonce安全边界,而不是通过选择统一的nonce边界来获得严格的安全界限。

4.1 Message Integrity

4.1.1 Secrecy vs. Integrity

前面主要讲到了通信的保密,这一章主要讲消息的认证,这两者有关联但并不是等价的。在通信的时候,对手限制于被动的窃听。
在这里主要提到了一个例子,概括下来就是,银行转账问题,用户A给用户B转账,第一,如何确认是时A发送的请求而不是别人假冒的。第二,如何保证银行收到的请求和用户发送的请求一致
How to achieve message integrity by using cryptographic techniques to prevent the undetected tampering of messages sent over an open communication channel.
如何使用加密技术来实现消息完整性,以防止通过开放的通信通道发送的消息被未检测到的篡改。
我们不能希望完全防止消息注入或消息篡改,因为这只能在物理级别上加以防范。相反,我们将保证的是,任何此类行为都会被诚实的当事人发现。

值得注意的是,通过加密实现消息完整性,并不是防止消息被篡改,就是你随便改,但是改完之后会被发现。相当于一个骗子跟你说他是骗子

4.1.2 Encryption vs. Message Authentication

Encryption does not(in general) provide any integrity,and encryption should never be used with the intent of achieving message authentication unless it is specifically designed with that purpose in mind.

加密(一般)不提供任何完整性,并且加密不应该被假定为确保消息身份验证,除非它是专门为这个目的而设计的。两者并不是等价的。这里很多人可能存在错觉,因为加密之后,明文被密文所掩盖,很难对消息进行有意义的修改,也就保证了消息的完整性。这其实没有必然联系。文中给了例子进行了证明。对密文的单个位修改可以导致明文中的部分可预测的变化。

4.2 Message Authentication Codes (MACs) – Definitions

加密并不能解决消息完整性的问题。相反,需要一种额外的机制,使通信方能够知道消息是否被篡改。执行此任务的正确工具是消息身份验证代码(MAC)。
The aim of message authentication code is to prevent an adversary from modifying a message sent by one party to another,or from injecting a new message.

消息认证码的目的是防止对手修改一方发送给另一方的消息,或注入新消息,而不是接收方没有检测到消息不是来自预期的一方。在加密的情况下,这只有在通信方有一些通信方不知道的秘密信息时才可能实现(否则,没有什么可以阻止通信方模拟发送消息的通信方)。

The Syntax of a Message Authentication Code
又开始新的语法,以前已经接触了加密的语法。
在这里插入图片描述
这里很好理解,主要引入了一个标签t,t=Mack(m),k为密钥,m为明文,通过明文和密钥k生成一个标签t,接收方接收到密文后,需要将密文解密成明文m,然后使用Vrfy算法进行验证。
规范验证
very算法其实也很简单,就是重新计算Mack(m)如果这个值等于t,那么说明消息完整性的得到了保证。

Security of Message Authentication Codes
在这里插入图片描述
Mack是一个黑盒,可以输入任何m值然后输入标签t
Existential unforgeability:The adversary must not be able to forge a valid tag on any message.
存在不可伪造性:对手必须不能伪造任何消息上的有效标记。

在这里插入图片描述在这里插入图片描述
如果没有有效的对手能够在上述实验中以不可忽略的概率成功,那么MAC是安全的。

这里需要注意的是重放攻击,即第二次与第一次攻击的明文是一样的,这样的攻击在上述定义中并没有进行考虑,而是将这个任务安排给了其他的程序。文中提出了两种方案:
防止重放攻击的两种常见技术是使用序列号(也称为计数器)或时间戳。第一种方法要求通信用户保持(同步)状态,当用户通过一个有损的通道进行通信时,可能会出现问题,其中消息偶尔会被丢弃(尽管这个问题可以减轻)。在使用时间戳的第二种方法中,发送方在认证之前将当前时间T(例如,附加到最近的毫秒)附加到消息中,并将T连同消息和结果标签t一起发送。当接收方获得T,m,t时,它验证t是的有效标记,并且T在其自身当前时间T0的某个可接受的时钟倾斜范围内。这种方法有其自身的缺点,包括需要发送方和接收方保持紧密同步的时钟,以及如果重播攻击足够快(特别是在可接受的时间窗口内),仍然有可能发生。其他的方案在后面提到。

Strong unforgeability

安全MAC确保对手不能对以前从未验证过的消息生成有效标记。但这并不排除攻击者能够在以前经过身份验证的消息上生成一个新的有效标记的可能性。换句话说,我修改以前通过验证的消息然后成功生成新的有效标记。为此,引出了新的定义。
在这里插入图片描述
和原先定义的的区别在于 (m, t) ∉ \notin /Q,相比于以前的m ∉ \notin /Q,更加的严格了。使用规范验证的MAC也是强安全 strong secure。证明略

4.3 Constructing Secure Message Authentication Codes

4.3.1 A Fixed-Length MAC

在这里插入图片描述
在这里插入图片描述
利用伪随机函数生成构建定长MAC。证明略
主要是靠证明
在这里插入图片描述

4.3.2 Domain Extension for MACs

Construction 4.5’s limitation:Only capable of handling fixed-length messages that furthermore rather short.
前面的构造具有很大局限性,只能处理长度固定且相当短的消息。
在这里插入图片描述
可以用于来自任何固定长度MAC。思想很简单,利用前面固定长度的MAC。将明文分块处理,同时对每一块进行标号,防止顺序被篡改,入通过在每个块中包含一个随机的“消息标识符”来防止最后一次攻击。
证明关键
在这里插入图片描述

具体证明略。

4.4 CBC-MAC

从一个块长度为n的伪随机函数中为任意长度的消息构造一个安全的消息认证码是可能的。原则上,这证明了安全的MAC可以由块密码构建。不幸的是,最终的构造非常低效:接下来将更高效的方法。

4.4.1 The Basic Construction

CBC-MAC is a standardized message authentication code used widely in practice.
在这里插入图片描述
在这里插入图片描述
利用CBC来实现固定长度MAC。

CBC-MAC vs. CBC-mode encryption

  1. CBC模式的加密使用随机IV,这对安全性至关重要。相比之下,CBC-MAC不使用IV,因为使用IV是不安全的。
  2. 在CBC模式加密中,所有中间值ti(在CBC模式加密的情况下称为ci)都由加密算法作为密文的一部分输出,而在CBC-MAC中,只有最后一个块作为标记输出。如果CBC-MAC被修改为输出在计算过程中获得的所有{ti},那么它就不再安全了。

Secure CBC-MAC for arbitrary-length messages
既然可以为固定长度消息进行认证,那么任意长度的其实也是可以的,具体的思想和前面的是类似的。两种方案:
在这里插入图片描述
在消息前添加m
在这里插入图片描述
使用两个密钥k,相当于二次加密

4.4.2 *Proof of Security

证明了CBC-MAC的不同变体的安全性,这里指记录结论,详细证明过程略。
在这里插入图片描述
在这里插入图片描述

4.5 GMAC and Poly1305

CBC-MAC的一个缺点是,它需要许多密码操作(特别是块密码计算),与被验证的消息长度呈线性。

4.5.1 MACs from Difference-Universal Functions

基于一个称为Difference-Universal Functions 差分-通用函数的组合对象来构造MAC的通用方法
定义: maps keys in Kn and inputs in Mn to outputs in Tn
在这里插入图片描述
使用差分通用函数h和伪随机函数F来构造一个消息身份验证码。
在这里插入图片描述
这个构造是strongly secure MAC。证明略

4.5.2 Instantiations

两个具体实例,具体事例之前定义新运算
在这里插入图片描述

GMAC
在这里插入图片描述

Poly1305
在这里插入图片描述

4.6 *Information-Theoretic MACs

4.6.1 One-Time MACs from Strongly Universal Functions .

4.6.2 One-Time MACs from Difference-Universal Functions

4.6.3 Limitations on Information-Theoretic MACs

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值