当前位置: 首页 > 科技观察

输入密码时一定要静音!Github上有黑客通过麦克风窃取密码

时间:2023-03-20 01:58:04 科技观察

Github搜索:“ggerganov/kbd-audio”这个项目的主要目标是利用键盘按键产生的声音作为辅助通道来猜测内容键入的文本。为此,该算法将包含录音和录音期间键入的相应键的训练集作为输入。该算法使用此数据了解不同击键的声音,然后尝试仅使用捕获的音频来识别声音。从某种意义上说,这个训练集是特定于特定设置的——键盘、麦克风以及两者之间的相对位置。改变这些因素中的任何一个都会使该方法无效。此外,当前的实现可以实时进行预测。实施中涉及的主要步骤如下:收集训练数据创建预测模型(学习步骤)按键检测为检测到的击键预测击键收集训练数据在当前的实施中,击键之间的声音被简单地丢弃。我们只在实际按下前后75-100毫秒内保留音频。这有点棘手,因为在按键和程序捕获的事件之间似乎存在随机延迟——很可能涉及硬件和软件因素。例如,这是在键盘上按下字母“g”时的完整音频波形:从图中可以看出,在压力峰值之后不久还有一个额外的释放峰值。Keytap只是忽略了发布峰值。这里可能提取其他信息,但为简单起见,数据被丢弃。最后,这个键的训练数据看起来是这样的:显然,75毫秒的窗口对打字速度施加了一些限制——如果在此时间段内击键重叠,则不同键的训练数据混合在一起。另一个观察结果是,训练波形越多可用的钥匙-更好。组合多个波形有助于减轻环境噪声。此外,每个键的声音可能会根据用户按下它的方式而略有不同,因此可以捕捉各种键可能发出的声音。创建预测模型人们可以在这里获得很多创造力——机器学习、人工智能、神经网络等。Keytap使用一种非常简单的方法。对于每个训练键,我们执行3个步骤:对齐收集到的波形的峰值。这有助于避免在检测到按键事件之前出现随机时间延迟(如前所述)。基于相似性度量的波形更精细的对齐。有时峰值不是最好的指标,所以我们使用更精确的方法。对齐波形的简单加权平均值。权重由相似性度量定义。我们不希望直接应用步骤2,因为相似性度量的计算可能是CPU密集型的。因此,步骤1有效地缩小了对齐窗口并减少了计算量。在第3步之后,我们最终得到每个键的平均波形。稍后将其与实时捕获的数据进行比较,并用于预测最有可能的密钥。按键期间使用的相似性度量是互相关(CC):这里,Ai和Bi是被比较的两个波形的波形样本。更高的CC值对应更相似的波形。也可以使用其他相似性度量。关于击键间隔的时间信息可以集成到预测模型中。到目前为止,我一直避免使用此类方法,因为它们难以实施。按键检测Keytap使用相对简单的阈值技术来检测原始音频中的按键事件。显然,当用户按下一个键时,我们想要一个巨大的尖峰,所以这就是我们想要的。这个阈值是自适应的——它与过去几百毫秒内的平均样本强度有关。这种方法绝对不是完美的,我希望我知道如何做一个更可靠的方法来检测新闻事件。我也不喜欢与当前阈值技术相关的自由参数。为检测到的按键预测按键一旦识别出潜在的按键事件,我们就可以确定波形中峰值的位置,并计算该部分波形与训练数据中所有平均波形之间的相似性度量。我们允许峰周围有一个小的对齐窗口(如前所述)。我们期望最高的相似性度量将对应于键入的键。我注意到一些观察,当算法未能检测到正确的键时,它仍然会预测附近的键。接近度,因为它就在真正的钥匙旁边。我可以想到2种解释:键盘上附近的键发出相似的声音在这种方法中,键相对于麦克风的位置对于预测很重要我认为选项1不太可能。另一个观察结果是,机械键盘比非机械键盘更容易受到此类攻击。关键2我很确定可以实现一种根本不需要收集训练数据的预测方法。假设用户正在用某种已知语言(例如英语)键入文本,关于该语言的N-gram的统计数据结合检测到的击键的相似性度量足以检测正在键入的文本。事实上,它归结为破解替代密码。Keytap2是一种演示此类攻击的尝试。我仍在努力-我被困在密钥根据其CC聚集的部分。但我认为至少我已经准备好备用密码破解部分。当它实际工作时,将尝试提供更多细节。