🚀 PassGPT
PassGPT是一个基于密码泄露数据训练的因果语言模型。该模型首次在这篇论文中被提出。此版本的模型是在过滤了长度最多为16个字符的密码后,基于RockYou泄露的密码数据进行训练的。你还可以在此处访问基于长度最多为10个字符的密码训练的PassGPT,且无其他限制。
这是论文中所报告模型的精选版本。词汇量被缩减至最有意义的字符,并且训练过程也进行了轻微优化。使用这些架构后,效果略有提升。
🚀 快速开始
PassGPT是一个基于密码泄露数据训练的因果语言模型,可用于密码生成相关的研究。使用前需申请访问权限,并确保仅用于非商业研究目的。
✨ 主要特性
📦 安装指南
使用前需要生成一个访问令牌来验证下载。
💻 使用示例
基础用法
以下代码可用于使用PassGPT生成一个密码:
from transformers import GPT2LMHeadModel
from transformers import RobertaTokenizerFast
tokenizer = RobertaTokenizerFast.from_pretrained("javirandor/passgpt-16characters",
use_auth_token="YOUR_ACCESS_TOKEN",
max_len=18,
padding="max_length",
truncation=True,
do_lower_case=False,
strip_accents=False,
mask_token="<mask>",
unk_token="<unk>",
pad_token="<pad>",
truncation_side="right")
model = GPT2LMHeadModel.from_pretrained("javirandor/passgpt-16characters", use_auth_token="YOUR_ACCESS_TOKEN").eval()
NUM_GENERATIONS = 1
g = model.generate(torch.tensor([[tokenizer.bos_token_id]]),
do_sample=True,
num_return_sequences=NUM_GENERATIONS,
max_length=18,
pad_token_id=tokenizer.pad_token_id,
bad_words_ids=[[tokenizer.bos_token_id]])
g = g[:, 1:]
decoded = tokenizer.batch_decode(g.tolist())
decoded_clean = [i.split("</s>")[0] for i in decoded]
print(decoded_clean)
高级用法
你可以在此处找到一个更灵活的采样脚本。
📚 详细文档
使用和许可声明
PassGPT仅用于研究目的并按此进行许可。模型和代码遵循CC BY NC 4.0许可协议(仅允许非商业使用),不得用于研究目的之外的其他用途。此模型绝不能用于攻击真实系统。访问需申请,请务必说明项目的详细信息和范围。
模型描述
该模型继承了GPT2LMHeadModel架构,并实现了一个自定义的BertTokenizer,该分词器将密码中的每个字符编码为单个标记,避免合并。它从随机初始化开始训练,训练代码可在官方仓库中找到。
密码生成
可以使用HuggingFace提供的内置生成方法,并以“密码起始标记”(即<s>
)为种子从模型中采样密码。
🔧 技术细节
📄 许可证
PassGPT遵循CC BY NC 4.0许可协议,仅允许非商业使用。详细信息请见许可证链接。
📖 引用我们的工作
@article{rando2023passgpt,
title={PassGPT: Password Modeling and (Guided) Generation with Large Language Models},
author={Rando, Javier and Perez-Cruz, Fernando and Hitaj, Briland},
journal={arXiv preprint arXiv:2306.01545},
year={2023}
}
⚠️ 重要提示
PassGPT仅用于研究目的,不得用于攻击真实系统。访问需申请,并务必说明项目的详细信息和范围。
💡 使用建议
使用前需要生成一个访问令牌来验证下载。在生成密码时,可根据需要调整生成参数以获得不同的结果。