当前位置: 首页 > 面试题库 >

安全比较和简单==(=)有什么区别

姜泳
2023-03-14
问题内容

Github的安全webhooks页面说:

==不建议使用普通运算符。类似的方法secure_compare执行“恒定时间”字符串比较,从而使其免受常规正则运算符的某些定时攻击。

bcrypt.compare('string', 'computed hash')在比较密码时使用。

是什么使它成为“安全比较”,我可以使用cryptoNode中的标准库来做到这一点吗?


问题答案:

“恒定时间”字符串比较的意义在于,无论比较目标是什么(未知值),该比较将花费完全相同的时间量。此“恒定时间”不会向攻击者显示有关未知目标值可能是什么的信息。通常的解决方案是比较所有字符,即使在发现不匹配之后也是如此,因此无论在哪里发现不匹配,比较都将在相同的时间内运行。

当某些条件为真时,其他形式的比较可能会在较短的时间内返回答案,这使攻击者可以了解它们可能会丢失的内容。例如,在典型的字符串比较中,一旦发现不相等的字符,该比较将返回false。如果第一个字符不匹配,则比较返回的时间将短于匹配的时间。勤奋的攻击者可以使用此信息进行更智能的暴力攻击。

“恒定时间”比较消除了这些额外的信息,因为无论两个字符串如何不相等,该函数都会在相同的时间内返回其值。

在查看nodejs
v4加密库时
,我看不到有任何进行恒定时间比较的功能的迹象,并且在本文章中,将讨论有关nodejs加密库缺少此功能的事实。

编辑:节点v6现在具有crypto.timingSafeEqual(a, b)

在此缓冲区相等-恒定时间模块中还提供了这样的恒定时间比较功能。



 类似资料:
  • 问题内容: 我有一堂课,我已经简化为: 我想对这个东西进行排序。所以我创建了一个简单的copmarator: 然后,我使用的两个参数形式。 这对于我的测试用例来说很好用,但是有时由于数组以奇怪但可重复的顺序结束而完全出错。怎么会这样? 问题答案: 整数溢出…或更确切地说是下溢。 相反,进行显式比较: 如果您确定差异不会“绕回”,则可以使用减法。例如,当所讨论的值被约束为非负数时。

  • 为什么,给定: 这是否不安全: 但这是安全的: 我所说的安全是指保证不受溢出的影响(我正在编写一个整数的)。

  • 什么是更好的解决方案? 我在想,什么是性能上更好,或者哪个更“正确”? 或 我认为第二个是因为封装规则?

  • 本文向大家介绍Object.is()和比较操作符"="的区别是什么?相关面试题,主要包含被问及Object.is()和比较操作符"="的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 Object.is()类似于===,但在三等号判等的基础上特别处理了 NaN 、-0 和 +0 ,保证 -0 和 +0 不再相同,但 Object.is(NaN, NaN) 会返回 true。

  • 本文向大家介绍简单工厂和抽象工厂有什么区别?相关面试题,主要包含被问及简单工厂和抽象工厂有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 简单工厂:用来生产同一等级结构中的任意产品,对于增加新的产品,无能为力。 工厂方法:用来生产同一等级结构中的固定产品,支持增加任意产品。 抽象工厂:用来生产不同产品族的全部产品,对于增加新的产品,无能为力;支持增加产品族。

  • 本文向大家介绍` 单击 `和` 单击 `有什么区别?相关面试题,主要包含被问及` 单击 `和` 单击 `有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 绑定函数有三种方法 1、constructor绑定 2. 使用时绑定 3. 使用箭头函数 这种最简单 不用考虑this的指向问题 (但是会造成额外的渲染) 以上三种方法,第一种最优。 因为第一种构造函数只在组件初始化的时候执行一次, 第二种