Crittologia, crittografia e crittoanalisi

Passiamo alle conoscenze teoriche di cui avrai bisogno per scrivere il progetto finale. Impariamo di più sulla crittografia e le sue parti costitutive. E allo stesso tempo, impareremo di più sulla cifra che utilizzerai durante la scrittura del progetto finale.

1. Crittologia e sue parti costitutive

La crittologia è un campo di conoscenza che include:

  • Crittografia (la scienza delle cifre).

    La crittografia consiste nel crittografare le informazioni per proteggerle da accessi non autorizzati. Queste informazioni potrebbero essere testo, un'immagine digitale, un segnale audio, ecc. Il processo di crittografia produce una versione crittografata delle informazioni (dati), chiamata testo cifrato o testo in codice.

  • Crittoanalisi (metodi per decifrare queste cifre).

    La crittoanalisi esamina i metodi per violare le cifre e come questi metodi possono essere applicati. In altre parole, la crittoanalisi esegue il compito inverso, studiando modi per trasformare le informazioni crittografate in testo in chiaro.

2. Chiave crittografica

Una chiave è una selezione di dati che viene utilizzata per crittografare e decrittografare le informazioni. La capacità di decrittografare correttamente le informazioni dipende dalla chiave utilizzata. Se una chiave viene persa per qualche motivo, sarà impossibile decrittografare i dati.

La dimensione delle chiavi crittografiche è misurata in bit. E questo significa che una chiave crittografica ha una lunghezza . Una buona forza di crittografia è fornita con una lunghezza di 128 bit.

Tipi di chiavi crittografiche:

  1. Chiavi simmetriche (chiavi segrete). Non sorprende che tali chiavi vengano utilizzate in quelli che sono noti come algoritmi a chiave simmetrica. Il loro scopo principale è eseguire trasformazioni crittografiche forward o reverse (crittografia/decrittografia, verifica del codice di autenticazione del messaggio).

  2. Chiavi asimmetriche. Sono utilizzati negli algoritmi di crittografia a chiave asimmetrica (ad esempio, durante la verifica di una firma digitale elettronica).

Dato che lavoreremo con un algoritmo di crittografia a chiave simmetrica, non entreremo troppo nei dettagli qui.

3. Alfabeto di sostituzione

Un alfabeto di sostituzione è un set completo di caratteri utilizzato per codificare i caratteri di input.

4. Approcci alla crittoanalisi

Esistono molti diversi approcci e metodi di crittoanalisi, ad esempio modi per decifrare le cifre.

Descriveremo il più semplice di loro:

  1. La forza bruta (o ricerca della forza bruta) sta provando tutte le chiavi possibili finché non troviamo quella corretta. Il vantaggio di questo metodo è la sua semplicità. Lo svantaggio è che non è adatto per cifrature che coinvolgono un gran numero di possibili chiavi.

  2. Crittoanalisi basata su dati statistici : in questo approccio, raccogliamo statistiche sull'occorrenza di diversi caratteri nel testo cifrato, quindi decrittiamo in base alle statistiche sulla frequenza di occorrenza di diversi caratteri nel testo in chiaro.

    Ad esempio: sappiamo che la frequenza della lettera P nei testi in inglese è dell'1,9%. Mentre analizziamo il testo cifrato, cerchiamo un simbolo che ricorre con la stessa frequenza e poi concludiamo che è la lettera P.

    Lo svantaggio di questo approccio è la sua dipendenza dalla lingua, dall'autore e dallo stile specifici del testo.

5. Cifrario di Cesare

Questo è uno dei metodi di crittografia più semplici e conosciuti. Il suo nome, ovviamente, deriva dall'imperatore Gaio Giulio Cesare, che usava questo metodo per corrispondere segretamente con i generali.

Un cifrario di Cesare è un cifrario a sostituzione in cui ogni carattere nel testo in chiaro è sostituito da un carattere che è un numero costante di posizioni alla sua sinistra o destra nell'alfabeto.

Supponiamo di impostare lo spostamento su 3. In questo caso, A sarà sostituito da D, B diventerà E e così via.

Questa è la quantità minima di teoria necessaria per completare il progetto finale. Passiamo alla descrizione dell'attività!

Progetto finale per il modulo Java Syntax. Scriviamo un crittoanalizzatore

Il tuo compito è scrivere un programma che funzioni con i cifrari Caesar.

Lascia che il tuo alfabeto crittografico sia composto da tutte le lettere dell'alfabeto inglese e dai segni di punteggiatura (. , ”” : - ! ? SPAZIO). Se incontri caratteri che non fanno parte del nostro alfabeto di sostituzione, saltali semplicemente.

Requisiti obbligatori

Il programma dovrebbe avere 2 modalità:

  1. Crittografia/decrittografia. Il programma deve crittografare e decrittografare il testo utilizzando una determinata chiave crittografica.

    Il programma dovrebbe ricevere un percorso a un file di testo contenente il testo sorgente e creare un file contenente il testo cifrato corrispondente.

  2. Crittoanalisi mediante attacco di forza bruta

    In questa modalità, il programma deve decifrare il testo cifrato contenuto in un file di testo di input.

    Se l'utente seleziona la forza bruta, il programma deve enumerare in modo indipendente le possibili chiavi, selezionare la chiave corretta e decrittografare il testo.

    Pensa a quali criteri dovrebbe utilizzare il programma per identificare con successo la chiave corretta. Potrebbe essere necessario prestare attenzione agli spazi tra le parole o all'uso corretto dei segni di punteggiatura.

Requisiti aggiuntivi (facoltativi).

1. Crittoanalisi mediante analisi statistica

L'utente dovrebbe essere in grado di scegliere uno dei due metodi di crittoanalisi. Se l'utente seleziona la modalità di analisi statistica, chiedere all'utente di caricare un file di testo aggiuntivo in testo normale, preferibilmente dello stesso autore e nello stesso stile. Sulla base del contenuto del secondo file, il programma dovrebbe compilare statistiche sull'occorrenza dei caratteri e quindi tentare di utilizzare queste statistiche per eseguire la crittoanalisi del testo cifrato.

2. Interfaccia utente

Crea finestre di dialogo per l'interazione con l'utente a tua discrezione. Se lo si desidera, è possibile utilizzare i framework grafici Swing e JavaFX.

Carica la tua soluzione finita in un repository Git pubblico.

Il progetto verrà controllato quando il gruppo lo esaminerà