最近 Wikipedia 破坏检测竞赛的获胜者表示,可以通过“检测随机键盘击中考虑 QWERTY 键盘布局”来改进检测。
例子:woijf qoeoifwjf oiiwjf oiwj pfowjfoiwjfo oiwjfoewoh
是否有任何软件已经这样做了(最好是免费和开源的)?
如果没有,是否有一个积极的 FOSS 项目,其目标是实现这一目标?
如果没有,您会如何建议实施这样的软件?
最近 Wikipedia 破坏检测竞赛的获胜者表示,可以通过“检测随机键盘击中考虑 QWERTY 键盘布局”来改进检测。
例子:woijf qoeoifwjf oiiwjf oiwj pfowjfoiwjfo oiwjfoewoh
是否有任何软件已经这样做了(最好是免费和开源的)?
如果没有,是否有一个积极的 FOSS 项目,其目标是实现这一目标?
如果没有,您会如何建议实施这样的软件?
如果分析文本中的两个二元组在 QWERTY 术语中很接近,但在英语中的统计频率接近零(例如对“fg”或“cd”),那么就有可能涉及随机键盘敲击。如果找到更多这样的对,那么机会就会大大增加。
如果您想考虑使用双手进行抨击,那么测试与另一个字母分隔的字母是否为 QWERTY 接近度,但两个二元组(甚至三元组)用于二元组频率。例如,在文本“flsjf”中,您将检查 F 和 S 的 QWERTY 距离,但检查二元 FL 和 LS(或三元 FLS)的频率。
考虑两个字母序列的经验分布,即“给定字母 a 跟随字母 b 的概率”,所有这些概率都填满了 27x27 大小的表格(将空间视为字母)。
现在,将其与一堆英语/法语/任何文本的历史数据进行比较。使用 Kullback 散度进行比较。
根据我的经验,大多数键盘混搭往往都在主行。检查是否大部分使用的字符是 . 是相当简单的asdfjkl;
。
采用基于键盘布局的方法将提供一个很好的指标。使用 QWERTY 布局,您会发现任何给定文本中大约 52% 的字母来自键盘字符的顶行。大约 32% 的字符来自中间线,14% 的字符来自底线。虽然这从一种语言到另一种语言略有不同,但仍然存在可以检测到的非常清晰的模式。使用相同的方法来发现其他键盘布局中的模式,然后确保在检查乱码之前检测用于输入的任何文本的布局。即使模式很清楚,最好仅将此方法用作一个指标,因为这种方法最适用于较长的脚本。使用其他指标,例如与字母/数字混合的非字母/数字字符,
Fredley 的答案可以扩展到从附近字母构造单词的语法。
例如asasasasasdf
,可以使用连接as
、sa
和sd
的语法生成df
。
使用这样的语法,扩展到键盘上的所有字母(字母彼此相邻)可以在解析后让您衡量使用这种“乱码”语法可以生成多少文本。
警告:当然,任何讨论此类语法并列出“乱码”文本示例的文本的得分都会明显高于常规的拼写检查文本。
请注意,示例方法不会捕获“h4x0r rulezzzzz!!!!!”形式的破坏行为。
这里的另一种方法(可以与上述方法集成)是对被破坏文本的语料库进行统计分析,并尝试获取被破坏文本中的常用词。
编辑:
既然你假设 QWERTY,我想我们也可以假设英语?
KISS 怎么样 - 通过英语拼写检查器运行文本,如果它失败,则得出结论认为它可能是胡言乱语(问题是,为什么要区分快速输入的胡言乱语和随机的废话,或者就此而言与拼写非常糟糕的文本?)
或者,如果要考虑其他键盘布局(Dvorak,有人吗?)和语言,则可以通过所有可用的语言拼写检查器运行文本,然后继续(这也将提供语言自动检测)。
这不是非常有效的方法,但可以用作基线测试。
注意:
从长远来看,我认为破坏者会适应并开始破坏,例如来自其他维基百科页面的摘录,最终很难自动检测为破坏行为(好的,现有文本可以校验和并在重复时引发标记,但是如果文本来自其他来源,最终将很难)。