欢迎光临散文网 会员登陆 & 注册

密码学之消息认证码算法

2021-05-26 13:33 作者:刹那-Ksana-  | 我要投稿

前言

文中出现的 %5Ba%2Cb%5D 和 a%20%7C%7C%20b 是同一个意思,都代表 a 序列和 b 序列的concatenation(级联),前者为自己习惯的用法,后者更为正式。

*注意:括号内的中文来自google translate,未必专业

一、ECB & CBC

Block cipher(分组密码)的block长度是固定的(比如说128bit,256bit等等),但是我们需要加密的信息的长度是不固定的,通常来说都要大于block的长度。问题是如何用一个固定长度的block cipher来加密非固定长度的message(信息)

一个最原始的想法是将message m 切割为长度相等的小块m%3D%5Bm_0%2Cm_1%2C...%2Cm_n%5D,每一个小块都用block cipher加密,然后将最后加密后的密文组合起来,这种方法叫做ECB (Electronic Code Book) 。

ECB示意图

但是这种加密方式有一个安全缺陷——如果我们的message具有一定的结构性,那么ECB加密后的ciphertext(密文)也会保留这个结构性。

CBC (Cipher Block Chaining) 则是在ECB的基础上加入一些改动,加密流程如下

CBC示意图

二、CBC-MAC

CBC-MAC是运用CBC对我们的message m%20%3D%20%5Bm1%2C...%2Cm_n%5D 进行加密,t_i%3DMAC_k%20(t_%7Bi-1%7D%E2%A8%81m_i)%2Ct%3Dt_n.

以上的CBC-MAC叫做basic CBC-MAC,只适合用于固定长度的message。因为攻击者可以建立%F0%9D%91%9A%E2%80%B2%20%3D%20%F0%9D%91%9A%20%E2%80%96%20(%F0%9D%91%A1%20%E2%8A%95%20%F0%9D%91%9A)%2C%20MAC_k(m')%3Dt. 这个不符合前文的安全性的准则。

为了让CBC-MAC可以运用于任意长度的message,我们再额外加一个key k_2,我们把basic CBC-MAC输出的tag(标签)叫做t',我们输出 t%3DMAC_%7Bk2%7D(t').

三、HMAC (Hash-based Message Authentication Code)

我们让H代表一个hash function(散列函数)HMAC_k(m)%20%3D%20H(k%20%E2%8A%95%20opad)%20%E2%80%96%20H(k%20%E2%8A%95%20ipad%20%E2%80%96%20m)%20)

其中,opad (outer padding) 是将0x5c重复排列直至长度为lipad (inner padding) 是将0x36重复排列直至长度为block length l

四、CMAC(Cipher-based Message Authentication Code)

CMAC分为以下两个部分,

首先是sub-key k_1%2Ck_2的生成,让E代表一个block length为 b 的block cipher,然后:

  1. L%3DE_k(0%5Eb)0%5Eb 代表长度为b的全部为0的序列

  2. 如果L的most significant bit(最高位)为0,则k_1%3DL%3C%3C1(<<为比特朝左位移);否则k_1%3D(L%3C%3C1)%5Coplus%20R_bR_%7B128%7D%3D0%5E%7B120%7D10000111%2CR_%7B64%7D%3D0%5E%7B59%7D11011

  3. 如果k_1的most significant bit为0,则k_2%3Dk_1%3C%3C1(<<为比特朝左位移);否则k_2%3D(k_1%3C%3C1)%5Coplus%20R_b

tag 的生成如下:

  1. 将message m拆分成n个小块m%3D%5Bm_1%2Cm_2%2C...%2Cm_n%5D,其中前n-1个block都为complete block(长度都为b)

  2. 如果最后一个block m_n是一个complete block,则m_n'%3Dk_1%5Coplus%20m_n,否则m_n'%3Dk_2%5Coplus%20(m_n%20%7C%7C%2010..0)

  3. C_0%3D0%5EbC_i%3DE_k(C_%7Bi-1%7D%20%E2%8A%95%20M_i)

  4. 输出t%20%3D%20MSB_l(C_n),MSB代表most significant bit,其中l代表输出tag的长度

后记

还有其他很多的算法。

参考资料:

Jonathan Katz, Yehuda Lindell - Introduction to Modern Cryptography

NIST Special Publication 800-38B 

Heiko Knospe - A Course in Cryptography

使用工具:diagrams.net

THE END.

密码学之消息认证码算法的评论 (共 条)

分享到微博请遵守国家法律