密码破解是黑客和攻击者想要获得您数据的主要途径之一。目前,大多数人还在认为复杂的密码不会被轻易攻破。然而, AI的最新技术应用打破了这一认知,一个名为 PassGAN的工具可以以秒为单位破解人类所设置的密码。
PassGAN如何破解密码
PassGAN是一种基于生成对抗网络(GAN)的密码猜测工具。其工作原理基于训练一个针对指定数据集的生成器和判别器网络,以便生成看起来真实但实际上是虚假的密码,同时另一个区分真伪密码的网络。PassGAN如何工作:
- 创建数据集
首先,PassGAN 需要大量的密码数据集来训练生成器和判别器网络。这个数据集通过从各类文本语料库中提取用户密码,并进行预处理和嵌入,形成向量化表示形式。
-
训练生成器网络
接下来,PassGAN使用像字符级长短时记忆(lstm)这样的序列模型,将密码数据集输入到生成器网络中进行训练。该生成器网络采用因子编码技术和噪声注入机制,可生成看起来逼真的虚假密码。
-
训练判别器网络
同时,PassGAN将另外一组随机生成的密码数据输入进去,用于训练另一个网络,即判别器网络,该网络可以区分真实密码和虚假密码的差异。判别器网络将生成器网络生成的密码与真实密码进行比较,并给出一个介于0到1之间的概率值,表明特定密码是真实的还是虚假的。
-
训练GAN
生成器网络和判别器网络集成到一起,两个网络以对抗学习的方式相互训练。生成器网络会尽可能地生成更加逼真的密码以欺骗判别器网络,而判别器网络通过比较真实密码和虚假密码来学习如何分辨两者之间的区别
一个密码破解的例子:
PassGAN是一个基于生成对抗网络(GAN)的密码***,它可以通过学习真实密码的分布来生成类似的虚假密码,以此实现对密码的破解。下面通过一个例子说明其工作原理。
假设有一个用户账号,其密码为“mypassword123”。为了破解该密码,攻击者使用PassGAN来生成类似的虚假密码。首先通过训练集中的真实密码进行训练,并生成一个网络模型,该网络模型能够生成与真实密码相似的虚假密码。由于PassGAN是基于生成对抗网络的,因此这个网络模型实际上由两个部分组成:一个生成器和一个鉴别器。
生成器的作用是生成一些看起来很像真实密码的虚假密码。在密码破解中,生成器就相当于破解者,它需要生成与真实密码尽可能相近的虚假密码。鉴别器的作用则是评估生成器生成的密码是否真实,以此来指导生成器的优化。在密码破解中,鉴别器就相当于检测器,它需要检测生成器生成的虚假密码是否足够真实。
具体地,PassGAN的工作流程如下:
-
使用多个真实密码样本训练生成器和鉴别器,生成器根据输入的噪声向量输出一个虚假密码。
-
鉴别器根据真实密码样本和虚假密码样本判断它们是否真实。
-
对于每个密码样本,通过多次迭代不断更新生成器和鉴别器。
-
完成训练后,生成器可以产生类似原始密码的虚假
PassGAN的关键代码
PassGAN是基于GAN(生成对抗网络)的密码猜测工具,它由两个深度神经网络组成:一个生成器网络和一个鉴别器网络。生成器网络被训练以生成类似于真实密码的样本,并欺骗鉴别器将其视为真实密码。鉴别器网络被训练以区分真实密码和生成的密码之间的差异。
PassGAN 的代码结构比较简单,包含 3 个核心部分:模型、数据处理和训练。在 models/
文件夹下有三个子文件:generator.py
, discriminator.py
和 loss.py
。这些文件定义了 PassGAN 所使用的 GAN 模型以及相应的损失函数。
utils/
文件夹下包含两个 Python 脚本,data_utils.py
及model_utils.py
, 提供数据预处理和模型训练/测试的功能。
train.py
实现了主要的训练过程。执行该脚本可在训练集上训练 PassGAN,并将训练好的模型保存在 models/
中。
最后是 sample.py
,该脚本依据已训练好的算法生成新密码样本。
所有的参数设置都在 config.py
中进行配置。
- data/ - passwords.txt # 训练数据- models/ - generator.py # generator 模型代码 - discriminator.py # discriminator 模型代码 - loss.py # 损失函数代码- utils/ - data_utils.py # 数据处理工具 - model_utils.py # 模型训练和测试的工具- train.py # 训练模型的主要脚本- sample.py # 生成密码样本的脚本- config.py # 存储所有的参数配置信息
Generator(生成器)的关键代码
python复制代码
def
build_generator
(
self
):
model = Sequential()
model.add(Dense(
32
, input_dim=self.latent_dim))
model.add(LeakyReLU(alpha=
0.2
))
model.add(BatchNormalization(momentum=
0.8
))
model.add(Dense(
64
))
model.add(LeakyReLU(alpha=
0.2
))
model.add(BatchNormalization(momentum=
0.8
))
model.add(Dense(
128
))
model.add(LeakyReLU(alpha=
0.2
))
model.add(BatchNormalization(momentum=
0.8
))
model.add(Dense(self.password_len, activation=
'tanh'
))
noise = Input(shape=(self.latent_dim,))
password = model(noise)
return
Model(noise, password)
上述代码段定义了生成器网络的结构。其中,输入为形状为(latent_dim,1)的噪声向量,输出为形状为(password_len,1)的生成密码向量。
Discriminator(鉴别器)的关键代码
def
build_discriminator
(
self
):
model = Sequential()
model.add(Dense(
128
, input_dim=self.password_len))
model.add(LeakyReLU(alpha=
0.2
))
model.add(Dense(
64
))
model.add(LeakyReLU(alpha=
0.2
))
model.add(Dense(
1
, activation=
'sigmoid'
))
password = Input(shape=(self.password_len,))
validity = model(password)
return
Model(password, validity)
上述代码段定义了鉴别器网络的结构。
AI挑战传统密码
大多数人还在认为复杂的密码不会被攻击者轻易攻破,因为他们想象的场景是,攻击者必须通过一个漫长而困难的过程来猜测可能的密码组合。但是PassGAN已经可以在大多情况下在短短几秒钟内猜出密码。这使得我们对自己密码安全的信心被严重打击,而脆弱密码被人轻易地破解,就像开门一样轻松。
AI面前,门锁已经没用,防护是否同样需要AI的加持。
原文始发于微信公众号(一知一讯):这个AI工具可以一秒破解你的密码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论