我使用Arduino Uno和板8001板来自Adafruit通过蓝牙连接到安卓手机。我将使用它锁定和解锁一个锁,我需要确保只有经过验证的设备才能启动锁定和解锁。我已经搜索了一堆,我很难找到一个明确的例子来验证连接设备。目前,我的Arduino连接到锁,每当Android手机连接,它被允许锁定和解锁。
我对密码学很陌生,一些指导会有帮助。据我所读,md5散列听起来既坏了,也不是我问题的正确解决方案。我找到了SipHash,这似乎是我最需要的东西。我所想到的过程如下。
我是否在正确的轨道上使用SipHash和上面的过程?有更好的更常见的方法来做这件事吗?在这里搜索后,我发现了一些信息这里。,看起来我应该担心中间人的攻击和MAC欺骗。我只是检查MAC地址作为验证,但据我所记得,这是非常容易伪造MAC地址。任何帮助都将不胜感激。
发布于 2014-12-27 04:12:37
你有正确的想法,也就是一个从未从一个设备传输到另一个设备的共享秘密。如果您这样做,您不需要担心MAC地址或MITM攻击。只有当攻击者能够获得该共享秘密时,您才会受到攻击。
由于共享秘密是{ahem}密钥,您需要确信它不能独立生成。一种方法是使用加密安全的伪随机数生成器(CSPRNG)生成它。您还可以考虑使用迪克瓦尔单词,这些词更人性化,但需要更长的字符串才能获得相同的熵。
现在,关于实际的算法: SipHash对我来说是新的,但是稍微读一下就会知道它是一个键控散列函数。也就是说,它不是可逆的,所以第4步不会像你所写的那样起作用。
如果SipHash是给定的,那么第3步是“Android使用共享密钥散列字符串并将其发送回Arduino。”
第4步才是真正的区别:“Arduino计算相同的哈希,并验证它与从Android接收的哈希匹配;如果它匹配,它就会继续使用锁或解锁连接/继续。”
或者,您可以使用对称加密,例如AES。在谷歌上搜索一下,可以找到Arduino的AES库,我知道它们是为Android而存在的。
https://security.stackexchange.com/questions/76922
复制相似问题