PassGAN: A Deep Learning Approach for Password Guessing一种用于密码猜测的深度学习方法


论文PassGAN: A Deep Learning Approach for Password Guessing的翻译

abstract

最先进的密码猜测工具,如HashCat和John the Ripper,使用户能够根据密码哈希值每秒检查数十亿个密码。除了执行简单的字典攻击外,这些工具还可以使用密码生成规则扩展密码字典,例如单词的连接(例如“password123456”)和leet speak(例如,“password”变成“p4s5w0rd”)。尽管这些规则在实践中工作得很好,但将它们扩展为进一步的密码模型是一项艰巨的任务,需要专门的专业知识。

为了解决这个问题,在本文中,我们引入了PassGAN,这是一种用基于理论的机器学习算法代替人工生成密码规则的新方法。PassGAN使用生成对抗网络(Generative Adversarial Network, GAN),从实际密码泄露中自主学习真实密码的分布,并生成高质量的密码猜测,而不是依赖于手工密码分析。实验结果表明,该方法具有很好的应用前景。当我们在两个大型密码数据集上评估PassGAN时,我们能够超越基于规则和最先进的机器学习密码猜测工具。然而,与其他工具相比,PassGAN在没有任何关于密码或常见密码结构的先验知识的情况下实现了这个结果。此外,当我们将PassGAN的输出与HashCat的输出相结合时,我们能够比单独使用HashCat多匹配51%-73%的密码。这是值得注意的,因为它表明PassGAN可以自动提取相当数量的密码属性,而目前的技术水平的规则还没有对这些属性进行编码。

keywords

密码,隐私,生成式对抗网络,深度学习

1 INTRODUCTION

密码是最流行的身份验证方法,主要是因为它们易于实现,不需要特殊的硬件或软件,而且用户和开发人员都很熟悉[37]。不幸的是,多个密码数据库泄露表明,用户倾向于选择容易猜出的密码[15,20,49],主要由常见字符串(如password, 123456, iloveyou)及其变体组成。

密码猜测工具为识别以散列形式存储的弱密码提供了一种有价值的工具[67,73]。密码猜测软件的有效性依赖于针对每个密码哈希快速测试大量极有可能的密码的能力。密码猜测工具没有穷尽地尝试所有可能的字符组合,而是使用字典和以前密码泄露的单词作为候选密码。最先进的密码猜测工具,如John the Ripper[84]和HashCat[29],通过定义密码转换的启发式,进一步采用了这种方法,其中包括多个单词的组合(例如,iloveyou123456)、混合字母大小写(例如,iLoVeyOu)和leet speak(例如,il0v3you)。这些启发式算法,结合马尔可夫模型,允许开膛手John和HashCat生成大量新的极有可能的密码。

虽然这些启发式方法在实践中相当成功,但它们是特别的,基于用户如何选择密码的直觉,而不是基于对大型密码数据集的原则性分析。因此,每种技术最终都局限于捕获密码空间的特定子集,这取决于该技术背后的直觉。此外,开发和测试新规则和启发式是一项耗时的任务,需要专门的专业知识,因此具有有限的可伸缩性。

1.1我们的方法

为了解决这些不足,本文提出了一种基于深度学习的新方法来取代基于规则的密码猜测,以及基于简单的数据驱动技术(如马尔可夫模型)的密码猜测。在其核心,我们的想法是训练一个神经网络,以确定自主的密码特征和结构,并利用这一知识来生成遵循相同分布的新样本。我们假设,深度神经网络的表达能力足以捕捉描述大多数用户选择密码的各种属性和结构;同时,神经网络可以在没有任何先验知识或此类性质和结构的假设的情况下进行训练。这与当前的方法形成了鲜明的对比,比如Markov模型(隐含地假设所有相关的密码特征都可以定义为n-gram)和基于规则的方法(只能猜测与可用规则匹配的密码)。因此,使用神经网络生成的样本不局限于密码空间的特定子集。相反,神经网络可以自主编码广泛的密码猜测知识,包括并超越人类生成规则和马尔科夫密码生成过程中捕获的信息。

为了验证这一假设,本文引入了一种基于深度学习和生成对抗网络(GANs)[25]的密码猜测生成方法PassGAN。GANs是最近引入的机器学习工具,旨在在高维空间[25]中执行密度估计。GANs通过训练深度神经网络体系结构来执行隐式生成建模,该体系结构被提供一个简单的随机分布(例如,高斯或均匀分布),并通过生成遵循可用数据分布的样本。在某种程度上,他们隐式地用深度神经网络模拟了累积分布的逆,即x = F θ − 1 F^{−1}_θ Fθ1 (s),其中s是一个均匀分布的随机变量。为了学习生成模型,GANs使用了一种猫捉老鼠的游戏,在这种游戏中,深度生成网络(G)试图模仿样本的潜在分布,而有区别的深度神经网络(D)试图区分原始训练样本(即“真实样本”)和G生成的样本(即“假样本”)。这种对抗性的程序迫使D泄露有关训练数据的相关信息。这些信息有助于G充分重现原始数据分布。PassGAN利用这种技术来生成新的密码猜测。我们使用一组泄露的密码(真实的样本)来训练D。在每次迭代中,PassGAN(假样本)的输出更接近原始泄露中的密码分布,因此更有可能匹配真实用户的密码。据我们所知,这是第一个将GANs用于此目的的工作。

1.2贡献

PassGAN代表了一个有原则的、基于理论的密码猜测生成方法。我们探索和评估不同的神经网络配置、参数和训练程序,以确定学习和过拟合之间的适当平衡,并报告我们的结果。具体而言,我们的贡献如下:

  1. 我们证明GAN可以生成高质量的密码猜测。我们的GAN是在RockYou数据集的一部分上进行训练的[75],并在两个不同的数据集上进行测试:(1)RockYou数据集的另一个子集;(2) LinkedIn[48]泄露的密码数据集。在我们的实验中,我们能够从RockYou数据集的3,094,199个密码中匹配出1,350,178个(43.6%)唯一密码,从LinkedIn数据集的4,3354,871个密码中匹配出10,478,322个(24.2%)唯一密码。为了量化PassGAN生成新密码的能力,我们从测试集中删除了在训练集中出现的所有密码。结果是,RockYou和LinkedIn的测试数据分别为1978,367和40,593,536。在这种情况下,PassGAN在RockYou测试集中匹配了676,439个样本(34.6%),在LinkedIn测试集中匹配了8,878,284个样本(34.2%)。此外,PassGAN生成的绝大多数与测试集不匹配的密码仍然“看起来”像人类生成的密码,因此可能与我们实验中没有考虑的真实用户帐户匹配。
  2. 我们证明PassGAN与最先进的密码生成规则是有竞争力的。尽管这些规则专门针对我们评估中使用的数据集进行了调整,但PassGAN输出的质量与先进技术的密码规则相当。
  3. 使用密码生成规则的时候,可以被生成的惟一密码的数量由规则的数量和用于实例化它们的密码数据集的大小定义。相反,PassGAN可以输出几乎无限制的猜测密码次数。重要的是,我们的实验表明,使用PassGAN时,匹配的数量会随着生成的密码数量稳步增加。这很重要,因为它表明PassGAN的输出不局限于密码空间的一个小子集。因此,在我们的实验中,PassGAN最终能够比任何其他工具猜出更多的密码,即使所有工具都是在相同的密码数据集上训练的。然而,这个结果要求PassGAN使用PassGAN生成比使用其他工具更多数量的密码。
  4. PassGAN是目前基于深度神经网络[52]的密码猜测算法的有力竞争者。我们的结果表明,PassGAN的性能与Melicher等人的52基本匹配。
  5. 我们证明PassGAN可以有效地用于增加密码生成规则。在我们的实验中,PassGAN匹配的密码不是由任何密码规则生成的。当我们将PassGAN的输出与HashCat的输出组合在一起时,与仅使用HashCat相比,我们能够猜测51%到73%的额外惟一密码。

我们认为这项工作是迈向完全自动化生成高质量密码猜测的第一步。目前,与基于规则的方法相比,PassGAN的优点(即表达性、通用性和从样本中自主学习的能力)和输出大小方面的成本之间存在权衡。虽然基于规则的密码猜测工具可以在非常少的尝试次数内生成大量的匹配,但PassGAN必须输出更多的密码才能达到相同的结果。我们认为,这在实践中并不是一个问题,因为:(1)密码猜测工具可以很容易地组合在一起,一旦一个快速工具(如HashCat)用尽了它的尝试,一个更全面的工具(如PassGAN)可以继续生成新的匹配;(2)存储成本几十年来一直在稳步下降,一个便宜的8tb硬盘可以存储大约 1 0 12 10^{12} 1012次密码猜测。因此,可以将密码生成视为脱机过程。

由于这些原因,我们认为对密码猜测技术进行有意义的比较应该主要关注每种技术可以生成的匹配数,而不是这些匹配生成的速度。

我们认为这项工作是相关的、重要的和及时的。相关的原因是,尽管有很多替代方法[19,22,68,81,95],但我们几乎看不到密码会在短期内被替换的迹象。重要的是,建立密码猜测的限制——以及更好地理解真实世界的密码是如何被猜测的——将有助于使基于密码的系统更安全。而且是及时的,因为最近泄露的密码中包含了数以亿计的密码,[21]为攻击者提供了一个强大的数据来源来破坏系统,并为系统管理员重新评估密码策略。

1.3 PassGAN在媒体和学术界的应用

PassGAN自主学习密码特征和模式的能力,很像DeepMinds的AlphaGo自主学习围棋[2]的能力,吸引了多家媒体的关注。例如,PassGAN已经在Science Magazine [38], The Register [86], Inverse [51], Threatpost [54], Dark Reading [88], Technology Review News [13], Sensors Online[17]和其他文章中报道过[12,23,39,40,50,71]。此外,PassGAN被Dark Reading选为2017年[32]最酷的黑客之一。

加州大学伯克利分校(UC Berkeley)已经将PassGAN作为其研究生阶段课程“深度学习特别主题[5]”的阅读材料。

1.4本文较早版本的变更

本文对我们工作的早期版本[33]进行了更新和扩展。本文两个版本的差异可以总结如下:(1)我们发现了[33]中使用的PassGAN实现的一个问题,该问题导致生成的唯一密码数量大幅减少。我们纠正了这个问题,因此,在本文中,我们报告的唯一密码的生成速度大约比我们之前的工作高4倍;(2)在更新后的论文中,我们将PassGAN与最先进的基于马尔可夫模型的密码猜测方法进行了比较,并与Melicher等人在神经网络(RNN)上的工作进行了比较,此外还有John the Ripper和HashCat。

1.5组织机构

本文的其余部分组织如下。在第2节中,我们将简要概述GANs、密码猜测,并提供相关技术的概述。第3节讨论了用于实例化PassGAN的GAN的架构和训练选择,以及在我们的评估中使用的超参数。我们将在第4节报告PassGAN的评估,以及与最先进的密码猜测技术的比较。我们在第5节中总结了我们的发现并讨论了它们的意义。我们将在第6节进行总结。

2 背景及相关工作

2.1生成式对抗网络

生成对抗网络(GANs)将当前用于判别机器学习的深度神经网络的进展转化为(隐式)生成建模。gan的目标是从其训练集S = {x1, x2,…的相同分布中生成样本。, xn}。生成建模[62]通常依赖于封闭形式的表达式,在许多情况下,这些表达式不能捕获令人讨厌的真实数据。GANs训练生成深度神经网络G,该网络将多维随机样本z(来自高斯分布或均匀分布)作为输入,以从期望分布生成样本。GANs将密度估计问题转化为二值分类问题,其中g参数的学习依赖于判别性深度神经网络D, D需要区分S中的“真”样本和g产生的“假”样本。更正式地说,gan算法求解的优化问题可归纳为:

在这里插入图片描述

其中f(x; θ D θ_D θD)和g( z j z_j zj; θ G θ_G θG)分别表示D和G。优化结果显示了鉴别器和生成器深度神经网络目标之间的冲突。自Goodfellow等人[25]最初的工作以来,对GANs进行了一些改进[3,4,6 - 8,10,14,16,27,35,36,42,47,53,55,56,58 - 60,63,66,69,74,76,80,87,90,94,96],每一篇新论文都在该领域提供了新的改进。在本文中,我们依赖IWGAN[27]作为PassGAN的构建基础,因为IWGAN[27]是通过GANs生成文本的最早、最稳定的方法之一。有关IWGAN的更多细节,请参阅第3节。

2.2密码猜测

密码猜测攻击可能和密码本身一样古老[61],更正式的研究可以追溯到1979年的[57]。在密码猜测攻击中,对手试图通过反复测试多个候选密码来识别一个或多个用户的密码。

两个流行的现代密码猜测工具是约翰开膛手(John the Ripper, JTR)[84]和HashCat[29]。这两个工具都实现了多种密码猜测策略,包括:穷举暴力破解攻击;基于字典的攻击;基于规则的攻击,包括从字典单词的转换生成密码猜测[77,78];基于马尔可夫模型的攻击[70,85]。JTR和HashCat在猜测密码方面非常有效。具体来说,有几次从在线服务中泄露的超过90%的密码被成功恢复[72]。

Narayanan等人首先使用马尔可夫模型来生成密码猜测[64]。他们的方法使用手工定义的密码规则,比如生成的密码的哪一部分是由字母和数字组成的。Weir等人[92]随后使用概率上下文无关文法(probability Context-Free Grammars, pcfg)改进了该技术。使用pcfg, Weir等人[92]演示了如何从密码分发中“学习”这些规则。Ma et al.[49]和Durmuth et al.[20]后来扩展了这一早期工作。

图1:组成PassGAN的一个残差块分量表示
图1:组成PassGAN的一个残差块分量表示

据我们所知,密码领域首次利用神经网络的工作可以追溯到2006年,由Ciaramella等人。最近,Melicher等人[52]提出了一种基于循环神经网络的密码猜测方法FLA[26,83]。然而,这些工作的主要目的在于提供估计密码强度的方法。例如,Melicher等人的[52]旨在提供快速和准确的密码强度估计(FLA首字母缩写),同时保持模型尽可能轻量化,并最大限度地减少准确性损失。通过保持模型的轻量级,FLA实例化了一个可以通过(本地)JavaScript实现在浏览器中使用的密码强度估计器。为了达到这一目标,FLA在不显著牺牲精度的情况下使用了重量裁剪。与此相反,PassGAN专注于猜测密码的任务,并且尝试在没有用户选择密码的马尔科夫结构的先验知识或假设的情况下进行猜测。

3实验设置

为了利用GANs从训练集中有效估计密码概率分布的能力,我们对各种参数进行了实验。在本节中,我们将报告我们对特定GAN架构和超参数的选择。

我们使用Gulrajani等人[27]的wasserstein GANs (IWGAN)的改进训练来实例化PassGAN。本文中使用的IWGAN实现依赖于ADAM优化器[43]来最小化训练误差。

以下超参数描述了我们的模型:

  • 批处理大小,它表示在优化器的每一步中通过GAN传播的训练集的密码数量。我们用64个批处理大小实例化了我们的模型。
  • 迭代次数,表示GAN调用正向步和反向传播步的次数[45,46,79]。在每次迭代中,GAN运行一个生成器迭代和一个或多个鉴别器迭代。我们使用不同次数的迭代来训练GAN,并最终确定为199,000次迭代,因为进一步的迭代提供了匹配数量递减的回报。
  • 每个生成器迭代的鉴别器迭代次数,表示鉴别器在每个GAN迭代中执行多少次迭代。每个生成迭代的鉴别器迭代次数设置为10,这是IWGAN使用的默认值。
  • 模型维数,表示每个卷积层的维数。实验中,生成器和鉴别器都使用了5个残差层,在两个深度神经网络中,每个残差层都有128维。
  • 梯度惩罚系数(λ),它指定了针对输入[27]对鉴别器的梯度范数施加的惩罚。增加该参数可使GAN[27]训练更稳定。在我们的实验中,我们将梯度惩罚值设置为10。
  • 输出序列长度,表示由生成器(G)生成的字符串的最大长度。我们将GAN生成的序列长度从32个字符(IWGAN的默认长度)修改为10个字符,以匹配训练中使用的密码的最大长度。
  • 输入噪声向量(种子)的大小,它决定有多少来自正态分布的随机数作为输入输入G生成样本。我们将这个大小设置为128个浮点数。
  • 最大示例数,它表示要加载的最大训练项目数(PassGAN中为密码)。将GAN加载的最大样本数设置为整个训练数据集的大小。
  • Adam优化器的超参数:
    • 学习率,即模型权重调整的速度
    • 系数 β 1 β_1 β1,表示梯度的运行平均值的衰减速率。
    • 系数 β 2 β_2 β2,表示梯度平方的运行平均值的衰减速率。
    • 梯度平方的运行平均值。Adam优化器的 β 1 β_1 β1 and β 2 β_2 β2 系数分别为0.5和0.9,学习速率为 1 0 − 4 10^{−4} 104。这些参数是Gulrajani等人使用的默认值。

图1显示了PassGAN中一个残留块的结构。图2a和2b提供了PassGAN生成器和鉴别器模型的概述。在我们的实验中,我们在每个模型中使用了5个残差块。

我们的实验是使用在[28]找到的IWGAN的TensorFlow实现来运行的。我们使用TensorFlow版本1.2.1用于gpu [1], Python版本2.7.12。所有的实验都是在运行Ubuntu 16.04.2 LTS的工作站上进行的,64GB内存,12核2.0 GHz Intel Xeon CPU,以及11GB全局内存的NVIDIA GeForce GTX 1080 Ti GPU。

IWGAN。用于构造IWGAN[27]和PassGAN的构建块是残差块,如图1所示。它们是残差网络(ResNets)的核心组成部分,由He等人,[31]在CVPR ’ 16引入。在对深度神经网络进行训练时,最初的训练误差随着层数的增加而减小。然而,在达到一定的层数后,训练错误又开始增加。

为了解决这个问题,He et al.[31]引入了ResNet。与其他深度神经网络不同,ResNet包含层间的“快捷连接”[65]。这可以被看作是这些层的包装,并被实现为恒等函数(在图1中表示为残差块)。通过使用多个连续的残差块,ResNet随着层数的增加不断减少训练错误。

PassGAN中的残块由两个一维卷积层组成,通过校正线性单元(ReLU)激活函数相互连接,如图1所示。块的输入为恒等函数,增加卷积层的0.3·输出,得到块的输出。图2a和2b提供了PassGAN生成器和鉴别器模型的示意图。在我们的实验中,我们使用了5个残差块(见图1)。

3.1培训与测试

为了评估PassGAN的性能,并将其与最先进的密码生成规则进行比较,我们首先对来自RockYou密码泄漏的大量密码进行了GAN、JTR、HashCat、Markov模型、PCFG和FLA的训练[75].1该数据集中的条目表示常见和复杂密码的混合。

在这里插入图片描述

图2:PassGAN的架构。在训练过程中,鉴别器D对训练数据集中的密码进行处理,同时对生成器G产生的密码样本进行处理。根据D的反馈,G对其参数进行微调,生成与训练集中的样本分布相似的密码样本。在我们的设置中,一旦训练过程完成,我们就使用G来生成密码猜测。

RockYou数据集。RockYou数据集[75]包含32,503,388个密码。我们选择了所有长度不超过10个字符的密码(29599,680个密码,对应数据集的90.8%),并使用其中的80%(23,679,744个密码,9,926,278个唯一密码)来训练每个密码猜测工具。关于每种工具的培训过程,我们请读者参阅第3.2节。对于测试,我们计算了数据集剩余20%(5,919,936个总密码,3,094,199个唯一密码)与训练测试之间的(集)差。得到的1,978,367个条目对应于密码猜测工具以前没有观察到的密码。这允许我们只计算测试集中的重要匹配。

LinkedIn数据集。我们还对LinkedIn数据集[48]的密码进行了测试,长度不超过10个字符,这些密码在训练集中没有出现。LinkedIn数据集包含60,065,486个唯一密码(长度不超过10个字符的唯一密码为43,354,871个),其中40,593,536个密码不在RockYou的训练数据集中。(LinkedIn数据集的频率计数不可用。)LinkedIn数据集中的密码是哈希值而不是明文。因此,LinkedIn数据集只包含JTR和HashCat等工具能够恢复的明文密码,因此给予基于规则的系统一个潜在的优势。

我们的培训和测试过程表明:(1)在相同的密码分布下(即使用RockYou数据集进行培训和测试时),PassGAN对密码的预测效果如何;(2) PassGAN是否能够跨密码数据集进行泛化,即在RockYou数据集上进行训练,在LinkedIn数据集上进行测试,PassGAN的表现如何。

3.2 HashCat、JTR、Markov模型、PCFG、FLA密码采样过程

我们将选取的RockYou数据集3.1节中用于训练的部分作为HashCat Best64、HashCat gen2、JTR Spiderlab rules、Markov Model、PCFG、FLA的输入数据集,生成的密码如下:

  • 我们使用来自训练集的密码实例化HashCat和JTR的规则,密码按照频率降序排序(如[52])。HashCat Best64生成了754,315,842个密码,其中361,728,683个密码是唯一的,长度不超过10个字符。注意,这是Best64规则集在给定输入集(即RockYou训练集)下产生的最大样本数。使用HashCat gen2和JTR SpiderLab,我们从它们的输出中均匀地采样大小为 1 0 9 10^9 109的随机子集。这个子集由长度不超过10个字符的密码组成。
  • 对于FLA,我们根据[24]中提供的指令从[44]设置代码。我们训练了一个包含2个隐藏层和1个密集层的模型,其大小为512(参数的完整列表见附录A的表6)。为了与其他工具保持一致,我们没有对训练集进行任何转换(如删除符号或将所有字符转换为小写)。一旦训练完毕,FLA会枚举由概率阈值p定义的输出空间的一个子集:当且仅当密码的估计概率至少为p时,它属于FLA的输出。在我们的实验中,我们设置p = 1 0 − 10 10^{−10} 1010。这导致总共有747,542,984个密码的长度不超过10个字符。在我们的评估中使用这些密码之前,我们按照概率降序对它们排序。
  • 我们使用3-gram马尔可夫模型生成了494,369,794个长度不超过10的唯一密码。我们使用标准配置[18]运行这个模型。
  • 我们使用weir等人的PCFG实现[91]生成了 1 0 9 10^9 109个长度不超过10的唯一密码。

4评价

在本节中,我们将介绍我们的评估步骤。我们首先评估PassGAN输出生成的匹配数量,然后将其与FLA、流行的3克马尔科夫模型实现[18]、pcfg[91]、JTR密码生成规则(SpiderLab mangling规则[82])和HashCat密码生成规则(Best64和gen2规则[29])进行比较。这些密码生成规则通常用于密码猜测文献(如[52]),并在RockYou和LinkedIn等密码数据集上进行了多年的优化。由于这些特定于数据集的优化,我们认为这些规则很好地表示了使用基于规则的密码猜测可以获得的最佳匹配性能。此外,我们提供了PassGAN与HashCat Best64结合的实验结果。最后,我们对PassGAN和FLA在概率密度和密码分布方面进行了比较。

表1:PassGAN生成的与RockYou测试集中的密码匹配的密码数量。结果以唯一匹配的形式显示。

在这里插入图片描述

4.1 PassGAN的输出空间

为了计算PassGAN生成的密码空间的大小,我们生成了几个大小在 1 0 4 10^4 104 1 0 10 10^{10} 1010之间的密码集。我们的实验表明,随着密码数量的增加,生成的唯一(因此是新的)密码的数量也会增加。评估结果见表1。

当我们增加PassGAN生成的密码数量时,生成新的惟一密码的速度只会略微下降。类似地,匹配数量的增长速度(如表1所示)随着生成的密码数量的增加而略有下降。这是可以预料到的,因为比较简单的密码比较容易匹配,而剩下的(比较复杂的)密码需要大量的尝试才能匹配。

训练过程对过拟合的影响。训练GAN是一个迭代过程,包含大量的迭代。随着迭代次数的增加,GAN从数据的分布中学习到更多的信息。然而,增加步数也会增加过拟合的概率[25,93]。

为了对密码数据进行权衡,我们存储了中间训练检查点,并在每个检查点生成 1 0 8 10^8 108个密码。图3显示了这些密码中有多少与RockYou测试集的内容匹配。通常,匹配的数量会随着迭代的次数而增加。当我们停止了对GAN的训练,这个增加势头逐渐减少大约在125,000-135,000次迭代,然后再次在190,000-195,000次迭代时。这表明进一步增加迭代次数可能会导致过拟合,从而降低GAN生成各种各样的极可能密码的能力。因此,我们认为这种迭代范围对于RockYou的训练集来说已经足够了。

在这里插入图片描述

图3:PassGAN在各个检查点生成的唯一密码数量,与RockYou测试集匹配x轴表示PassGAN训练过程的迭代次数(检查点)。对于每个检查点,我们从PassGAN取样108个密码。

4.2评估PassGAN生成的密码

为了评估PassGAN输出的质量,我们生成了5· 1 0 10 10^{10} 1010个密码,其中大约7· 1 0 9 10^9 109个密码是唯一的。我们将这些密码与HashCat Best64、HashCat gen2、JTR SpiderLab、FLA、PCFG和Markov模型中长度不超过10个字符的输出进行了比较,请参阅第3.2节,了解这些工具的配置和采样过程。

在我们的比较中,我们的目标是确定PassGAN是否能够满足其他工具的性能,尽管它缺乏任何密码结构的先验知识。这是因为我们主要感兴趣的是确定PassGAN从密码列表中自主提取的属性是否能够表示足够的信息,以与目前最先进的人工生成规则和马尔科夫密码生成过程相竞争。

我们的结果表明,对于每一种工具,PassGAN都能够生成至少相同数量的匹配。此外,为了实现这个结果,PassGAN需要生成大量的密码,这些密码的大小与其他工具的大小相差一个数量级。RockYou和LinkedIn的测试集都是如此。这并不出乎意料,因为其他工具依赖于对密码的先验知识来猜测密码,而PassGAN则不需要。表2总结了我们对RockYou测试集的结果,表3显示了我们对LinkedIn测试集的结果。

我们的结果还表明,当PassGAN从不同的数据集猜测密码时,与基于规则的密码匹配相比,PassGAN具有优势。特别是PassGAN比HashCat能够在更少的尝试次数内匹配更多的密码(LinkedIn为2.1· 1 0 9 10^9 109 - 3.6· 1 0 9 10^9 109,而RockYou为4.8· 1 0 9 10^9 109 - 5.06· 1 0 9 10^9 109)。

表2:每个密码猜测工具对RockYou测试集生成的匹配次数,PassGAN生成的对应密码次数,以优于每个工具。HashCat Best64和FLA的匹配是通过详尽地枚举每个工具的整个输出来获得的。将FLA的最小概率阈值设为p = 1 0 − 10 10^{−10} 1010

在这里插入图片描述

表3:每个密码猜测工具对LinkedIn测试集生成的匹配数量,以及PassGAN生成的对应密码数量,以优于每个工具。HashCat Best64和FLA的匹配是通过详尽地枚举每个工具的整个输出来获得的。将FLA的最小概率阈值设为p = 1 0 − 10 10^{−10} 1010

在这里插入图片描述

4.3 PassGAN与HashCat结合使用

为了最大化猜测密码的数量,对手通常会使用多个工具的输出,以结合基于规则的工具(例如,快速生成密码)和基于ml的工具(例如,生成大量猜测密码)的优点。

为了评估PassGAN的设置,我们从RockYou和LinkedIn测试集中删除了HashCat Best64(我们实验中表现最好的规则集)匹配的所有密码。这导致了两个新的测试集,分别包含1348,300个(RockYou)和33394,178个(LinkedIn)密码。

结果表明,随着PassGAN生产的样品数量的增加,匹配的数量稳步增加。特别是,当我们使用7· 1 0 9 10^9 109个PassGAN密码时,我们能够匹配来自“新”RockYou数据集的51%(320,365个)密码,以及来自“新”LinkedIn数据集的73%(5,262,427个)额外的密码。这证实了将规则与机器学习密码猜测相结合是一种有效的策略。此外,它还证实PassGAN可以捕获基于规则的方法未覆盖的部分密码空间。考虑到这一点,HashCat[30]的最新版本引入了一个通用的密码候选接口,称为“慢候选”,允许使用诸如PCFGs[92]、OMEN[20]、PassGAN等工具。

4.4 PassGAN与FLA的比较

在本节中,我们将重点比较PassGAN和FLA,并特别关注概率估计。FLA是基于循环神经网络的[26,83],该模型通常是针对多个网站的密码泄露进行训练的,在我们的例子中是RockYou训练集。在密码生成过程中,神经网络每次生成一个密码字符。每个新字符(包括一个特殊的密码结束字符)在给定当前输出状态的情况下,根据其概率计算,这实际上是一个马尔可夫过程。给定一个训练有素的FLA模型,FLA输出以下六个字段:(1)密码,(2)该密码的概率,(3)估计输出猜测数,即该密码的强度,(4)该密码的随机试验的标准差(以猜测次数为单位),(5)这个密码的测量次数和(6)猜测数字的估计置信区间(以猜测的次数为单位)。[52]给出的评估表明,当测试大量猜测密码时(在 1 0 10 10^{10} 1010 1 0 25 10^{25} 1025范围内),他们的技术优于Markov模型、pcfg和JTR和HashCat常用的密码组合规则。

我们认为,公平规则的局限性之一恰恰在于用于估计密码的过程的马尔可夫性质。例如,123456;12345;123456789是RockYou数据集中最常见的三个密码,大约每66个密码中就有一个。同样,FLA最常见的密码以“123”或“love”开头,见表4b。相比之下,PassGAN最常生成的密码(表4c)往往显示出更大的可变性,因为样本由名称、名称和数字等组成。与表4a相比,PassGAN中最有可能的样本与训练集及其概率的相似性更接近于FLA。我们认为,由于FLA中密码生成过程的马尔可夫结构,任何未在n - gram范围内捕获的密码特征,都可能不会被FLA编码。例如,如果10个字符的密码的一个有意义的子集被构造成两个单词的连接(例如,MusicMusic),那么任何n≤5的Markov进程都不能正确地捕获这种行为。另一方面,如果给出足够的例子,PassGAN中使用的神经网络将能够学习这一特性。因此,当密码pookypooky被FLA分配了一个概率 p ≈ 1 0 − 33 p≈10^{−33} p1033(估计的猜测次数约为 1 0 29 10^{29} 1029次)时,它被PassGAN猜测了大约 1 0 8 10^8 108次。

图4:在特定的猜测次数下,FLA匹配到密码的百分比,PassGAN最多尝试了7· 1 0 9 10^9 109次。

在这里插入图片描述
为了进一步调查PassGAN和FLA之间的差异,我们计算了RockYou测试集中FLA至少需要输入 1 0 10 10^{10} 1010次密码的次数,而PassGAN能够在最初的7· 1 0 9 10^9 109个样本中猜出密码。这些是FLA赋予的低概率密码,尽管是由一些用户选择的。因为PassGAN可以对它们进行建模,所以我们认为FLA为这些密码分配的概率是不正确的。图4显示了我们的结果,即FLA在一定次数的猜测中匹配到的密码与PassGAN在7· 1 0 9 10^9 109次猜测中匹配到的密码的比率。结果表明,PassGAN比FLA能更准确地模拟多个密码。然而,这种优势会随着FLA猜测密码所需要的尝试次数的增加而减少,也就是说,随着对密码的估计概率的降低。这表明,通常情况下,这两种工具都同意为密码分配概率。

4.5仔细看看不匹配的密码

我们检查了PassGAN生成的一个密码列表,这些密码与任何测试集都不匹配,并确定这些密码中有很多都是人工生成密码的合理候选。因此,我们推测,PassGAN生成的大量与我们的测试集不匹配的密码,可能仍然与RockYou和LinkedIn以外的其他服务的用户帐户匹配。我们在表5中列出了这些密码的一个小示例。

5备注

在本节中,我们将总结我们的实验结果,并讨论它们在密码猜测上下文中的相关性。

字符级的GANs非常适合生成密码猜测。在我们的实验中,PassGAN在RockYou的另一个子集上进行训练时,从RockYou的密码数据集中提取的测试集中,PassGAN能够匹配34.2%的密码。此外,当PassGAN使用RockYou密码集进行训练时,我们能够匹配LinkedIn数据集中21.9%的密码。这是值得注意的,因为PassGAN能够实现这些结果,而不需要额外的密码信息(这些信息只出现在测试数据集中)。换句话说,PassGAN能够正确地猜出大量的密码,而这些密码只是一组样本而已。

目前基于规则的密码猜测非常有效,但也有局限性。在我们的实验中,当允许猜测的次数很少时,基于规则的系统能够匹配或超越其他密码猜测工具。这证明了熟练的安全专家能够以高概率编码生成正确匹配的规则。然而,我们的实验也证实了基于规则的密码猜测的主要缺点是,规则只能生成有限的、相对较小的一组密码。相比之下,PassGAN最终能够超过使用密码生成规则实现的匹配数量。

因此,猜测密码的最佳策略是使用多种工具。在我们的实验中,每种密码猜测方法在不同的设置下都有一个优势。我们的结果证实,结合多种技术可以获得最佳的整体性能。例如,通过将passgan的输出与Best64规则的输出相结合,我们能够匹配RockYou测试数据集中48%的密码(这代表了匹配数量增加了50.8%),以及来自LinkedIn数据集的30.6%的密码——增加了约73.3%。考虑到PassGAN和FLA目前的性能,单靠工具很快就能完全取代基于规则的密码猜测工具,这并非不可能。

表4:(a)按频次排序的RockYou训练数据集中出现的前50个密码。(b) FLA最常见的50个输出在RockYou训练集中出现的频率和等级。密码按FLA分配的概率排序。© PassGAN最常见的50个输出在RockYou训练集中出现的频率和等级。密码是根据它们在PassGAN的输出中出现的频率排序的。“-”表示密码不在训练集中。

在这里插入图片描述
表5:PassGAN生成的与测试集不匹配的密码示例。

在这里插入图片描述

GANs具有足够的表达能力,可以从马尔科夫过程、规则生成密码,并捕获更一般的密码结构。我们的实验表明,PassGAN与FLA具有竞争优势,后者将密码猜测主要视为一个马尔科夫过程。在没有任何密码规则知识或密码结构指导的情况下,PassGAN仅利用能够从有限数量的样本中提取的知识,就能在猜测的数量级内匹配FLA的性能。此外,由于GANs是比Markov模型更通用的工具,在我们的实验中,PassGAN能够生成匹配的密码,这些密码被FLA认为是非常不可能的,使用有限的猜测次数。

GANs对训练数据集以外的密码数据集有很好的泛化能力。当我们在与训练集(RockYou[75])不同的数据集(LinkedIn[48])上评估PassGAN时,匹配率的下降是适度的,尤其是与其他工具相比。此外,当在LinkedIn上进行测试时,与RockYou相比,PassGAN能够在更低或相同的猜测次数内匹配其他工具。

目前的GANs密度估计仅对其产生的空间的一个子集是正确的。实验表明,IWGAN的密度估计与高频密码训练集匹配。这一点很重要,因为它允许PassGAN尽早生成极有可能的密码。然而,我们的实验也表明,随着密码频率的降低,PassGAN的密度估计的质量下降。虽然随着PassGAN生成更多的密码,这一点变得不那么重要,但它表明,如果使用执行更精确密度估计的字符级GAN实例化PassGAN,那么PassGAN实现特定数量的匹配所需输出的密码数量将显著减少。同样,更广泛的训练数据集,加上更复杂的神经网络结构,可以显著提高密度估计(因此PassGAN的性能)。

最后的评论。GANs估计训练数据集的概率分布。因此,PassGAN输出重复的猜测密码,如表4c所示。虽然一个完整的蛮力猜测攻击将有完整的覆盖范围,但从训练数据分布中学习允许PassGAN通过生成高度可能的猜测来执行更有效的攻击。因为密码生成可以离线执行,PassGAN可以预先生成数十亿次猜测,并将它们存储在数据库中。在我们的实验中,我们存储了唯一的密码样本,然后将这些样本用于测试目的,从而避免了重复。如果需要,还可以使用具有适当参数的Bloom过滤器来丢弃重复的条目,从而实现高效的在线密码猜测。

显然,PassGAN可以在分布式设置中使用,在这种设置中,多个实例独立地输出猜测的密码。虽然可以使用例如Bloom过滤器来避免局部重复,但是在不同节点之间协调删除重复会更复杂,而且可能更昂贵。解决这个问题的合适方法主要取决于三个因素:(1)生成密码猜测的成本;(2)密码猜测测试的成本;(3)节点间同步之前生成的密码信息的代价。

如果生成密码的成本小于测试密码的成本,并且节点之间的同步不是免费的,那么就没有必要避免节点之间的重复。因此,每个模型都可以进行抽样,而不需要知道其他模型生成的样本。

如果测试猜测密码的代价小于生成猜测密码的代价,那么周期性地在节点之间协调以确定生成了哪些样本可能是有益的。同步成本决定了协调的频率。

最后,PassGAN可以从新泄露的密码数据集中显著受益和改进。通过学习新的规则,该模型将得到改善,重复样本的数量可能会减少。

6结论

本文介绍了一种基于生成式对抗网络(GANs)的密码猜测方法PassGAN。PassGAN旨在从密码泄露中了解密码分发信息。因此,与目前的密码猜测工具不同,PassGAN不依赖于任何额外的信息,比如显式规则,或者对用户选择的密码马尔科夫结构的假设。我们相信我们猜测密码的方法是革命性的,因为PassGAN生成密码时不需要用户干预——因此不需要密码领域知识,也不需要人工分析密码数据库泄漏。

我们对PassGAN的性能进行了评估,测试它在多大程度上可以猜出没有接受过训练的密码,PassGAN的输出分布如何接近真实密码泄露的分布。我们的结果表明PassGAN与最先进的密码生成工具具有竞争力:在我们的实验中,PassGAN总是能够生成与其他密码猜测工具相同数量的匹配。

然而,与其他工具相比,PassGAN目前需要输出更多的密码。我们认为,考虑到所提议的技术的好处,这个成本是可以忽略不计的。此外,在更大的数据集上训练PassGAN可以使用更复杂的神经网络结构和更全面的训练。因此,底层GAN可以执行更精确的密度估计,从而减少实现特定数量匹配所需的密码数量。

将PassGAN后面的生成模型更改为条件GAN可能会改善所有场景下的密码猜测,在这些场景中,对手知道用户常用的一组关键字(例如,用户的宠物和家庭成员的名字)。有了这些知识,对手就可以使GAN适应这些特定的单词,从而使生成器能够特别注意这些关键字所在的搜索空间的特定部分。

PassGAN可以用于生成蜜语[41]的上下文中。蜜字是诱饵密码,当与真实密码混合时,会大大降低密码数据库对对手的价值。然而,Wang等人[89]对[41]中提出的生成Honeywords的技术提出了担忧:如果Honeywords能够很容易地与真实密码区分开来,那么其有用性就会大大降低。PassGAN的扩展有可能解决这个问题,并将成为未来工作的主题。

Sure, I can help you with that! Here's an example implementation of the GuessingGame in Java: ```java // GuessingGame.java import java.util.Scanner; public class GuessingGame { private String secretWord; private int guessesLeft; public GuessingGame(String secretWord, int maxGuesses) { this.secretWord = secretWord; this.guessesLeft = maxGuesses; } public void play() { String guessedWord = ""; for (int i = 0; i < secretWord.length(); i++) { guessedWord += "*"; } Scanner scanner = new Scanner(System.in); while (guessesLeft > 0) { System.out.println("Guess a letter (" + guessesLeft + " guesses left):"); String guess = scanner.nextLine(); // Check if guess is correct boolean correctGuess = false; for (int i = 0; i < secretWord.length(); i++) { if (secretWord.charAt(i) == guess.charAt(0)) { guessedWord = guessedWord.substring(0, i) + guess + guessedWord.substring(i + 1); correctGuess = true; } } if (!correctGuess) { guessesLeft--; } System.out.println("Guessed word: " + guessedWord); if (guessedWord.equals(secretWord)) { System.out.println("Congratulations, you guessed the word!"); return; } } System.out.println("Sorry, you ran out of guesses. The word was " + secretWord); } } ``` And here's an example usage in a main class: ```java // Main.java public class Main { public static void main(String[] args) { GuessingGame game = new GuessingGame("house", 10); game.play(); } } ``` In this implementation, the `GuessingGame` class takes two parameters: the secret word to guess, and the maximum number of guesses allowed. The `play` method runs the game loop, prompting the user for guesses and updating the guessed word accordingly. If the guessed word matches the secret word, the game is won; if the user runs out of guesses, the game is lost.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值