Effect of password policies on keyspace reduction

The tables below show just how password policies that require either at least N character classes or at least N characters of each class affect the total keyspace for each length.

Once in a while, someone posts to john-users asking how to restrict John the Ripper to match a policy, hoping that this would substantially reduce the number of candidate passwords to try. Most of the time, such assumptions are incorrect, although in some extreme cases they are valid.

For example, for printable US-ASCII (95 different characters) and length 8 requiring at least 3 character classes (out of four: digits, lowercase letters, uppercase letters, and other characters) reduces the keyspace by only 5.5% (so it is a reasonable thing to do). However, requiring at least 2 characters of each class (which for length 8 implies exactly 2 characters of each class) reduces the keyspace for length 8 by a factor of 52.9 (which is almost as bad as making passwords one character shorter) and for length 9 by a factor of 17.6.

In practice, passwdqc combines the “at least N classes” approach with other requirements, which disallows common password patterns while not reducing the keyspace too much. More trivial approaches are just not good enough: simply requiring e.g. at least 3 classes allows for passwords of the form “Password1” (a common pattern, even when not word-based), and requiring at least 2 characters of a class often reduces the keyspace too much. Also, passwdqc supports longer passphrases, where it can require as few as 2 different character classes (such as letters and word separators).

To have John the Ripper match a trivial policy, revisions of the [List.External:Policy] external mode sample may be used (providing a filter for use with other cracking modes), which may or may not be beneficial (because generating and filtering out some candidate passwords involves overhead, and also because assumptions about passwords actually following a policy are often wrong).

Length Min classes Password count % of total
6 1 735091890625 100.00%
6 2 733181591104 99.74%
6 3 624105885000 84.90%
6 4 198202118400 26.96%
7 1 69833729609375 100.00%
7 2 69775037546046 99.92%
7 3 63517192124568 90.95%
7 4 25736929218000 36.85%
8 1 6634204312890625 100.00%
8 2 6632380150143232 99.97%
8 3 6273401614552800 94.56%
8 4 3025989069143040 45.61%
9 1 630249409724609375 100.00%
9 2 630192138232849470 99.99%
9 3 609552342661909920 96.72%
9 4 334945539778449600 53.14%
10 1 59873693923837890625 100.00%
10 2 59871880000661319424 100.00%
10 3 58681609358447283000 98.01%
10 4 35648464491154944000 59.54%
11 1 5688000922764599609375 100.00%
11 2 5687943039869111907006 100.00%
11 3 5619095509009592606568 98.79%
11 4 3693920441464757790000 64.94%
12 1 540360087662636962890625 100.00%
12 2 540358228914208686541312 100.00%
12 3 536365096923054294152400 99.26%
12 4 375596253406523266191360 69.51%
13 1 51334208327950511474609375 100.00%
13 2 51334148325280771618632510 100.00%
13 3 51101998006019799868738800 99.55%
13 4 37668707227364394045664800 73.38%
14 1 4876749791155298590087890625 100.00%
14 2 4876747845803567399692966144 100.00%
14 3 4863223810765665455446463400 99.72%
14 4 3739282898628476268150681600 76.68%
15 1 463291230159753366058349609375 100.00%
15 2 463291166866288182621477215166 100.00%
15 3 462501957521229240862873357368 99.83%
15 4 368305588892338901765251290000 79.50%
16 1 44012666865176569775543212890625 100.00%
16 2 44012664799973872514126586836992 100.00%
16 3 43966542166845205317987336676800 99.90%
16 4 36058035064266385286663961722880 81.93%
Length Min digits/lowers/uppers/others Password count % of total
6 0/0/0/0 735091890625 100.00%
6 0/0/0/1 678291655041 92.27%
6 0/0/0/2 496897354305 67.60%
6 0/0/1/0 627173727544 85.32%
6 0/0/1/1 572550274296 77.89%
6 0/0/1/2 403128276408 54.84%
6 0/0/2/0 383184837100 52.13%
6 0/0/2/1 337994107308 45.98%
6 0/0/2/2 211805425260 28.81%
6 0/1/0/0 627173727544 85.32%
6 0/1/0/1 572550274296 77.89%
6 0/1/0/2 403128276408 54.84%
6 0/1/1/0 525576927512 71.50%
6 0/1/1/1 473129256600 64.36%
6 0/1/1/2 315659761560 42.94%
6 0/1/2/0 304521354176 41.43%
6 0/1/2/1 261490806720 35.57%
6 0/1/2/2 146997227520 20.00%
6 0/2/0/0 383184837100 52.13%
6 0/2/0/1 337994107308 45.98%
6 0/2/0/2 211805425260 28.81%
6 0/2/1/0 304521354176 41.43%
6 0/2/1/1 261490806720 35.57%
6 0/2/1/2 146997227520 20.00%
6 0/2/2/0 152799065120 20.79%
6 0/2/2/1 118982841120 16.19%
6 0/2/2/2 44788217760 6.09%
6 1/0/0/0 357942375000 48.69%
6 1/0/0/1 320912749080 43.66%
6 1/0/0/2 214798846680 29.22%
6 1/0/1/0 292204745560 39.75%
6 1/0/1/1 257042986200 34.97%
6 1/0/1/2 160548874200 21.84%
6 1/0/2/0 159744045760 21.73%
6 1/0/2/1 132161515200 17.98%
6 1/0/2/2 67138156800 9.13%
6 1/1/0/0 292204745560 39.75%
6 1/1/0/1 257042986200 34.97%
6 1/1/0/2 160548874200 21.84%
6 1/1/1/0 231497011200 31.49%
6 1/1/1/1 198202118400 26.96%
6 1/1/1/2 111307996800 15.14%
6 1/1/2/0 115864507200 15.76%
6 1/1/2/1 90133243200 12.26%
6 1/1/2/2 34452475200 4.69%
6 1/2/0/0 159744045760 21.73%
6 1/2/0/1 132161515200 17.98%
6 1/2/0/2 67138156800 9.13%
6 1/2/1/0 115864507200 15.76%
6 1/2/1/1 90133243200 12.26%
6 1/2/1/2 34452475200 4.69%
6 1/2/2/0 45514809600 6.19%
6 1/2/2/1 27144374400 3.69%
6 1/2/2/2 0 0.00%
6 2/0/0/0 91719187500 12.48%
6 2/0/0/1 77501803500 10.54%
6 2/0/0/2 43772899500 5.95%
6 2/0/1/0 68877016000 9.37%
6 2/0/1/1 55814616000 7.59%
6 2/0/1/2 27181440000 3.70%
6 2/0/2/0 30931732000 4.21%
6 2/0/2/1 21884148000 2.98%
6 2/0/2/2 6625476000 0.90%
6 2/1/0/0 68877016000 9.37%
6 2/1/0/1 55814616000 7.59%
6 2/1/0/2 27181440000 3.70%
6 2/1/1/0 48716616000 6.63%
6 2/1/1/1 36808200000 5.01%
6 2/1/1/2 13250952000 1.80%
6 2/1/2/0 18349344000 2.50%
6 2/1/2/1 10440144000 1.42%
6 2/1/2/2 0 0.00%
6 2/2/0/0 30931732000 4.21%
6 2/2/0/1 21884148000 2.98%
6 2/2/0/2 6625476000 0.90%
6 2/2/1/0 18349344000 2.50%
6 2/2/1/1 10440144000 1.42%
6 2/2/1/2 0 0.00%
6 2/2/2/0 4112784000 0.56%
6 2/2/2/1 0 0.00%
6 2/2/2/2 0 0.00%
7 0/0/0/0 69833729609375 100.00%
7 0/0/0/1 66312115003167 94.96%
7 0/0/0/2 53191260583263 76.17%
7 0/0/1/0 62387376356786 89.34%
7 0/0/1/1 58944125914674 84.41%
7 0/0/1/2 46326108214386 66.34%
7 0/0/2/0 42746270676044 61.21%
7 0/0/2/1 39699194619084 56.85%
7 0/0/2/2 29260136037132 41.90%
7 0/1/0/0 62387376356786 89.34%
7 0/1/0/1 58944125914674 84.41%
7 0/1/0/2 46326108214386 66.34%
7 0/1/1/0 55212841715304 79.06%
7 0/1/1/1 51847945437288 74.24%
7 0/1/1/2 39732533456616 56.90%
7 0/1/2/0 36722224109480 52.59%
7 0/1/2/1 33753320216616 48.33%
7 0/1/2/2 23813263754280 34.10%
7 0/2/0/0 42746270676044 61.21%
7 0/2/0/1 39699194619084 56.85%
7 0/2/0/2 29260136037132 41.90%
7 0/2/1/0 36722224109480 52.59%
7 0/2/1/1 33753320216616 48.33%
7 0/2/1/2 23813263754280 34.10%
7 0/2/2/0 22405470217312 32.08%
7 0/2/2/1 19829719509600 28.40%
7 0/2/2/2 12018171765600 17.21%
7 1/0/0/0 37776020781250 54.09%
7 1/0/0/1 35282477877570 50.52%
7 1/0/0/2 26728634290050 38.27%
7 1/0/1/0 32818319013480 46.99%
7 1/0/1/1 30395108463720 43.52%
7 1/0/1/2 22272742051560 31.89%
7 1/0/2/0 20854070455400 29.86%
7 1/0/2/1 18770811619560 26.88%
7 1/0/2/2 12399247060200 17.76%
7 1/1/0/0 32818319013480 46.99%
7 1/1/0/1 30395108463720 43.52%
7 1/1/0/2 22272742051560 31.89%
7 1/1/1/0 28089817413840 40.22%
7 1/1/1/1 25736929218000 36.85%
7 1/1/1/2 18045808981200 25.84%
7 1/1/2/0 17041009760320 24.40%
7 1/1/2/1 15027891278400 21.52%
7 1/1/2/2 9083969294400 13.01%
7 1/2/0/0 20854070455400 29.86%
7 1/2/0/1 18770811619560 26.88%
7 1/2/0/2 12399247060200 17.76%
7 1/2/1/0 17041009760320 24.40%
7 1/2/1/1 15027891278400 21.52%
7 1/2/1/2 9083969294400 13.01%
7 1/2/2/0 9054933742400 12.97%
7 1/2/2/1 7378745774400 10.57%
7 1/2/2/2 3135175243200 4.49%
7 2/0/0/0 11375554687500 16.29%
7 2/0/0/1 10265954460300 14.70%
7 2/0/0/2 6981738756300 10.00%
7 2/0/1/0 9370490274600 13.42%
7 2/0/1/1 8309598297000 11.90%
7 2/0/1/2 5292183897000 7.58%
7 2/0/2/0 5213215061600 7.47%
7 2/0/2/1 4362530172000 6.25%
7 2/0/2/2 2272538268000 3.25%
7 2/1/0/0 9370490274600 13.42%
7 2/1/0/1 8309598297000 11.90%
7 2/1/0/2 5292183897000 7.58%
7 2/1/1/0 7504223272000 10.75%
7 2/1/1/1 6492029544000 9.30%
7 2/1/1/2 3741185448000 5.36%
7 2/1/2/0 3835030472000 5.49%
7 2/1/2/1 3032861832000 4.34%
7 2/1/2/2 1205836632000 1.73%
7 2/2/0/0 5213215061600 7.47%
7 2/2/0/1 4362530172000 6.25%
7 2/2/0/2 2272538268000 3.25%
7 2/2/1/0 3835030472000 5.49%
7 2/2/1/1 3032861832000 4.34%
7 2/2/1/2 1205836632000 1.73%
7 2/2/2/0 1545035856000 2.21%
7 2/2/2/1 950053104000 1.36%
7 2/2/2/2 0 0.00%
8 0/0/0/0 6634204312890625 100.00%
8 0/0/0/1 6415864207305729 96.71%
8 0/0/0/2 5486157951266817 82.70%
8 0/0/1/0 6120405938461984 92.26%
8 0/0/1/1 5904886942784544 89.01%
8 0/0/1/2 4995868826066976 75.30%
8 0/0/2/0 4571564461923472 68.91%
8 0/0/2/1 4372345212378000 65.91%
8 0/0/2/2 3567917133340560 53.78%
8 0/1/0/0 6120405938461984 92.26%
8 0/1/0/1 5904886942784544 89.01%
8 0/1/0/2 4995868826066976 75.30%
8 0/1/1/0 5618295764310944 84.69%
8 0/1/1/1 5405597778540960 81.48%
8 0/1/1/2 4517265161144736 68.09%
8 0/1/2/0 4125992558882688 62.19%
8 0/1/2/1 3929592239244672 59.23%
8 0/1/2/2 3145801611528576 47.42%
8 0/2/0/0 4571564461923472 68.91%
8 0/2/0/1 4372345212378000 65.91%
8 0/2/0/2 3567917133340560 53.78%
8 0/2/1/0 4125992558882688 62.19%
8 0/2/1/1 3929592239244672 59.23%
8 0/2/1/2 3145801611528576 47.42%
8 0/2/2/0 2872990873037376 43.31%
8 0/2/2/1 2692850363531328 40.59%
8 0/2/2/2 2012852176695360 30.34%
8 1/0/0/0 3909299062500000 58.93%
8 1/0/0/1 3744418685446560 56.44%
8 1/0/0/2 3086123358875040 46.52%
8 1/0/1/0 3542331125675680 53.39%
8 1/0/1/1 3380063031465120 50.95%
8 1/0/1/2 2740335446328480 41.31%
8 1/0/2/0 2511129157979520 37.85%
8 1/0/2/1 2363490193384320 35.63%
8 1/0/2/2 1813509860722560 27.34%
8 1/1/0/0 3542331125675680 53.39%
8 1/1/0/1 3380063031465120 50.95%
8 1/1/0/2 2740335446328480 41.31%
8 1/1/1/0 3185644980510720 48.02%
8 1/1/1/1 3025989069143040 45.61%
8 1/1/1/2 2404826585441280 36.25%
8 1/1/2/0 2202116647785600 33.19%
8 1/1/2/1 2057087786033280 31.01%
8 1/1/2/2 1525624506806400 23.00%
8 1/2/0/0 2511129157979520 37.85%
8 1/2/0/1 2363490193384320 35.63%
8 1/2/0/2 1813509860722560 27.34%
8 1/2/1/0 2202116647785600 33.19%
8 1/2/1/1 2057087786033280 31.01%
8 1/2/1/2 1525624506806400 23.00%
8 1/2/2/0 1409000023208960 21.24%
8 1/2/2/1 1278560355072000 19.27%
8 1/2/2/2 836046731520000 12.60%
8 2/0/0/0 1344682356250000 20.27%
8 2/0/0/1 1262047715398800 19.02%
8 2/0/0/2 969113255418000 14.61%
8 2/0/1/0 1176806538211200 17.74%
8 2/0/1/1 1096141635388800 16.52%
8 2/0/1/2 816066153302400 12.30%
8 2/0/2/0 759753140328000 11.45%
8 2/0/2/1 689219553422400 10.39%
8 2/0/2/2 464638742568000 7.00%
8 2/1/0/0 1176806538211200 17.74%
8 2/1/0/1 1096141635388800 16.52%
8 2/1/0/2 816066153302400 12.30%
8 2/1/1/0 1015803036393600 15.31%
8 2/1/1/1 937107771600000 14.13%
8 2/1/1/2 669888627408000 10.10%
8 2/1/2/0 627619499852800 9.46%
8 2/1/2/1 559053470976000 8.43%
8 2/1/2/2 347280950016000 5.23%
8 2/2/0/0 759753140328000 11.45%
8 2/2/0/1 689219553422400 10.39%
8 2/2/0/2 464638742568000 7.00%
8 2/2/1/0 627619499852800 9.46%
8 2/2/1/1 559053470976000 8.43%
8 2/2/1/2 347280950016000 5.23%
8 2/2/2/0 340957105216000 5.14%
8 2/2/2/1 282482456256000 4.26%
8 2/2/2/2 125407009728000 1.89%
9 0/0/0/0 630249409724609375 100.00%
9 0/0/0/1 616712323178345823 97.85%
9 0/0/0/2 551865311819631711 87.56%
9 0/0/1/0 594797321889033146 94.37%
9 0/0/1/1 581361795299438010 92.24%
9 0/0/1/2 517352653583238330 82.09%
9 0/0/2/0 474568502272731152 75.30%
9 0/0/2/1 461793115401480720 73.27%
9 0/0/2/2 402624998286475536 63.88%
9 0/1/0/0 594797321889033146 94.37%
9 0/1/0/1 581361795299438010 92.24%
9 0/1/0/2 517352653583238330 82.09%
9 0/1/1/0 559847826665393760 88.83%
9 0/1/1/1 546513859032467040 86.71%
9 0/1/1/2 483342557258781792 76.69%
9 0/1/2/0 442354045914050400 70.19%
9 0/1/2/1 429680194599468384 68.18%
9 0/1/2/2 371349299666977632 58.92%
9 0/2/0/0 474568502272731152 75.30%
9 0/2/0/1 461793115401480720 73.27%
9 0/2/0/2 402624998286475536 63.88%
9 0/2/1/0 442354045914050400 70.19%
9 0/2/1/1 429680194599468384 68.18%
9 0/2/1/2 371349299666977632 58.92%
9 0/2/2/0 338090220602506944 53.64%
9 0/2/2/1 326075998886269632 51.74%
9 0/2/2/2 272574267562973376 43.25%
9 1/0/0/0 398632463441406250 63.25%
9 1/0/0/1 387875282778778410 61.54%
9 1/0/0/2 338905810793906730 53.77%
9 1/0/1/0 371843371424484960 59.00%
9 1/0/1/1 361182321214846560 57.31%
9 1/0/1/2 312988697234310240 49.66%
9 1/0/2/0 285972874207594080 45.37%
9 1/0/2/1 275923098183189600 43.78%
9 1/0/2/2 232074325698415200 36.82%
9 1/1/0/0 371843371424484960 59.00%
9 1/1/0/1 361182321214846560 57.31%
9 1/1/0/2 312988697234310240 49.66%
9 1/1/1/0 345510460535098560 54.82%
9 1/1/1/1 334945539778449600 53.14%
9 1/1/1/2 287527734102248640 45.62%
9 1/1/2/0 262045902566497920 41.58%
9 1/1/2/1 252092232595082880 40.00%
9 1/1/2/2 209018660654643840 33.16%
9 1/2/0/0 285972874207594080 45.37%
9 1/2/0/1 275923098183189600 43.78%
9 1/2/0/2 232074325698415200 36.82%
9 1/2/1/0 262045902566497920 41.58%
9 1/2/1/1 252092232595082880 40.00%
9 1/2/1/2 209018660654643840 33.16%
9 1/2/2/0 189736975181120640 30.11%
9 1/2/2/1 180394069274939520 28.62%
9 1/2/2/2 141653487838262400 22.48%
9 2/0/0/0 153390990906250000 24.34%
9 2/0/0/1 147445185811453200 23.39%
9 2/0/0/2 122902697478646800 19.50%
9 2/0/1/0 139816638273717600 22.18%
9 2/0/1/1 133948169196098400 21.25%
9 2/0/1/2 109990693057845600 17.45%
9 2/0/2/0 100533696852638400 15.95%
9 2/0/2/1 95126146473758400 15.09%
9 2/0/2/2 74177671162795200 11.77%
9 2/1/0/0 139816638273717600 22.18%
9 2/1/0/1 133948169196098400 21.25%
9 2/1/0/2 109990693057845600 17.45%
9 2/1/1/0 126571889993078400 20.08%
9 2/1/1/1 120780755932636800 19.16%
9 2/1/1/2 97408262288937600 15.46%
9 2/1/2/0 88897070567760000 14.11%
9 2/1/2/1 83566831806057600 13.26%
9 2/1/2/2 63202721229648000 10.03%
9 2/2/0/0 100533696852638400 15.95%
9 2/2/0/1 95126146473758400 15.09%
9 2/2/0/2 74177671162795200 11.77%
9 2/2/1/0 88897070567760000 14.11%
9 2/2/1/1 83566831806057600 13.26%
9 2/2/1/2 63202721229648000 10.03%
9 2/2/2/0 57977798696563200 9.20%
9 2/2/2/1 53107968513600000 8.43%
9 2/2/2/2 35740997772480000 5.67%
10 0/0/0/0 59873693923837890625 100.00%
10 0/0/0/1 59034394557969550401 98.60%
10 0/0/0/2 54567155997702578241 91.14%
10 0/0/1/0 57427499863183130824 95.91%
10 0/0/1/1 56591856655754853576 94.52%
10 0/0/1/2 52158132881188458696 87.11%
10 0/0/2/0 48209957025933311284 80.52%
10 0/0/2/1 47400719407238822196 79.17%
10 0/0/2/2 43184841739726179636 72.13%
10 0/1/0/0 57427499863183130824 95.91%
10 0/1/0/1 56591856655754853576 94.52%
10 0/1/0/2 52158132881188458696 87.11%
10 0/1/1/0 55002917284841655272 91.86%
10 0/1/1/1 54170930225853441000 90.48%
10 0/1/1/2 49770720906987623400 83.13%
10 0/1/2/0 45916048526695414912 76.69%
10 0/1/2/1 45110466796440988800 75.34%
10 0/1/2/2 40928095862628923520 68.36%
10 0/2/0/0 48209957025933311284 80.52%
10 0/2/0/1 47400719407238822196 79.17%
10 0/2/0/2 43184841739726179636 72.13%
10 0/2/1/0 45916048526695414912 76.69%
10 0/2/1/1 45110466796440988800 75.34%
10 0/2/1/2 40928095862628923520 68.36%
10 0/2/2/0 37540289873438419392 62.70%
10 0/2/2/1 36761107387917781440 61.40%
10 0/2/2/2 32796414221559468480 54.78%
10 1/0/0/0 40186253489765625000 67.12%
10 1/0/0/1 39491509229846341800 65.96%
10 1/0/0/2 35941639611179154600 60.03%
10 1/0/1/0 38251176182411506600 63.89%
10 1/0/1/1 37559946913836633000 62.73%
10 1/0/1/2 34041800344655961000 56.86%
10 1/0/2/0 31286012258011971200 52.25%
10 1/0/2/1 30619776907214352000 51.14%
10 1/0/2/2 27303350819160873600 45.60%
10 1/1/0/0 38251176182411506600 63.89%
10 1/1/0/1 37559946913836633000 62.73%
10 1/1/0/2 34041800344655961000 56.86%
10 1/1/1/0 36336178778385408000 60.69%
10 1/1/1/1 35648464491154944000 59.54%
10 1/1/1/2 32162040641460787200 53.72%
10 1/1/2/0 29489621947144944000 49.25%
10 1/1/2/1 28826901317691734400 48.15%
10 1/1/2/2 25542190227124771200 42.66%
10 1/2/0/0 31286012258011971200 52.25%
10 1/2/0/1 30619776907214352000 51.14%
10 1/2/0/2 27303350819160873600 45.60%
10 1/2/1/0 29489621947144944000 49.25%
10 1/2/1/1 28826901317691734400 48.15%
10 1/2/1/2 25542190227124771200 42.66%
10 1/2/2/0 23268609320459942400 38.86%
10 1/2/2/1 22630876264783987200 37.80%
10 1/2/2/2 19547717315744217600 32.65%
10 2/0/0/0 17024558861445312500 28.43%
10 2/0/0/1 16607805189889600500 27.74%
10 2/0/0/2 14645689508606656500 24.46%
10 2/0/1/0 15955781135956688000 26.65%
10 2/0/1/1 15541999505377488000 25.96%
10 2/0/1/2 13605404709763152000 22.72%
10 2/0/2/0 12426449451498264000 20.75%
10 2/0/2/1 12032775185385240000 20.10%
10 2/0/2/2 10248283560354840000 17.12%
10 2/1/0/0 15955781135956688000 26.65%
10 2/1/0/1 15541999505377488000 25.96%
10 2/1/0/2 13605404709763152000 22.72%
10 2/1/1/0 14902442165355888000 24.89%
10 2/1/1/1 14491632565753200000 24.20%
10 2/1/1/2 12580558325807472000 21.01%
10 2/1/2/0 11458807612389696000 19.14%
10 2/1/2/1 11068105117253184000 18.49%
10 2/1/2/2 9309126325891392000 15.55%
10 2/2/0/0 12426449451498264000 20.75%
10 2/2/0/1 12032775185385240000 20.10%
10 2/2/0/2 10248283560354840000 17.12%
10 2/2/1/0 11458807612389696000 19.14%
10 2/2/1/1 11068105117253184000 18.49%
10 2/2/1/2 9309126325891392000 15.55%
10 2/2/2/0 8433284778321312000 14.09%
10 2/2/2/1 8062683303650976000 13.47%
10 2/2/2/2 6455639343273120000 10.78%
11 0/0/0/0 5688000922764599609375 100.00%
11 0/0/0/1 5635964362080762515487 99.09%
11 0/0/0/2 5331298692270555014175 93.73%
11 0/0/1/0 5519213532579421183106 97.03%
11 0/0/1/1 5467308593599426356354 96.12%
11 0/0/1/2 5163970109302961715330 90.79%
11 0/0/2/0 4819602031232159880020 84.73%
11 0/0/2/1 4768742753566023064404 83.84%
11 0/0/2/2 4474989497979923525460 78.67%
11 0/1/0/0 5519213532579421183106 97.03%
11 0/1/0/1 5467308593599426356354 96.12%
11 0/1/0/2 5163970109302961715330 90.79%
11 0/1/1/0 5351355436133713979544 94.08%
11 0/1/1/1 5299582118757561419928 93.17%
11 0/1/1/2 4997570816344839639192 87.86%
11 0/1/2/0 4657924818728051971672 81.89%
11 0/1/2/1 4607197159805757423192 81.00%
11 0/1/2/2 4314770991723400744536 75.86%
11 0/2/0/0 4819602031232159880020 84.73%
11 0/2/0/1 4768742753566023064404 83.84%
11 0/2/0/2 4474989497979923525460 78.67%
11 0/2/1/0 4657924818728051971672 81.89%
11 0/2/1/1 4607197159805757423192 81.00%
11 0/2/1/2 4314770991723400744536 75.86%
11 0/2/2/0 4001866987946013609280 70.36%
11 0/2/2/1 3952184913117577071936 69.48%
11 0/2/2/2 3669341670873585495360 64.51%
11 1/0/0/0 4014568485868457031250 70.58%
11 1/0/0/1 3970048790693970902610 69.80%
11 1/0/0/2 3717856624343271101010 65.36%
11 1/0/1/0 3875936984128016447640 68.14%
11 1/0/1/1 3831545240312885598360 67.36%
11 1/0/1/2 3580629015820206481560 62.95%
11 1/0/2/0 3322504874224738585240 58.41%
11 1/0/2/1 3279118417934108881560 57.65%
11 1/0/2/2 3037274985594573111960 53.40%
11 1/1/0/0 3875936984128016447640 68.14%
11 1/1/0/1 3831545240312885598360 67.36%
11 1/1/0/2 3580629015820206481560 62.95%
11 1/1/1/0 3738184234020533359920 65.72%
11 1/1/1/1 3693920441464757790000 64.94%
11 1/1/1/2 3444280155200099358000 60.55%
11 1/1/2/0 3190494976469069160320 56.09%
11 1/1/2/1 3147236468577794736000 55.33%
11 1/1/2/2 2906668880086279651200 51.10%
11 1/2/0/0 3322504874224738585240 58.41%
11 1/2/0/1 3279118417934108881560 57.65%
11 1/2/0/2 3037274985594573111960 53.40%
11 1/2/1/0 3190494976469069160320 56.09%
11 1/2/1/1 3147236468577794736000 55.33%
11 1/2/1/2 2906668880086279651200 51.10%
11 1/2/2/0 2676727347561099381120 47.06%
11 1/2/2/1 2634474049974326102400 46.32%
11 1/2/2/2 2402976950763954364800 42.25%
11 2/0/0/0 1848950038120507812500 32.51%
11 2/0/0/1 1820331404600417956500 32.00%
11 2/0/0/2 1669049821825694500500 29.34%
11 2/0/1/0 1766541379243137783000 31.06%
11 2/0/1/1 1738035168701881335000 30.56%
11 2/0/1/2 1587832436801631735000 27.92%
11 2/0/2/0 1460870949753391176000 25.68%
11 2/0/2/1 1433214742931417160000 25.20%
11 2/0/2/2 1290310984332389448000 22.68%
11 2/1/0/0 1766541379243137783000 31.06%
11 2/1/0/1 1738035168701881335000 30.56%
11 2/1/0/2 1587832436801631735000 27.92%
11 2/1/1/0 1684842998310346160000 29.62%
11 2/1/1/1 1656449210647923120000 29.12%
11 2/1/1/2 1507325325992147376000 26.50%
11 2/1/2/0 1383588052718517360000 24.32%
11 2/1/2/1 1356044265915376752000 23.84%
11 2/1/2/2 1214219260180822896000 21.35%
11 2/2/0/0 1460870949753391176000 25.68%
11 2/2/0/1 1433214742931417160000 25.20%
11 2/2/0/2 1290310984332389448000 22.68%
11 2/2/1/0 1383588052718517360000 24.32%
11 2/2/1/1 1356044265915376752000 23.84%
11 2/2/1/2 1214219260180822896000 21.35%
11 2/2/2/0 1106842486733466912000 19.46%
11 2/2/2/1 1080148626429608736000 18.99%
11 2/2/2/2 945620291124276768000 16.62%
12 0/0/0/0 540360087662636962890625 100.00%
12 0/0/0/1 537133820900239063069569 99.40%
12 0/0/0/2 516527342869439573889921 95.59%
12 0/0/1/0 528713757739859651478064 97.84%
12 0/0/1/1 525492229358800073273904 97.25%
12 0/0/1/2 504937873522722121880112 93.44%
12 0/0/2/0 476052092002083982482136 88.10%
12 0/0/2/1 472871629592623191624408 87.51%
12 0/0/2/2 452731355636833012640472 83.78%
12 0/1/0/0 528713757739859651478064 97.84%
12 0/1/0/1 525492229358800073273904 97.25%
12 0/1/0/2 504937873522722121880112 93.44%
12 0/1/1/0 517107387447879602641904 95.70%
12 0/1/1/1 513890597447158346054640 95.10%
12 0/1/1/2 493388363766201932446704 91.31%
12 0/1/2/0 464735661356818955130560 86.00%
12 0/1/2/1 461559937296496485889728 85.42%
12 0/1/2/2 441471784363267844691648 81.70%
12 0/2/0/0 476052092002083982482136 88.10%
12 0/2/0/1 472871629592623191624408 87.51%
12 0/2/0/2 452731355636833012640472 83.78%
12 0/2/1/0 464735661356818955130560 86.00%
12 0/2/1/1 461559937296496485889728 85.42%
12 0/2/1/2 441471784363267844691648 81.70%
12 0/2/2/0 414292371055537287725984 76.67%
12 0/2/2/1 411157712043293605831584 76.09%
12 0/2/2/2 391483610411232737043360 72.45%
12 1/0/0/0 398118330526464843750000 73.68%
12 1/0/0/1 395282940770553194121840 73.15%
12 1/0/0/2 377653141481456687180400 69.89%
12 1/0/1/0 388251198021927065054320 71.85%
12 1/0/1/1 385420451218397075360880 71.33%
12 1/0/1/2 367841320667605259046000 68.07%
12 1/0/2/0 344998169478909602968000 63.85%
12 1/0/2/1 342207343499498460434880 63.33%
12 1/0/2/2 325026306808409097777600 60.15%
12 1/1/0/0 388251198021927065054320 71.85%
12 1/1/0/1 385420451218397075360880 71.33%
12 1/1/0/2 367841320667605259046000 68.07%
12 1/1/1/0 378422357258671595950080 70.03%
12 1/1/1/1 375596253406523266191360 69.51%
12 1/1/1/2 358067791554436140503040 66.26%
12 1/1/2/0 335443499225136872581440 62.08%
12 1/1/2/1 332657316165907389983040 61.56%
12 1/1/2/2 315526947040962717952320 58.39%
12 1/2/0/0 344998169478909602968000 63.85%
12 1/2/0/1 342207343499498460434880 63.33%
12 1/2/0/2 325026306808409097777600 60.15%
12 1/2/1/0 335443499225136872581440 62.08%
12 1/2/1/1 332657316165907389983040 61.56%
12 1/2/1/2 315526947040962717952320 58.39%
12 1/2/2/0 294256411125368012006400 54.46%
12 1/2/2/1 291510147966737376568320 53.95%
12 1/2/2/2 274777842122375158195200 50.85%
12 2/0/0/0 197306438098927734375000 36.51%
12 2/0/0/1 195373072204138200576600 36.16%
12 2/0/0/2 184040093330182617600600 34.06%
12 2/0/1/0 191058012207758496798400 35.36%
12 2/0/1/1 189128848824012184401600 35.00%
12 2/0/1/2 177840389449674630993600 32.91%
12 2/0/2/0 165346510638019047594400 30.60%
12 2/0/2/1 163452423223668758493600 30.25%
12 2/0/2/2 152500565322167048157600 28.22%
12 2/1/0/0 191058012207758496798400 35.36%
12 2/1/0/1 189128848824012184401600 35.00%
12 2/1/0/2 177840389449674630993600 32.91%
12 2/1/1/0 184841813005089921595200 34.21%
12 2/1/1/1 182916852131386830600000 33.85%
12 2/1/1/2 171672912217067306760000 31.77%
12 2/1/2/0 159351918154058935219200 29.49%
12 2/1/2/1 157462033218551867520000 29.14%
12 2/1/2/2 146554693644508186752000 27.12%
12 2/2/0/0 165346510638019047594400 30.60%
12 2/2/0/1 163452423223668758493600 30.25%
12 2/2/0/2 152500565322167048157600 28.22%
12 2/2/1/0 159351918154058935219200 29.49%
12 2/2/1/1 157462033218551867520000 29.14%
12 2/2/1/2 146554693644508186752000 27.12%
12 2/2/2/0 135239654279178304627200 25.03%
12 2/2/2/1 133384844389547260224000 24.68%
12 2/2/2/2 122814075709219422528000 22.73%
13 0/0/0/0 51334208327950511474609375 100.00%
13 0/0/0/1 51134179788681841685703903 99.61%
13 0/0/0/2 49750111347613142662470879 96.91%
13 0/0/1/0 50530611563278876987142666 98.43%
13 0/0/1/1 50330753605738386776445450 98.05%
13 0/0/1/2 48948717930263827726860810 95.35%
13 0/0/2/0 46594152049380145729697048 90.77%
13 0/0/2/1 46395895664732008225510680 90.38%
13 0/0/2/2 45031477291073328947545368 87.72%
13 0/1/0/0 50530611563278876987142666 98.43%
13 0/1/0/1 50330753605738386776445450 98.05%
13 0/1/0/2 48948717930263827726860810 95.35%
13 0/1/1/0 49728733062731524790461200 96.87%
13 0/1/1/1 49529045686909214157972240 96.48%
13 0/1/1/2 48149042776599795082035984 93.80%
13 0/1/2/0 45805779904042268283839120 89.23%
13 0/1/2/1 45607694100774310357861008 88.84%
13 0/1/2/2 44245308478895971053544080 86.19%
13 0/2/0/0 46594152049380145729697048 90.77%
13 0/2/0/1 46395895664732008225510680 90.38%
13 0/2/0/2 45031477291073328947545368 87.72%
13 0/2/1/0 45805779904042268283839120 89.23%
13 0/2/1/1 45607694100774310357861008 88.84%
13 0/2/1/2 44245308478895971053544080 86.19%
13 0/2/2/0 41980826345942689039006432 81.78%
13 0/2/2/1 41784342104683483819539168 81.40%
13 0/2/2/2 40439573388430944286841568 78.78%
13 1/0/0/0 39243658971375881347656250 76.45%
13 1/0/0/1 39063956036444496568781370 76.10%
13 1/0/0/2 37847573831158398878300730 73.73%
13 1/0/1/0 38545034854380379290485520 75.09%
13 1/0/1/1 38365500020024300886082320 74.74%
13 1/0/1/2 37151109641309935307596560 72.37%
13 1/0/2/0 35209944067846610091345680 68.59%
13 1/0/2/1 35031978551395532744877840 68.24%
13 1/0/2/2 33834714206228152598169360 65.91%
13 1/1/0/0 38545034854380379290485520 75.09%
13 1/1/0/1 38365500020024300886082320 74.74%
13 1/1/0/2 37151109641309935307596560 72.37%
13 1/1/1/0 37848073961155166075596320 73.73%
13 1/1/1/1 37668707227364394045664800 73.38%
13 1/1/1/2 36456308674792760579173920 71.02%
13 1/1/2/0 34525925783174817518363200 67.26%
13 1/1/2/1 34348128366951046546367040 66.91%
13 1/1/2/2 33152855834541598511653440 64.58%
13 1/2/0/0 35209944067846610091345680 68.59%
13 1/2/0/1 35031978551395532744877840 68.24%
13 1/2/0/2 33834714206228152598169360 65.91%
13 1/2/1/0 34525925783174817518363200 67.26%
13 1/2/1/1 34348128366951046546367040 66.91%
13 1/2/1/2 33152855834541598511653440 64.58%
13 1/2/2/0 31296447237399634647705920 60.97%
13 1/2/2/1 31120219128197264733645120 60.62%
13 1/2/2/2 29942072233144722130708800 58.33%
13 2/0/0/0 20752230543673505859375000 40.43%
13 2/0/0/1 20623341619585333605576600 40.17%
13 2/0/0/2 19793927650720623606063000 38.56%
13 2/0/1/0 20284902091049143055398800 39.52%
13 2/0/1/1 20156168861771911157389200 39.26%
13 2/0/1/2 19328557770144743139162000 37.65%
13 2/0/2/0 18172934139833940754508000 35.40%
13 2/0/2/1 18045621359289317690239200 35.15%
13 2/0/2/2 17233057858533043665996000 33.57%
13 2/1/0/0 20284902091049143055398800 39.52%
13 2/1/0/1 20156168861771911157389200 39.26%
13 2/1/0/2 19328557770144743139162000 37.65%
13 2/1/1/0 19819020036558125205659200 38.61%
13 2/1/1/1 19690442502081833663438400 38.36%
13 2/1/1/2 18864634287263207626497600 36.75%
13 2/1/2/0 17717944706056146786977600 34.51%
13 2/1/2/1 17590787619974464078497600 34.27%
13 2/1/2/2 16780026982641932035540800 32.69%
13 2/2/0/0 18172934139833940754508000 35.40%
13 2/2/0/1 18045621359289317690239200 35.15%
13 2/2/0/2 17233057858533043665996000 33.57%
13 2/2/1/0 17717944706056146786977600 34.51%
13 2/2/1/1 17590787619974464078497600 34.27%
13 2/2/1/2 16780026982641932035540800 32.69%
13 2/2/2/0 15691772446477628804160000 30.57%
13 2/2/2/1 15566035798244954929420800 30.32%
13 2/2/2/2 14770322355593236880448000 28.77%
14 0/0/0/0 4876749791155298590087890625 100.00%
14 0/0/0/1 4864348021720641063175751361 99.75%
14 0/0/0/2 4771934836578515620701423297 97.85%
14 0/0/1/0 4821301614392955810452687704 98.86%
14 0/0/1/1 4808905985900512748356045656 98.61%
14 0/0/1/2 4716571609516806271013931864 96.72%
14 0/0/2/0 4528792392052480857014805628 92.86%
14 0/0/2/1 4516458855309095161385968764 92.61%
14 0/0/2/2 4424864405601655634451866748 90.73%
14 0/1/0/0 4821301614392955810452687704 98.86%
14 0/1/0/1 4808905985900512748356045656 98.61%
14 0/1/0/2 4716571609516806271013931864 96.72%
14 0/1/1/0 4765927322987957169321250232 97.73%
14 0/1/1/1 4753537835437628572040105400 97.47%
14 0/1/1/2 4661282267807721059830205880 95.58%
14 0/1/2/0 4474043548788720969729196608 91.74%
14 0/1/2/1 4461716152983809738915856960 91.49%
14 0/1/2/2 4370200511874013177113969216 89.61%
14 0/2/0/0 4528792392052480857014805628 92.86%
14 0/2/0/1 4516458855309095161385968764 92.61%
14 0/2/0/2 4424864405601655634451866748 90.73%
14 0/2/1/0 4474043548788720969729196608 91.74%
14 0/2/1/1 4461716152983809738915856960 91.49%
14 0/2/1/2 4370200511874013177113969216 89.61%
14 0/2/2/0 4187076087885733579436910816 85.86%
14 0/2/2/1 4174810783703207715091376352 85.61%
14 0/2/2/2 4084035064241454903697500384 83.75%
14 1/0/0/0 3849053095846455029296875000 78.93%
14 1/0/0/1 3837708257837336322906326520 78.69%
14 1/0/0/2 3754685501899036555066131960 76.99%
14 1/0/1/0 3799798305297004063049134840 77.92%
14 1/0/1/1 3788459543720125118176932600 77.68%
14 1/0/1/2 3705514450247616895342654200 75.98%
14 1/0/2/0 3545499126710641314238989120 72.70%
14 1/0/2/1 3534221553743173889674478400 72.47%
14 1/0/2/2 3452001485142776155606336320 70.78%
14 1/1/0/0 3799798305297004063049134840 77.92%
14 1/1/0/1 3788459543720125118176932600 77.68%
14 1/1/0/2 3705514450247616895342654200 75.98%
14 1/1/1/0 3750615583773215451504537600 76.91%
14 1/1/1/1 3739282898628476268150681600 76.68%
14 1/1/1/2 3656415467617139590322319360 74.98%
14 1/1/2/0 3496921818639237841284868800 71.71%
14 1/1/2/1 3485650322100270178238704320 71.47%
14 1/1/2/2 3403507915804887989176478400 69.79%
14 1/2/0/0 3545499126710641314238989120 72.70%
14 1/2/0/1 3534221553743173889674478400 72.47%
14 1/2/0/2 3452001485142776155606336320 70.78%
14 1/2/1/0 3496921818639237841284868800 71.71%
14 1/2/1/1 3485650322100270178238704320 71.47%
14 1/2/1/2 3403507915804887989176478400 69.79%
14 1/2/2/0 3247939163018705344719246080 66.60%
14 1/2/2/1 3236728854962477201980773120 66.37%
14 1/2/2/2 3155311468510982301684683520 64.70%
14 2/0/0/0 2156376185926006811523437500 44.22%
14 2/0/0/1 2147876932524108006537171900 44.04%
14 2/0/0/2 2088330249595372425282311100 42.82%
14 2/0/1/0 2121817566051214385517134400 43.51%
14 2/0/1/1 2113324041720153093526094400 43.33%
14 2/0/1/2 2053849289794071956645659200 42.12%
14 2/0/2/0 1951710009295946324869797600 40.02%
14 2/0/2/1 1943273157876067322385880800 39.85%
14 2/0/2/2 1884454653264451466693695200 38.64%
14 2/1/0/0 2121817566051214385517134400 43.51%
14 2/1/0/1 2113324041720153093526094400 43.33%
14 2/1/0/2 2053849289794071956645659200 42.12%
14 2/1/1/0 2087323309552525231423454400 42.80%
14 2/1/1/1 2078835514292201452427640000 42.63%
14 2/1/1/2 2019432693364154759921630400 41.41%
14 2/1/2/0 1917742241717794734118240000 39.32%
14 2/1/2/1 1909311119365013244629548800 39.15%
14 2/1/2/2 1850564545595275833311788800 37.95%
14 2/2/0/0 1951710009295946324869797600 40.02%
14 2/2/0/1 1943273157876067322385880800 39.85%
14 2/2/0/2 1884454653264451466693695200 38.64%
14 2/2/1/0 1917742241717794734118240000 39.32%
14 2/2/1/1 1909311119365013244629548800 39.15%
14 2/2/1/2 1850564545595275833311788800 37.95%
14 2/2/2/0 1752126087822677729937174400 35.93%
14 2/2/2/1 1743751638254406529955606400 35.76%
14 2/2/2/2 1685661306770911199826096000 34.57%
15 0/0/0/0 463291230159753366058349609375 100.00%
15 0/0/0/1 462522320454804599389796975007 99.83%
15 0/0/0/2 456383444584649123568288039327 98.51%
15 0/0/1/0 459465305963151714263520607826 99.17%
15 0/0/1/1 458696617332122668328325873234 99.01%
15 0/0/1/2 452560781228363352590488059474 97.68%
15 0/0/2/0 437840517025838030205791468636 94.51%
15 0/0/2/1 437074223362272625548640648284 94.34%
15 0/0/2/2 430969122674296706212366400604 93.02%
15 0/1/0/0 459465305963151714263520607826 99.17%
15 0/1/0/1 458696617332122668328325873234 99.01%
15 0/1/0/2 452560781228363352590488059474 97.68%
15 0/1/1/0 455642558836915860424353520584 98.35%
15 0/1/1/1 454874091279805535222516685768 98.18%
15 0/1/1/2 448741294942392879568349993928 96.86%
15 0/1/2/0 434046585188966390383092906504 93.69%
15 0/1/2/1 433280512599280706459299985928 93.52%
15 0/1/2/2 427178451675849647206696860168 92.21%
15 0/2/0/0 437840517025838030205791468636 94.51%
15 0/2/0/1 437074223362272625548640648284 94.34%
15 0/2/0/2 430969122674296706212366400604 93.02%
15 0/2/1/0 434046585188966390383092906504 93.69%
15 0/2/1/1 433280512599280706459299985928 93.52%
15 0/2/1/2 427178451675849647206696860168 92.21%
15 0/2/2/0 412694536316100034341705388704 89.08%
15 0/2/2/1 411930858692419391695956382368 88.91%
15 0/2/2/2 405859533122069088844916822688 87.60%
15 1/0/0/0 375937011058501663391113281250 81.14%
15 1/0/0/1 375223061787680915389683367650 80.99%
15 1/0/0/2 369607366973167155726361870050 79.78%
15 1/0/1/0 372476496648460628586144582600 80.40%
15 1/0/1/1 371762766774300259032346643400 80.24%
15 1/0/1/2 366150079793745181320606534600 79.03%
15 1/0/2/0 353267128334174751749525920200 76.25%
15 1/0/2/1 352555768268587889187883014600 76.10%
15 1/0/2/2 346973369649691514028450208200 74.89%
15 1/1/0/0 372476496648460628586144582600 80.40%
15 1/1/0/1 371762766774300259032346643400 80.24%
15 1/1/0/2 366150079793745181320606534600 79.03%
15 1/1/1/0 369019099369839892871417254800 79.65%
15 1/1/1/1 368305588892338901765251290000 79.50%
15 1/1/1/2 362695909745693006005092570000 78.29%
15 1/1/2/0 349837837975562334369024331200 75.51%
15 1/1/2/1 349126697306595850255013400000 75.36%
15 1/1/2/2 343547306519806857047161982400 74.15%
15 1/2/0/0 353267128334174751749525920200 76.25%
15 1/2/0/1 352555768268587889187883014600 76.10%
15 1/2/0/2 346973369649691514028450208200 74.89%
15 1/2/1/0 349837837975562334369024331200 75.51%
15 1/2/1/1 349126697306595850255013400000 75.36%
15 1/2/1/2 343547306519806857047161982400 74.15%
15 1/2/2/0 330892687827714979916917406400 71.42%
15 1/2/2/1 330183916965863402795061508800 71.27%
15 1/2/2/2 324634814478030472139517393600 70.07%
15 2/0/0/0 221782506762175129272460937500 47.87%
15 2/0/0/1 221227097205185204349269641500 47.75%
15 2/0/0/2 217019966771245295881068169500 46.84%
15 2/0/1/0 219251000284067866475611653000 47.32%
15 2/0/1/1 218695800447242114505479685000 47.20%
15 2/0/1/2 214491505903366774969914885000 46.30%
15 2/0/2/0 205773138532898820333153444000 44.42%
15 2/0/2/1 205220173033699698431159460000 44.30%
15 2/0/2/2 201043931580859592201620644000 43.39%
15 2/1/0/0 219251000284067866475611653000 47.32%
15 2/1/0/1 218695800447242114505479685000 47.20%
15 2/1/0/2 214491505903366774969914885000 46.30%
15 2/1/1/0 216722338487628635198910360000 46.78%
15 2/1/1/1 216167348370966056181837720000 46.66%
15 2/1/1/2 211965889717105785578909592000 45.75%
15 2/1/2/0 203269578453139865102375160000 43.88%
15 2/1/2/1 202716822674064916153440504000 43.76%
15 2/1/2/2 198543417109438078856538360000 42.85%
15 2/2/0/0 205773138532898820333153444000 44.42%
15 2/2/0/1 205220173033699698431159460000 44.30%
15 2/2/0/2 201043931580859592201620644000 43.39%
15 2/2/1/0 203269578453139865102375160000 43.88%
15 2/2/1/1 202716822674064916153440504000 43.76%
15 2/2/1/2 198543417109438078856538360000 42.85%
15 2/2/2/0 190022149097660744709267696000 41.02%
15 2/2/2/1 189471627654753825828471024000 40.90%
15 2/2/2/2 185326275118459581837594864000 40.00%
16 0/0/0/0 44012666865176569775543212890625 100.00%
16 0/0/0/1 43964994463469746242092949559809 99.89%
16 0/0/0/2 43559010139256797441097158613505 98.97%
16 0/0/1/0 43748678095611055801700011783744 99.40%
16 0/0/1/1 43701013652565342214650632844864 99.29%
16 0/0/1/2 43295146055382005960867812980288 98.37%
16 0/0/2/0 42157093629824768655051147139360 95.78%
16 0/0/2/1 42109521153529658893078654507296 95.68%
16 0/0/2/2 41704918099167125234103021361440 94.76%
16 0/1/0/0 43748678095611055801700011783744 99.40%
16 0/1/0/1 43701013652565342214650632844864 99.29%
16 0/1/0/2 43295146055382005960867812980288 98.37%
16 0/1/1/0 43484825940071271139950272992064 98.80%
16 0/1/1/1 43437169455686657499301778445120 98.69%
16 0/1/1/2 43031418585532405792731929662272 97.77%
16 0/1/2/0 41894563135557155942856764699392 95.19%
16 0/1/2/1 41846998617922730127285156459264 95.08%
16 0/1/2/2 41442512290568689015522494395136 94.16%
16 0/2/0/0 42157093629824768655051147139360 95.78%
16 0/2/0/1 42109521153529658893078654507296 95.68%
16 0/2/0/2 41704918099167125234103021361440 94.76%
16 0/2/1/0 41894563135557155942856764699392 95.19%
16 0/2/1/1 41846998617922730127285156459264 95.08%
16 0/2/1/2 41442512290568689015522494395136 94.16%
16 0/2/2/0 40316287491418553776614162852480 91.60%
16 0/2/2/1 40268814940518091786119440919168 91.49%
16 0/2/2/2 39865593155214712469163965573760 90.58%
16 1/0/0/0 36587558241570175048828125000000 83.13%
16 1/0/0/1 36542743782438008486068243149120 83.03%
16 1/0/0/2 36165778567444653541313248768320 82.17%
16 1/0/1/0 36345128649411737477386681764160 82.58%
16 1/0/1/1 36300322105331937961598810245440 82.48%
16 1/0/1/2 35923472731775262837193498347840 81.62%
16 1/0/2/0 34905554654834666998519703125760 79.31%
16 1/0/2/1 34860839379765584916946732957440 79.21%
16 1/0/2/2 34485241265135721484399278800640 78.35%
16 1/1/0/0 36345128649411737477386681764160 82.58%
16 1/1/0/1 36300322105331937961598810245440 82.48%
16 1/1/0/2 35923472731775262837193498347840 81.62%
16 1/1/1/0 36102833693293827755479822909440 82.03%
16 1/1/1/1 36058035064266385286663961722880 81.93%
16 1/1/1/2 35681301532145861982608332308480 81.07%
16 1/1/2/0 34664556425387601698153254544640 78.76%
16 1/1/2/1 34619849065370460663552294708480 78.66%
16 1/1/2/2 34244366792156157051354523034880 77.81%
16 1/2/0/0 34905554654834666998519703125760 79.31%
16 1/2/0/1 34860839379765584916946732957440 79.21%
16 1/2/0/2 34485241265135721484399278800640 78.35%
16 1/2/1/0 34664556425387601698153254544640 78.76%
16 1/2/1/1 34619849065370460663552294708480 78.66%
16 1/2/1/2 34244366792156157051354523034880 77.81%
16 1/2/2/0 33237971636204836067864593520640 75.52%
16 1/2/2/1 33193355545181772467478535034880 75.42%
16 1/2/2/2 32819124530124139747138621102080 74.57%
16 2/0/0/0 22610883185369902622070312500000 51.37%
16 2/0/0/1 22574862395698219046050065972000 51.29%
16 2/0/0/2 22281606149607538686605061684000 50.63%
16 2/0/1/0 22426919159061163769006517728000 50.96%
16 2/0/1/1 22390906016080352474242133472000 50.87%
16 2/0/1/2 22097760502236355434012454368000 50.21%
16 2/0/2/0 21373812464168542445517215376000 48.56%
16 2/0/2/1 21337886564776027099225511568000 48.48%
16 2/0/2/2 21045920781198890734972688016000 47.82%
16 2/1/0/0 22426919159061163769006517728000 50.96%
16 2/1/0/1 22390906016080352474242133472000 50.87%
16 2/1/0/2 22097760502236355434012454368000 50.21%
16 2/1/1/0 22243080178561672947010020384000 50.54%
16 2/1/1/1 22207074682271723933501498400000 50.46%
16 2/1/1/2 21914039900673882212487144480000 49.79%
16 2/1/2/0 21191156871242952735902282496000 48.15%
16 2/1/2/1 21155238618540883670866440960000 48.07%
16 2/1/2/2 20863383567189310625828942592000 47.40%
16 2/2/0/0 21373812464168542445517215376000 48.56%
16 2/2/0/1 21337886564776027099225511568000 48.48%
16 2/2/0/2 21045920781198890734972688016000 47.82%
16 2/2/1/0 21191156871242952735902282496000 48.15%
16 2/2/1/1 21155238618540883670866440960000 48.07%
16 2/2/1/2 20863383567189310625828942592000 47.40%
16 2/2/2/0 20149675878063227359898516352000 45.78%
16 2/2/2/1 20113844868932814243335355264000 45.70%
16 2/2/2/2 19823169547077961074274712448000 45.04%

Here's the C program that was used to produce the tables above:

/*
 * Copyright (c) 2011 Solar Designer <solar at openwall.com>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted.
 *
 * There's ABSOLUTELY NO WARRANTY, express or implied.
 */
 
#include <stdio.h>
#include <assert.h>
 
#define MIN_LENGTH 6
 
#if defined(__GNUC__) && defined(__LP64__)
#define MAX_LENGTH 12
typedef __uint128_t count_t;
#else
#define MAX_LENGTH 9
typedef unsigned long long count_t;
#endif
 
#define MASK_BITS_PER_K 8
#define MASK_MASK_PER_K \
        ((1 << MASK_BITS_PER_K) - 1)
#define MASK_GET(mask, i) \
        (((mask) >> ((i) * MASK_BITS_PER_K)) & MASK_MASK_PER_K)
 
static char *count2str(count_t count)
{
        static char out[40];
        char *p;
 
        p = &out[sizeof(out) - 1];
        *p-- = 0;
        do {
                *p-- = '0' + count % 10;
        } while (count /= 10);
 
        return ++p;
}
 
static count_t count(unsigned int length,
    unsigned int mask, unsigned int classes)
{
        unsigned int k[MAX_LENGTH];
        unsigned int i;
        count_t total = 0;
 
        assert(length <= sizeof(k) / sizeof(k[0]));
 
        for (i = 0; i < length; i++)
                k[i] = 0;
 
        goto start;
        while (1) {
                i = length - 1;
                while (++k[i] >= 4) {
                        if (!i)
                                return total;
                        k[i--] = 0;
                }
start:
                {
                        unsigned int seen = 0, seen_classes = 0;
                        for (i = 0; i < length; i++) {
                                unsigned int shift = k[i] * MASK_BITS_PER_K;
                                seen += 1 << shift;
                                if (((seen >> shift) & MASK_MASK_PER_K) == 1)
                                        seen_classes++;
                        }
                        for (i = 0; i < 4; i++)
                                if (MASK_GET(seen, i) < MASK_GET(mask, i))
                                        break;
                        if (i < 4 || seen_classes < classes)
                                continue;
                }
                {
                        count_t n = 1;
                        for (i = 0; i < length; i++) {
                                unsigned int m;
                                switch (k[i]) {
                                case 0:
                                        m = 10;
                                        break;
                                case 1:
                                        m = 26;
                                        break;
                                case 2:
                                        m = 26;
                                        break;
                                default:
                                        m = 33;
                                }
                                assert(n * m > n);
                                n *= m;
                        }
                        assert(total + n >= total);
                        total += n;
                }
        }
}
 
int main(void)
{
        unsigned int length, classes, digits, lowers, uppers, others;
        count_t total = 0;
 
        puts("| Length | Min classes | Password count | % of total |");
        for (length = MIN_LENGTH; length <= MAX_LENGTH; length++)
        for (classes = 1; classes <= 4; classes++) {
                count_t current = count(length, 0, classes);
 
                if (classes == 1)
                        total = current;
 
                printf("| %u | %u | %s | %.2f%% |\n", length,
                    classes,
                    count2str(current), 100.0 * current / total);
                if (length > 9)
                        fflush(stdout);
        }
 
        puts("\n| Length | Min digits/lowers/uppers/others | Password count | % of total |");
        for (length = MIN_LENGTH; length <= MAX_LENGTH; length++)
        for (digits = 0; digits <= 2; digits++)
        for (lowers = 0; lowers <= 2; lowers++)
        for (uppers = 0; uppers <= 2; uppers++)
        for (others = 0; others <= 2; others++) {
                unsigned int mask =
                    digits |
                    (lowers << MASK_BITS_PER_K) |
                    (uppers << (2 * MASK_BITS_PER_K)) |
                    (others << (3 * MASK_BITS_PER_K));
                count_t current = count(length, mask, 0);
 
                if (!mask)
                        total = current;
 
                printf("| %u | %u/%u/%u/%u | %s | %.2f%% |\n", length,
                    digits, lowers, uppers, others,
                    count2str(current), 100.0 * current / total);
                if (length > 9)
                        fflush(stdout);
        }
 
        return 0;
}

The following (lazy) python script computes the list using the combinatorial formula instead. This allows us to compute it much faster and extend it to password lengths beyond 40 (if implemented in C, it should be even faster).

##
# Copyright (c) 2012 Sondre Rønjom <sondrer at gmail.com>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted.
##
 
n1 = 10 # digits
n2 = 26 # lowercase
n3 = 26 # uppercase
n4 = 33 # special 
 
# Max length of passwords
MIN_LEN = 6 
MAX_LEN = 50 
 
# Change these parameters to change bounds on policies
max_digit = 2 
max_lower = 2
max_upper = 2
max_special = 2
 
# Cardinality of alphabets
n1 = 10 # digits
n2 = 26 # lowercase
n3 = 26 # uppercase
n4 = 33 # special 
 
def binomial(n, k):
    result = 1
    for i in range(1, k+1):
        result = result * (n-i+1) / i
    return result
 
def multinomial(t1,t2,t3,t4):
    t = t1+t2+t3+t4
    total = binomial(t,t1)*binomial(t-t1,t2)*binomial(n-t1-t2,t3)*binomial(t4,t4)
    return total
 
 
def prod(r1, r2,r3,r4):
    return pow(n1,r1)*pow(n2,r2)*pow(n3,r3)*pow(n4,r4)
 
def count2(n,r1,r2,r3,r4):
  k = r1+r2+r3+r4;
  d = n-k;
  total = 0
  for s1 in range(d+1):
      for s2 in range(d+1):
          for s3 in range(d+1):
              for s4 in range(d+1):
                  if(s1+s2+s3+s4 == d):
                      s = prod(s1,s2,s3,s4)
                      total += multinomial(r1+s1,r2+s2,r3+s3,s4+r4)*s;
  return prod(r1,r2,r3,r4)*total
 
print "\n| Length | Min digits/lowers/uppers/others | Password count | % of total |"
 
for n in range(MIN_LEN,MAX_LEN+1):
    total = count2(n,0,0,0,0)
    for r1 in range(max_digit+1):
        for r2 in range(max_lower+1):
            for r3 in range(max_upper+1):
                for r4 in range(max_special+1):
                    cnt = count2(n,r1,r2,r3,r4)
                    print " ", n , " | ", r1,"/",r2,"/",r3,"/",r4," | ",cnt, " | ", 100*(float(cnt)/float(total))

Back to John the Ripper user community resources.

john/policy.txt · Last modified: 2012/08/24 11:22 by sondre
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate to DokuWiki Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Powered by OpenVZ Powered by Openwall GNU/*/Linux