2017-01-16

关于时序攻击

前些日子,奇舞周刊公众号推送了一篇文章,《Node.js 面试问题及答案(2017 版)》。其中有一个问题很有意思,请看下面这段代码,有什么问题吗?

function checkApiKey (apiKeyFromDb, apiKeyReceived) {  
  if (apiKeyFromDb === apiKeyReceived) {
    return true
  }
  return false
}

可能很多人和我一样,一脸茫然。嗯哼?哪里错了?这不是挺好的嘛。

来看人家怎么说的,好像很有道理的样子:

嗯,这就是时序攻击(Timing Atack),旁路攻击(Side-channel attack)的一种。

恰巧今天刚刚看到一个 slide,讲的也是这方面的内容。看来性能优化有时候也有负面作用。

文中给出的几个链接,基本上已经能说明所有问题了。

Reference