首页
学习
活动
专区
工具
TVP
发布

CMAC 为什么选择 K1 和 K2

CMAC(Cipher-based Message Authentication Code)是一种基于密码算法的消息认证码。它通过对消息进行加密和认证,确保消息的完整性和真实性,防止消息被篡改或伪造。

选择K1和K2作为CMAC算法的关键是因为它们是两个独立的子密钥。K1和K2的生成方式如下:

  1. 首先,使用密钥K对一个全零的块进行加密,得到L。
  2. 如果L的最高有效位为0,则K1等于L左移一位;如果L的最高有效位为1,则K1等于(L左移一位)异或Rb,其中Rb是一个预定义的常量。
  3. 如果K1的最高有效位为0,则K2等于K1左移一位;如果K1的最高有效位为1,则K2等于(K1左移一位)异或Rb。

选择K1和K2的原因是为了增加CMAC算法的安全性和抗攻击能力。通过使用两个独立的子密钥,可以减少密钥相关性,提高算法的安全性。此外,K1和K2的生成方式也增加了算法的随机性,使得攻击者更难以破解密钥。

CMAC算法的优势包括:

  1. 安全性高:CMAC使用密码算法进行加密和认证,具有较高的安全性,能够有效防止消息被篡改或伪造。
  2. 效率高:CMAC算法的计算速度较快,适用于对大量数据进行认证的场景。
  3. 灵活性强:CMAC算法可以与各种密码算法结合使用,适用于不同的应用场景。

CMAC算法的应用场景包括:

  1. 数据通信安全:CMAC可以用于保护数据通信过程中的消息完整性和真实性,防止数据被篡改或伪造。
  2. 存储介质安全:CMAC可以用于保护存储介质中的数据完整性,确保数据在存储过程中不被篡改。
  3. 软件安全:CMAC可以用于保护软件的完整性和真实性,防止软件被篡改或伪造。

腾讯云提供的相关产品和服务包括:

  1. 腾讯云加密服务(Cloud HSM):提供安全的密钥管理和加密服务,可用于保护CMAC算法中使用的密钥。
  2. 腾讯云安全加密存储(Cloud KMS):提供安全的密钥管理和存储服务,可用于存储CMAC算法中使用的密钥。
  3. 腾讯云安全计算服务(Cloud SGX):提供安全的计算环境,可用于执行CMAC算法的计算操作。

更多关于腾讯云相关产品和服务的详细信息,请参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

密码库LibTomCrypt学习记录——(2.12)分组密码算法的工作模式——OMAC认证模式

而NIST SP 800-38B 中涉及的CMAC其实就是OMAC1。因此,OMAC采用的基本模式是用改进的CBC模式得到MAC值,主要调整是子密钥的生成最后一个分组的padding上。...子密钥生成 记加密算法为CIPH,其分组大小为b比特;密钥记为K;输出子密钥为K1K2。子密钥生成步骤如下: step 1. L = CIPHK(0b). step 2....If MSB1(K1) = 0, then K2 = K1 << 1; Else K2 = (K1 << 1) ⊕ Rb. step 4. Return K1, K2....这样一来,两个子密钥的来历就是: 子密钥生成的流程图(生成子密钥K1K2) MAC生成 记加密算法为CIPH,其分组大小为b比特;密钥记为K;输入消息为Mlen比特长的M,输出MAC值为Tlen比特长的...MAC生成CMAC(K, M, Tlen)(也可以记为CMAC(K, M))步骤如下: step 1. 使用子密钥生产算法生成子密钥K1K2; step 2.

58430

消息认证码(MAC)解读

特定HMAC实现需要选择一个特定的hash函数。这些不同的HMAC实现通常标记为:HMAC-MD5,HMAC-SHA1, HMAC-SHA256等等....上图是omac算法的执行过程,为了使用b比特块密码(E)秘密密钥(k)生成消息(m)的l比特CMAC标签(t),首先生成两个b比特子密钥(k1k2)使用以下算法(这相当于在有限域GF(2b)中乘以x...(具体来说,C是按字典顺序排列的第一个不可约度-b二元多项式的非前导系数,具有最小数量的1:64位为0x1B,128位为0x87,256位为0x425) 3.如果msb(k1)= 0,则k2 = k1...<< 1,否则k2 =(k1 << 1)⊕C 4.返回MAC生成过程的密钥(k1k2) 作为一个小例子,假设 b = 4,C = 00112,并且k0 = Ek(0)= 01012。...然后k1 = 10102并且k2 =0100⊕0011= 01112。 CMAC标签生成过程如下: 1.将消息分成b位块m =m1∥…∥mn-1∥mn,其中m1,…,mn-1是完整的块。

2.2K10

斯坦福大学密码学-抗碰撞 06

回顾上一部分介绍的四种MAC: MAC系统是安全的,即在选择消息攻击下,是不可被存在性伪造的。 任何一个安全的PRF都能给我们一个安全的MAC。 基于CBC的MAC:两种变形:ECBC,CMAC。...NMACCBC-MAC 都是串行的。PMAC是并行的。 Carter-Wegman MAC不是基于PRFs,它是一个随机MAC。所以单个信息可以有许多不同的标签。...ipad opad,是固定的常数。512位常数,永不改变。 HMACNMAC不同之处在于,HMAC的密钥是互相有关联的。只是同样的密钥k异或上不同的常量。...所以k1k2也是互相有关联的,它们是在同样的固定值IV上应用PRF计算得到的。...为了证明k1k2是伪随机的且相互独立的,我们必须证明压缩函数不仅当它上面的输入是密钥时,它是PRF,也要证明当它使用关联密钥时,它也是PRF。

1.7K41

为什么要重写 hashcode equals 方法?

在第25行里,我们通过put方法把k1一串字符放入到hm里;而在第26行,我们想用k2去从HashMap里得到值;这就好比我们想用k1这把钥匙来锁门,用k2来开门。...由于k1k2是两个不同的对象,所以它们的内存地址一定不会相同,也就是说它们的hash值一定不同,这就是我们无法用k2的hash值去拿k1的原因。...当我们把第1617行的hashCode方法的注释去掉后,会发现它是返回id属性的hashCode值,这里k1k2的id都是1,所以它们的hash值是相等的。 我们再来更正一下存k1k2的动作。...但k1有可能仅仅是k2具有相同的hash值,但未必k2相等(k1k2两把钥匙未必能开同一扇门),这个时候,就需要调用Key对象的equals方法来判断两者是否相等了。...由于Object的固有方法是根据两个对象的内存地址来判断,所以k1k2一定不会相等,这就是为什么依然在26行通过hm.get(k2)依然得到null的原因。

37510

为什么要重写 hashcode equals 方法?

为什么要重写equalshashCode方法 当我们用HashMap存入自定义的类时,如果不重写这个自定义类的equalshashCode方法,得到的结果会和我们预期的不一样。...由于k1k2是两个不同的对象,所以它们的内存地址一定不会相同,也就是说它们的hash值一定不同,这就是我们无法用k2的hash值去拿k1的原因。...当我们把第1617行的hashCode方法的注释去掉后,会发现它是返回id属性的hashCode值,这里k1k2的id都是1,所以它们的hash值是相等的。 我们再来更正一下存k1k2的动作。...但k1有可能仅仅是k2具有相同的hash值,但未必k2相等(k1k2两把钥匙未必能开同一扇门),这个时候,就需要调用Key对象的equals方法来判断两者是否相等了。...由于Object的固有方法是根据两个对象的内存地址来判断,所以k1k2一定不会相等,这就是为什么依然在26行通过hm.get(k2)依然得到null的原因。

34820

我们为什么放弃 MongoDB MySQL,选择 TiDB

为什么放弃 MongoDB?...有事务需求的场景不多:当时使用的是 MongoDB 2.x 3.x,只提供了数据一致性的选择(强一致性、单调一致性最终一致性)原子操作,在少数的几个场景,比如交易相关的场景,通过选择强一致性原子操作...为什么选择 MySQL?...经过对 TiDB 的调研、试用深入交流后,在传统的关系型数据库 MySQL NewSQL 数据库 TiDB 之间,我们需要做出自己的选择了,这不仅仅是两个数据库之间的选择,这其实也体现了伴鱼对新技术的态度...另一方面,在选择面向未来、优雅高效的解决方案,还是选择成熟的但不够优雅高效的解决方案,如果选择成熟的解决方案,对技术的掌控会比较高,但是会在效率方面持续的进行付出;如果选择面向未来的解决方案,需要花时间精力来掌握新技术

79920

为什么要重写hashcodeequals方法?初级程序员在面试中很少能说清楚。

2 为什么要重写equalshashCode方法 当我们用HashMap存入自定义的类时,如果不重写这个自定义类的equalshashCode方法,得到的结果会和我们预期的不一样。...由于k1k2是两个不同的对象,所以它们的内存地址一定不会相同,也就是说它们的hash值一定不同,这就是我们无法用k2的hash值去拿k1的原因。...我们再来更正一下存k1k2的动作。存k1时,是根据它id的hash值,假设这里是100,把k1对象放入到对应的位置。...但k1有可能仅仅是k2具有相同的hash值,但未必k2相等(k1k2两把钥匙未必能开同一扇门),这个时候,就需要调用Key对象的equals方法来判断两者是否相等了。...由于Object的固有方法是根据两个对象的内存地址来判断,所以k1k2一定不会相等,这就是为什么依然在26行通过hm.get(k2)依然得到null的原因。

33460

为什么要重写 hashcode equals 方法?

为什么要重写equalshashCode方法 当我们用HashMap存入自定义的类时,如果不重写这个自定义类的equalshashCode方法,得到的结果会和我们预期的不一样。...由于k1k2是两个不同的对象,所以它们的内存地址一定不会相同,也就是说它们的hash值一定不同,这就是我们无法用k2的hash值去拿k1的原因。...当我们把第1617行的hashCode方法的注释去掉后,会发现它是返回id属性的hashCode值,这里k1k2的id都是1,所以它们的hash值是相等的。 我们再来更正一下存k1k2的动作。...但k1有可能仅仅是k2具有相同的hash值,但未必k2相等(k1k2两把钥匙未必能开同一扇门),这个时候,就需要调用Key对象的equals方法来判断两者是否相等了。...由于Object的固有方法是根据两个对象的内存地址来判断,所以k1k2一定不会相等,这就是为什么依然在26行通过hm.get(k2)依然得到null的原因。

37130

一文读懂数据库优化之分库分表

阅读此文你将了解: 什么是分库分表以及为什么分库分表 如何分库分表 分库分表常见几种方式以及优缺点 如何选择分库分表的方式 数据库常见优化方案 对于后端程序员来说,绕不开数据库的使用与方案选型,那么随着业务规模的逐渐扩大...= K1 / D 扩容后: 如果M为偶数,即M= 2*N K2 = H% (2DT) = (2NDT+K1)%(2DT) = K1%(2DT) ,K1 一定小于(2DT),所以K2=K1 D2 = K2%...+K1)%(2DT) = DT + K1 D2 = K2 %(2D) = (DT+K1) % (2D) T2 = K2 /(2D) = (DT+K1) / (2D) 结论:扩容后库序号表序号都变化...K2=K1 D2 = K2/T  = K1 /T = D1 T2 = K2%T = K1 % T = T1 如果M为奇数,即M = 2*N+1 K2 = H%(2DT) = (2NDT +DT +K1...同时,对于写入操作可以采用随机选择或者顺序选择一个库表进入写入。 那么由于路由关系表的存在,我们在数据扩容时,无需迁移历史数据。

94650

为什么要重写 hashcode equals 方法?

为什么要重写equalshashCode方法 当我们用HashMap存入自定义的类时,如果不重写这个自定义类的equalshashCode方法,得到的结果会和我们预期的不一样。...由于k1k2是两个不同的对象,所以它们的内存地址一定不会相同,也就是说它们的hash值一定不同,这就是我们无法用k2的hash值去拿k1的原因。...当我们把第1617行的hashCode方法的注释去掉后,会发现它是返回id属性的hashCode值,这里k1k2的id都是1,所以它们的hash值是相等的。 我们再来更正一下存k1k2的动作。...但k1有可能仅仅是k2具有相同的hash值,但未必k2相等(k1k2两把钥匙未必能开同一扇门),这个时候,就需要调用Key对象的equals方法来判断两者是否相等了。...由于Object的固有方法是根据两个对象的内存地址来判断,所以k1k2一定不会相等,这就是为什么依然在26行通过hm.get(k2)依然得到null的原因。

61420

为什么要重写 hashCode equals 方法?

为什么要重写 equals hashCode 方法 当我们用 HashMap 存入自定义的类时,如果不重写这个自定义类的 equals hashCode 方法,得到的结果会和我们预期的不一样。...由于 k1 k2 是两个不同的对象,所以它们的内存地址一定不会相同,也就是说它们的 hash 值一定不同,这就是我们无法用 k2 的 hash 值去拿 k1 的原因。...但是问题还没有结束,我们再来更正一下存 k1 k2 的动作。存 k1 时,是根据它 id 的 hash 值,假设这里是 103,把 k1 对象放入到对应的位置。...但 k1 有可能仅仅是 k2 具有相同的 hash值,但未必 k2 相等,这个时候,就需要调用 HashMapKey 对象的 equals 方法来判断两者是否相等了。... k2 一定不会相等,这就是为什么通过 map.get(k2) 依然得到 null 的原因。

46620

火遍外网的Keychron测评,带你入坑;ps马上5.20了送一个给你的心爱的她他。

1.键盘keychron k1,2,6,8区别 l 配列 Keychron K1有87键104键两种配列 Keychron K2是84键配列,目前我最喜欢的键盘之一  Keychron K4是100...k1轴体特点:  K2/K4/K6/K8轴体特点 材质 K1只有合金边框,K2、K4、K6、K8都可以选择塑料边框或者合金边框 K2塑料边框/上 vs K2合金边框/下 灯光 Keychron...都可以选择白色LED背光或者RGB 2.Keychron K2的使用体验: KEYCHRON K2(京造K2)机械键盘使用体验 — 一款高颜值高性价比的爆款机械键盘 如果你喜欢机械键盘的声音触感,...又担心被线缆困扰的桌面,那么K2是个不错的选择。...K2有红轴,茶轴,青轴三种轴体,每种都会有不同的声音触感,也可以根据自己对不同配列的需求在K2、K4、K6中选择

30620
领券