在Crystal Kyber 规格说明,page no10中,有3种算法,即将CPA安全的Kyber转化为CCA的KYBER.CCAKEM算法。
Q1:如何在KYBER.CCAKEM.Enc & KYBER.CCAKEM.Enc中生成共享密钥K与CPA安全算法相关?
Q2:对于CPA安全算法,共享密钥K是否用作输入参数?
发布于 2023-03-13 08:41:59
A1:K是将密钥派生函数应用于与消息和公钥的哈希连接的KYBER.CPAPKE.Enc()
函数输出的哈希的结果。这可以在Kyber.CCAKEM.Enc()
函数规范的第5行中看到(在这里,c是每4行KYBER.CPAPKE.Enc()
的输出)。在KYBER.CCAKEM.Dec()
中,返回的K值要么与KYBER.CCAKEM.Enc()
中返回的值相同,要么是一个假值,如果c被认为是恶意生成的,则该值将被发布。
A2:不是,但是KYBER.CPAPKE.Enc()
的输入r现在是消息和公钥的哈希(参见KYBER.CCAKEM.Enc()
的第3和第4行)的输出,而不是任意的值。
这里的问题是,带有错误的(模块)学习方案容易发生解密失败,而对手可以根据这些失败获取有关私有值的信息。特别是,如果一个CCA对手恶意地制造出比KYBER.CPAPKE.Enc()
过程所允许的值更大的秘密向量和错误值,那么故障就更有可能发生。KYBER.CCAKEM.Enc()
和KYBER.CCAKEM.Dec()
(藤崎-冈本变换的一个变体)中的进程确保合法地创建随机秘密和错误值,并将其作为解密过程的一部分检查为合法。
https://crypto.stackexchange.com/questions/105635
复制相似问题