Spróbuj to odszyfrować.

satisek

Użytkownik
Dołączył
Luty 5, 2013
Posty
2
Na konkurs szkolny miałem przygotować program który byłby w stanie zaszyfrować tekst. Nie znam sie praktycznie na kryptologii, obejrzałem 2 godzinny wykład na temat niemieckiej enigmy, i głównie tej wiedzy użyłem do stworzenia tego programu szyfrującego. Jedyne co ten program ma wspólnego z enigma to system wirników, każdy laik stwierdziłby że program działa jak enigma, a osoba która się na tym zna by go wyśmiała. W każdym razie, na prawdę jestem ciekaw czy mój sposób szyfrowania jest dobry czy po prostu do dupy. Zarzucę wam dużą próbkę zaszyfrowanego tekstu. Proszę jak macie czas to spróbujcie to odszyfrować. Dodam pare podpowiedzi które powinny pomoc. Wiem że dawanie podpowiedzi wydaję się mało realistyczne, jednak prawdziwi kryptolodzy zazwyczaj mają jakieś śladowe informacje odnośnie tego w jaki sposób tekst jest zaszyfrowany. Poza tym tekst po zaszyfrowaniu wygląda jakby ktoś walił piętami w klawiature, w dodatku upewniłem się że podstawowe metody łamania szyfru które zostały użyte przez kryptologów do złamania enigmy nie będą miału w tym przypadku zastosowania. Więc tak

- 3 wirniki po 27 pozycji kazdy (ustawia sie je na 0-26)
- Litera po zaszyfrowaniu może stać się tą samą literą (np. a szyfruję się na a)
- obsługa 26 liter alfabetu + spacji
- litera po zakodowaniu może stać się spacją
- spacja po zakodowaniu może stać się literą
Próbka tekstu przed zaszyfrowaniem. (Niewiem dlaczego w tekscie na forum wyswietlaja sie jakies spacje, jedyne co zostalo zaszyfrowane to 1875 literek a)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Próbka tekstu po zaszyfrowaniu (wirniki ustawione na 0 0 0 )
ohlmrusfy jwpagdctbvzxinkqpzswxbecqikug lrondmfjhtyvakunrsx yldfpbvgmjizhaecotqwhrkopuxviacmzsdjgfweyb lqntnxquv caogiseyjpmlbkdhfrwtztcw afigumoykdpvsrhqjnlxbzerauyzdgeskmwibntqpfohljv xcjtmqrwzxkceoauflihyg dbnspvveybchkiwoq mfrxutjslpnzdaggqjnotwuh blyrcifevdxazkpmszibfglom sudqjvayxnwptrchekxg dejmkyqsbohtzwvlunrpafciakdhinqobuwfslxc zpyrvtejgm jcghmpnatverkwbzyoxqusdiflwfzcdiljxprangsyvuktmqo ebhmwptuzb nfhrdxiolkajcgeqvsyyhaefknlzrtcpiu xwmvosqbgdjudxabgjhvnpzleqwtsirkomyc fq txycfdrjlvhamspoengkiuzwbsbvz ehftlnxjcourqgpimkwaydcmfjkpsqdwyhunzebar txvglioislpqvywjbdn tekhgxfzcamroulvostyazmegqcwhnkj ibfdpurxdngklqtrexzivo fcbsauywhmjpfpimnsvtgzakxqbheducw yjolroyrvwadbphjtfzkqnmcleigsxu bleijorpcvxgtmyda qzswufkhntcw afigumoykdpvsrhqjnlxbzedngklqtrexzivo fcbsauywhmjpzibfglom sudqjvayxnwptrchekwfzcdiljxprangsyvuktmqo ebhbleijorpcvxgtmyda qzswufkhnhrkopuxviacmzsdjgfweyb lqntfpimnsvtgzakxqbheducw yjolryhaefknlzrtcpiu xwmvosqbgdjjtmqrwzxkceoauflihyg dbnspvveybchkiwoq mfrxutjslpnzdagnxquv caogiseyjpmlbkdhfrwtzlvostyazmegqcwhnkj ibfdpurxpzswxbecqikug lrondmfjhtyvaoyrvwadbphjtfzkqnmcleigsxu kunrsx yldfpbvgmjizhaecotqwakdhinqobuwfslxc zpyrvtejgmmwptuzb nfhrdxiolkajcgeqvsyislpqvywjbdn tekhgxfzcamroueohlmrusfy jwpagdctbvzxinkqgqjnotwuh blyrcifevdxazkpmsrauyzdgeskmwibntqpfohljv xcxg dejmkyqsbohtzwvlunrpafci jcghmpnatverkwbzyoxqusdiflsbvz ehftlnxjcourqgpimkwaydudxabgjhvnpzleqwtsirkomyc fcmfjkpsqdwyhunzebar txvglioq txycfdrjlvhamspoengkiuzwblvostyazmegqcwhnkj ibfdpurxwfzcdiljxprangsyvuktmqo ebhrauyzdgeskmwibntqpfohljv xcoyrvwadbphjtfzkqnmcleigsxu udxabgjhvnpzleqwtsirkomyc f jcghmpnatverkwbzyoxqusdiflyhaefknlzrtcpiu xwmvosqbgdjq txycfdrjlvhamspoengkiuzwbbleijorpcvxgtmyda qzswufkhnnxquv caogiseyjpmlbkdhfrwtzfpimnsvtgzakxqbheducw yjolrdngklqtrexzivo fcbsauywhmjphrkopuxviacmzsdjgfweyb lqntgqjnotwuh blyrcifevdxazkpmscmfjkpsqdwyhunzebar txvgliotcw afigumoykc



A tutaj zarzucam to co chciałbym byście spróbowali odszyfrować. Tekst po angielsku, skopiowany z wikipedi. Zawieral troche znakow nieobslugiwanych, takie znaki program traktuje jak spacje.
http://wklej.org/id/947880/txt/
Daje w linku, bo zbyt długie.

I ostatnia podpowiedz.
Gdybyscie mieli program to do odszyfrowania musicie znać jedynie początkowe pozycje wirników. Jako że każdy wirnik ma 27 pozycji to ilość możliwych kombinacji to 19683, więc do odgadnięcia pozycje potrzeba by jedynie brute forca i programu do rozpoznawania podstawowych angielskich słów, wtedy zajeło by wam to może z 20 minut.
 
Ostatnia edycja:

Reiko

Użytkownik
Dołączył
Październik 27, 2010
Posty
9
Dla mnie szyfr wydaje się dość dobry jak na "przeciętne" standardy. Nie jestem ekspertem w kryptografii, ale pierwszy-lepszy samozwańczy cracker powinien się poddać :) Ja do tej pory eksperymentowałem tylko (jak się okazuje) z tzw. Szyfrem Cezara. Później poszedłem krok w przód i ciąg znaków dzieliłem na kilka równych części i każdą z tych części szyfrowałem inną konfiguracją Szyfru Cezara. Jak dotąd sprawdzało się doskonale :) Dlaczego napisałem "jak się okazuje"? Dlatego, że szczerze mówiąc - na Szyfr Cezara wpadłem sam, a później dowiedziałem się że cś takiego już jest (to jeszcze były czasy szkoły średniej). Wiem że Ameryki nie odkryłem, ale... to było fajne uczucie :)
 

satisek

Użytkownik
Dołączył
Luty 5, 2013
Posty
2
Opisze wam jak działa ten program. Może to wam pomoże. W końcu kryptolodzy którzy odszyfrowali enigme dokładnie wiedzieli jak działała.

1. Wirniki
Są 3 wirniki. Każdy z wirników ma 27 pozycji, a każda pozycja ma losowo przydzieloną wartość z zakresu 0-26. Wartość ta jest unikalna dla każdej pozycji, żadne dwie pozycje na wirniku nie mają przydzielonej tej samej wartości.
Wirniki różnią się od siebie. Żaden wirnik nie ma na tej samej pozycji co inny przydzielonej tej samej wartosci.

Wirniki przed zaszyfrowaniem sie ustawia na dowolną pozycje, trzeba ja zapamiętać bo bedzie kluczem do odszyfrowania.

Po wprowadzeniu tekstu
Każda litera jest zmieniana na liczbe. a=1 b=2 c=3 etc.
Powiedzmy że wprowadzono litere a. Wirniki ustawiono na pozycje (0 0 0).
Wartości tych pozycji wyglądają tak (10 3 1)
Teraz się to sumuje, 10+3+1=14
Potem dodaje do litery zmienionej w liczbe 14+1 = 15
I potem zmienia sie te pietnastke na litere. Jeśli po zsumowaniu wynik jest wiekszy niz 26, program poprostu odejmuje 26 do momentu w ktorym wartosc bedzie mniejsza niz 26.
Potem przemienia ją w litere.

Jednak w momencie w którym nastepna litere bedzie zakodowana, pierwszy wirnik przeskoczy o pozycje w góre, więc wygląda to tak (1 0 0). i wartości będą już wyglądać w ten sposób
(12 3 1). I proces znowu zostanie powtórzony.
Gdy pozycja wirnika dojdzie do (26 0 0) to nastepnie przeskoczy na (0 1 0) Jak widać po dojsciu do konca pierwszego wirnika ten wraca na pozycje zerową a drugi wirnik podskakuje na pozycje wyżej, jak łatwo się domyślic nastepnie na (1 1 0).. (2 1 0) (3 1 0) (4 1 0). Chyba rozumiecie.

Jest jeden problem który zauważyłem.
pierwszy wirnik obraca się co znak. Drugi obraca się co 27 znakow, a trzeci co 729 znaków.
Co rodzi pewien problem. Mianowicie przy pozycjach wirników (0 0 0) wartosci wynoszą (10 3 1), jednak przy pozycjach (0 3 7) wartosci wyglądają tak (10 2 2).
Jako że w pierwszym i drugim przypadku suma wartości z drugiego i trzeciego wirnika wynosi 4. To w obu przypadkach 27 znaków zostanie zaszyfrowane w identyczny sposób.
Co wyjaśnia dlaczego w przykładzie z pierwszego posta niektóre ciągi znaków pojawiają się w dość nieregularnych odstępach.
Jako że są 3 wirniki każdy po 27 pozycji to szyfr powinien się zapętlać po 19683 razie, bo właśnie wtedy wirniki wrócą na oryginalne pozycje. Jednak z powodu wyżej wymienionego zjawiska, co jakiś czas, w nieregularnych odstępach ciągi 27 znaków mogą zostać zaszyfrowane identycznie.

Staram się coś zrobić z tym problemem ale jednocześnie brakuje mi pomysłów. Problemem jest to że drugi i trzeci wirnik przez większość czasu siedzą bezczynnie. Próba ruszania paroma jednocześnie kończy się jedynie zmniejszeniem jego wydajności, przez co szyfr może zapętlać sie w całosci juz po paru setkach znaków zamiast po paru tysiącach.
Dodanie większej ilosci wirników nie naprawia tego problemu.
 
Ostatnia edycja:
Do góry Bottom