Page Analysis: p15-22

For a basic “Count”, “Double-Letter Occurrence”, “Running IoC”, and “Concealment” analysis use this, general purpose, cipher analysis tool.

Index of Coincidence (IoC)

Quick IoC recap: Normal rune-english IoC is about 1.77. Values below 1.4 are highly unlikely to be anywhat meaningful. Predicting english text with IoC gets worse if the text is very short.

Here, we are considering either ᚠ being an interrupt; or it's inverse ᛠ. The numbers (1–32) represent the key length. With a key length of 5, every fifth rune will be decrypted with the same alphabet.

Note: The darker the cell, the better the prediction. The runes per length columns influences the results of the other columns; so if this is low, the other columns are not reliable.

IoC-highIoC-normRunes / keylen
11.031.030.260.26484683
21.081.060.310.28242341
31.111.090.340.31161227
41.131.070.350.30121170
51.181.110.400.3496136
61.181.110.410.3480113
71.161.140.390.366997
81.211.140.430.366085
91.121.100.350.335375
101.231.150.450.384868
111.201.120.430.344462
121.341.200.520.424056
131.271.220.480.443752
141.211.170.420.393448
151.201.190.430.393245
161.231.180.450.403042
171.241.200.460.422840
181.211.160.420.392637
191.321.190.480.412535
201.251.180.460.402434
211.241.250.450.472332
221.271.150.430.372231
231.241.160.430.382129
241.451.320.490.532028
251.341.260.480.461927
261.311.250.450.461826
271.221.180.400.391725
281.301.200.430.421724
291.281.220.410.431623
301.351.280.420.431622
311.291.210.400.421522
321.311.300.410.451521
best24241224

Modulo IoC

This section explores the idea of multiple alphabet-sets alternating. For example, have two or three Vigenere ciphers that switch after each rune. A Vigenere with key length 3 (ABC) plus another Vigenere with key length 4 (DEFG) will generate a pattern that only repeats after 24 runes (ADBECFAGBDCEAFBGCDAEBFCG). So, the first group will represent every 2nd letter (starting with the first), and the second group will also contain every 2nd letter but starting with the second.

There are two main distinctions. Interrupt-first-then-mod assumes that an interrupt will pause the alternation between the different groups. Mod-first-then-interrupt assumes that an interrupt will pause the key alternation within that group. Lets look at the example Vig(3) + Vig(5). With the first, the decryption sequence is: Vig(3)[0], interrupt, Vig(5)[0], Vig(3)[1], etc. With the second, the decryption sequence is: Vig(3)[0], interrupt, Vig(3)[1], Vig(5)[0], etc. Note that the second decryption still switched to Vig(5) but was ignored because it was an interrupt.

Note: The row header format is {interrupt}.{mod}.{offset}. “ᚠ.2.0” means, assume the interrupt is ᚠ, divide the data into two sets, then look at the first set (rune at index 0, rune at index 2, etc.). The column shows the key length for which the IoC was calculated. In the previous example, with a key length of 7, indices 0, 14, 28, ... are part of one alphabet, and indices 2, 17, 30, ... are part of another alphabet. Both are from the same alphabet-set!

Interrupt first, then mod (IoC-high):
runes12345678910111213
ᚠ.2.02421.121.151.231.271.311.421.311.371.371.391.371.551.47
ᚠ.2.12421.121.171.231.271.311.421.311.381.381.411.381.551.48
ᚠ.3.01621.221.371.391.601.421.501.521.96
ᚠ.3.11611.231.371.391.641.491.501.551.96
ᚠ.3.21611.231.351.341.641.491.451.551.94
ᛠ.2.03421.071.101.201.201.231.291.311.271.291.301.271.431.38
ᛠ.2.13411.071.111.191.201.221.291.311.251.271.311.271.411.35
ᛠ.3.02281.151.231.221.341.441.331.451.46
ᛠ.3.12281.171.221.261.321.501.331.521.52
ᛠ.3.22271.151.231.241.291.501.321.481.50
Interrupt first, then mod (IoC-norm):
runes12345678910111213
ᚠ.2.02420.350.380.450.500.520.590.540.580.580.570.590.580.60
ᚠ.2.12420.350.390.450.500.520.590.540.600.580.570.610.580.58
ᚠ.3.01620.440.600.610.740.630.690.650.76
ᚠ.3.11610.460.600.610.810.620.690.640.78
ᚠ.3.21610.460.580.560.810.640.650.670.78
ᛠ.2.03420.300.330.430.430.450.510.540.500.500.520.470.610.58
ᛠ.2.13410.300.340.420.430.450.510.530.480.490.520.490.600.55
ᛠ.3.02280.380.450.450.570.610.550.590.64
ᛠ.3.12280.400.450.480.550.640.560.600.66
ᛠ.3.22270.380.460.470.520.640.550.600.65
Mod first, then interrupt (IoC-high):
runes23456789101112131415161718
ᚠ.2.04021.051.101.121.161.151.161.181.261.241.241.271.281.251.361.221.241.31
ᚠ.2.16311.071.131.101.131.171.141.121.201.181.201.161.251.211.231.201.161.26
ᚠ.3.03591.071.091.151.211.161.131.271.191.331.231.301.261.241.301.291.261.33
ᚠ.3.16341.091.071.121.141.111.111.151.101.191.111.171.131.201.231.131.221.14
ᚠ.3.25301.121.091.171.161.151.191.221.121.211.261.191.301.271.231.281.221.24
ᛠ.2.06311.081.101.121.131.181.141.171.161.231.191.241.221.181.221.241.221.25
ᛠ.2.14741.111.161.161.211.191.161.221.231.241.211.271.321.261.291.301.311.28
ᛠ.3.06331.081.111.131.141.141.121.171.131.211.161.211.161.191.211.211.241.19
ᛠ.3.15701.111.121.151.181.191.151.181.141.251.201.251.231.201.241.231.321.24
ᛠ.3.24891.101.141.171.161.161.191.231.191.201.181.251.261.261.291.321.261.29
Mod first, then interrupt (IoC-norm):
runes23456789101112131415161718
ᚠ.2.04020.280.320.350.390.380.390.400.460.470.460.470.480.470.550.440.440.52
ᚠ.2.16310.300.360.330.360.390.370.340.420.410.430.390.480.430.450.420.390.48
ᚠ.3.03590.300.320.380.440.380.350.500.410.560.450.500.450.460.480.490.440.49
ᚠ.3.16340.320.300.340.360.340.340.370.320.420.330.390.350.420.460.350.450.36
ᚠ.3.25300.350.320.390.390.380.420.450.350.430.460.420.530.490.430.510.450.45
ᛠ.2.06310.310.320.340.360.400.370.400.390.460.410.470.450.410.450.460.430.48
ᛠ.2.14740.340.380.390.440.420.390.440.460.450.430.500.530.490.500.510.520.50
ᛠ.3.06330.300.330.350.370.370.350.390.360.430.390.440.390.410.440.430.460.41
ᛠ.3.15700.340.350.370.400.410.380.410.370.480.420.460.440.430.470.440.530.45
ᛠ.3.24890.330.370.400.390.390.420.450.420.430.410.470.490.480.490.530.470.49

Pattern IoC

This section looks at different ways to extend a short key into a longer one. The result of this expansion is still a plain Vigenere-like encryption but the key is so long that we would not be able to find it with IoC analysis. However, we can use the fact that the same letters appear again and so there are less alphabets than the key length.

The two mirror pattern variants simply flip the key in reverse and append it to the original key. For example, the key ABCD will become ABCDDCBA (Variant A) or ABCDCB (Variant B). Both keys will repeat after that. Notice how the first variant produces double letters (DD and AA) and the second does not.

The shift pattern simply offsets the key by one and appends this permutation to the key. For example, ABCD becomes ABCDBCDACDABDABC. Each key length n (here 4) has n - 1 shifts. The example before was shift = 1. The other two are ABCDCDAB (shift=2) and ABCDDABCCDABBCDA (shift=3). And again, like with the mirror pattern, we greatly increase the key length without increasing the alphabet count.

Note: While the column in the mirror pattern represents the key length, the column in the shift pattern is not the key length. Instead, the key length is given in the row title, e.g., “ᚠ.5”. The column header represents the key shift variation.

Mirror Pattern (IoC-high):
runes456789101112131415161718
ᚠ.a4841.111.201.161.171.171.221.241.201.241.241.281.281.241.261.28
ᚠ.b4841.201.211.221.241.231.221.221.291.231.381.331.331.331.261.31
ᛠ.a6831.111.111.161.131.151.121.161.141.211.191.171.181.221.231.21
ᛠ.b6831.121.131.201.161.151.161.191.221.211.251.221.221.271.251.20
Mirror Pattern (IoC-norm):
runes456789101112131415161718
ᚠ.a4840.340.420.390.400.390.450.470.420.460.470.490.510.420.470.48
ᚠ.b4840.430.440.450.450.440.440.420.480.460.540.500.530.450.460.48
ᛠ.a6830.330.340.390.360.380.350.390.360.440.420.390.410.440.460.42
ᛠ.b6830.350.360.430.390.380.390.420.420.440.480.430.440.430.450.42
Shift Pattern (IoC-high):
runes1234567891011121314151617
ᚠ.41211.141.151.11
ᚠ.5961.161.191.161.11
ᚠ.6801.181.151.231.151.16
ᚠ.7691.161.191.171.201.131.17
ᚠ.8601.251.161.171.151.191.191.17
ᚠ.9531.201.181.171.221.211.161.151.21
ᚠ.10481.131.211.231.191.231.161.221.211.21
ᚠ.11441.231.211.151.271.221.201.201.231.211.24
ᚠ.12401.261.221.221.221.251.241.221.191.231.231.31
ᚠ.13371.271.251.231.251.261.211.211.181.361.171.251.23
ᚠ.14341.351.231.211.241.231.271.251.211.281.221.211.201.26
ᚠ.15321.241.331.231.231.271.291.211.241.231.331.211.241.301.23
ᚠ.16301.251.231.251.211.211.231.241.241.261.311.301.291.231.221.24
ᚠ.17281.231.221.181.191.281.281.331.281.291.241.231.291.331.241.221.22
ᚠ.18261.311.261.261.221.231.281.251.381.321.301.271.271.271.251.271.251.33
ᛠ.41701.091.101.10
ᛠ.51361.111.141.101.09
ᛠ.61131.131.111.141.091.14
ᛠ.7971.141.111.141.151.111.12
ᛠ.8851.141.141.161.111.121.131.11
ᛠ.9751.191.131.141.151.141.151.151.10
ᛠ.10681.121.111.141.121.181.111.141.131.16
ᛠ.11621.141.141.171.161.171.151.171.151.131.20
ᛠ.12561.141.171.161.121.151.191.161.141.171.121.21
ᛠ.13521.191.191.151.161.171.161.161.171.151.201.191.19
ᛠ.14481.251.171.151.171.121.241.171.151.201.191.131.121.16
ᛠ.15451.221.241.181.171.161.211.151.201.231.241.191.181.171.19
ᛠ.16421.211.171.181.191.171.191.161.181.161.201.231.161.241.161.16
ᛠ.17401.181.141.151.171.231.201.221.261.161.181.211.201.211.161.241.19
ᛠ.18371.171.171.191.231.181.191.211.201.191.241.191.191.231.151.221.161.18
Shift Pattern (IoC-norm):
runes1234567891011121314151617
ᚠ.41210.370.380.34
ᚠ.5960.390.420.390.34
ᚠ.6800.410.380.450.370.39
ᚠ.7690.390.410.400.420.360.40
ᚠ.8600.470.390.400.380.410.410.39
ᚠ.9530.430.410.390.440.430.380.380.44
ᚠ.10480.360.440.450.420.460.390.450.440.42
ᚠ.11440.460.430.380.500.440.430.420.450.430.46
ᚠ.12400.490.440.450.420.480.460.440.420.440.450.53
ᚠ.13370.470.470.460.480.450.440.430.410.550.400.460.45
ᚠ.14340.550.460.430.440.450.500.480.430.480.430.420.430.48
ᚠ.15320.470.530.450.430.480.510.430.450.450.520.440.450.470.44
ᚠ.16300.460.430.450.440.410.450.470.440.480.500.520.490.450.430.47
ᚠ.17280.450.450.400.420.500.510.510.490.500.430.430.470.520.460.440.44
ᚠ.18260.480.460.480.440.450.500.480.580.480.500.480.480.460.430.460.440.50
ᛠ.41700.320.330.33
ᛠ.51360.340.370.320.32
ᛠ.61130.360.340.370.310.37
ᛠ.7970.360.340.370.370.330.34
ᛠ.8850.360.370.390.340.340.360.34
ᛠ.9750.420.360.370.370.360.370.380.32
ᛠ.10680.340.340.370.350.410.340.360.350.38
ᛠ.11620.370.370.400.380.400.380.400.370.360.42
ᛠ.12560.360.400.390.350.380.420.390.370.400.340.44
ᛠ.13520.420.420.380.390.400.390.390.400.380.430.420.42
ᛠ.14480.480.400.380.400.350.470.390.370.430.410.360.350.38
ᛠ.15450.440.470.400.400.380.440.370.420.460.410.410.400.400.40
ᛠ.16420.400.390.410.410.400.420.390.410.390.430.460.380.470.390.39
ᛠ.17400.400.370.380.400.450.420.440.470.380.410.440.420.430.390.460.40
ᛠ.18370.390.400.410.450.410.420.430.420.420.460.410.410.450.380.450.390.40