基于BPE分词的长短期记忆神经网络的密码生成方法

文档序号:30139579发布日期:2022-05-21 03:48阅读:205来源:国知局
基于BPE分词的长短期记忆神经网络的密码生成方法
基于bpe分词的长短期记忆神经网络的密码生成方法
技术领域
1.本发明属于信息安全技术领域,具体涉及一种基于bpe分词的长短期记忆神经网络的密码生成方法。


背景技术:

2.为了保护用户信息安全,互联网应用中需要使用身份认证技术确认操作者身份。虽然更加安全的基于生物特征(指纹和人脸等)和智能卡等的身份认证方式已经得到广泛应用,但是具有部署难度低、使用局限性小等特性的文本密码仍然是互联网应用中身份认证的主要方式。然而,为了便于记忆和管理,人们往往会选择一些具有特定规则的密码,并且会在不同的应用中重复使用同一个密码,这都使得文本密码更加容易通过猜测攻击被破解。对密码生成方法的研究不仅可以提升人们对密码安全的认识,还可以用于对密码的安全性进行评估。
3.目前用于密码生成的方法有基于统计的pcfg方法、基于概率的markov方法和基于神经网络的方法,研究表明使用神经网络猜测密码的效率优于传统的基于概率的markov和pcfg方法。由于人们往往会选择将姓名、生日、手机号码等信息包含到密码中,字符级lstm模型没有很好的利用这一特征;其次,生成密码时使用集束搜索会产生很多重复、无效密码,从而降低了生成密码在测试集上的匹配率。


技术实现要素:

4.本发明所要解决的技术问题在于,针对背景技术指出的不足,降低生成密码的重复率,使用基于统计的bpe算法对密码进行分词,充分利用了人们倾向于选择具有特定含义的字符创建密码这一特性,提出一种基于bpe分词的长短期记忆神经网络的密码生成方法。
5.本发明为解决以上技术问题而采用以下技术方案:
6.本发明提出一种基于bpe分词的长短期记忆神经网络的密码生成方法,
7.步骤1:使用bpe-dropout将原始训练密码集切分成子词粒度;
8.步骤2:使用子词粒度密码集训练子词级lstm模型;
9.步骤3:使用训练好的子词级长短期记忆网络lstm模型生成猜测密码集。生成密码时选择下一个子词的方法为带温度(temperature)的随机采样策略。
10.所述步骤1包括以下步骤:
11.步骤1.1使用原始训练密码集构建bpe合并表。具体如下:
12.步骤1.1.1将所有密码表示为字符序列,并使用所有字符序列初始化符号表t
symbol

13.步骤1.1.2统计符号表t
symbol
中所有相邻符号对(symboli,symbolj)出现的频次,所述符号为单个字符或者由几个字符组合成的子词;
14.步骤1.1.3合并符号表t
symbol
中出现频次最高的相邻符号对,使用合并产生的新符号symbolk替换符号表t
symbol
中两个原始符号symboli和symbolj,并将合并过程按照符号出
现频次降序的顺序记录到bpe合并表中,合并过程表示为:
15.(symboli,symbolj)

symbolk;
16.步骤1.1.4重复合并过程,直到符号表t
symbol
中相邻符号对的最高频次小于最小频次min_f。
17.步骤1.2使用bpe合并表对原始训练密码集进行分词,得到子词级密码集,具体如下:
18.步骤1.2.1将原始训练密码集中密码的相邻字符间插入空格并复制多次,用于初始化子词级密码集u;
19.步骤1.2.2从子词级密码集u取出一个密码,根据bpe合并表中的排名,找到所有可以合并的符号对,记录到操作表t
op
中,然后按照概率p从操作表t
op
中随机移除部分操作;如果操作表t
op
不为空,则对其中的符号对按照排名顺序进行合并;其中,所述的概率p取值为0.1;
20.步骤1.2.3子词级密码集u中所有密码重复执行符号对合并的操作,直到操作表t
op
为空;
21.步骤1.2.4对分词完成的子词级密码集u进行去重,得到最终的子词级密码集u'。
22.所述步骤2包括以下步骤:
23.步骤2.1准备用于训练子词级lstm模型的数据;首先标记密码的起止位置,具体方法为在每个密码第一个子词前添加一个开始符用于标记密码开始,在每个密码最后一个子词后添加一个结束符用于标记密码结束;
24.然后构建子词级lstm模型的输入输出序列,具体构建过程为,取每个密码的前i-1个子词作为输入序列x,第i个子词作为输出序列y,表示为:
25.x=[s1,s2,

,s
i-1
],
[0026]
y=[si]。
[0027]
步骤2.2构建子词级lstm模型;所述子词级lstm模型包括1个嵌入层、2个lstm层和1个全连接层。其中,嵌入层输入维度为3500,输出维度为100,输入序列长度为15;每个lstm层包含128个神经元;全连接层神经元个数为3500,激活函数为softmax函数;softmax函数定义为:
[0028][0029]
其中,xi为第i个神经元的输出值,n为输出节点的个数,即词汇表大小;
[0030]
所述lstm神经元包含3个控制门:输入门i
t
、输出门o
t
和遗忘门f
t
,以及一个记忆单元c
t
;c
t
的计算方式为:
[0031][0032]
其中,遗忘门f
t
用于控制是否遗忘当前时刻之前的信息c
t-1
,遗忘门的计算方式为:
[0033]ft
=σ(wf×
[h
t-1
,x
t
]+bf)
[0034]
输入门i
t
用于控制是否将当前时刻信息保存到记忆单元中,输入门和当前时刻信息计算方式为:
[0035]it
=σ(wi×
[h
t-1
,x
t
]+bi)
[0036][0037]
输出门o
t
用于控制当前时刻的输出y
t
和隐状态h
t
中是否包含记忆单元c
t
中的信息,输出门的计算方式:
[0038]ot
=σ(wo×
[h
t-1
,x
t
]+bo)
[0039]
当前时刻的输出与当前时刻隐状态相等,隐状态h
t
计算方式为:
[0040]ht
=o
t
×
tanh(c
t
)
[0041]
wi,wo,wf和wc和分别表示输入门、输出门、遗忘门和记忆单元的权重,权重都初始化为符合均值为0、标准差为0.1的正态分布的张量;bi,bo,bf和bc分别表示输入门、输出门、遗忘门和记忆单元的偏置,偏置都初始化为0.01;h
t-1
表示前一时刻的隐状态值,初始化为符合标准正态分布的张量,x
t
表示当前时刻输入信息;σ和tanh表示不同的激活函数,计算方式分别为:
[0042][0043][0044]
步骤2.3使用步骤2.1构建好的输入输出序列训练步骤2.2构建的子词级lstm模型,训练过程为:前向计算每个神经元的输出值,比较输出层的预测值与真实值的差异;反向计算每个神经元的误差,包括时间上的反向传播和网络层上的反向传播,根据相应的误差计算每个权重的梯度,使用梯度更新相应的权重。所述的训练过程中采用的损失函数为交叉熵误差函数,使用的优化器为adam。
[0045]
所述步骤3包括以下子步骤:
[0046]
步骤3.1设置需要生成的猜测密码集大小guess_size;
[0047]
步骤3.2设置最大密码长度max_len;
[0048]
步骤3.3使用训练好的子词级lstm模型生成一个密码,具体步骤为:
[0049]
步骤a、给定一个起始符《bos》,用于初始化密码对应的子词序列ws,表示为:
[0050]ws
=[《bos》]
[0051]
步骤b、使用子词级lstm模型根据当前的子词序列ws预测第t个子词的概率分布y
t
,计算方法为:
[0052]yt
=net(x0,x1,

,x
t-1
)
[0053]
其中,net表示子词级lstm模型,x0表示起始符,x1,

,x
t-1
表示输入到模型中的其它子词;
[0054]
步骤c、使用温度temperature改变模型预测的概率分布,新概率分布的计算方式为:
[0055][0056]
其中,j∈[0,m),m为子词词汇表大小;所述的温度temperature的取值为0.8;
[0057]
步骤d、从y'
t
中随机选择出一个子词s
t
,将选择出的子词s
t
添加到子词序列ws中,
表示为:
[0058]ws
=ws+[s
t
]
[0059]
步骤e、重复步骤b-步骤d,直到随机选择出的子词为结束符《eos》,或者所有子词中字符个数之和大于最大密码长度max_len;
[0060]
步骤f、去掉开始符和结束符,将其它子词按生成顺序拼接成密码;
[0061]
步骤3.4重复步骤3.3,直到生成的密码数量达到猜测密码集大小guess_size。
[0062]
与现有技术相比,本发明的有益效果:
[0063]
1、本发明使用基于统计的bpe分词算法将密码切分成了有意义的子词粒度,并应用dropout技术提升分词的多样性;由于人们倾向于根据特定规则选择密码,使用子词级lstm模型可以提高生成密码的猜测攻击能力,从而更加有效地评估密码库的安全性。
[0064]
2、生成密码时,使用引入temperature参数的随机采样策略选择下一个子词,可以降低生成密码的重复率,同时增加生成密码的创造性。
附图说明
[0065]
图1是本发明的整体流程图。
[0066]
图2是本发明生成一个密码的流程图。
[0067]
图3是本发明使用的子词级lstm模型结构图。
[0068]
图4是本发明使用的子词级lstm模型中的lstm层工作原理图。
[0069]
图5是本发明使用的子词级lstm模型中的lstm神经元结构图。
具体实施方式
[0070]
下面结合附图对本发明作进一步详细描述。
[0071]
为了提高密码匹配率,本发明提出一种基于bpe分词的长短期记忆神经网络的密码生成方法,具体步骤如图1所示。
[0072]
步骤1、使用bpe-dropout将原始训练密码集切分成子词粒度。以下选取myspace泄露密码库中的4个密码进行说明,示例密码:[lovemom1,iloveyou13,yourmom2,lover13];具体包括以下步骤:
[0073]
步骤1.1、使用原始训练密码集构建bpe合并表。具体步骤如下:
[0074]
步骤1.1.1、首先将示例密码表示为字符序列,在字符序列末尾添加一个结束符“《/w》”后,使用所有字符序列初始化符号表t
symbol
,结果为:[l o v e m o m 1《/w》,i l o v e y o u 1 3《/w》,y o u r m o m 2《/w》,l o v e r 1 3《/w》];
[0075]
步骤1.1.2、统计符号表t
symbol
中相邻符号对(symboli,symbolj)出现的频次;
[0076]
步骤1.1.3、合并符号表t
symbol
中出现频次最高的相邻符号对,使用合并产生的新符号symbolk替换符号表t
symbol
中两个原始符号symboli和symbolj,并将合并过程按照符号出现频次降序的顺序记录到bpe合并表中,被用于替换的相邻符号对最小频次min_f设置为2;
[0077]
步骤1.1.4、重复合并过程,直到符号表t
symbol
中相邻符号对的最高频次小于最小频次min_f,替换结果如下:
[0078]
pair 0:v e-》ve(frequency 3)
[0079]
pair 1:o ve-》ove(frequency 3)
[0080]
pair 2:l ove-》love(frequency 3)
[0081]
pair 3:y o-》yo(frequency 2)
[0082]
pair 4:yo u-》you(frequency 2)
[0083]
pair 5:o m-》om(frequency 2)
[0084]
pair 6:m om-》mom(frequency 2)
[0085]
pair 7:1 3《/w》-》13《/w》(frequency 2)
[0086]
步骤1.2、使用bpe合并表对原始训练密码集进行分词,得到子词级密码集。具体步骤如下:
[0087]
步骤1.2.1、将原始训练密码集中密码的相邻字符间插入空格并复制多次,用于初始化子词级密码集u。本实例中复制次数设置为4。从训练密码集选择一个密码进行说明:
[0088]
u=[l o v e m o m 1,l o v e m o m 1,l o v e m o m 1,l o v e m o m 1]
[0089]
步骤1.2.2、从子词级密码集u取出一个密码,根据bpe合并表中的排名,找到所有可以合并的符号对,记录到操作表t
op
中,然后按照概率p(取0.1)从操作表t
op
中随机移除部分操作;如果操作表t
op
不为空,则对其中的符号对按照排名顺序进行合并;
[0090]
步骤1.2.3、子词级密码集u中所有密码重复执行符号对合并的操作,直到操作表t
op
为空。合并结果为:
[0091]
u=[love m o m 1,love m om 1,l o ve mom 1,love m om 1]
[0092]
步骤1.2.4对分词完成的子词级密码集u进行去重,得到最终的子词级密码集u'。
[0093]
u'=[love m o m 1,l o ve mom 1,love m om 1]。
[0094]
步骤2、使用子词粒度密码集训练子词级lstm模型;如图3所示,包括如下子步骤:
[0095]
步骤2.1、准备用于训练子词级lstm模型的数据。首先标记密码的起止位置,具体方法为在每个密码第一个子词前添加一个开始符《bos》用于标记密码开始,在每个密码最后一个子词后添加一个结束符《eos》用于标记密码结束;然后构建子词级lstm模型的输入输出序列,具体构建过程为,取每个密码的前i-1个子词作为输入序列x,第i个子词作为输出序列y,表示为:
[0096]
x=[s1,s2,

,s
i-1
]
[0097]
y=[si]
[0098]
例如,使用密码“《bos》love m o m 1《eos》”创建的输入输出为:
[0099]
xy《bos》love《bos》lovem《bos》love mo《bos》love m om《bos》love m o m1《bos》love m o m 1《eos》
[0100]
步骤2.2、构建子词级lstm模型。所述子词级lstm模型包括1个嵌入层、2个lstm层和1个全连接层。嵌入层输入维度为3500,输出维度为100,输入序列长度为15;每个lstm层包含128个神经元;全连接层神经元个数为3500,激活函数为softmax函数;softmax函数定
义为:
[0101][0102]
其中,xi为第i个神经元的输出值,n为输出节点的个数,即词汇表大小。
[0103]
在本发明实施例中,lstm层工作原理如图4所示。每个时刻的输出不仅与当前时刻的输入有关,还与之前时刻的输出有关。
[0104]
在本发明实施例中,lstm神经元结构如图5所示。每个神经元包含3个控制门:输入门i
t
、输出门o
t
和遗忘门f
t
,以及一个记忆单元c
t
;c
t
的计算方式为:
[0105][0106]
其中,遗忘门f
t
用于控制是否遗忘当前时刻之前的信息c
t-1
,遗忘门的计算方式为:
[0107]ft
=σ(wf×
[h
t-1
,x
t
]+bf)
[0108]
输入门i
t
用于控制是否将当前时刻信息保存到记忆单元中,输入门和当前时刻信息计算方式为:
[0109]it
=σ(wi×
[h
t-1
,x
t
]+bi)
[0110][0111]
输出门o
t
用于控制当前时刻的输出y
t
和隐状态h
t
中是否包含记忆单元c
t
中的信息,输出门的计算方式:
[0112]ot
=σ(wo×
[h
t-1
,x
t
]+bo)
[0113]
当前时刻的输出与当前时刻隐状态相等,隐状态h
t
计算方式为:
[0114]ht
=o
t
×
tanh(c
t
)
[0115]
wi,wo,wf和wc和分别表示输入门、输出门、遗忘门和记忆单元的权重,权重都初始化为符合均值为0、标准差为0.1的正态分布的张量;bi,bo,bf和bc分别表示输入门、输出门、遗忘门和记忆单元的偏置,偏置都初始化为0.01;h
t-1
表示前一时刻的隐状态值,初始化为符合标准正态分布的张量;x
t
表示当前时刻输入信息;σ和tanh表示不同的激活函数,计算方式分别为:
[0116][0117][0118]
步骤2.3、使用步骤2.1构建的输入输出序列训练步骤2.2构建的子词级lstm模型。训练过程为:前向计算每个神经元的输出值,比较输出层的预测值与真实值的差异;反向计算每个神经元的误差,包括时间上的反向传播和网络层上的反向传播,根据相应的误差计算每个权重的梯度,使用梯度更新相应的权重。训练过程中采用的损失函数为交叉熵误差函数,使用的优化器为adam。
[0119]
步骤3、使用训练好的子词级lstm模型生成猜测密码集。生成密码时选择下一个子词的方法为带温度的随机采样策略。
[0120]
步骤3.1、设置需要生成的猜测密码集大小guess_size,即需要生成的密码个数。
[0121]
步骤3.2、设置最大密码长度max_len,其中,本发明实例中max_len=15。
[0122]
步骤3.3、使用步骤2.3训练好的子词级lstm模型生成一个密码。参见图2所示,具体步骤为:
[0123]
步骤3.3.1、给定一个起始符《bos》,用于初始化密码对应的子词序列ws,表示为:
[0124]ws
=[《bos》]
[0125]
步骤3.3.2、使用子词级lstm模型根据当前的子词序列ws预测第t个子词的概率分布y
t
,计算方法为:
[0126]yt
=net(x0,x1,

,x
t-1
)
[0127]
其中,net表示子词级lstm模型,x0表示起始符,x1,

,x
t-1
表示输入到模型中的其它子词;
[0128]
步骤3.3.3、使用温度temperature改变模型预测的概率分布,新概率分布的计算方式为:
[0129][0130]
其中,j∈[0,m),m为子词词汇表大小;所述的温度temperature的取值为0.8;温度越高,分布越均匀,选择的随机性越大,生成的文本越多样化,重复率越低;温度越低,分布越集中,选择的随机性越小,生成的文本越不灵活,重复率越高。
[0131]
步骤3.3.4、从y'
t
中随机选择出一个子词s
t
,将选择出的子词s
t
添加到子词序列ws中,表示为:
[0132]ws
=ws+[s
t
]
[0133]
步骤3.3.5、重复步骤3.3.2-步骤3.3.4,直到随机选择出的子词为结束符《eos》,或者所有子词中字符个数之和大于最大密码长度max_len;其中,本发明实例中max_len=15;
[0134]
步骤3.3.6、去掉开始符和结束符,将其它子词按生成顺序拼接成密码;
[0135]
步骤3.4、重复步骤3.3,直到生成的密码数量达到猜测密码集大小guess_size。
[0136]
生成的密码示例:
[0137]
bugget1
[0138]
vellee12
[0139]
butterfly7
[0140]
hottie
[0141]
hellboy23
[0142]
1gothic
[0143]
iloveu92
[0144]
bebeaut1
[0145]
goreney*。
[0146]
以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进
都落入要求保护的本发明范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1