热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

密码库LibTomCrypt学习记录——(2.29)分组密码算法的工作模式——KeyWrap密钥封装模式

密钥封装(KeyWrap)密钥封装是为了对密钥进行保护,比如密钥存储在不太安全的存储设备中,或者密钥需要在网络中传输。早在2001年,
  1. 密钥封装(Key Wrap)

密钥封装是为了对密钥进行保护,比如密钥存储在不太安全的存储设备中,或者密钥需要在网络中传输。

早在2001年,NIST就发布了AES Key Wrap Specification。2002年,IETF在RFC 3394中也描述了密钥封装算法AES-KeyWrap Algorithm,电信行业协会发布了使用TDES的密钥封装算法。2008年,美国标准认可委员会(Accredited Standards Committee X9, Inc.)发布了金融服务业的密钥封装算法。2009年,RFC 5649 描述了带填充的密钥封装算法。 2012年,NIST SP 800-38F描述了AES KW、AES KWP(带填充的密钥封装算法)和TDES的TKW。

NIST的这三个算法和RFC等的描述几乎完全一致。

     以下描述以NIST SP 800-38F为主,结合RFC 3394和RFC 5649。

     参考文献

  1. Key Wrap - Wikipedia, the free encyclopedia, http://en.wikipedia.org/wiki/Key_Wrap
  2. NIST Special Publication 800-38F: Recommendation for Block Cipher Modes of Operation Methods for Key Wrapping, December 2012.
  3. J. Schaad and R. Housley, Advanced Encryption Standard (AES) Key Wrap Algorithm, RFC 3394, September, 2002.
  4. R. Housley and M. Dworkin, Advanced Encryption Standard (AES) Key Wrap with Padding Algorithm, RFC 5649, August, 2009.
  5. ANSI/TIA-102.AACA-1-2002: Project 25 – Digital Radio Over-the-Air-Rekeying (OTAR) Protocol: Addendum 1 – Key Management Security Requirements for Type 3 Block Encryption Algorithms, Telecommunications Industry Association, November, 2002.
  6. ANS X9.102-2008, Symmetric Key Cryptography For the Financial Services Industry—Wrapping of Keys and Associated Data, Accredited Standards Committee X9, Inc., June, 2008.

  1. 密钥封装有三种

  1. KW          基于AES的密钥封装,不使用填充。
  2. KWP   基于AES的密钥封装,使用填充。
  3. TKW   基于TDES的密钥封装,不使用填充。

算法

明文

密文

使用模块

KW

2—254-1个64bit长

3—254个64bit长

W和W-1

KWP

1—232-1个8bit长

2—232个8bit长

W和W-1

TKW

2—228-1个32bit长

3—228个32bit长

TW和TW-1


  1. W

C = W(S)模块

准备:

  1. K(即KEK)
  2. 128-bit 分组密码CIPH.

输入:

  1. S,长度为n×64bit,n ≥ 3.

输出

  1. C,与S等长(长度为n×64bit,n ≥ 3)。

步骤

1. 初始化

s = 6(n-1).

S=S1 || S2 ||… || Sn . Si都是64it

A0 = S1.

For i = 2, …, n

R0i = Si.

2. 迭代

For t = 1, …, s

          At = MSB64(CIPHK(At-1 || R2t-1)) ⊕ [t]64;

          For i = 2, …, n-1:

Rit = Ri+1t-1;

          Rnt = LSB64(CIPHK (At-1 || R2t-1)).

3. 输出结果

C1 = As.

For i = 2, …, n

Ci = Ris.

Return C1 || C2 || … || Cn.

W的示意图如下

W的示意图

W中迭代器的示意图如下:

W中迭代器的示意图

  1. W-1

S = W-1(C)模块

准备:

  1. K(即KEK)
  2. 128-bit 分组密码CIPH的逆函数CIPH-1

输入:

  1. C,长度为n×64bit,n ≥ 3.

输出

  1. S,与c等长(长度为n×64bit,n ≥ 3)。

步骤

1. 初始化

s = 6(n-1).

C = C1 || C2 ||… || Cn . Ci都是64bit

As = C1.

For i = 2, …, n

Rsi = Ci.

2. 迭代

For t = s, …, 1

          At-1 = MSB64((CIPH-1K(At ⊕[t]64)) || Rnt);

R2t-1 = LSB64(CIPH-1K ((At ⊕[t]64) || Rnt).

          For i = 2, …, n-1:

Ri+1t-1 = Rit ; 

3. 输出结果

S1 = A0.

For i = 2, …, n

Si = Ri0.

Return S1 || S2 || … || Sn.

 

  1. KW

KW的加密KW-AE(P)和解密KW-AD(C)。

加密C = KW-AE(P)

输入:明文P

输出:密文C

1. ICV1 = 0xA6A6A6A6A6A6A6A6.

2. S = ICV1 || P.

3. Return C = W(S).

解密P = KW-AD(C)

输入:密文C

输出:明文P或者失败

1. ICV1 = 0xA6A6A6A6A6A6A6A6.

2. S = W-1(C).

3. If MSB64(S) ≠ICV1, return FAIL and stop.

4. Return P = LSB64(n-1)(S).

RFC 3394KW采用一种便于软件实现的描述方式。

输入:

  1. 明文 P = P1||P2||...||Pn,n个64-bit
  2. 密钥 K (KEK).

输出:

  1. 密文 C = C0||C1||...||Cn,(n+1)个64-bit

步骤

1)  A = IV, IV = 0xA6A6A6A6A6A6A6A6

    For i = 1 to n, R[i] = P[i]

2)  For j = 0 to 5 {

        For i=1 to n {

            B = AES(K, A || R[i])

            A = MSB(64, B) ⊕ t,其中t = (n*j)+i

            R[i] = LSB(64, B)

        }//i

    }//j

3)  C[0] = A

For i = 1 to n, C[i] = R[i]

Return C = C[0] || C[1] || ... || C[n]

  1. KWP

带填充的KW加密KWP-AE(P)和带填充的KW解密KWP-AD(C)。

加密C = KWP-AE(P)

输入:明文P

输出:密文C

1. ICV2 = 0xA65959A6.

2. 

3. PAD = 08×padlen

4. S = ICV2 || [len(P)/8]32 || P || PAD

5.  If len(P) ≤ 64,   return C = CIPHK(S);

else,            return C = W(S). 

这里的padlen是指将明文P填充为64bit的整数倍时需要填充(填充数据为全零字节)的最短字节数,可以为0。消息S表示在填充后消息的前面再加64比特的特殊消息,以保证S长度最少为一个分组大小(128bit)。如果S长度只有一个分组大小,则直接执行AES。

解密P = KW-AD(C)

输入:密文C,C = C1||C2||...||Cn, n个64-bit

输出:明文P或者失败

1.  ICV2 = 0xA65959A6.

2. If n = 2, S = CIPH-1K(C); if n > 2, S = W-1(C).

3. If MSB32(S) ≠ ICV2, return FAIL and stop.

4.  Plen = int(LSB32(MSB64(S))).

5. padlen = 8(n-1)-Plen.

6. If padlen <0 or padlen > 7, return FAIL and stop.

7. If LSB8×padlen(S) ≠ 08×padlen, return FAIL and stop.

8. Return P &#61; MSB8×Plen(LSB64×(n-1)(S)).

  1. TKW

这个和KW其实是一样的&#xff0c;只有一下几个地方有区别&#xff1a;

  1. 使用的密码算法不一样&#xff1a;KW采用AES&#xff1b;TKW采用TDES
  2. 分组大小不一样导致半分组大小不一样&#xff1a;KW半分组大小64bit&#xff1b;TKW半分组大小32bit。

详细流程可辅助参见KW。

注意&#xff1a;TKW没有加填充的所谓TKWP算法。

  1. 测试数据

NIST SP 800-38F里面没有测试数据&#xff1b;测试数据可以在RFC 3394和RFC 5649里面查。

LibTomCrypt目前尚不支持KeyWrap。


推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
author-avatar
bj_gqdy_342
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有