设置:
Raspberry运行iPhone查询的REST web服务。web服务使用JSON令牌进行身份验证和授权。我正试图找到一种尽可能安全的方式,让iPhone能够在没有太多麻烦的情况下从Raspberry中获得一个JWT --但是安全性比易用性更重要。
这两个设备将彼此紧密地操作,因此在物理受限的信道上进行令牌交换似乎是一个很好的解决方案,因为攻击者必须在此之前实际存在(例如,留下可以使用不同信道嗅探和中继信息的设备)或在令牌交换期间。
由于iPhone不允许开发者访问NFC芯片,这不是一种选择(我在其他地方也看到,它在10米的范围内容易受到MITM攻击)。
蓝牙数字比较似乎是一种可能的选择,因为它已经是已证明安全 (至少在v2.1)。
Q1:这仍然有效吗?蓝牙数字比较在蓝牙4.x中能被认为是安全的吗?
必须对设备是不理想的,但作为一个iPhone只会与覆盆子互动几天,然后被一个新的iPhone与相同的覆盆子Pi交互。我想避免每天清理Raspberry的配对设备列表。
我一直在考虑一种自定义解决方案,在这种解决方案中,我将生成一个(安全的)随机值,它将显示在连接到Raspberry Pi的显示器上。这将用作iPhone用户手动输入的短暂令牌,应用程序将使用此值向web服务发送auth请求。web服务将保持一个计时器,以确保短时间令牌只能在短时间内(例如5-10分钟)被交换为实际的JWT,以防止暴力攻击。我们可以假设PKI可以用于在Raspberry Pi和iPhone之间建立SSL连接,这样就可以以安全的方式执行将短命令牌转换为长寿命JWT的操作。
Q2:我知道设计自定义安全解决方案是一个可怕的想法,应该留给安全专家。不过,建议的策略似乎很简单,但肯定是有缺陷的,我想知道为何有问题。
发布于 2016-09-22 19:33:44
回答Q2:
据我所知,你并没有在这里发明什么东西。您正在使用一个非常简单的一次代码生成器.
在Pi上本地生成代码,使其在有限的时间内有效(可能几秒钟),要求将其输入电话,一旦使用,立即使其失效。
使用Pi作为本地with与适当的安全,它应该是足够的快速进出你需要。即使有人上了with,只要其他人是用HTTPS和你的OTP安全的,它应该是好的。
为了节省工作量和避免本地发明问题,请在Pi上使用一组标准库。Node.JS与ExpressJS和标准模块,如护照,头盔,卢斯卡或类似的可以处理登录和应用程序的安全性。本地生成的证书对HTTPS来说应该足够了。
这似乎是一种简单、标准和合理安全的方法。
https://security.stackexchange.com/questions/137578
复制相似问题