介绍本文将解释有关keytap工具的一些技术细节。我还将分享我对这个项目的一些想法。本项目已经开源,源码可以在这里下载。描述该工具的主要目标是使用在键盘上打字时产生的声音作为旁路攻击来猜测输入文本的内容。为此,该算法将训练集作为输入,其中包含录音和您在录音期间键入的键盘键。有了这些数据,算法就可以学习不同击键的声音,然后使用捕获的音频来尝试识别击键的声音。训练数据集的收集非常具体,收集收据的依据是键??盘,麦克风,以及两者之间的相对位置。如果任何因素发生变化,这种方法就变得毫无意义。幸运的是,目前的方法可以进行实时预测。该方法涉及的主要步骤如下:收集训练数据以创建预测模型,并不断学习检测键盘输入并预测每个特定的输入键。收集训练数据。这种收集训练数据的方法忽略了两次击键之间的声音。.我们只保留实际按键前后75-100毫秒的音频。这可能有点不准确,因为键盘敲击的延迟时间是随机的,程序捕捉到这个事件,也受硬件和软件因素的影响。例如,下图是我在键盘上敲击字母“g”的完整声波:从图中可以看出,在按键峰值之后,还有一个按键释放峰值。而keytap直接忽略了这个发布高峰。这样可能会提取额外的信息,但是为了简单起见,直接丢弃释放峰的数据。因此,字母“g”键的训练数据最终声波图如下:当然,75ms的间隙对打字速度有一定的限制。如果这段时间内key重叠,不同key的训练数据就会混在一起。一起。从上图也可以观察到,一个按键的训练声波越多越好。组合多个声波可以帮助减少环境噪音。此外,每个人的按键听起来可能略有不同,这取决于用户按下按键的方式。因此,您可能会为按键捕获不同的声音。此时创建预测模型体现了人非凡的创造力,可以通过机器学习、人工智能、神经网络等技术创建预测模型。但是keytap用的是最简单的方法。对于每个训练键,我们执行以下3个步骤:1.对齐收集到的波形峰值。这有助于避免检测到按键之前的随机延迟,如前所述。2.基于相似性度量优化声波对齐,因为有时声波的峰值并不是最好的指标,所以我们必须选择更准确的方法。3.其波形的简单加权平均。权重由相似性度量定义。我们没有直接跳到第2步,而是先执行第1步,因为相似性度量的计算非常耗CPU。而第1步有效地缩小了对齐范围,减少了计算量。在第3步之后,我们最终得到每次按键的平均波形。然后将其与捕获的数据进行比较并预测最有可能的击键输入。keytap中使用的相似性度量是互相关(CC),公式如下:其中Ai和Bi是被比较的两个波形的波形样本。CC值越高,波形越相似。当然,也可以采用其他的相似度度量测试方法。不同击键之间的时间间隔的时间信息实际上可以添加到预测模型中,但我避免了这种方法,因为它更难实现。检测键盘输入击键使用相对简单的阈值技术来检测原始音频中的按键事件。显然,当用户按下一个键时,我们期望出现高峰值,这正是我们想要的。该阈值相对于过去几百毫秒内的样本平均强度是自适应的。这种方法不是很完美,但我不知道现在有更有效的方法来检测按键事件。预测按下了哪些键一旦确定了可能的键事件,我们就可以定位波形的峰值并计算该部分波形与训练数据中所有平均波形之间的相似性度量。我们允许围绕峰值进行小幅调整(如前所述)。我们认为具有最高相似度的那个将对应于按下的键。我注意到一些观察结果,即使该算法没有检测到按下的是正确的键,它仍然可以预测附近的键,这意味着它将键定位在正确键的旁边。对于这种现象,我认为有以下两种解释:1.键盘上相邻的按键发出相似的声音2.这种方法中,按键相对于麦克风的位置对预测起着决定性的作用我认为第一种解释不太可能,所以第二种解释是可能的。此外,我观察到机械键盘比非机械键盘更容易受到这种类型的键盘敲击攻击。keytap2我很确定有一种方法可以实现根本不需要收集训练数据的预测。如果用户以已知语言(例如英语)输入文本,则有关语言的N-gram统计信息和用于击键检测的相似性度量的组合足以检测输入的文本。事实上,它归结为对破解置换密码的攻击。keytap2试图证明这种攻击。我也在做这方面的研究,但我被困在键根据他们的CC公式聚集的部分。但我认为至少我已经准备好破解排列代码。如果破解在实践中成功,我会提供更多细节。结论在科学文献中,有很多关于这个主题的论文。其中一篇论文中的一个特殊方法给了我很大的启发,那就是Don'tSkype&Type!有兴趣的可以看看。但大多数情况下,我是独立解决问题的,没有阅读别人论文中的细节和他们的研究成果,我觉得自己解决问题更有趣也更有挑战性。老实说,我真的没想到这篇文章会受到如此大的关注,完全出乎意料。这一切都始于我在HackerNews上发表的一条评论,该评论被一位知名开发人员注意到了。然后,我的Twitter提要爆炸了。总之,希望这篇文章对大家有所帮助,谢谢!
