Hey,
I do appreciate all work on the 340 cipher.
However it seems a bit that this thread silently made it ‘possible’ to switch from symbols into letters somehow? Without substitution?
If somebody may want to explain, before someone comes up with a perfectly fine cleartext actually resulting from homophones such as ? Or did I miss something?
Because I think this assumed homophone substitution cipher – even if ‘routes in quadrants’ etc. somehow requires substitution as the previous is not really some part of our humanoid alphabet?
QT
*ZODIACHRONOLOGY*
I’ve downloaded the files doranchak. At minimum settings (500,000 iterations 1 restart) it would take 1 month to complete.
Sounds like a job for the old SETI@home Internet- based public volunteer computing project.
@Cragle and doranchak, I will not run through the total package, but will instead save it for later.
However it seems a bit that this thread silently made it ‘possible’ to switch from symbols into letters somehow? Without substitution?
What do you mean?
Best result from 4th part:
Score: 20416.77 IOC: 0.0816 Multiplicity: 0.1852 Hours: 2.97 Repeats: ITLES TTHER THER RSES TERO TTHE TAS THE (2) TAT OST PT-to-CT cycles: 179 16 16 0 22 3 3 2 2 0 1 1 1 2 ONEERSDRROREBENNW ARMACOLLEATHEDTOF INGINESTHEENNERUN TIGENALTIESITARTE RITTHERDASATPAYIS SEDEOVERNCANALOST MILEAPOSEITINEFTT HEROSTTEROLEIDOWE STIMESROONEATTHEL ATEROFCRICESINARA SHMANTASTASITLESS UTATITLESLEISBEER DISSPOTATEECHTHER TOTRYKOSAIDINTHER SWEALMASOUNGLASID ERATHFOUROLDTHEGR OSSIAMWONTSATTERS ESVIATALINDEETHRS ESTEDTAKINCTTORPE RCEASMANDGREENISU
I mean you have only alphabetical letters – coming from where? The cipher is using homophones, symbols. Just by ‘shuffling’ which direction ever those homophones will always be homophones not letters…? Thus, where happens the step from homophones to letters, is my – possibly naive – question? Is your program transforming AND substituting, which I guess, similar to zdk method? Or only transforming in ‘routes and quadrants’?
QT
*ZODIACHRONOLOGY*
I mean you have only alphabetical letters – coming from where? The cipher is using homophones, symbols. Just by ‘shuffling’ which direction ever those homophones will always be homophones not letters…? Thus, where happens the step from homophones to letters, is my – possibly naive – question? Is your program transforming AND substituting, which I guess, similar to zdk method? Or only transforming in ‘routes and quadrants’?
QT
doranchak and me have made big files of many transformations (millions) which are then fed to AZdecrypt.
Best result from the 5th part:
Score: 20414.69 IOC: 0.0738 Multiplicity: 0.1852 Hours: 8.29 Repeats: NOTE AND STO ALS THE ORA REA TSS ESE EAM SSE RIT PT-to-CT cycles: 316 18 12 0 12 2 0 0 3 0 0 0 0 1 HOVOUITERALARGEAT TEDHIMPORTINHERWI SMETSINTOCARRYING ALSEVERNOUTTHETHA DSTOTALSONEWMISHT HEESTONAWRITISTIC CREAMENERAFETOSTE RWELSASVERSIANOTE DSEASOTHESEDINGMA RITREATEAMAILELOP AUNTSEMISITESEEFI REAYANIMPAGEARGAD MAYSOITNOTEYEALSU PPRESSTSSORRORAHO URULERWASEATFORCU TORANTSSETRAMSHEI DIDSARANDYOUMOSQU ANDPETESINNALLTOY SHISANCHEDENSSEVI NSFLIERRIMOULDNOT
I mean you have only alphabetical letters – coming from where?
When we post blocks that only have the letters A-Z, those are probably the plaintexts generated by AZdecrypt, the solver software. They are candidate substitutions of the inputs, and the inputs are a mix of alphabetic letters and symbols. For these quadrant tests, the input ciphers have been manipulated from the original Z340 based on numerous quadrant layout possibilities.
So the workflow is:
1) Take the Z340
2) Rearrange it based on some quadrant transformation
3) Feed the result into AZdecrypt which tries to solve it as a substitution cipher
Here is an example quadrant transformation from the process I used to make the millions of rearrangements for Jarlve:
Original Z340: HER>pl^VPk|1LTG2d Np+B(#O%DWY.<*Kf) By:cM+UZGW()L#zHJ Spp7^l8*V3pO++RK2 _9M+ztjd|5FP+&4k/ p8R^FlO-*dCkF>2D( #5+Kq%;2UcXGV.zL| (G2Jfj#O+_NYz+@L9 d<M+b+ZR2FBcyA64K -zlUV+^J+Op7<FBy- U+R/5tE|DYBpbTMKO 2<clRJ|*5T4M.+&BF z69Sy#+N|5FBc(;8R lGFN^f524b.cV4t++ yBX1*:49CE>VUZ5-+ |c.3zBK(Op^.fMqG2 RcT+L16C<+FlWB|)L ++)WCzWcPOSHT/()p |FkdW<7tB_YOB*-Cc >MDHNpkSzZO8A|K;+ Quadrant 1: HER>pl^VP Np+B(#O%D By:cM+UZG Spp7^l8*V _9M+ztjd| p8R^FlO-* #5+Kq%;2U (G2Jfj#O+ d<M+b+ZR2 -zlUV+^J+ U+R/5tE|D 2<clRJ|*5 z69Sy#+N| lGFN^f524 yBX1*:49C |c.3zBK(O RcT+L16C< Quadrant 2: |1LTG2d Y.<*Kf) ()L#zHJ pO++RK2 FP+&4k/ CkF>2D( XGV.zL| NYz+@L9 BcyA64K p7<FBy- BpbTMKO 4M.+&BF FBc(;8R .cV4t++ >VUZ5-+ ^.fMqG2 FlWB|)L Quadrant 3: |FkdW<7tB >MDHNpkSz Quadrant 4: YOB*-Cc O8A|K;+ Putting quadrants in new order [3, 2, 4, 1]: Quadrant 1: |FkdW<7tB >MDHNpkSz Quadrant 2: |1LTG2d Y.<*Kf) ()L#zHJ pO++RK2 FP+&4k/ CkF>2D( XGV.zL| NYz+@L9 BcyA64K p7<FBy- BpbTMKO 4M.+&BF FBc(;8R .cV4t++ >VUZ5-+ ^.fMqG2 FlWB|)L Quadrant 3: YOB*-Cc O8A|K;+ Quadrant 4: HER>pl^VP Np+B(#O%D By:cM+UZG Spp7^l8*V _9M+ztjd| p8R^FlO-* #5+Kq%;2U (G2Jfj#O+ d<M+b+ZR2 -zlUV+^J+ U+R/5tE|D 2<clRJ|*5 z69Sy#+N| lGFN^f524 yBX1*:49C |c.3zBK(O RcT+L16C< After rotations and flips: Quadrant 1 after rotate 0 and flip 0: |FkdW<7tB >MDHNpkSz Quadrant 2 after rotate 0 and flip 1: d2GTL1| )fK*<.Y JHz#L)( 2KR++Op /k4&+PF (D2>FkC |Lz.VGX 9L@+zYN K46AycB -yBF<7p OKMTbpB FB&+.M4 R8;(cBF ++t4Vc. +-5ZUV> 2GqMf.^ L)|BWlF Quadrant 3 after rotate 2 and flip 0: +;K|A8O cC-*BOY Quadrant 4 after rotate 0 and flip 0: HER>pl^VP Np+B(#O%D By:cM+UZG Spp7^l8*V _9M+ztjd| p8R^FlO-* #5+Kq%;2U (G2Jfj#O+ d<M+b+ZR2 -zlUV+^J+ U+R/5tE|D 2<clRJ|*5 z69Sy#+N| lGFN^f524 yBX1*:49C |c.3zBK(O RcT+L16C< After concatenation operations [((A concat-right-bottom B) concat-right-bottom C) concat-right-bottom D]: d2GTL1|HER>pl^VP) fK*<.YNp+B(#O%DJH z#L)(By:cM+UZG2KR ++OpSpp7^l8*V/k4& +PF_9M+ztjd|(D2>F kCp8R^FlO-*|Lz.VG X#5+Kq%;2U9L@+zYN (G2Jfj#O+K46AycBd <M+b+ZR2-yBF<7p-z lUV+^J+OKMTbpBU+R /5tE|DFB&+.M42<cl RJ|*5R8;(cBFz69Sy #+N|++t4Vc.lGFN^f 524+-5ZUV>yBX1*:4 9C|FkdW<7tB2GqMf. ^+;K|A8O|c.3zBK(O >MDHNpkSzL)|BWlFc C-*BOYRcT+L16C<
Understood, thanks.
QT
*ZODIACHRONOLOGY*
Best result of the 6th and final part, it probably is the best result from the entire test:
Score: 20503.04 IOC: 0.0719 Multiplicity: 0.1852 Hours: 8.54 Repeats: HATT TERE EAND ARRE TTH ENT STO ATE ELL ARI THE SON PT-to-CT cycles: 502 18 12 0 18 2 0 0 3 1 0 0 0 0 YMAYTELLEANDHISWO ULDMOISTERSIPARKN ELLASTOCARREASSNO WCLUBSINGSTONEEMA RLSCHORWILLEEDSAT APPYTOACARATIVESI TNIKERSTITCHTREAL OWOUTOITISNOTHEAN DMAKESTRAWHIMLATE SOFGALSTIMAREWARI OVATEINALECOLLEGE DIUMANBOEARISONHA TTNOFERTRWTTEREOR ALIANNTATERLAVENS ONITTHATTHEDERITA RUNONMOTINGLYFEAR RELLITSAINTHERARY CHUENTTOCALTVSPAT REMENTERESICKINCE ONANDRSRIENDARSMI
@Cragle and doranchak, I will not run through the total package, but will instead save it for later.
However it seems a bit that this thread silently made it ‘possible’ to switch from symbols into letters somehow? Without substitution?
What do you mean?
Best result from 4th part:
Score: 20416.77 IOC: 0.0816 Multiplicity: 0.1852 Hours: 2.97 Repeats: ITLES TTHER THER RSES TERO TTHE TAS THE (2) TAT OST PT-to-CT cycles: 179 16 16 0 22 3 3 2 2 0 1 1 1 2 ONEERSDRROREBENNW ARMACOLLEATHEDTOF INGINESTHEENNERUN TIGENALTIESITARTE RITTHERDASATPAYIS SEDEOVERNCANALOST MILEAPOSEITINEFTT HEROSTTEROLEIDOWE STIMESROONEATTHEL ATEROFCRICESINARA SHMANTASTASITLESS UTATITLESLEISBEER DISSPOTATEECHTHER TOTRYKOSAIDINTHER SWEALMASOUNGLASID ERATHFOUROLDTHEGR OSSIAMWONTSATTERS ESVIATALINDEETHRS ESTEDTAKINCTTORPE RCEASMANDGREENISU
ONEERS DRRORE BENN WARM A COLLEATHED TO FINGINES THE ENNER UNTIGENALTIES IT ARTER IT THER DAS AT PAY IS SEDE OVERN CAN A LOST MILE A POSE IT IN EFT THE ROST TEROLE I DO WES TIMES ROONE AT THE LATER OF CRICES IN A RASH MAN TAST AS IT LESS UTATITLES LE IS BEER DISS POTATE ECH THER TO TRY KO SAID IN THERS WE ALMA SOUNG LASIDERATH FOUR OLD THE GROSSIAM WONTS ATTERSES VIA TAL INDEE THRS ESTED TAKINCT TOR PERCE AS M AND GREEN I SU
Best result from the 5th part:
Score: 20414.69 IOC: 0.0738 Multiplicity: 0.1852 Hours: 8.29 Repeats: NOTE AND STO ALS THE ORA REA TSS ESE EAM SSE RIT PT-to-CT cycles: 316 18 12 0 12 2 0 0 3 0 0 0 0 1 HOVOUITERALARGEAT TEDHIMPORTINHERWI SMETSINTOCARRYING ALSEVERNOUTTHETHA DSTOTALSONEWMISHT HEESTONAWRITISTIC CREAMENERAFETOSTE RWELSASVERSIANOTE DSEASOTHESEDINGMA RITREATEAMAILELOP AUNTSEMISITESEEFI REAYANIMPAGEARGAD MAYSOITNOTEYEALSU PPRESSTSSORRORAHO URULERWASEATFORCU TORANTSSETRAMSHEI DIDSARANDYOUMOSQU ANDPETESINNALLTOY SHISANCHEDENSSEVI NSFLIERRIMOULDNOT
HOVOUITERAL ARGE ATTED HIM PORT IN HER WIS METS IN TO CARRYING ALS EVERN OUT THE THADS TOTAL SO NEW MISH THE EST ON A WRITISTIC CREAMENER A FE TO STER WELS AS VERSIA NOTED SEA SO THESE DING MARITREATE A MAILELOP AUNTS EMISITE SEE FIRE AY AN IMPAGE ARGAD MAY SO IT NOTE YEAL SUPPRESS TS SORROR A HOUR ULER WAS EAT FOR CUT OR ANTS SET RAM SHE I DID SAR AND YOU MOSQUAND PETE SINN ALL TOYS HIS ANCHE DENS SEVINS FLIER RIMOULD NOT
any chance it’s quadrants plus columnar transposition? i’ve been thinking about the "zo^aik" and "by rope, knife, fire, etc" that can be somewhat awkwardly sussed out of the quadrants as a clue towards re-arrangement. as an example, a "clue" could be swap the "i" and "a" columns in "zo^aik" then the ‘k" column with the one after it then rotate down so the "c" makes "zo^iac".
do you guys remember the "15 puzzle game"? it was sort of a flat rubik’s cube.
you would scramble the tiles and then rearrange them in numerical order. is there some way he could have intended to do this that doesn’t go down the rabbit hole of "infinite possibilities, none better than the rest"?
as an example, a "clue" could be swap the "i" and "a" columns in "zo^aik" then the ‘k" column with the one after it then rotate down so the "c" makes "zo^iac".
Nice idea, never thought of that! May be worth to include that variation into transposition tests.
HER>pl^VPk|1TLG2d Np+B(#O%DWY.*<Kf) By:cM+UZGW()#LzHJ Spp7^l8*V3pO++RK2 _9M+ztjd|5FP&+4k/ p8R^FlO-*dCk>F2D( #5+Kq%;2UcXG.VzL| (G2Jfj#O+_NY+z@L9 d<M+b+ZR2FBcAy64K -zlUV+^J+Op7F<By- U+R/5tE|DYBpTbMKO 2<clRJ|*5T4M+.&BF z69Sy#+N|5FB(c;8R lGFN^f524b.c4Vt++ yBX1*:49CE>VZU5-+ |c.3zBK(Op^.MfqG2 RcT+L16C<+FlBW|)L ++)WCzWcPOSH/T()p |FkdW<7tB_YO*B-Cc >MDHNpkSzZO8|AK;+
any chance it’s quadrants plus columnar transposition?
You probably mean columnar rearrangement judging from "zo^aik" example. It could be anything really. If you "mix" two things together you also multiply the search space, and we haven’t fully explored the quadrant hypothesis.
Hi,
i did a similar test some time ago and i’m pretty sure i documented it here in the forum. However, I cannot find this thread. My sourcecode management shows that I implemented the test on February 16. Well…maybe I wanted to document it and then I forgot it. Absent-mindedness is one of my strengths =)
Anyway…here are my own results again:
My test divided z340 into quadrants. The minimum side length of a quadrant was allowed to be 7. As possible transpositions I used None, Flip, Mirror, Reverse, Rotate Left and Rotate Right. All combinations of possible quadrant sizes and transpositions were created and put into my solver (36288 combinations in total). Unfortunately without result. But my solver is not nearly as reliable as AZDecrypt. Therefore it is great that a similar test is done again. I will search the forum again later, maybe I will find the thread after all.
Period transpositions and diagonal transpositions I had not considered at that time. Rotate Left/Right could be interpreted as "Period Quadrant Height".
This is my source code:
// ------------------------------------------------------------------------------------------------------------------ private static void SolveQuadrantTranspositions() { Console.WriteLine("Attempting to solve quadrant transpositions"); Cipher cipher = new Cipher(); cipher.Init(text: cipherText_z340, width: 17, height: 20); int minQuadrantWidth = 7; int minQuadrantHeight = 7; int count = 0; Cipher[] quadrantsSource = new Cipher[4]; Cipher[] quadrantsResult = new Cipher[4]; HomophonicSolver solver = new HomophonicSolver(nGrams: nGramsHuge); int targetRuns = 8; for (int i = 0; i < numThreads; i++) { solversHS[i] = new HomophonicSolver(nGramsHuge); } for (int x=minQuadrantWidth; x<=17-minQuadrantWidth; x++) { for (int y = minQuadrantHeight; y <= 20 - minQuadrantHeight; y++) { // Upper left quadrantsSource[0] = cipher.PickRect(0, 0, x, y); // Upper right quadrantsSource[1] = cipher.PickRect(x, 0, 17 - x, y); // Lower left quadrantsSource[2] = cipher.PickRect(0, y, x, 20-y); // Lower right quadrantsSource[3] = cipher.PickRect(x, y, 17-x, 20-y); foreach (var c in Toolbox.CombinationsWithRepetion(new int[] { 0, 1, 2, 3, 4, 5 }, 4)) { int current = 0; foreach (var n in c) { switch (n) { case 0: // Nothing quadrantsResult[current] = quadrantsSource[current]; break; case 1: // Flip quadrantsResult[current] = quadrantsSource[current].Flip(); break; case 2: // Mirror quadrantsResult[current] = quadrantsSource[current].Mirror(); break; case 3: // Reverse quadrantsResult[current] = quadrantsSource[current].Reverse(); break; case 4: // Rotate 90 quadrantsResult[current] = quadrantsSource[current].RotateRight(); break; case 5: // Rotate 270 quadrantsResult[current] = quadrantsSource[current].RotateLeft(); break; } current++; } StringBuilder result = new StringBuilder(); for (int i = 0; i < 4; i++) { result.Append(quadrantsResult[i].ToString()); } String cipherText = result.ToString(); foundBetterSolution = false; Thread[] threadPool = new Thread[numThreads]; int runs = 0; bool done = false; while (!done) { for (int i = 0; i < numThreads; i++) { // Is there an idle thread? if (threadPool[i] == null || !threadPool[i].IsAlive) { runs++; // Yes, then start it threadPool[i] = new Thread(() => SolvingThread(threadID: i, cipherText: cipherText)); threadPool[i].Start(); Thread.Sleep(100); if (runs == targetRuns) { done = true; break; } } } } done = false; while (!done) { done = true; for (int i = 0; i < numThreads; i++) { if (threadPool[i].IsAlive) { done = false; } } } if (foundBetterSolution) { Console.WriteLine("Best Score: " + bestScore); Console.WriteLine("Best Solution: n" + bestSolution); Console.WriteLine("Cipher: n" + result); Console.WriteLine("Count: " + count); foreach (var n in c) { Console.WriteLine(n); } } count++; if (count % 100 == 0) Console.WriteLine(count); } } } Console.WriteLine(count); }
Translated with http://www.DeepL.com/Translator (free version)
Nice Largo. Feel free to donate the ciphers and I’ll run them through as well.
Thanks, good idea! Same format like in "Zodiac 340 route transposition batch"-file found in AZDecrypt/Ciphers/Batch? Or single files?