如果攻击者和用户都不在共享的计算集群中,那么缓存定时通道(例如某些块密码的存在)是否可以被利用来提取内存访问模式信息?
发布于 2022-12-01 01:05:50
做了一些研究,发现了这的论文(在问题发布一年后发表)。从理论上讲,利用缓存定时攻击消除PBKDF2的存储硬度特性是理论上可行的。
扩展了本文的内容,说明了ROMix (本文将其表示为MHMIX)函数易受缓存定时攻击的影响。ROMix由以下伪代码描述:
Algorithm scryptROMix
Input:
r Block size parameter.
B Input octet vector of length 128 * r octets.
N CPU/Memory cost parameter, must be larger than 1,
a power of 2, and less than 2^(128 * r / 8).
Output:
B' Output octet vector of length 128 * r octets.
Steps:
1. X = B
2. for i = 0 to N - 1 do
V[i] = X
X = scryptBlockMix (X)
end for
3. for i = 0 to N - 1 do
j = Integerify (X) mod N
where Integerify (B[0] ... B[2 * r - 1]) is defined
as the result of interpreting B[2 * r - 1] as a
little-endian integer.
T = X xor V[j]
X = scryptBlockMix (T)
end for
4. B' = X他们描述了ROMix的以下部分容易受到缓存定时攻击:
j = Integerify (X) mod N
T = X xor V[j]
X = scryptBlockMix (T)他们的分析如下:
正如前面提到的,A是一个数组,它提供了它的内存-硬属性。A存储B的所有重复散列,使得AN = Mixn (B),其中Mixn (B)是散列B倍的结果(例如,Mix2 (B) =Mix( B,I),I)。在上面的代码行中,选择A的元素作为整数,通过解释散列结果将A的元素作为整数,并使用它们通过A(变量k)索引。散列结果是秘密信息(用户密码上的PBKDF2的求值)所特有的,也是从秘密信息导出的。由于这些内存访问依赖于密码,因此,在执行氪星时观察到的内存访问模式将提供关于PBKDF2算法第一步的评估结果的信息。
在我看来,他们对自己论点的论证并不深入,毕竟这是一篇学生论文。让我们再来分析一下。
在我们开始之前,这个RFC 7914中指定了scrypt,在它的维基百科文章上也可以找到一个很好的参考。首先,显然,内存访问是在这一行代码T = X xor V[j]上进行的。在最好的情况下,我们可以从缓存定时攻击中获得索引j。我们必须记住,在这个步骤中:T = X xor V[j]使用的X值是scryptBlockMix()函数在X上的应用,N-1次。为了简单起见,让我们假设我们可以以某种方式恢复X的值,但是请注意,这在实践中是不可能的,因为j = Integerify(X)函数丢失了X的很大一部分。现在,我们看到在第三步我们知道X和j的理想场景中,我们仍然不知道V数组用于T = X xor V[j]操作的内容。据我所知,在理想的情况下,这种攻击降低了对scryptBlockMix的几次调用,这取决于攻击的成功以及它能够捕获多少js。值得注意的是,它没有为B' (返回的值)提供任何信息,因为在最后一次访问内存之后,T是XORed和V[j],我们不知道V数组的内容。
概括地说:
scryptBlockMix的几次调用的安全性。所以我认为Maarten Bodewes是对的。
https://crypto.stackexchange.com/questions/37279
复制相似问题