Szyfrowanie przez zmianę systemu zapisu

0

Długo nad tym myślałem...
Teoretycznie rzecz biorąc, deszyfrowanie liczb (zwłaszcza dużych) zapisanych w jakimś systemie liczbowym jest łatwe. Np. jeżeli znajdziemy liczbę 10101011110100010101010101, to jesteśmy na 99,9% pewni, że to system dwójkowy, więc możemy zamienić na dziesiętny i finał.

Ale wymyśliłem coś takiego jak szyfr podwójny, w którym chodzi o to, że liczbę z systemu dziesiętnego konwertuje się na liczbę w systemie X, gdzie X < 10 (by nie pojawiły się litery), a następnie tą liczbę w systemie X uznaje się za liczbę w systemie dziesiętnym i konwertuje na inny system.

Być może zamieszałem, więc spieszę z wyjaśnieniem:
Chcę zaszyfrować liczbę 745D szyfrem ósemkowo-szesnastkowym. Najpierw konwertuję liczbę na system ósemkowy, wynikiem jest 13518. Teraz, uznaję tą liczbę za liczbę dziesiętną, czyli mamy 1351D. Teraz tą liczbę konwertuję na szesnastkowy, i wychodzi nam 547H.

Jeżeli chodzi o szyfrowanie do potęg liczby dwa (systemy dwójkowe, czwórkowe, ósemkowe, szesnastkowe itp) nie ma problemu, by wstawić to do jakiegoś programu. Wyliczanie kolejności można by wykonać za pomocą hasła: wystarczy hasło w zmiennej typu string przemienić na tablicę char. Każdy char ma swoją wartość liczbową, więc należy je np. zsumować i na podstawie wyliczonej sumy ustalić kolejność.

1

Pod warunkiem, że nikt nie przechwyci programu szyfrującego/deszyfrującego może by to zapewniało jakieś bezpieczeństwo, ale ten sposób szyfrowania nie jest odporny na kryptoanalizę różnicową

2

Kilka wiadomości tak zapisanych i każdy stażysta kryptolog rozwiąże tą zagadkę.

0

Ale cała sprawa polega na tym, że kod jest zarówno szyfrowany jak i deszyfrowany na podstawie hasła. Jeżeli poda się błędne hasło w trakcie deszyfrowania, program o tym nie poinformuje tylko wyliczy wynik na podstawie hasła. Jeżeli zaszyfruję liczbę 745 hasłem "Ala ma kota" i wyjdzie mi liczba 10AD, ktoś przechwyci wynik oraz program szyfrujący ale jako hasło napisze "kot ma Alę" to zamiast 745 wyjdzie mu np. 13425.

0

Zmienia to nieco punkt widzenia - opisz na jakiej zasadzie ma być zamieniany string "Ala ma kota" na rodzaj podstawy systemu liczbowego? Napisałeś wcześniej że podstawa ma być max 10 - ile to daje kombinacji? no max. 9 więc co za problem dla mnie jest je wszystkie sprawdzić. Dopracuj sposób zamieniania klucza to pogadamy.

0

String->char[]->int[], później jakieś kilka działań dla utrudnienia :D

Tak sobie pomyślałem, że podstawa mogłaby być większa od 9, tylko po prostu znaki od A do Z również byłyby zamieniane na liczby.

1

Czyli robisz szyfr podstawieniowy z kluczem. Cała "moc" jest w kluczu.

Poziom bezpieczeństwa:

  • Dla krótkich kluczy - niski
  • Dla kluczy długich (powyżej 160-bitów) - średni
  • Przy spełnieniu określonych warunków (one-time-pad) - bezwarunkowo bezpieczny

Nie robisz raczej nic niezwykłego...
http://www.kryptografia.com/algorytmy/xor.html typowy algo tego typu. Przypominam ci, że jeśli miałbym program to dodatkowe "mieszanie" jak to napisałeś nic nie da bo z programu dowiem się jakie to operacje mieszające.

0

Okej, po prostu się nad takim pomysłem zastanawiałem, bo wpadł mi do głowy w trakcie wykładu (o czym ja myślę...)

0

Jak chcesz sobie pogłówkować na wykładzie to polecam np. http://tdhack.com/ - zadania kryptograficzne zamiast krzyżówek :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1