【密码算法 之六】CCM 浅析

这篇具有很好参考价值的文章主要介绍了【密码算法 之六】CCM 浅析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 综述

  CCM(Counter with Cipher Block Chaining-Message Authentication Code)是CBC-MAC与CTR的组合,可同时进行数据加密及认证,它基于对称秘钥分组加密算法,分组大小 128bits,因此 CCM 可以用于 AES,但是不能用于DES、3DES(分组大小为64bits)。CCM模式可以认为是分组加密算法的一种模式。

  CCM是CTR加密模式和CMAC认证算法的混合使用,常用在需要同时加密和认证的领域,比如WiFi安全中的WPE协议,它使用了AES-CCM模式。

  CCM首先使用CBC-MAC(Cipher Block Chaining-Message Authentication Code)模式对传输帧进行认证,然后使用CTR模式进行数据的加密。

  在数据通信中,传输的数据包由两部分组成:数据包头和用户数据(payload)。用户数据一般需要加密以防止窃听,但是传输路上的设备(路由器、交换机等)则往往需要数据包头以保证数据包能够正确的送到目的地,因此对数据包头不能加密。

CCM的输入包括三个元素

  • 待认证和加密的数据,称为有效载荷(P);
  • 将被认证但不被加密的相关数据(ADD);
  • Nonce,与P及ADD相关的一个唯一值;

2. 加密

2.1 前置条件(Prerequisites)

  • 分组加密算法(block cipher algorithm),必须分组长度为 128bit 的分组加密算法
  • 加密秘钥 K
  • 计数器生成函数(counter generation function)
  • 格式化函数(formatting function)
  • MAC的长度 Tlen

2.2 输入(Input)

  • N值(valid nonce N),其实就是 IV值
  • 明文P及长度Plen(valid payload P of length Plen bits)
  • 关联数据A(valid associated data A)

2.3 输出(Output)

  • 密文C(ciphertext C)

2.4 加密流程(Steps)

(1)通过格式化函数将(N, A, P)数据格式化为 B0,B1,…,Br128bit 的数据块(Br可能是非 128bit 对齐的块);
(2)对第0个数据块 B0 加密,得到密文块 Y0
(3)依次加密后面的所有数据块:For i = 1 to r, Yi = CIPHK(Bi⊕Yi-1);
(4)取 Yr Tlen 字节作为 Tag 值,记为 T ,此值就是MAC值;
(5)通过计数发生器,依次生成 Ctr0,Ctr1,…,Ctrm,其中 m = (Plen + 127 ) / 128;
(6)For j=0 to m, do Sj = CIPHK(Ctrj)) ,对 Ctrj 数据块依次进行加密,得到 Sj
(7)将S1、S2,…,Sm拼接在一起,得到S,S = S1 || S2 || …|| Sm注意;拼接的时候不包含S0);
(8)C = (P ⊕ MSBPlen(S)) || (T ⊕ MSBTlen(S0));

【密码算法 之六】CCM 浅析

3. 解密

3.1 前置条件(Prerequisites)

  • 分组加密算法(block cipher algorithm),必须分组长度为 128bit 的分组加密算法
  • 加密秘钥 K
  • 计数器生成函数(counter generation function)
  • 格式化函数(formatting function)
  • MAC的长度 Tlen

3.2 输入(Input)

  • N值(valid nonce N)
  • 密文 C 及长度 Clen(purported ciphertext C of length Clen bits)
  • 关联数据 A(valid associated data A)

3.3 输出 (Output)

  • 明文 P 或者 INVALID(无效)

3.4 解密流程(Steps)

  解密流程其实就是加密流程的逆操作。

(1)若密文长度 Clen <= Tlen,则返回 INVALID;
(2)通过计数发生器,依次生成 Ctr0,Ctr1,…,Ctrm,其中 m = (Plen + 127 ) / 128;
(3)For j=0 to m, do Sj = CIPHK(Ctrj)) ,对 Ctrj 数据块依次进行加密,得到 Sj
(4)将S1、S2,…,Sm拼接在一起,得到S,S = S1 || S2 || …|| Sm(注意;拼接的时候不包含S0);
(5)P = MSBClen - Tlen( C ) ⊕ MSBClen - Tlen( S );
(6)T = LSBTlen( C ) ⊕ MSBTlen( S0 );
(7)通过格式化函数将(N, A, P)数据格式化为 B0、B1,…,Br128bit 的密文块;
(8)对第1个密文块 B0 加密,得到密文块 P0
(9)依次加密后面的所有密文块:For i = 1 to r, do P = CIPHK(Bi ⊕ Yi-1);
(10)若 T != MSBTlen(Yr) 则返回 INVALID,否则返回明文 P

【密码算法 之六】CCM 浅析

4. 总结

加密流程总结

  • 首先将数据N,A,P格式化成block块,分别对各个块进行加密,取最后一个“密文块”的高Tlen字节作为Tag值(至此CCM方法计算的MAC值已经得到了);
  • 通过“计数生成函数”生成各Ctr0,Ctr1 … Ctrm值(生成器的种子就是nonce),然后分别对各个Ctrx值进行加密,得到密文Sx,将S1,S2 … Sm拼接组成S(特别注意:这里的S0);
  • 最后得到密文,密文是P和T按照一定的形式进行的拼接;
  • CCM的加密过程是“先计算MAC,再进行加密”,符合“MTE”的模式;

解密流程总结

  • 解密流程是加密流程的反操作。

附录:B0的构造规则

【密码算法 之六】CCM 浅析

  • Flag[bit7]:保留位,值为0

  • Flag[bit8]:Adata,代表是否有附件数据AAD,0代表无附加数据,1代表有附加数据

  • t:代表MAC的长度,MAC可能比较长,但是此处仅用了3bit表示MAC长度,所以规则上为了表示更惨的长度,所以有一个公式,即:(t - 2)/2;比如若置为 011b,则 (t - 2)/2 = 011b(3),故 t = 8,即MAC的长度为8字节;

  • q:代表有效数据长度的字节数(数据长度在B0中占多少个字节),比如 q - 1 = 110b(8),即q = 9,有效的数据长度在B0中占9个字节;

  • Q:有效数据长度

  • N:Nonce值
    【密码算法 之六】CCM 浅析

密码算法系列文章的入口地址如下
【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9…)文章来源地址https://www.toymoban.com/news/detail-429516.html

到了这里,关于【密码算法 之六】CCM 浅析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【密码算法 之一】对称加密算法 DES \ 3DES 浅析

      DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS 46-3)。DES一直以来被美国以及其它国家的政府和银行等广泛使用。   然而,随着计算机的进步,现在DES已经能够被暴力破解,强度大不如从前了。20世纪末,RSA公司举办过破

    2024年02月09日
    浏览(58)
  • 【密码算法 之二】对称加密算法 AES(Advanced Encryption Standard)浅析

      AES的全称是 Advanced Encryption Standard,意思就是“高级加密标准”。它的出现主要是用于取代其前任DES算法的,因为我们都知道EDS算法的秘钥长度实际为56bit,因此算法的理论安全强度为2的56次方,但是随着计算能力的大幅提高,虽然出现了3DES的加密方法,但由于它的加密

    2024年02月05日
    浏览(53)
  • [密码学入门]凯撒密码(Caesar Cipher)

    非常推荐《密码编码学与网络安全--原理与实践(第八版)》这本书。 密码体质五元组:P,C,K,E,D P,plaintext,明文空间 C,ciphertext,密文空间 K,key,密钥空间 E,encrypt,加密算法 D,decrypt,解密算法 单表代换 单表:英文26字母的顺序 代换:替换为别的字母并保证解密的唯一

    2024年02月09日
    浏览(36)
  • 【Objective-C】浅析Block及其捕获机制

    什么是Block? Block (块), 封装了函数调用以及调用环境的 OC 对象 ,Objective-C闭包(可以在内部访问外部的值),相当于C语言的函数指针,把一个函数写在一个函数内部,而OC并没有函数(方法)嵌套这一语法 Block的声明 格式: 返回值 (^block名称)(形参列表) ^ 代表块的符号

    2024年02月08日
    浏览(36)
  • (列置换密码)(Column Permutation Cipher)(含代码)

    密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何

    2023年04月17日
    浏览(59)
  • 对称算法模式-GCM(Galois/Counter Mode)

    以下内容来自 《NIST Special Publication 800-38D November, 2007》 - Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC。 链接在此 AES Galois/Counter Mode

    2024年02月04日
    浏览(33)
  • 排序算法之六:快速排序(递归)

    快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法 其基本思想为: 任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右序列中所有元素均大于基准值,然后最左右子序列重复该过程,直

    2024年02月04日
    浏览(37)
  • 排序算法之六:快速排序(非递归)

    快速排序是非常适合使用递归的,但是同时我们也要掌握非递归的算法 因为操作系统的栈空间很小,如果递归的深度太深,容易造成栈溢出 递归改非递归一般有两种改法: 改循环 借助栈(数据结构)   不是递归,我们模拟递归的过程 创建一个栈s,先入end,再入begin,先出

    2024年02月04日
    浏览(37)
  • 【密码学】【多方安全计算】Secret Sharing秘密共享浅析

    秘密共享(Secret Sharing)是实现多方安全计算的一种常用方式,MPC当然也可以用混淆电路(Garbled Circuit)实现,本文旨在浅析秘密共享的基本原理,有对混淆电路感兴趣的同学可阅读下一篇博客。 Secret Sharing被称为秘密共享或私密共享,有一个秘密数值D,数值D被分解为n个片

    2024年02月15日
    浏览(40)
  • 基于DNA的密码学和隐写术综述

    摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域, 利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。 近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,

    2024年01月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包