所谓漫步攻击(Trawling Attacking)是指攻击者不关心具体的攻击对象是谁,其唯一目标是在允 许的猜测次数下,猜测出越多的口令越好.这意味着,最优的攻击者会首先猜测排名 r=1 的口令,接着猜测排名 r=2 的口令,依次类推.
参考references中的《口令安全研究进展》.
- code: 代码目录,可大致分为三类
-
可运行模块
- train.py: 训练模型的模块,需要提供-m/--model和-d/--dataset参数,详细说明见下.
- generate.py: 测试模型的模块,需要提供-m/--model和-d/--dataset参数,详细说明见下.
-
口令生成模型构建模块
- hmm4.py: 实现了reference《一种基于隐马尔可夫模型的口令猜测方法》的方法,感觉效果一般.
- mc.py: 实现了reference《口令安全研究进展》中所提到的多阶马尔可夫模型的方法
-
辅助用模块(不用太在意的模块)
- dataset.py: 用来加载数据集的模块.
- sampler.py: 在生成密码时,往往需要对一个概率分布进行采样操作,此文件中的Sampler类就是进行采样操作的一个封装类.
-
data: 数据集(csdn和yahoo太大了需要自行从课程网站上拿到,放在这个目录下)
- toy_training_set: 自己随便写的一个小测试集
- plain_txt_yahoo.txt: yahoo数据集,包含
- www.csdn.net.sql: csdn数据集,包含用户名、密码、邮箱.
-
model: 已训练模型的序列化文件
-
reference: 参考资料
首先在命令行中,进入code目录.
- 训练模型:
运行train.py模块,需要提供--model和--dataset参数(也可以分别缩写为-m和-d),比如下面这样
python train.py --model hmm4 --dataset csdn
就会使用csdn数据集训练一个隐马尔可夫模型,生成的模型以pickle序列化文件的形式(hmm4_csdn.pk)存于model中.
- 使用模型生成口令:
运行generate.py模块,需要提供--model和--dataset参数(也可以分别缩写为-m和-d),比如下面这样
python generate.py --model hmm4 --dataset csdn
就会使用基于csdn数据集训练的隐马尔可夫模型,随机生成100条口令,控制台中打印出来.
Password generated:
807508213881
820zailn
2777102792851
675351379982
xzuzy824
315360235
5208721625
...
- 添加其他模型:
如果要添加除hmm4和mc之外的模型,参照hmm4.py和mc.py文件的格式,定义一个模型class,其中包含fit和generate方法即可。最后需要改一下train.py和generate.py,具体可见代码。
-
调研各种方法
- 首先是references中的(不是很懂,得多看看)
- PCFG(上下文无关》)?reference中有一篇《基于主题PCFG的口令猜测模型研究_毕红军》.
- Zipf分布?reference中有一篇《Zipf's law in passwords》.
- reference中提到的其他方法.
- 其次可以看看nlp中文本生成的方法
- 暴力一点的,比如RNN,LSTM,GAN等. reference中有一篇《Recurrent GANs Password Cracker For IoT Password Security Enhancement》可以看看.
- reference中的《On the Semantic Patterns of Passwords and their Security Impact》.
- 首先是references中的(不是很懂,得多看看)
-
改进已实现的方法
- 按照《口令安全研究进展》中所述,将个人信息(如用户名、邮箱)与模型结合,实现Targeted models.
- 其他改进,如对Markov Chain进行smoothing.
-
任何其他可行的东西.