我正在开发移动应用,它会将一些加密数据发送到蓝牙设备,而蓝牙设备会将数据发送到服务器。我的问题是,在这种情况下,我该如何防止重放攻击。有人可能会使用虚假的蓝牙设备来获取信号并将其发送到服务器。
移动应用程序在脱机模式下工作,与服务器无连接。因此,使用同步的 nonce 或计数器无济于事。
我不能使用时间戳缩小攻击窗口,因为手机的时间可能不正确(与时间服务器同步)。
我的移动应用与蓝牙设备之间的通信是单向的,我的移动应用只能将数据发送到设备。
答案 0 :(得分:3)
执行此操作的一种方法是使用计数器,但允许它跳过大量步骤。例如,如果您从电话A看到的最后一个计数器值是123,并且您得到的计数器值为156,那么您接受它,但是您丢弃的[124,1000123]范围之外的任何值(1000000完全是任意的取决于你的用例)。
这可以防止重播攻击,但你必须注意传输不是malleable,否则伪造计数器数字就会微不足道。这可以通过为每个设备MAC密钥设置一个秘密来实现(只有在服务器和电话预先通信的情况下才能实现)。
值得一提的是,对交易进行身份验证会有好处(只有手机A能够生成一条消息,说明是来自手机A),或者攻击者可以非常快速地向上移动并拒绝服务在电话A上。然而,从你提出问题的方式来看,这听起来像是你已经处理过的事情。