有一些文献(1,2)描述了EdDSA中的故障攻击。一个建议的对策是在第一个哈希调用的输入中添加随机性,后者输出一个标量。
本论文描述了对EdDSA的DPA攻击,并提出了类似的对策。然而,随机性必须放在一个特定的地方:
这可以通过用新的随机比特填充密钥来实现,这样,第一个1024位块仅由密钥和随机值组成,而攻击者不知道任何比特。
按照它们的表示法,这将意味着将H(b,M)更改为H(b,Z,M),其中Z是随机填充,使得b || Z的长度等于哈希的块大小。
但是,考虑Ed448,正如RFC 8032中所定义的(我将讨论的问题也适用于Ed25519ctx和Ed25519ph,但我将使用Ed448作为示例)。在符号操作中,哈希调用是SHAKE256(dom4(prehash, context) || b || PH(M), 114)。Pre散列是指示Ed448或Ed448ph的标志。上下文是一个可选的上下文字符串。dom4函数是:
dom4(x, y):八进制字符串"SigEd448" || octet(x) || octet(OLEN(y)) || y,其中x在0-255范围内,y是最多255个八进制字符串。"SigEd448“在ASCII (8位字节)中。
现在,我的问题是:向Ed448添加DPA对策的正确方法是什么?( Ed448ph,Ed25519ph,Ed25519ctx)?
我的第一个猜测是使用SHAKE256(dom4(prehash, context) || b || Z || PH(M), 114),Z是足够填充SHAKE245块大小的字节。但是,如果使用上下文,那么Z可能会变得太小。此外,论文还指出,第一个块必须“仅由密钥和随机值组成,而不需要攻击者知道的任何比特”。dom4函数的固定字节("SigEd448“等)会干扰这一点吗?怎么解决这个问题?
或者SHAKE256已经对DPA产生抗药性了?
发布于 2020-02-13 16:09:39
那张纸中通常使用的假设是,攻击者可以将固定的秘密与已知的(攻击者)和变化的数据混合在一起。
建议的解决方案是在密钥之后添加随机项,以填充SHA-512块大小。
通过这样做:
附带注意:如果我们用零填充键,而不是随机填充,我们就会将固定键与已知但固定的数据混合。在这种情况下,攻击者无法对密钥进行DPA。但是,她可以在第一个块之后使用DPA中间哈希值,这个值是秘密的,现在是固定的,并且将与已知的和可变的消息混合。
如果您仔细选择SHAKE256(dom4(prehash, context) || b || Z || PH(M), 114)的大小并假设攻击者无法控制上下文,那么使用Z随机数据的建议解决方案Z就能工作。
如果攻击者控制上下文,那么她可以选择将密钥(b)完全填充SHAKE256块的不同上下文,因此在计算中不使用随机,可以执行DPA。
如果攻击者无法控制上下文,则只需确保Z不太小并填充块即可。
例如,假设SHAKE256的块大小为136个字节,如果是len(dom4(prehash, context) || b)=134,由于一个大的上下文,那么Z的2个字节是不够的,您需要选择138个字节的Z (2来填充当前块,136个用于另一个完整块)。
更新:请注意,r的生成是侧通道攻击EdDSA的一种方式,但这并不是唯一的方法。标量乘法也应避免单次跟踪攻击(技术上不是DPA),S = (r + k * s)的计算可以被DPA作为目标,因为s是固定的和未知的,k是变化的和已知的。
https://crypto.stackexchange.com/questions/77260
复制相似问题