我的对称块密码工作起来有点像流密码,但它在128-bit块上工作。它在每一轮中生成一个128-bit块。在回合结束时,我要把它切成两个块,然后把它们相加在一起。我的意思是,在每一轮之后,我们取第一个a比特和第二个b比特的128-bit块,然后计算b+a。a等于0 to 127,它是从密钥调度中计算出来的,应该与随机不可区分。但是这种切片可以通过侧通道攻击来攻击。攻击者可以在每一轮中找到a_{0}、a_{1}、a_{2}等。
但我的密码就像流密码。这意味着它按步骤一点一点地计算,然后将它们合并成一个块。通常,我用这个来制作128-bit块,用于范围0-127中的i:
bitv是位值0或1,它来自密码函数。我们只是在这里做一些二进制字符串/块。我的想法是在结束时不要分割块,而是首先计算第一个a位,就像i在range 0-a中的字符串一样,其中a与密钥调度中的随机数有些区别:
然后将范围i中的a+1-127字符串的其余部分计算为:
无论如何,我们仍然需要做两个循环" for“。第一是i在范围0-a和第二在范围a+1-127在圆内。有没有可能通过侧通道攻击来攻击它?攻击者能检测到第一个循环何时结束,第二个循环何时启动,然后找到a吗?
发布于 2020-10-02 02:42:35
关键的时间表应该被视为秘密。你的侧频道显示了关键的时间表。即使您的密钥调度与随机没有区别,攻击者通常仍然可以导出密钥。由于您的密钥调度与加密算法相同,因此与您的加密算法一样,它本身就容易受到相同的攻击。即使不是,您的密钥调度可能仍然不是一个安全的散列算法,因此甚至可以获得原始密钥。
大多数(所有)操作模式都是中断的,即使只显示了关键的时间表,但没有显示关键。有些人(稍微)比其他人更不坏。
任何依赖于数据的内存访问都启用了侧通道。即使内存访问的总数是恒定的,也不能假定这提供了安全性。如果我对位1,...,a执行一些计算,并且对位a+1,...,128执行另一个(可能是相同的)计算,我刚刚执行了一种不同的内存访问模式,并显示了a的值(在实现中这几乎是不可能修复的)。不要担心for循环需要一个if语句来告诉何时中断(编译器隐式地添加了它)。这意味着您已经允许缓存定时、分支预测和分支定时攻击。
的影响
所有的侧通道攻击,即使是硬件依赖的,都被认为对安全的加密实现有害.
https://crypto.stackexchange.com/questions/84294
复制相似问题