问题标签 [timing-attack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 为什么 PHP 的 hash_equals() 函数中的参数顺序很重要?
PHP 5.6 引入hash_equals()
了安全比较密码哈希和防止定时攻击的功能。它的签名是:
如文档中所述,$known_string
并且$user_string
函数的长度必须相同才能有效防止定时攻击(否则,false
立即返回,泄漏已知字符串的长度)。
此外,文档说:
重要的是提供用户提供的字符串作为第二个参数,而不是第一个参数。
对我来说,函数的参数不是对称的,这似乎不直观。
问题是:
- 为什么最后提供用户字符串很重要?
以下是该函数源代码的摘录:
至于我,关于这两个论点,实现是完全对称的。唯一可以产生任何影响的操作是 XOR 运算符。
XOR 运算符是否有可能在非常量时间内执行,具体取决于参数值?它的执行时间可能取决于参数的顺序(例如,如果第一个参数为零)?
还是 PHP 文档中的这个注释是对未来版本中实现更改的“保留”?
编辑
如您所见,草案实现尝试处理不同长度的哈希,并且它不对称地处理参数。也许这个实施草案不是第一个。
总结: 文档中关于参数顺序的注释似乎是实施草案的遗留物。
c# - Comparing two byte arrays guarding against timing attacks
I want to write a method to compare two byte arrays, but I do not want to use these solutions because I want the method to be resistant to timing attacks. My method essentially looks like:
(with the assumption that a1
and a2
have the same length).
My concern is that a sufficiently smart just-in-time compiler might optimize this by returning early if result
is ever set to false.
I have checked the JITted assembly code produced by .NET 4.0.30319, and it does not:
However, I am thinking that this could change in the future.
Is there a way to prevent the JIT compiler from optimizing this method? Alternatively, is there a library function that I can use that specifically checks two byte arrays for equality, but resistant to timing attacks?
java - 通过比较进行字符串预测
今天我醒来并想是否可以仅分析每次比较之间的时间来预测字符串。
我创建了一个基本类(我知道这不是最好的算法,但它对我有用)来尝试证明这一点,答案是肯定的。
这个控制台显示:
该代码可以为我预测成功率为 90% 的字符串,那么我认为一个好的算法可能是一个问题。
这个问题会产生安全隐患吗?
php - PHP双重随机hmac验证防止定时攻击
防止哈希字符串比较的定时攻击的一种方法是执行额外的 HMAC 签名以随机化验证过程(请参阅https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011 /二月/双hmac验证/)。
除了每个散列的第二个 HMAC 散列之外,还向两者添加了一个随机长度的随机盐,以使散列时间/过程更加难以预测。
我的实现如下所示:
解密密文后调用该函数以验证解密结果:
这会成功防止定时攻击吗?我做了什么不必要的事情吗?有什么可以改进的吗?
第二个问题是对明文、密文或两者(如我的示例)执行 HMAC 验证是否更可取,以及为什么。
java - Java 中 MessageDigest.isEqual 函数的使用
我有两个问题我不明白。请帮我看看。谢谢。
Java中MessageDigest.isEqual函数有什么用?
解释为什么在 Java SE 6 Update 17 之前的某些版本中,它容易受到计时攻击。
windows - 使用 Windows 加密 API 在恒定时间内比较 2 个秘密
使用 Windows 加密 API,如何在恒定时间内比较两个字节数组是否相等?
编辑:秘密的长度是固定的并且是公共知识。
android - ARM 处理器上的缓存时序
我需要在带有 ARM Cortex A-15 处理器(三星 Galaxy Note 3 等)的智能手机上实现 AES 算法,并且需要观察和保存每个进程的缓存时序,回合。我该怎么做?准确地说,我需要观察处理器为每个明文-密钥对运行每一轮 AES 所花费的时间。我正在尝试在智能手机中找到定时攻击的实用性(专注于 Bernstein 修改后的攻击,但会看到跟踪驱动和访问驱动缓存攻击的可行性)。这是出于学术目的。我了解所用处理器的架构。问题在于汇编编程——没有得到正确的代码——以及如何将该程序加载到智能手机上。
c++ - 如果不等于 0,则将整数减为 1
我试图通过删除代码中的 if 语句来解决时序泄漏,但由于 c++ 对 if 语句中整数输入的解释,我被卡住了。
请注意,我假设编译器确实创建了一个条件分支,这会导致时序信息泄露!
原始代码是:
现在我正在尝试将其重写为:
因为 s 未绑定到 [0,1],所以如果 s 不在 [0,1] 范围内,我会遇到这样的问题:它会错误地乘以 A 和 B。如果不使用 s 上的 if 语句来解决这个问题,我该怎么办?
提前致谢
python - python在模数中生成数字
我需要迭代生成数字 x,它遵循这些条件
- (x^z) 模 n * x < n
- n 已知,z 在每个周期中变化
我需要它,因为我正在对 RSA 实施定时攻击,并且需要生成这样的数字来测量时间而不需要模块化减少
谢谢。