Zodiac Discussion Forum

Project Zenith 2.0….
 
Notifications
Clear all

Project Zenith 2.0.0

11 Posts
4 Users
0 Reactions
2,076 Views
(@beldenge)
Posts: 48
Trusted Member
Topic starter
 

Hey everyone, I am happy to announce the 2.0.0 release of Project Zenith!

https://github.com/beldenge/Zenith/releases/tag/2.0.1

This time I decided to design a full-fledged web UI which showcases the features that previously were only available by via command-line. This is my attempt at making those features accessible to a wider audience. I’ve attempted to attach a couple of screenshots as a preview.

If you want a quick way to get started, simply download either of the following archives, unzip it, run the included script to start it up, and it will open in your browser automatically. Java 8 or later is required.
https://github.com/beldenge/Zenith/rele … 0.1.tar.gz
https://github.com/beldenge/Zenith/rele … -2.0.1.zip

There is now also a REST API with live documentation. Please see the README for zenith-api on github if that’s of interest to you.

For what it’s worth, my intention is not to "compete" with other tools familiar to these forums. I think tools like AZdecrypt, Zkdecrypto, and doranchak’s Webtoy and CryptoScope are all amazing, and in fact Zenith would not exist if not for standing on their shoulders so to speak.

That said, there are sure to be some bugs, as I am my own QA team, and I don’t use the app the way others likely would. So please let me know if you run into any issues.

Finally, I wish everyone the best during this time with the pandemic. Wash your hands and be careful!

Thanks,
George

http://projectzenith.net
https://github.com/beldenge/zenith

 
Posted : March 16, 2020 8:14 am
doranchak
(@doranchak)
Posts: 2614
Member Admin
 

Wow, very nice work!
Would be cool if someone could host the Web UI somewhere so anyone can play with it without installing anything.

http://zodiackillerciphers.com

 
Posted : March 18, 2020 3:17 pm
(@beldenge)
Posts: 48
Trusted Member
Topic starter
 

Thank you, and I agree. That’s the next logical step for sure. I have a few things to work through to get to that point, mostly related to putting limits on what can be done. The solver is very CPU heavy, so I’d have to limit for example someone from running it for a million epochs and completely DOSing it in one fell swoop. And I’m toying with the idea of throwing ads on the hosted instance to attempt to keep it self sustainable. AWS instances are cheap, and fortunately this is a niche that won’t draw heavy traffic, but I still want to make sure I can afford enough CPU for it to be useful. I’m sure I have some concurrency issues to fix as well. But it will get there!

http://projectzenith.net
https://github.com/beldenge/zenith

 
Posted : March 20, 2020 6:59 am
(@beijinghouse)
Posts: 34
Eminent Member
 

Very impressive! I’ve gotten it to run locally.

Initial impressions:

– I like the interface a lot
– Realtime transformation interface looks especially impressive and exciting
– Very interested in the genetic solver (although it doesn’t seem to solve 408… are there any ciphers where it can be shown to work?)

Areas for improvement?

– Would be nice to see best output every few epochs and not just at end of solve. A good default might be every 10-20 epochs. Maybe an optional setting if someone doesn’t want that?
– Combined with above, would also be nice to have an indefinite solve that allows someone to keep testing until they press Stop, and not just for fixed # of epochs.
– If allowing indefinite solves, a "Pause" button and not just a "Stop" button would also be great.
– For any eventual public server version, you could always replace indefinite solves with something like solving until no changes for XXX epochs. Then someone couldn’t press Solve and run for days when it’s not making progress. That might be a nice default for the local version too actually. I’d prefer setting a custom number of epochs without change as the stopping criteria vs indefinite.
– Maybe let users know it uses Google Analytics to track usage with a note in the bottom by the copyright? My browser blocks these sorts of trackers by default but seems fair to at least notify end users. Don’t know how much you’re committed to getting this usage data? An option in settings to turn off GA tracking would be a welcome addition too.
– Manage Ciphers doesn’t seem to work. I can’t add any other ciphers.
– Confused why the add cipher window would require the user to explicitly input the row and column count to add a new cipher. Couldn’t Zenith easily count these values itself?
– Could only make it run locally on Windows. It starts up and serves pages from a remote CentOS system as well, but the interface is broken.

I can send you details of the CentOS configuration/errors privately. The ciphers I tried to import for testing are gardi and attack:

gardi
3:aON;653<!%C>.7
#8Z<L6OY?U:AO#7Y
=(UB8,^aP+7/a>S#I
OY5W;AOGYQ2C_Q3OF
[+7PGU]N74()16′
*@M15386O&HRIL;3
]4X56NE+*M187!Y<N
[7";YMK3]6<&HR
#Y.+X(>Y#]N"(N7O3
_9O’#P(M12Y+Y^>Q7
7>KCa4K8$3/,=(UB/
,$;I]S-CO0;ND+YEQ
X;-BQ5"<;Y(50>+.^
18%<SO<Y"Y3<,7<6
*]V,/YL]B8#CF[,7_
M:Q7`+I1DZ:"7KO1
>P5]Y<`[3O8,F*W5′
J5)`’VZ<X*G05.BP
<!(T8*^-+XC18%OV
U,MG:DF(NI/V.Oa6

attack
FYYFHPYMJJFXYBFQQTKYMJHFXYQJFYIFBS

The interface simply doesn’t do anything when I press "Save".

Actually I figured it out. It errors out because it doesn’t make the "ciphers" directory if it doesn’t exist and then it can’t open the file it wants to write. Perhaps you should make an error handler that reports the error though the interface if the save isn’t successful (rather than no feedback) and make Zenith create the directory it needs if it doesn’t exist yet.

Both ciphers I tried were able to be saved after I added the "ciphers" directory myself. Can get partial solves on those after a few dozen epochs. It’s hard to guess how many to do, especially with no intermediate feedback though.

I’ll have to dive into how Zenith’s actual solver works later and see what you’re up to. The more I work with AZDecrypt, the more I marvel at how sensitive even the best algorithms are to minute tuning details. Even though your solver seems on its face to be a bit less powerful on average, it wouldn’t surprise me if it were still able to occasionally solve things other solvers didn’t simply because of how heavily tuned the best solvers tend to be and how that increases the chances they can miss solves on ciphers that fall outside their performance sweet spot.

Great initial impression though. I never checked out Zenith v1 due to my personal aversion to Java, but looks like I may have to get over that. Very easy to get up and running and the interface is fantastic. Looking forward to future releases.

 
Posted : March 20, 2020 12:49 pm
(@beldenge)
Posts: 48
Trusted Member
Topic starter
 

Beijinghouse, thank you for taking the time to try it out and for providing constructive feedback! I’ll try to respond to everything.

Genetic Algorithm
I cannot currently get the genetic algorithm optimizer to solve the 408, and I honestly haven’t tried it on any other ciphers. Hence why I try to show on the UI that it’s a beta feature, but I could be more clear. I still have not determined whether it’s a fundamental inability of the algorithm or if it’s a matter of hyperparameter tuning that needs to be sorted out. I’ve spent a great deal of time on it and still hope to get it working eventually. Both of the optimizers use the same scoring method, so my intuition at this point is that simulated annealing simply does a much better job of escaping local optima. In theory this seems backwards to me, but the GA seems to get stuck in local optima very easily and has a super tough time escaping them. My hope was that the GA would be LESS sensitive to hyperparameters and more about making sure the population size and generations are high enough. It’s also very possible I’ve still got a simple bug yet to be found, although I’ve spent a lot of time tracing it.

Epochs/Stopping Criteria
Those are some interesting suggestions that I had not thought of. I originally planned to show a chart of the score per epoch but didn’t make it a priority. And I like the idea of showing the solutions along the way. What if I show the current ‘best’ solution and only update it if an epoch returns a better solution (by score)? I also like the idea of stopping the solver after X epochs without change. I might modify it slightly to stop after X epochs without score improvement. Since I want to support multiple solvers, and the current one is essentially hill climbing with random restarts, each epoch will be slightly different by nature, and it would still run indefinitely. Any further thoughts on that?

Google Analytics
I set up google analytics out of pure curiosity to see if people were actually using the app and because it took less than 5 minutes to set up. I actually had already planned to add a toggle for people to turn it off but did not make it a priority. If people are concerned with it, I have no problem removing it entirely. I had no sneaky intentions with that.

Saving new Ciphers
Thanks for pointing out that issue with the /ciphers directory. I always seem to create that directory when I use the app, hence why I am not a good QA tester. :) I can look into defaulting to saving to the browser’s local storage and fail gracefully if the /ciphers directory doesn’t exist. The purpose with that directory is just to make any added ciphers persistent across browser sessions and browsers themselves. It would be painful if you had to import the same cipher every time you open the browser. I’ll also think more about automatically detecting rows/columns when adding ciphers. That’s very easy to do on its own, but I also want to handle the case where you paste in the cipher as a single line and let the app format it automatically. It currently (I hope) handles the latter case but not the former. And if you change the rows/columns after pasting the ciphertext, I wanted it to automatically update the cipher as a result.

http://projectzenith.net
https://github.com/beldenge/zenith

 
Posted : March 21, 2020 9:55 pm
doranchak
(@doranchak)
Posts: 2614
Member Admin
 

Genetic Algorithm
I cannot currently get the genetic algorithm optimizer to solve the 408, and I honestly haven’t tried it on any other ciphers. Hence why I try to show on the UI that it’s a beta feature, but I could be more clear. I still have not determined whether it’s a fundamental inability of the algorithm or if it’s a matter of hyperparameter tuning that needs to be sorted out. I’ve spent a great deal of time on it and still hope to get it working eventually. Both of the optimizers use the same scoring method, so my intuition at this point is that simulated annealing simply does a much better job of escaping local optima. In theory this seems backwards to me, but the GA seems to get stuck in local optima very easily and has a super tough time escaping them. My hope was that the GA would be LESS sensitive to hyperparameters and more about making sure the population size and generations are high enough. It’s also very possible I’ve still got a simple bug yet to be found, although I’ve spent a lot of time tracing it.

I have had similar problems with GAs in the past. One thing I’ve tried to fix them is fitness sharing ( https://stackoverflow.com/questions/378 … n/38174559), which is a way to prevent the population from saturating with lots of variations of a solution that is at a local optimum.
Another is simply running the GA multiple times on new seeds to improve the chances of finding the real optima. For example you could set up multiple threads, each thread handling an independent run of the GA.

Sometimes I wonder if simulated annealing is better than GA for this problem. I can’t find any definitive answer on this. Plus I think there are so many variations of GA that address local optima issues so it’s hard to make direct comparisons. There are even hybrid algorithms that combine SA and GA. It would be interesting to find a prepackaged library of metaheuristic algorithms where you could just develop, say, your decryption task, and then unleash hundreds of different flavors of algorithms on it to figure out which ones are best suited for it.

http://zodiackillerciphers.com

 
Posted : March 22, 2020 2:37 pm
(@beldenge)
Posts: 48
Trusted Member
Topic starter
 

I’ve edited my original post to reference the new 2.0.1 release I just pushed to Github, as this fixes a handful of bugs, several of which beijinghouse had run into.

It also gives the option to disable google analytics along with the slide transition effect. Those options can be found on the help page.

http://projectzenith.net
https://github.com/beldenge/zenith

 
Posted : March 26, 2020 5:45 am
(@beldenge)
Posts: 48
Trusted Member
Topic starter
 

By the way doranchak, thanks for the suggestions. I’m not giving up on GA’s just yet. I’ll see if I can make any improvements with those leads.

And I agree a tool like that would be incredibly useful. I haven’t looked for anything like that yet, but I’ll be sure to let you know if I find something.

http://projectzenith.net
https://github.com/beldenge/zenith

 
Posted : March 26, 2020 6:07 am
Jarlve
(@jarlve)
Posts: 2547
Famed Member
 

Hey beldenge, grats on your update of Project Zenith.

Your UI looks absolutely amazing, simply gorgeous! Very well done.

I’ve downloaded the .zip and ran "run-ui-windows" but nothing happens.

Sorry for the delay, I’ve been away for a while and still may be less active.

AZdecrypt

 
Posted : May 15, 2020 11:56 pm
(@beldenge)
Posts: 48
Trusted Member
Topic starter
 

Thank you Jarlve for the compliment and for trying it out! I’m sorry it’s not working. Do you happen to have Java installed? And does it log any error message in the console?

FYI I’m working on the 2.1.0 release which will support running it in a hosted environment so it won’t even require a download. But I still want to get that run script working.

http://projectzenith.net
https://github.com/beldenge/zenith

 
Posted : May 16, 2020 6:50 pm
Jarlve
(@jarlve)
Posts: 2547
Famed Member
 

I installed Java from java.com. After clicking "run-ui-windows" a console window pops up for the briefest moment (about 1 tenth of a second) and then closes again. I’ve tried to look what it says and it looks to contain the text inside "run-ui-windows".

AZdecrypt

 
Posted : May 17, 2020 10:46 am
Share: