Kryptologia, kryptografia i kryptoanaliza

Przejdźmy do analizy teorii, która będzie Ci potrzebna przy pisaniu finalnego projektu. Dowiedzmy się więcej o kryptologii i jej składnikach. A przy okazji - więcej o szyfrze, którego użyjesz podczas pisania końcowego projektu praktycznego.

1. Kryptologia i jej elementy

Kryptologia to dziedzina wiedzy, która obejmuje:

  • Kryptografia (nauka o szyfrach).

    Przedmiotem kryptografii jest szyfrowanie informacji w celu zabezpieczenia ich przed nieautoryzowanym dostępem. Takimi informacjami mogą być tekst, obraz cyfrowy, sygnał dźwiękowy itp. Podczas szyfrowania tworzona jest zaszyfrowana wersja informacji (danych), która nazywa się tekstem zaszyfrowanym, tekstem zamkniętym, kryptogramem.

  • Kryptoanaliza (metody otwierania tych szyfrów).

    Kryptoanaliza bada metody łamania szyfrów i sposoby ich zastosowania. Oznacza to, że wykonuje odwrotne zadanie: bada sposoby przekształcania zaszyfrowanych informacji w otwarte informacje.

2. Klucz kryptograficzny

Klucz to zestaw danych służący do szyfrowania i odszyfrowywania informacji. Sukces deszyfrowania zależy od użytego klucza. Jeśli z jakiegoś powodu dostęp do niego zostanie utracony, odszyfrowanie danych będzie niemożliwe.

Ilość informacji przechowywanych w kluczach kryptograficznych jest mierzona w bitach. A to oznacza, że ​​klucz kryptograficzny ma długość . Maksymalna siła szyfrowania jest zapewniona przy długości 128 bitów.

Rodzaje kluczy kryptograficznych:

  1. Symetryczny (tajemnica). Są one używane w algorytmach typu symetrycznego. Głównym celem jest odwrotna lub bezpośrednia transformacja kryptograficzna (szyfrowanie / deszyfrowanie, weryfikacja kodu uwierzytelniającego wiadomość).

  2. Asymetryczny. Są one używane w algorytmach szyfrowania typu asymetrycznego (na przykład podczas sprawdzania elektronicznego podpisu cyfrowego).

Będziemy pracować z algorytmem szyfrowania symetrycznego, więc nie będziemy wchodzić w zbyt wiele szczegółów.

3. Alfabet w kryptografii

Alfabet to kompletny zestaw znaków używanych do kodowania informacji o znakach.

4. Podejścia do kryptoanalizy

Istnieje wiele różnych podejść i metod kryptoanalizy (łamania szyfrów).

Opiszmy najprostszy z nich:

  1. Brute force (brute force, search by brute force) - wyliczanie kluczy, które jest wykonywane do czasu znalezienia odpowiedniego. Zaletą tej metody jest jej prostota, wadą jest to, że nie nadaje się ona do szyfrów wykorzystujących dużą liczbę możliwych kluczy.

  2. Kryptoanaliza oparta na danych statystycznych – przy tym podejściu zbierane są statystyki dotyczące występowania różnych znaków w zaszyfrowanym tekście, a następnie dane statystyczne dotyczące częstotliwości występowania różnych znaków w tekście jawnym są wykorzystywane do ich odszyfrowania.

    Na przykład: wiemy, że użycie litery „P” w tekstach wynosi 8%. Analizując zaszyfrowany tekst, szukamy symbolu, który występuje w procentach taką samą liczbę razy i dochodzimy do wniosku, że jest to litera „P”.

    Wadą tego podejścia jest zależność od języka, autorstwa tekstu i jego stylu.

5. Szyfr Cezara

Jest to jedna z najprostszych i najbardziej znanych metod szyfrowania. Nazwali go oczywiście na cześć cesarza Gajusza Juliusza Cezara, który używał go do tajnej korespondencji z generałami.

Szyfr Cezara to szyfr podstawieniowy, w którym każdy znak w tekście jawnym jest zastępowany znakiem znajdującym się o pewną stałą liczbę pozycji na lewo lub na prawo od niego w alfabecie.

Powiedzmy, że ustawiliśmy przesunięcie na 3. W tym przypadku A zostanie zastąpione przez D, B stanie się D i tak dalej.

To minimalne dane teoretyczne, które będą potrzebne do ukończenia ostatecznego projektu. Przejdźmy do opisu stanowiska!

Możesz przeczytać wykład CS50

Ostateczny projekt modułu Java Syntax. Pisanie kryptoanalizatora

Zadanie: napisać program współpracujący z szyfrem Cezara.

Na podstawie alfabetu kryptograficznego weź wszystkie litery alfabetu rosyjskiego i znaki interpunkcyjne (. , ”” : - ! ? SPACJA). Jeśli są znaki, których nie ma w naszym alfabecie kryptograficznym, po prostu je pomiń.

Obowiązkowe wymagania

Program powinien mieć 2 tryby:

  1. Szyfrowanie / deszyfrowanie. Program musi szyfrować i deszyfrować tekst przy użyciu podanego klucza kryptograficznego.

    Program powinien otrzymać ścieżkę do pliku tekstowego z tekstem źródłowym i na jej podstawie utworzyć plik z zaszyfrowanym tekstem.

  2. kryptoanaliza brutalnej siły

    Program musi złamać zaszyfrowany tekst przesłany jako plik tekstowy.

    Jeśli użytkownik wybierze brutalną siłę (brute force, szukaj brutalną siłą), program musi samodzielnie, poprzez wyliczenie, pobrać klucz i odszyfrować tekst.

    Zastanów się, jakie kryterium powinien przyjąć program jako sygnał udanego wyboru klucza. Być może będziesz musiał zwrócić uwagę na spacje między wyrazami lub na prawidłowe użycie znaków interpunkcyjnych.

Dodatkowe wymagania (opcjonalnie)

1. Kryptoanaliza metodą analizy statystycznej

Użytkownik programu powinien mieć możliwość wyboru jednej z dwóch metod kryptoanalizy. Jeżeli użytkownik wybierze metodę analizy statystycznej, powinien otrzymać propozycję wgrania kolejnego dodatkowego pliku z tekstem, najlepiej tego samego autora iw tym samym stylu. Na podstawie załadowanego pliku program powinien sporządzić statystyki dotyczące występowania znaków, a następnie spróbować wykorzystać uzyskane statystyki do kryptoanalizy tekstu zaszyfrowanego.

2. Interfejs użytkownika

Wszystkie okna dialogowe z użytkownikiem wykonują według własnego uznania. W razie potrzeby możesz użyć ramy graficznej Swing, JavaFX.

Prześlij gotowe rozwiązanie do publicznego repozytorium Git.

Projekt jest sprawdzany w trakcie jego przejścia przez grupę