Portax test

Here’s another function to help identify a specific cipher type, in this case Portax.

function Ptaxtest(S:string): integer;
var i,hi, lo : integer;
begin
hi :=0; lo := 0;
  for i :=1 to Length(S) do
     begin
     if S[i] in ['w','j','m','b'] then hi := hi+1;
     if S[i] in ['r','s','y','z'] then lo := lo+1;
     end;
     if lo=0 then lo:=1;
  Ptaxtest :=  Round(20*hi/lo);
end;

The letters w,j,m,b are more frequent in Portax ciphers because they tend to encipher the high-frequency plaintext letters on the same columns on the lower (sliding) part of the key slide. Similarly the second set of letters tend to be low-frequency. Computing the ratio of these two sets is a good indicator of a Portax.

Cipher where log tetragraph scoring doesn’t work.

Here’s a Numbered key cipher even longer than the ACA guidelines suggest. Without a crib it can’t be solved by log tet scoring.

Numbered key:
06 48 52 55 47 35 58 10 06 49 07 16 52 17 57 23 35 27 47 57 31 09
46 20 55 42 59 58 20 37 58 46 47 51 06 38 29 05 32 52 43 26 37 08
24 39 07 10 18 59 31 29 09 19 14 32 42 07 24 57 23 10 41 41 10 32
39 18 50 24 11 21 23 40 56 18 48 52 29 13 23 48 49 07 52 02 38 13
05 28 07 40 56 37 12 35 52 33 13 47 16 15 22 47 17 18 46 30 24 39
23 53 27 52 57 25 56 48 42 55 38 03 55 37 40 25 16 47 11 36 46 52
58 48 15 24 26 38 57 23 18 10 23 25 24 26 25 35 07 10 09 57 33 54
50 26 48 53 40 57 54 50 53 59 20 37 41 54 07 25 32 26 15 21 38 22
30 33 14 57 23 15 02 47 43 52 33 10 57 37 52 08 09 18 20 58 31 15
28 47 35 48 08 28 51 27 47 29 21 23 07 12 51 10 37 31 45 53 41 52
45 49 54 18 06 33 20 16 26.

The key length is 60 — shorter than a Grandpre key. Here’s a trial decrypt with log tet score greater than the log tet score of the solution:

nttateehnatethatentatethantehtettentheetanthenthatthethenteathtthenaeehatthatthattattataeetththettatehtthathentantahhtnathatthethattethentatahthenhetheathentataheathtththenhatththathatatthattheahethetetheenthatthehtthatthahanthen

The log tet score of the above is 982. The log tet score of the solution is 914.

My regular PH hill-climber using log pentagraph and word list scoring solved it without a crib in about 30 million trial decrypts using three hill-climbing threads.

Bazeries test

I thought it might be useful to post some of the code I use in my Analyzer program to diagnose the type of an unknown cipher. I have a specific test for most types. The tests do not return a yes/no result, only a numerical score to indicate that type as more likely or less. Other factors like Index of Coincidence, length, Normor score, etc. also factor into the final score. Here’s the one I use for Bazeries:

Function Bazetest(S : String): Single;
var
temp, i : integer;
ch : char;
begin
temp :=0;
For i := 1 To Length(S) do
  begin
  ch := S[i];
  if ch in ['b', 'c', 'g', 'k', 'l', 'm', 'p'] then temp := temp + 1;
  end; // i
 If Length(S)>0 Then  Bazetest := 100*(temp/Length(S))
               Else  Bazetest := 0;
End;  // function Bazetest

This is written in Delphi/Pascal. Basically what it is does is to count up those ciphertext letters shown. They are not be used in the spelled-out numerical key as they do not appear in the numbers (in English). Thus most of them will be used as ciphertext substitutes for the letters in the fourth row of the plaintext polybius square, which is DIOTY. That’s the row with the highest combined frequency in the plaintext square. So the higher the number returned by this function, the more likely it is a Bazeries. It doesn’t appear in this test, but elsewhere my program also weighs heavily the absence of a J in the ciphertext, especially if all 25 other letters appear. That’s true for all the polybius square types.

Grandpre con

I updated the interactive Grandpre solver on Bionsgadgets so it now has undo-redo buttons. Here’s a randomly generated Grandpre that I tested it on.
My “sloppy” grandpre hill-climber using the crib solved it quickly.

Grandpre:
16 52 32 33 68 15 57 58 33 65 88 74 75 43 41 55 52 82 73 24 17 11
52 62 22 85 52 37 25 87 44 85 57 63 41 75 62 28 73 64 62 25 44 32
87 22 74 37 61 41 75 87 46 84 16 53 27 52 72 72 36 73 82 57 25 61
12 78 51 84 88 74 37 62 84 51 15 77 57 76 52 41 37 33 15 81 72 25
15 52 75 73 58 62 42 57 31 55 66 12 33 42 68 51 46 41 75 72 25 55
74 55 57 58 82 75 16 13 75 65 74 32 76 28 75 52 15 62 23 46 11 28
57 66 36 42 73 36 57 42 52 73 35 57 43 64 57 82 26 74 75 52 75 87
31 41 33 41 57 81 61 53 63 35 37 13 51 48 36 24 25 36 37 81 87 58

crib: toleavewiththe

BION Grandpré Worksheet

Thanks for providing the Grandpré worksheet at http://bionsgadgets.appspot.com/ , BION. It’s much handier to use than the interactive one I made many years ago – I’ve never put in my time to learn to program user interfaces, and in something like this it really shows! I used yours to do the JF19 AC-1217 and you made it fun rather than tedious.

I wonder whether crib placement could use more of the available frequency information. I think it currently just looks at overlaps in the crib, but perhaps it could also usefully check frequencies. I know in a homophonic like this you can’t count on high-frequency letters much, but if you have a low-frequency like ‘F’ it’s unlikely to be one of the higher-frequency dinomes. One could also give votes up and down if other digraphs or longer are formed.

I’ve also been musing about better automated Grandpré attacks, hillclimbing on both the keys and (if any) cribs, perhaps fiddling the keys to make sure it always has a full alphabet of words off my “cromulent words” lists, again paying attention to frequencies. I haven’t tried anything automatic yet – has anyone else?

K4 key worksheet

I was working out the K4 keys for the Aristocrats and Patristocrats in the MA 2019 Cryptogram and wrote a K4 worksheet program to save myself some effort. You can drag the alphabet columns around to arrange them in a likely order. You can enter suspected key words and put them into the key alphabets to see if the corresponding substitutions look like they contain the other key.

A link to this program is:
https://bionsbeta.appspot.com/test_area/K4_key_worksheet.html

Any bug fixes or suggestions for improvement are welcome.

BION

Another unknown

This new format seems to be working OK, so I’ll put up another con. This one is a random unknown type from Gutenberg.org. Although grammatical in form, the last few words make no sense with the beginning and in fact are the beginning of another sentence from a different book. My program sometimes grabs a second sentence in order to meet length standards. My Analyzer identified the correct type and my hillclimber solved it quickly.

ksupbatpnzikmpwilpvwgeinpantqvxsibhqbgdiratnziqqidvjqpgeutidyjaksysppgtnjfylnavampisyktxibpysqvgtucipprnaxsizljbne

New Con

Here’s a randomly generated cipher of unknown type. All my ID tests got the correct type. Hill-climber solved it without a crib, but it took a long time. I’ll include a caesar-shifted crib.

???
IMQNO TAOGX DIFDE XNLKD IFLTA MOTNP MCFLP FRVGX QAAPG DRCLQ GCWRT
DFSPH CBQCG DLPYN XGNPI MQNOT AOGXD IFDEX NLKDL PYNAS NG.

caesar-shifted crib: NSLNWTSFDJFSI