考虑QWERTY键盘布局的随机键盘击键检测

8

最近一次维基百科破坏检测比赛的获胜者建议,可以通过“考虑QWERTY键盘布局检测随机键盘敲击”来提高检测效果。

例如:woijf qoeoifwjf oiiwjf oiwj pfowjfoiwjfo oiwjfoewoh

是否有已经实现这个功能的软件(最好是免费且开源)?

如果没有,是否有一个旨在实现此目标的活跃FOSS项目?

如果没有,您会如何建议实现这样的软件?


1
防破坏检测算法已经包括基于词典/语法的检测,因此我在寻找一种不使用词典或语法,而是使用指纹模式的算法。 - Nicolas Raoul
1
“手指模式”与词典条目和语法规则有何不同?实际上,它们采用的是相同的方法,区别在于一个是正向检测,另一个是负向检测。此外,您的问题并不清楚——考虑到QWERTY键盘和Dvorak键盘,随机击键没有任何区别,除非它们不是真正的随机(也许更好地称之为“常用破坏构造”)。 - Unreason
@Unreason:关于你的第一个问题:我指的是现有人类语言的词典和语法。你提出的“负面检测”很有趣,欢迎将其作为答案提出。关于“此外”:我重新阐述我的问题:给定一系列在QWERTY键盘上键入的字符,如何计算它们被马虎地键入的概率?(即:由那些目标不是表达某些东西,而是快速输入许多字符的人打出,例如oiuroiqewrcoqf) - Nicolas Raoul
5个回答

7
如果分析的文本中两个二元组在QWERTY键盘上靠近,但在英语中几乎没有统计频率(如“fg”或“cd”),则有可能涉及随机按键。如果发现更多这样的二元组,则机会大大增加。
如果要考虑双手敲击,则需要测试用另一个字母隔开的字母的QWERTY接近度,但对于二元组(甚至三元组),则要考虑其出现频率。例如,在文本“flsjf”中,您将检查F和S的QWERTY距离,但对于频率,要检查FL和LS(或三元组FLS)。

1
+1 这听起来不错,但首先需要提取这些常见的假语二元组列表;否则最终结果将基于猜测(猜测哪些二元组或三元组是假语的特征)。 - Unreason
也许对于提问者来说,需要说明的是,二元匹配是拼写检查器中常见的算法。 - Unreason
1
接受。供参考的是,不寻常的二元组重复是一种准确的迹象。 - Nicolas Raoul
1
回到尼古拉的问题:有没有任何实现这种逻辑的开源库? - TheArchitect
对于那个问题,我不比谷歌更聪明。——@TheArchitect - Dialecticus

3
考虑两个字母序列的经验分布,即“在给定第一个字母后出现第二个字母的概率”,所有这些概率填充一个大小为27x27的表格(将空格视为一个字母)。
现在,将其与一堆英语/法语/其他文本的历史数据进行比较。使用库尔巴克散度进行比较。

我理解的是,要实现你的解决方案,我需要一个“混合文本”的语料库吗? - Nicolas Raoul
你需要一个标准英语文本语料库(例如维基百科文章)。 - Alexandre C.
我认为只考虑最新版本的文章(除非它确实很短)才有可能适用于维基百科的例子。 - Matthieu M.

2

根据我的经验,大多数键盘敲击都集中在主键区。检查使用的字符是否高度集中在 asdfjkl; 上是相当简单的。


1
哇,我从来没有注意到这一点,但是我的随意敲打确实如此! - Blindy

1
采用基于键盘布局的方法将提供一个很好的指示。在QWERTY布局中,你会发现在任何给定文本中,大约52%的字母来自键盘字符的顶部一行。约32%的字符来自中间一行,14%则来自底部一行。虽然这在不同语言之间略有不同,但仍存在着非常明显的模式可以被检测出来。使用相同的方法来发现其他键盘布局中的模式,然后确保在检查无意义输入之前检测到所使用的布局。尽管模式很清晰,最好仅将此方法用作一种指标,因为此方法在处理较长的脚本时效果最佳。使用其他指标,如与字母/数字混合的非字母/数字字符、文本长度等,将提供进一步的指标,当应用加权时,可以提供一个相当好的整体无意义输入指示。

0
Fredley的答案可以扩展到一种语法,该语法可以从附近的字母构建单词。
例如,asasasasasdf可以使用连接assasddf的语法生成。
使用这样的语法,扩展到键盘上的所有字母(与彼此相邻的字母)后,经过解析,可以给出一个文本可以用这个“无意义”的语法生成的程度的度量。
注意:当然,任何讨论这种语法并列举“无意义”文本示例的文本都会比常规拼写检查的文本得分高得多。
请注意,示例方法不会捕捉“h4x0r rulezzzzz!!!!!”形式的破坏行为。
另一种方法(可以与上述方法集成)是统计分析一组被破坏的文本,并尝试获取破坏文本中的常见单词。
编辑:
既然您假设QWERTY,我想我们也可以假设英语?

关于KISS - 运行文本通过英语拼写检查器,如果它失败了,那么可以得出结论,它可能是胡言乱语(问题是,为什么要区分快速输入的胡言乱语与随机无意义或者非常拼错的文本?)

另外,如果考虑其他键盘布局(Dvorak,任何人?)和语言,则可以运行文本通过所有可用的语言拼写检查器,然后继续(这也将提供语言自动检测)。

这不是非常有效的方法,但可以用作基准测试。

注意:
从长远来看,我想破坏分子会适应并开始破坏,例如摘自其他维基百科页面的摘录,这将最终很难自动检测到作为破坏行为(好吧,现有的文本可以进行校验和并在重复时引发标志,但如果文本来自其他来源,那么最终将很难)。


关于你的“请注意”段落:确实,“h4x0r rulezzzzz!!!!!”这种情况并不是我们的目标,而且实际上已经通过其他手段得到了解决,获胜者的论文也提到了这一点。简而言之:字符重复的“zzzzz”和过度的标点符号已经将其标记为可能的破坏行为。 - Nicolas Raoul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接