Javascript 检查对象密钥的存在是否被认为是定时安全的?

Javascript 检查对象密钥的存在是否被认为是定时安全的?,javascript,cryptojs,timing-attack,Javascript,Cryptojs,Timing Attack,因此,我正在为一个主要是私有服务器编写一个非常短的用户列表,这些用户的登录数据存储在一个对象中。对象的结构类似于{“username”:“hash”}。我想知道使用if(users[username){timingSafeCompare(hash,users[username])}这样的东西是否被认为是定时安全的 我想用像这样的东西 let u = false for(un in users) { if(timingSafeCompare(username,un) &&

因此,我正在为一个主要是私有服务器编写一个非常短的用户列表,这些用户的登录数据存储在一个对象中。对象的结构类似于{“username”:“hash”}。我想知道使用
if(users[username){timingSafeCompare(hash,users[username])}
这样的东西是否被认为是定时安全的

我想用像这样的东西

let u = false
for(un in users) {
    if(timingSafeCompare(username,un) && timingSafeCompare(hash,users[un])) u = username
}
return u
不过,我也不确定这样的时机是否安全


这方面最好的方法是什么?

这取决于引擎的实现

一些引擎使用哈希表存储属性并使用动态查找,哈希表的最坏情况时间复杂度为O(n)

,并将时间复杂度降低到O(1),以获得最佳情况。然而,随着道具数量的增加,它会退回到动态查找

对于同样具有O(1)时间复杂度的V8


如果你也要删除
用户
,那么
设置
映射
可以比对象表现得更好。使用
设置
也可以使它在语义上更正确。

非常感谢!该项目位于nodejs,所以是V8。你知道对象的道具的阈值是多少吗,比如V8之前它可以持有的道具数量回到动态查找?只是好奇,因为我将根据您的建议使用Set