Zodiac Discussion Forum

Not all homophonic …
 
Notifications
Clear all

Not all homophonic substitutions can be auto-solved

71 Posts
11 Users
0 Reactions
15.7 K Views
daikon
(@daikon)
Posts: 179
Estimable Member
Topic starter
 

… we have software that can solve the 408 in a matter of seconds. People have hammered the 340 with all this great software for years and never cracked it. This would suggest it is not homophonic substitution.

I wanted to address this common misconception. It’s seems there is a general assumption that any homophonic substitution can be automatically solved by currently available programs that implement hill-climb algorithms like ZKDecrypto and AZDecrypt. And I’m not talking about carefully crafted plaintext that doesn’t have certain common letters (like passages from the novel "Gadsby"), or that has an abundance of rare letters, or a very high, or very low IoC. That’s actually not the problem. Or plaintexts in languages other than English, as that’s solvable too, obviously. But there is still a way to fool hill-climb algorithm quite easily. Here is an example cipher I’ve constructed to illustrate this problem. It is a straight homophonic substitution, without any tricks of any kind. Each ciphertext symbol translates to only one plaintext letter, and there are no additional transformations to the plaintext that need to be done to read it:

9V[J%:;*S#K&_/$T'_A(
]#4$B)$%a0M$+USP<$`#
W,Q5L1a#Y-$&E2$$F#G3
9$.X:*N/#$_+VW#6J#=;
^C,T0ZD$^#HI`#R7K#>Y
?-P8L^A.^*QEJ4#a#@`#
U1<9#K^B+^,RFL5#a#=`
#S2:;#J$C#>#3<$D#[#9
$PG#6$Q'H7RO#8M#:^A-
^B?/$#X.@(P$*Z=)]C;%
IE[#+]F#^D,A&a#VG'``
_B(4K<)5L0>?1$%$26YH
&QZC9'IEND3FJ@#7^A-(
=#R[/8K)$#:%4L0T]G.>
#_*P^1$B2U[H&$$'IE]#
+[F#^C,(?#;D)b#35YA%
6J<9B&b#C'7K:G/b#$D(
$)8L%HI

It has a fairly normal plaintext too. In fact, it’s a passage from one of the Zodiac letters I picked at random. The cipher has the exact number of unique symbols as Z340, and it’s slightly longer at 347 letters, so it should be actually easier to solve. Yet, neither ZKDecrypto nor AZDecrypt can crack it at default settings. I’ve used the highest setting of "keys per cipher" for AZDecrypt and I let ZKDecrypto run for nearly an hour. I can see that it gets close at times, and I can even find a few correct words in the jumble of letters, but I can only see them because I know the plaintext. It is still generally unreadable otherwise (without knowing the plaintext).

It is by no means a clever way of constructing a cipher, and it should actually be fairly clear how I did it after manual analysis, but it does appear to fool automated cracking attempts. I’ll post a hint tomorrow, if nobody solves it before then.

EDIT: It appears I misunderstood some of the options of ZKDecrypto, and how to use it in general. So I stand corrected, the cipher above *can* be auto-solved. But definitely not in seconds.

EDIT#2: See this cipher which proved to be truly unsolvable without manual analysis and careful merging of cycles.

 
Posted : July 7, 2015 10:42 am
glurk
(@glurk)
Posts: 756
Prominent Member
 

daikon-

Is 10 minutes fast enough? I had to download it and run the program in that time, ofc.

SFTDASSOMEDAYITMA
YHAPENTHATAVICTOM
MUSTBEFOUNDIVETOT
ALITTLEIISTOFSOCI
ETYOFFENDERSWHOMI
GHTWELLBEUNDERGRO
UNDWHOWOULDNEVERB
EMISSEDWHOWOULDNE
VERBEMISSEDTHEREI
STHEPESTULENTUAIN
UTENCESWHOWHRITEF
ORAUTOTRATHSALLPE
OPLEWHOHAVEFLABBY
HANDSANDIRRITATIN
GLAUGHSAILCHILDRE
NWHOAREUTINDATESA
NDIMPLOREYOUWITHI
MPLATTALITEOPLEWH
OARESHAKEINTHANDS
SHATEHANDSLIKETHA
TANDALL

I didn’t do all corrections and etc., but that is pretty readable… The idea of ZKD was NEVER that it solve every single letter perfectly – no program can do that – but just get close enough to be readable and correctable. It does do that. Which was the point.

-glurk

——————————–
I don’t believe in monsters.

 
Posted : July 7, 2015 10:55 am
(@mr-lowe)
Posts: 1197
Noble Member
 

coolbananas :ugeek:

 
Posted : July 7, 2015 11:02 am
daikon
(@daikon)
Posts: 179
Estimable Member
Topic starter
 

Is that from ZKDecrypto? Which version? Are you using it at default settings? I’ve tried both v1.0 and v1.2 and neither get to the clarity of your result. Am I not doing something correctly? After loading the ciphertext I go to "Key" -> "Init Key" then hit "Ok" without changing anything and then hit "Start". That is all, right?

 
Posted : July 7, 2015 11:03 am
glurk
(@glurk)
Posts: 756
Prominent Member
 

Yes, from ZKD. And, well, I wrote the program. So I know how to use it better than most. I used 1.0 here too, but 1.2 is also available, but it is arguable which is best.

-glurk

EDIT: ZKD is not, and was NEVER meant to be a "press-it-and-forget-it" program, although it tends to work well in that respect. It’s more of a workbench, but being totally honest, I didn’t really DO any work here. I loaded the cipher you posted, ran the program, and saw a readable result in mere minutes. You saw the short time it just took me…

——————————–
I don’t believe in monsters.

 
Posted : July 7, 2015 11:05 am
daikon
(@daikon)
Posts: 179
Estimable Member
Topic starter
 

Yes, I’m aware you wrote ZKDecrypto. In fact, I was hoping this post would catch your attention. πŸ™‚ But you still haven’t answered my question. Did you alter any of the default settings? Because as best as I can tell, this cipher can’t be solved at default settings. Mostly because of the default homophone distribution that assumes that more frequent letters will get more homophones in the ciphertext and vice versa. And, as you probably already guessed, I’ve tried to get away from that assumed distribution as much as possible in the cipher above. Which seems to be the case for Z340 as well, because we have a big frequency spike for "+", and I don’t think anyone was able to come up with a good explanation for it.

 
Posted : July 7, 2015 11:14 am
glurk
(@glurk)
Posts: 756
Prominent Member
 

I changed no defaults here. But with that said, the ZKD program saves its defaults, if changed, in a file ZODIAC.INI

You can delete that file, ZODIAC.INI in the program folder, and it will restart with the built-in settings. I may have changed mine at some point. I’m certain that I have mine set as:

plain = C:UsersUSERDesktopzkdecrypto
fail = 30000
swap = 5
revert = 400
use = 15
line = 17
lang = 0
minword = 4
maxword = 20
extra = ABCDEFGHIJKLMNOPQRSTUVWXYZ

-glurk

EDIT: I think you are NOT using the "extra letters" option, which is very important.

EDIT 2: In fact, the importance of the "extra letters" was quite understated in the documentation, but no one wanted to write instructions or docs. It’s lucky that they exist at all, LOL.

——————————–
I don’t believe in monsters.

 
Posted : July 7, 2015 11:24 am
daikon
(@daikon)
Posts: 179
Estimable Member
Topic starter
 

I’ve compared my INI file with yours, and the only 2 differences are: your fail count is set way higher than the default (30,000 vs the default 2,000), but I suppose that’s ok, we do want it to run as long as possible. However, the more important difference is that your "extra" line is set to all letters. Mine (and the default setting) is no letters at all. And that’s what makes the difference in solving my constructed cipher above. When I manually change it to full alphabet, ZDK gets to the correct plaintext fairly quickly. Can you please explain what it is for and why it is not set to full alphabet by default? I suppose I can always check the source code, but it’ll probably be quicker to ask the author of the program. πŸ™‚

 
Posted : July 7, 2015 11:35 am
glurk
(@glurk)
Posts: 756
Prominent Member
 

I’m happy to answer, but let me get some stuff off my chest, this is directed at no-one in particular.

I am the original author of the ZKD "solve-engine" – the part that solves the ciphers. And I’m still around.

Two other programmers did most of the work on the Windows GUI. I don’t really do GUI / Windows works, I am more of a command-line Unix based programmer.

NONE of us wanted to write documentation. Hell, no one does. And the program, over 5 years, kept changing! Everyone was adding their own stuff. In truth, it was lucky to come together as well as it did.

BUT it’s a free program, as in no monetary charge, and also free as in that the entire program is open source, and freely available.

So, I’d say first to read the source code, if you can. But think of this – if a homophonic cipher has 26 total letters at most in the plaintext, but 63 symbols, how many alphabet letters would you want to be able to cover the homophones? At LEAST the number of symbols in the cipher – 63. Plus at least one more alphabet – 63 + 26. It is possible to add more, of course.

-glurk

EDIT: The honest fact is that the program COULD have ended up better than it did. But hell, man, three of us spent 5 years on it for no pay, no real recognition, or anything else. It is what it is. And if you USE it well, it works well. It is a tool. And it’s even a changeable, malleable tool. I don’t know what else to say. I never got one penny for the years of work, but never asked for one either. It was just meant to be useful. I’m glad that the man who invented the wheel wasn’t on a MB having to answer questions on how to use it.

——————————–
I don’t believe in monsters.

 
Posted : July 7, 2015 11:49 am
daikon
(@daikon)
Posts: 179
Estimable Member
Topic starter
 

glurk,
Don’t get me wrong, I’m not saying anything bad about ZKDecrypto! It’s an awesome and very useful tool and your contribution to solving this puzzle is immense. Especially considering it is a free program. The point I was trying to make (quite unsuccessfully at that though) is that the hill-climb algorithm isn’t guaranteed to solve every homophonic substitution cipher. The issue, I suspect, is in the way it works. Basically, if there is no hill to climb, it won’t be able to arrive at the solution. For example, if the solution field looks more like a very steep spike surrounded by a deep crevasse, if you will, the hill-climb algorithm will likely miss it. That’s why it can’t be used to solve modern encryption schemes — the solution field for those looks like random white noise with a very narrow spike right at the correct plaintext. So I tried to construct a similarly behaving cipher using a straight homophonic substitution, but it seems it’s not as easy as I thought.

The reason I’m doing this is not to poke holes in ZKDecrypto! Not at all. That was furthest from my mind. I’m just trying to think like Zodiac. To see if I can come up with a cipher that’s as hard to crack as Z340 and maybe in the process I’ll learn something about how Z340 was constructed in the first place. Not that he had any way of predicting how computers will be used to try to crack his ciphers, but who knows, maybe he simply got lucky and found a way to construct very hard to crack cipher, even for modern computers.

 
Posted : July 7, 2015 12:42 pm
glurk
(@glurk)
Posts: 756
Prominent Member
 

daikon-

Actually, I am glad you are here. The more cipher people the better, they come and go. And often they just "go" and are never seen again. I’m not mad or bitter or anything about ZKD, I just wish that people understood better how to use it!

ZKD, over time, uses random restarts to find those "spikes" in the hill-climb space. I think it works, at least eventually.

What I meant to say, and should have said, is WELCOME!! Glad you are here, and the more the better as far as the ciphers!

I’m a nice person, once you get past my Ogre exterior.

-glurk

——————————–
I don’t believe in monsters.

 
Posted : July 7, 2015 12:55 pm
doranchak
(@doranchak)
Posts: 2614
Member Admin
 

My ini file has: extra = *

Is that the default in the latest version (v1.2)? I don’t recall changing it. Daikon, I’m not sure why mine has the wildcard and yours doesn’t.

http://zodiackillerciphers.com

 
Posted : July 7, 2015 2:29 pm
traveller1st
(@traveller1st)
Posts: 3583
Member Moderator
 

My ini file has: extra = *

Same here. I’m using 1.2


I don’t know Chief, he’s very smart or very dumb.

 
Posted : July 7, 2015 2:54 pm
Jarlve
(@jarlve)
Posts: 2547
Famed Member
 

Welcome to the forum daikon,

Thanks for your cipher! It’s cyclic for the most part, correct?

I ran your cipher with AZdecrypt 0.94 on thorough and did see a 98% recovery rate (for 100 copies of your cipher). At this setting my program solves more than one cipher per second on my old i7. I also wish to refute your statement that not all homophonic substitution ciphers can be auto-solved – within reasonable limits – and from experience I strongly believe the opposite is true. Certainly with a strong solver like ZKDecrypto.

Does this mean the 340 is not homophonic substitution? No.

AZdecrypt

 
Posted : July 7, 2015 6:14 pm
daikon
(@daikon)
Posts: 179
Estimable Member
Topic starter
 

Ok, here’s my second attempt at creating a homophonic substitution cipher that cannot be auto-solved. Hopefully it won’t be defeated as easily as the first one. πŸ™‚

i76O<d6P01ZSAj6A[i8
GH2I6QK=^gR6OAL634B
]>CJ65TU96A?DG6P06k
1Vn26M:WA6A@E;Sr<XA
7Z[=FH63TU86A>BIjV_
J?iQA`]R^GkOAZPAC64
Np5[6Hm06k12DI]@KjA
<9EYJ:hA66;LA_G6k3S
n4HAgFI=er>WA7Z8M5f
ANJ69KA0GH1[?BX6:`L
^I6QAMYh2aACAd@_N6R
];DZ3KeAf6OT4<JAq6P
nALg=G5n0E6QUAmM71A
hR6OH[>NiA?8WXA6A@F
9V<jPA`]Q^IBAC6RJ:g
A66;KA_G62D6OZ7iLA[
=ME3S4n5F6P8s`9NA^H
6k0Td6QjAI]1Jr>YA:Z

The plaintext was taken from Wikipedia (with slight edits). It has IoC of 0.0661, so no tricks there. It does make use of some less common words, but not entirely out of Zodiac’s possible vocabulary. I also confirmed that if I reduce the number of ciphertext unique symbols to around 50, both ZKD and AZD do auto-solve it eventually after a long run.

 
Posted : July 7, 2015 10:26 pm
Page 1 / 5
Share: