什么样的密码哈希算法和其他密码哈希(例如scrypt、bcrypt、PBKDF2、MD5、SHA-256)适用于面向消费者的智能家居环境中资源受限的IoT设备?
我正在研究的范围从超低功耗CPU设备(大多数嵌入式设备)到设备的处理能力相当于一个基本的树莓Pi。这包括ARM Cortex M3/A8/A9处理器和低成本的中国SoC(比如使用ARM 926的HiSilicon )。
发布于 2019-07-04 09:32:23
无论何时提出这个问题,答案都是“尽可能慢”。你不会因为使用一台缓慢的计算机而得到不同的答案。你的算法需要尽可能的慢,因为你的目的是可以接受的。
如果您只执行2轮PBKDF2,因为最便宜的Arduino只需2秒即可运行,那么这就是您所能做的最好的了。但这确实意味着,一个攻击者,如果他能在2微秒内完成这2轮的话,可以比你能阻止的速度快1000次(2秒除以2个S)。您的配置只会稍微保护用户的密码。
有些设备可能无法运行某些算法,因此这些算法被自动排除。不得不放弃记忆硬度(如Argon2,Scrypt)会略微降低安全性,但不会造成灾难性后果。除了不能使用的内容之外,推荐的内容是相同的: Argon2、Scrypt、Bcrypt或PBKDF2 (从最好到最坏的顺序)。如前所述,参数是“尽可能慢”。您应该对不同的参数进行基准测试,并选择可接受的最慢的参数。
在选择算法和参数之后,您应该通过将设置与攻击者所能做的比较来考虑现在的设置有多安全。那是国安局吗?那就假设他们有ASIC。你担心经常的商业间谍活动吗?假设一组昂贵的CPU和GPU。这取决于你想保护谁不受伤害。如果发现无法充分保护用户的密码,则可能需要警告用户使用短暂和唯一的密码。不过,您提到的CPU和平台(如Raspberry Pi)已经相当强大,因此在您的特定情况下可能没有必要这样做。
有关不同算法或选择一组参数的任何详细信息,请参见以下问题:
发布于 2019-07-05 06:33:23
没有密码散列算法适用于资源受限的设备.那是因为密码哈希一定是天生的慢。它在攻击者的计算机上需要慢,但在你的计算机上却不能慢得令人无法接受。但是,如果您的计算机速度慢,如微控制器,则攻击者的计算机上只需几分钟即可。
不要将密码存储在IoT设备上。一个典型的IoT设备无论如何都没有键盘输入,那么它为什么要存储密码呢?如果需要进行身份验证,请使用不打算由人记忆的身份验证令牌,从而验证它可以是简单的散列或签名验证,而不是密码哈希。如果您需要用户使用密码进行身份验证,这应该发生在控制服务器上,它是一台完整的PC (在云端或办公场所),PC为IoT设备生成身份验证令牌。
当涉及到为受限设备选择密码算法时,不要过分考虑它。在实践中,微调非标准算法的好处往往是有限的。使用标准算法,例如:
发布于 2019-07-03 13:57:49
您的安全需求不会降低,因为设备恰好在IoT中。(听说过“美食袭击”吗?)换句话说,您需要在整个聚合攻击表面应用您的安全配置文件。我们需要记住的另一件事是,IoT设备往往是泄漏的,而且更新很少(如果有的话)。
正如Schneier先生所说,密码散列是密码学的工作马。我们必须正确地使用它们,而不对盐类等进行偷工减料。对大多数IoT设备来说,散列可能过于耗费资源,特别是在正确的情况下。
在IoT中使用的一件事显然是椭圆曲线密码术,因为密钥大小要小得多。曲线25519无疑是推荐的,而不是NIST曲线。
事实上,如果我们真的进入了小型设备的细节,那么使用一次性的便携板可能会变得有意义,特别是当有一些存储空间的时候。如果我们使用适当的OTP进行机密性处理,那么Poly1305对身份验证是有意义的。或者共享秘密可能开始用于身份验证。埃斯卡。
我认为IoT是一个巨大的威胁。我们不需要降低安全性来满足设备的能力,我们需要确保每一步的安全,这很可能意味着共享秘密和存储强生成的密钥(在其他地方制造)。否则,IoT将成为攻击者梦想成真的目标。
https://security.stackexchange.com/questions/212848
复制相似问题