图共 4个 表共 5
    • 图  1  PCFG过程示例

      Figure 1. 

    • 图  2  CSNN方法实现

      Figure 2. 

    • 图  3  命中率结果

      Figure 3. 

    • 图  4  不同口令生成方法在不同口令集上的命中率

      Figure 4. 

    •  input: Training Set, allCSs
       intermediate result: the structure of current password (thisStructure)
       output: Password structure frequency table(Structure)
       1 for password $ \in $ Training Set do
       2  if Array_alphaStrings ← match_alplaStrings(password) then
       3   for alplaString $ \in $ Array_alphaString do
       4    i, e ← index(alplaString), end(alplaString)
       5    if CSs ← match_CSs(alplaString) then
       6     Array_Ci, Array_Ce ← index(CSs), end(CSs)
       7     Queue_append(thisStructure,'C', Array_Ci)
       8     Array_Li ← getsubStringIndex(i,e,Array_Ci, Array_Ce)
       9     Queue_append(thisStructure,'L', Array_Li)
       10   end if
       11   else
       12    Queue_append(thisStructure,'L', i)
       13   end else
       14  end for
       15 end if
       16 if Array_digitStrings ← match_digitStrings(password) then
       17  Array_Di ← index(Array_digitStrings)
       18  Queue_append(thisStructure,'D', Array_Di)
       19 end if
       20 if Array_specialStrings← match_specialStrings(password) then
       21  Array_Si ← index(Array_specialStrings)
       22  Queue_append(thisStructure,'S', Array_Si)
       23 end if
       24  Structure.add(thisStructure)
       25 end for
       26 Structure.frequency()
       27 return Structure

      表 1  Structure Parsing算法

    •  input: $\Sigma $, M
       output: Password dictionary
       1 count ← 0
       2 while count < scale do
       3  nowStr ← getStr_rand($\Sigma $)
       4  nowStr ← strCat(nowStr, EOF)
       5  incoPwd ← STA
       6  for seg $ \in $ nowStr do
       7   if seg $ \in $ predict(M, incoPwd) then
       8    prediction ← selectSeg_rand(M, seg)
       9    tempPwd ← pwdCat(incoPwd, prediction)
       10    if len(printable(tempPwd)) <= Len
            and weight(printable(tempPwd)) >= T then
       11    incoPwd ← tempPwd
       12    else
       13     incoPwd ← NULL
       14     break
       15    end if
       16   else
       17    incoPwd ← NULL
       18    break
       19   end if
       20  end for
       21  if end(incoPwd) == EOF then
       22   dictionary.add(printable(incoPwd))
       23   ++count
       24  end if
       25 end while
       26 return dictionary

      表 2  Password Generation算法

    • 口令集服务类型原始数量使用数量口令总量(占使用口令百分比)
      包含字母字符串包含拼音有2个及以上拼音相连仅由拼音构成
      嘟嘟牛电子商务16,258,26012,494,0338,856,456(70.9%)3,606,968(28.9%)1,079,000(8.6%)1,752,575(14.0%)
      CSDNIT论坛6,428,2776,370,8933,619,077(56.8%)2,046,963(32.1%)583,968(9.2%)550,444(8.6%)
      12306铁路票务129,303129,30395,373(73.8%)39,544(30.6%)10,861(8.4%)17,146(13.2%)
      网易邮箱邮箱1,220,088,12120,630,31211,532,344(55.9%)5279116(25.6%)18,30,575(8.9%)2,018,686(10.6%)

      表 3  本文使用的口令集信息

    • 口令集123456789101112131415161718
      网易邮箱woliaiwangyuningxiaozhangweiliujiyangxichenwuhuma
      嘟嘟牛woliainiyuwangliuxiaozhangweingjixuchenyanghuwuxi
      12306woliainiwangyuweixiaoliujizhangmangchenshianyangwu
      CSDNliwodeyuwangngjiliuzhangxiaoaiweimaxiannichenhu

      表 4  各口令集中最流行的18个汉语拼音

    • 排名网易邮箱嘟嘟牛12306CSDN
      结构频率结构频率结构频率结构频率
      1D43.5LD31.8LD30.1D42.7
      2LD22.7D29.0D27.2LD14.8
      3CD6.4CD11.2CD10.4CD5.6
      4LCD4.9DL7.6DL9.3LCD5.3
      5DL4.4LCD6.4LCD6.9LC4.5
      6LC3.9LC2.3CLD2.1DL4.3
      7C1.5CLD1.4LC2.1LCL2.7
      8DC1.1DC1.2LCLD1.7L1.8
      9LCL0.9LCLD1.1DC1.2CLD1.7
      10CLD0.9C1.0LDL1.1LCLD1.7

      表 5  口令结构分布频率(%)