Security 如何避免不使用时间戳的重放攻击

Security 如何避免不使用时间戳的重放攻击,security,replay,Security,Replay,我正在开发一个移动应用程序,它将一些加密数据发送到蓝牙设备,而这个蓝牙设备将数据发送到服务器。我的问题是,在这种情况下,如何防止重播攻击。有人可能使用假蓝牙设备获取信号并将其发送到服务器 移动应用程序在脱机模式下工作,并且与服务器没有连接。因此,使用同步的nonce或计数器没有帮助 我也不能使用时间戳来缩小攻击窗口,因为手机的时间可能不正确(与时间服务器同步) 我的移动应用程序和蓝牙设备之间的通信是单向的,我的移动应用程序只能向设备发送数据 一种方法是使用计数器,但允许它跳过大量步骤。例如,如

我正在开发一个移动应用程序,它将一些加密数据发送到蓝牙设备,而这个蓝牙设备将数据发送到服务器。我的问题是,在这种情况下,如何防止重播攻击。有人可能使用假蓝牙设备获取信号并将其发送到服务器

  • 移动应用程序在脱机模式下工作,并且与服务器没有连接。因此,使用同步的nonce或计数器没有帮助

  • 我也不能使用时间戳来缩小攻击窗口,因为手机的时间可能不正确(与时间服务器同步)

  • 我的移动应用程序和蓝牙设备之间的通信是单向的,我的移动应用程序只能向设备发送数据


一种方法是使用计数器,但允许它跳过大量步骤。例如,如果您在电话A中看到的最后一个计数器值是123,并且您得到的计数器值是156,那么您接受它,但任何超出[1241000123]范围的内容都将被丢弃(1000000完全是任意的,取决于您的使用情况)

这将防止重播攻击,但您必须注意传输不会发生,否则伪造计数器号码将是微不足道的。这可以通过每个设备都有一个秘密的MAC密钥来实现(只有在服务器和电话事先通信的情况下才可能实现)


值得一提的是,对交易进行身份验证(只有电话A有能力生成一条消息,表明它来自电话A),或者攻击者可以非常迅速地向上移动,并在电话A上进行拒绝服务。但是,从您对问题的措辞来看,这听起来像是您已经处理过的问题。

如果有人收到事务123而没有将其发送到服务器,该怎么办。在这种情况下,我的移动应用程序假设事务失败,并且不能通知服务器使使用的计数器无效(123)。这样,攻击者以后可能会发送捕获的消息。@hkazemi我明白了。我误解了,因为我想的是一个严格的重播(而不仅仅是延迟)。不幸的是,在这种情况下,我看不到任何方法可以避免这个问题。如果你不相信手机的时钟,我认为不可能对服务器的单向延迟设置任何限制(这基本上就是你要问的)。你想停止蓝牙设备和服务器之间的重播攻击,你已经信任设备和服务器之间的蓝牙连接了吗?@Marcus我不信任蓝牙连接。有人可能使用假设备从用户处获取数据(就像使用假POS终端窃取卡数据一样),并在捕获数据后通知用户交易失败,但稍后发送捕获的数据。我想避免重播/中间人攻击。用户的数据加密良好,不能被篡改,但可能会被捕获。