问题标签 [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.

0 投票
1 回答
2663 浏览

php - 为什么 PHP 的 hash_equals() 函数中的参数顺序很重要?

PHP 5.6 引入hash_equals()了安全比较密码哈希和防止定时攻击的功能。它的签名是:

如文档中所述,$known_string并且$user_string函数的长度必须相同才能有效防止定时攻击(否则,false立即返回,泄漏已知字符串的长度)。

此外,文档说:

重要的是提供用户提供的字符串作为第二个参数,而不是第一个参数。

对我来说,函数的参数不是对称的,这似乎不直观。

问题是:

  • 为什么最后提供用户字符串很重要?

以下是该函数源代码的摘录:

至于我,关于这两个论点,实现是完全对称的。唯一可以产生任何影响的操作是 XOR 运算符。

  • XOR 运算符是否有可能在非常量时间内执行,具体取决于参数值?它的执行时间可能取决于参数的顺序(例如,如果第一个参数为零)?

  • 还是 PHP 文档中的这个注释是对未来版本中实现更改的“保留”?


编辑

正如Morpfh所说,最初的提案实施是不同的:

如您所见,草案实现尝试处理不同长度的哈希,并且它不对称地处理参​​数。也许这个实施草案不是第一个。

总结: 文档中关于参数顺序的注释似乎是实施草案的遗留物。

0 投票
4 回答
4045 浏览

php - 随机睡眠可以防止定时攻击吗?

来自维基百科

在密码学中,定时攻击是一种旁道攻击,其中攻击者试图通过分析执行密码算法所花费的时间来破坏密码系统。

实际上,为了防止定时攻击,我使用了从这个答案中获取的以下函数:

但我在想是否可以使用随机睡眠来防止这种攻击

或者也许增加睡眠的随机性

这种方法可以完全防止定时攻击吗?还是只是让工作更加努力?

0 投票
1 回答
448 浏览

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?

0 投票
1 回答
253 浏览

java - 通过比较进行字符串预测

今天我醒来并想是否可以仅分析每次比较之间的时间来预测字符串。

我创建了一个基本类(我知道这不是最好的算法,但它对我有用)来尝试证明这一点,答案是肯定的。

这个控制台显示:

该代码可以为我预测成功率为 90% 的字符串,那么我认为一个好的算法可能是一个问题。

这个问题会产生安全隐患吗?

0 投票
1 回答
367 浏览

php - PHP双重随机hmac验证防止定时攻击

防止哈希字符串比较的定时攻击的一种方法是执行额外的 HMAC 签名以随机化验证过程(请参阅https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011 /二月/双hmac验证/)。

除了每个散列的第二个 HMAC 散列之外,还向两者添加了一个随机长度的随机盐,以使散列时间/过程更加难以预测。

我的实现如下所示:

解密密文后调用该函数以验证解密结果:

这会成功防止定时攻击吗?我做了什么不必要的事情吗?有什么可以改进的吗?

第二个问题是对明文、密文或两者(如我的示例)执行 HMAC 验证是否更可取,以及为什么。

0 投票
2 回答
1937 浏览

java - Java 中 MessageDigest.isEqual 函数的使用

我有两个问题我不明白。请帮我看看。谢谢。

  1. Java中MessageDigest.isEqual函数有什么用?

  2. 解释为什么在 Java SE 6 Update 17 之前的某些版本中,它容易受到计时攻击。

0 投票
1 回答
131 浏览

windows - 使用 Windows 加密 API 在恒定时间内比较 2 个秘密

使用 Windows 加密 API,如何在恒定时间内比较两个字节数组是否相等?

编辑:秘密的长度是固定的并且是公共知识。

0 投票
0 回答
140 浏览

android - ARM 处理器上的缓存时序

我需要在带有 ARM Cortex A-15 处理器(三星 Galaxy Note 3 等)的智能手机上实现 AES 算法,并且需要观察和保存每个进程的缓存时序,回合。我该怎么做?准确地说,我需要观察处理器为每个明文-密钥对运行每一轮 AES 所花费的时间。我正在尝试在智能手机中找到定时攻击的实用性(专注于 Bernstein 修改后的攻击,但会看到跟踪驱动和访问驱动缓存攻击的可行性)。这是出于学术目的。我了解所用处理器的架构。问题在于汇编编程——没有得到正确的代码——以及如何将该程序加载到智能手机上。

0 投票
3 回答
231 浏览

c++ - 如果不等于 0,则将整数减为 1

我试图通过删除代码中的 if 语句来解决时序泄漏,但由于 c++ 对 if 语句中整数输入的解释,我被卡住了。

请注意,我假设编译器确实创建了一个条件分支,这会导致时序信息泄露!

原始代码是:

现在我正在尝试将其重写为:

因为 s 未绑定到 [0,1],所以如果 s 不在 [0,1] 范围内,我会遇到这样的问题:它会错误地乘以 A 和 B。如果不使用 s 上的 if 语句来解决这个问题,我该怎么办?

提前致谢

0 投票
1 回答
56 浏览

python - python在模数中生成数字

我需要迭代生成数字 x,它遵循这些条件

  • (x^z) 模 n * x < n
  • n 已知,z 在每个周期中变化

我需要它,因为我正在对 RSA 实施定时攻击,并且需要生成这样的数字来测量时间而不需要模块化减少
谢谢。