首页
学习
活动
专区
工具
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/

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

相关·内容

  • 信息安全: MAC(消息认证码)算法,保护数据完整性真实性的利器

    CMAC(基于块密码的消息认证码): 使用块加密算法(如 AES)生成 MAC 值。 常用于无线通信支付系统中。...详细介绍 CMAC 的结构 CMAC 使用块加密算法(如 AES)进行运算,具体步骤如下: 使用密钥对零块进行加密,生成一个中间密钥 K1。...对 K1 进行左移操作,并根据最高位的值对生成的值进行异或操作,得到第二个中间密钥 K2。 将消息分成若干块,对每个块进行加密,最后一块使用 K1K2 进行加密。...值: {cmac_value}") 结论 MAC 算法在保证数据完整性真实性方面扮演着重要角色。...HMAC CMAC 作为两种主要的 MAC 算法,因其高安全性广泛应用,已经成为现代通信和数据保护中不可或缺的一部分。

    17210

    密码库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.

    72430

    消息认证码(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.9K10

    设线性表中每个元素有两个数据项k1k2,现对线性表按一下规则进行排序:先看数据项k1k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2k2值小的在前,大的在后。满足这种要求的

    题目: 设线性表中每个元素有两个数据项k1k2,现对线性表按一下规则进行排序:先看数据项k1k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2k2值小的在前,大的在后。...满足这种要求的排序方法是( ) A.先按k1进行直接插入排序,再按k2进行简单选择排序 B.先按k2进行直接插入排序,再按k1进行简单选择排序 C.先按k1进行简单选择排序,再按k2进行直接插入排序...D.先按k2进行简单选择排序,再按k1进行直接插入排序 答题思路: 首先我们要明确题意,这一题的排序是针对k1k2全体进行的,而不是说我排好k1后,再对每组相同的k1进行k2的排序。...这说明k1排序的优先级要比k2高,如果我们对k1先进行排序,后面对k2进行排序时就会打乱之前k1的排序。所以排序顺序是k2k1。...k1 选择排序之前: 标识 k1 k2 1 50 70 2 40 70 3 50 80 4 40 80 k1 选择排序之后: 标识 k1 k2 1 40 70 2 40 80 3 50 80 4 50

    11410

    斯坦福大学密码学-抗碰撞 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.9K41

    为什么要重写 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的原因。

    39910

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

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

    91220

    为什么要重写 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的原因。

    38220

    为什么要重写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的原因。

    35860

    为什么要重写 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的原因。

    43530

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

    阅读此文你将了解: 什么是分库分表以及为什么分库分表 如何分库分表 分库分表常见几种方式以及优缺点 如何选择分库分表的方式 数据库常见优化方案 对于后端程序员来说,绕不开数据库的使用与方案选型,那么随着业务规模的逐渐扩大...= 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...同时,对于写入操作可以采用随机选择或者顺序选择一个库表进入写入。 那么由于路由关系表的存在,我们在数据扩容时,无需迁移历史数据。

    1.6K51

    为什么要重写 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的原因。

    63820

    超硬核解析Apache Hudi 的一致性模型(第三部分)

    例如:{k1k2} • 值。例如:{A, B} • 单调Ts • True = 单调 ts 提供程序:例如 ZK。 • False = 非确定性本地时钟:发出介于 1 单调值之间的值。...让我们深入了解其中的一些场景,以了解为什么每种场景都是安全的或不安全的。...在进行暴力检查时,模型检查器实际上会探索每个操作的 1 最低单调值之间的所有时间戳值。 图 4.两位写入端都选择了时间戳 ts=1。...在 ts=3 时,读取器在一遍又一遍地重复其查询时会看到以下结果: • k1=空,k2=空 • k1=A, k2=空 • k1=A,k2=X • k1=B,k2=X 在 ts=4 时,读取器在一遍又一遍地重复其查询时会看到以下结果...: • k1=空,k2=空 • k1=A, k2=空 • k1=A,k2=X • k1=A, k2=Y <- 在 ts=3 的 k1=B 之前看到 ts=4 的 k2=Y • k1=B,k2=Y 在 ts

    15710

    为什么要重写 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 的原因。

    51820

    深入解析实时数仓Doris:Rollup上卷表与查询

    ,k2, k3, k4, k5, k6, k7) rollup_index1(k9) rollup_index2(k9) rollup_index3(k4, k5, k6, k1, k2, k3...= 等这些不能命中,然后看以下查询: SELECT * FROM test WHERE k1 = 1 AND k2 > 3; 有 k1 以及 k2 上的条件,检查只有 Base 的第一列含有条件里的 k1...= 10; 有 k9 以及 k1 两个条件,rollup_index1 以及 rollup_index2 的第一列都含有 k9,按理说这里选择这两个 rollup 都可以命中前缀索引并且效果是一样的随机选择一个即可...(因为这里 varchar 刚好20个字节,前缀索引不足36个字节被截断),但是当前策略这里还会继续匹配 k1,因为 rollup_index1 的第二列为 k1,所以选择了 rollup_index1...= 10 AND k2 > 200 AND k3 in (1,2,3); 首先判断查询是否可以命中聚合的 Rollup表,经过查上面的图是可以的,然后条件中含有 k1,k2,k3 三个条件,这三个条件

    33010
    领券