首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino到Android安全蓝牙连接

Arduino到Android安全蓝牙连接
EN

Security用户
提问于 2014-12-27 02:27:08
回答 1查看 3.5K关注 0票数 4

我使用Arduino Uno和板8001板来自Adafruit通过蓝牙连接到安卓手机。我将使用它锁定和解锁一个锁,我需要确保只有经过验证的设备才能启动锁定和解锁。我已经搜索了一堆,我很难找到一个明确的例子来验证连接设备。目前,我的Arduino连接到锁,每当Android手机连接,它被允许锁定和解锁。

我对密码学很陌生,一些指导会有帮助。据我所读,md5散列听起来既坏了,也不是我问题的正确解决方案。我找到了SipHash,这似乎是我最需要的东西。我所想到的过程如下。

  1. Android试图连接到Arduino
  2. Arduino看到请求并向Android设备发送一个随机字符串。
  3. Android用共享密钥加密字符串,并将其发送回Arduino。
  4. Arduino对加密的字符串进行解密,并验证其与发送的原始字符串匹配,如果符合,则继续使用锁定或解锁连接/继续。

我是否在正确的轨道上使用SipHash和上面的过程?有更好的更常见的方法来做这件事吗?在这里搜索后,我发现了一些信息这里。,看起来我应该担心中间人的攻击和MAC欺骗。我只是检查MAC地址作为验证,但据我所记得,这是非常容易伪造MAC地址。任何帮助都将不胜感激。

EN

回答 1

Security用户

回答已采纳

发布于 2014-12-27 04:12:37

你有正确的想法,也就是一个从未从一个设备传输到另一个设备的共享秘密。如果您这样做,您不需要担心MAC地址或MITM攻击。只有当攻击者能够获得该共享秘密时,您才会受到攻击。

由于共享秘密是{ahem}密钥,您需要确信它不能独立生成。一种方法是使用加密安全的伪随机数生成器(CSPRNG)生成它。您还可以考虑使用迪克瓦尔单词,这些词更人性化,但需要更长的字符串才能获得相同的熵。

现在,关于实际的算法: SipHash对我来说是新的,但是稍微读一下就会知道它是一个键控散列函数。也就是说,它不是可逆的,所以第4步不会像你所写的那样起作用。

如果SipHash是给定的,那么第3步是“Android使用共享密钥散列字符串并将其发送回Arduino。”

第4步才是真正的区别:“Arduino计算相同的哈希,并验证它与从Android接收的哈希匹配;如果它匹配,它就会继续使用锁或解锁连接/继续。”

或者,您可以使用对称加密,例如AES。在谷歌上搜索一下,可以找到Arduino的AES库,我知道它们是为Android而存在的。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/76922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档