密码模式识别工具Passpat:键盘输入模式分析与安全检测

Passpat是一款基于键盘布局分析密码模式的工具,通过计算字符间的移动距离评估密码是否为键盘模式。支持多种键盘布局,适用于密码安全性分析,帮助识别易被猜测的键盘模式密码。

Passpat, Password Pattern Identifier

普遍认为,大多数常用密码基于字典单词,但有些人选择使用键盘模式。为了识别这些模式,我创建了Passpat。Passpat使用包含常见键盘布局的数据文件(请提交更多布局),遍历每个单词并根据其接近模式的程度进行评分。目前,模式定义为相邻键,例如qpalzm是一个模式,但识别此类模式目前不在项目范围内。

工作原理

工作原理相当简单:从第一个字母开始,检查下一个字符。如果它在同一个键上(如a到A或2到"),则评分为0,因为我们没有移动。如果移动一个字符距离(如1到2或a到S),则评分为1。重复此过程,检查2个字符距离、3个字符距离等,直到映射允许的范围。我认为超过单步移动的价值不大,但应用可以处理任何距离的移动。如果未找到字符,则添加最大距离(通常为一个字符)加一。这给出了键入单词时在键盘上移动的总距离分数。最后,将分数除以步数(字符数减1)得到单词的平均分数。

  • 分数0表示密码从未离开单个键,例如aAaaaAAAaaaaaA的分数为0。
  • 分数1表示每个字符距离前一个字符仅一步之遥,例如asdFDsw"34rfGh。
  • 分数为最大值表示每个键距离超过一步,例如aDgp4ma9r。

工作示例

我喜欢用示例说明,以下是一个示例。以密码Ade3#4%U在Mac键盘[1]上为例。它看起来相当随机,8个字符,混合字符集,但让我们检查它是否是一个模式。我将使用Mac键盘,仅映射单步移动,这意味着同一键评分为0,相邻键评分为1,其他键评分为2。

Last Key Current Key Score Description Running Total
A d 2 超过单键距离,评分2 2
d e 1 单键距离,评分1 3
e 3 1 单键距离,评分1 4
3 # 0 3和#是同一键,评分0 4
# 4 1 单键距离,评分1 5
4 % 2 单键距离,评分1 6
% U 2 超过单键距离,评分2 8

经过7步,运行总分为8,平均得分为8/7,模式分数为1.14285714286。这表明一个看起来相当随机的密码Ade3#4%U实际上几乎是一个键盘模式。

希望这讲得通,基本上,该应用计算键入时键之间移动的平均距离。

安装/使用

该应用在Ruby 1.9中编写和测试,可能不适用于1.8.x,但应适用于2.x。

不需要额外的gem,因此它应在纯净的Ruby安装上运行。

使用–help获取完整使用说明:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
./passpat.rb --help
passpat 1.0 Robin Wood (robin@digininja.org) (www.digininja.org)

Usage: passpat.rb [OPTIONS] ... PASSWORD_FILE
    --layout x, -l x: 使用指定的布局文件。未设置默认值,因此必须指定此选项
    --list-layouts: 显示可用的布局文件
    --help, -h: 显示帮助
    --verbose, -v: 详细消息

    PASSWORD_FILE: 要检查的密码列表

运行很简单,给它一个布局文件和一个密码列表进行分析:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
./passpat.rb --layout uk pattern_sample.txt 
Password: asdfghjkl
Total score = 8
Number of moves = 8
Pattern score = 1.0 out of 2

Password: apeofmsk
Total score = 14
Number of moves = 7
Pattern score = 2.0 out of 2

Password: aqwsxcdef
Total score = 8
Number of moves = 8
Pattern score = 1.0 out of 2

Total passwords processed: 3
Overall pattern score 1.3333333333333333 out of 2
Total length zeros found: 0
Total length ones found: 2

下载

Passpat作为Pipal github仓库的一部分发布。

如果您不确定如何使用github,只需点击大约中间左侧的ZIP按钮,这将给您一个zip文件,您可以解压缩并使用,就像下面的版本一样。

分析

我计划对一些密码列表运行此工具,这些列表我曾用Pipal分析过,以找到平均分数,并将在结果生成后发布。我认为我可能会发现从主要通过移动设备使用的站点或应用中获取的转储。由于移动设备不是最容易键入的设备,我认为人们自然会选择模式以使输入容易。

一旦我获得更多布局,对相同转储运行不同的布局可能会揭示有趣的结果。

所有这些都已使用UK键盘进行分析。

  • phpBB

    • Total passwords processed: 184344
    • Overall pattern score 1.7017217768424548 out of 2
    • Total length zeros found: 285
    • Total length ones found: 3083
  • Hotmail

    • Total passwords processed: 8930
    • Overall pattern score 1.7343977280864893 out of 2
    • Total length zeros found: 30
    • Total length ones found: 103
  • LinkedIn

    • Total passwords processed: 2950516
    • Overall pattern score 1.720141081248872 out of 2
    • Total length zeros found: 303
    • Total length ones found: 27680

我们需要更多布局

Passpat拥有的键盘布局越多,效果越好,请提交更多。我想看到的布局包括:

  • US
  • Dvorak
  • Australian
  • 任何非西方键盘,如泰语、日语等。

如果您感兴趣,请查看layouts/uk.rb中的UK键盘文件,它已完全文档化,是一个很好的起点。如果您需要任何帮助,请告诉我。

反馈/待办事项

与Pipal一样,初始版本未优化。我希望先获得一个可用的工具,并找出人们喜欢、不喜欢或希望添加的功能。如果您想贡献速度改进或新功能,请随时向github仓库提交拉取请求。

我还想添加根据分数对结果进行排序的功能。问题在于我必须在排序和显示之前将所有结果缓存在内存中。对于大型转储,这可能会占用大量内存,这是我想避免的。我会考虑一下。

CSV导出也可能有用,这将允许导入到电子表格中,以便您可以自行排序和分析结果。

致谢

感谢所有支持Pipal并帮助我完成此工具的人。

感谢BruCON

这是我由BruCON 5x5奖赞助的第二个工具。

[1] 使用此示例是因为我找到了一个很好的图像来说明。


支持网站

我不从此网站上的任何项目中获得报酬,因此如果您想支持我的工作,可以使用下面的联盟链接,我可以获得账户积分或现金返还。通常只有几分钱,但它们会累积起来。

给我买一杯冰沙

所有内容由Robin Wood创建,除非另有说明。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计