情况如下:USB设备连接到计算机,并将数据发送到特定的软件,该软件只应在发送设备先前验证/验证的情况下接受该数据。
因为任何人都可以反向工程软件正在做的事情(或多或少的努力),软件的源代码现在被认为是公开的。
当然,该设备的软件也不是100%安全的,并且可以进行反向工程,但是打开一些芯片等需要花费更多的时间和精力,因此设备(及其软件)被认为是私有的。
计算机和设备都没有连接到互联网上。
您是否知道在没有包含任何关键部分的计算机上进行身份验证的过程(这些软件可能是逆向工程和重构的,导致对“假的”USB设备和接受虚假数据的软件进行了积极的验证)?
谢谢大家的帮助!
发布于 2017-07-20 16:03:20
您所描述的是一些智能卡如何执行身份验证检查。然而,在您的情况下,智能卡是一个USB设备。这种做法与此类似:
如果仅仅是USB设备必须证明其身份,则应该在实际数据交换发生之前实现运行的身份验证方案。USB设备存储一个私钥,可以用来证明它的身份。例如,计算机向USB设备发送一个挑战,该设备返回一个使用其私钥签名的响应。计算机(它知道USB设备的公钥)现在可以验证它是否正在与USB设备通信:只有“真正的”设备才知道私钥,因此只有这个设备能够对挑战产生有效的响应。
如果要将此解决方案部署到少量设备上,可以考虑使用硬编码的私钥/公钥对。如果您想在更大范围或更动态的环境中部署此解决方案,您可能需要像TLS那样考虑使用证书(例如X.509)。
正如偏扇所指出的,在您的条件下,撤销密钥/证书可能会成为一个问题。
如果您想要相互身份验证(即USB设备和计算机必须相互证明身份),它会变得稍微复杂一些。在这种情况下,计算机也应该有一个私钥/公钥对,USB设备应该知道这一点。除了上述认证步骤外,USB设备现在还应该验证计算机是否对其挑战产生了有效的响应。
https://security.stackexchange.com/questions/165599
复制相似问题