Ci sono dei difetti in questa funzione crittografica a due vie?

2

Ho creato una semplice funzione crittografica bidirezionale che consente di crittografare un messaggio e decodificarlo con la stessa chiave. Ecco come funziona.

  1. Dividi il messaggio in un array di segmenti a 32 bit (o qualcos'altro, a seconda della lunghezza della tua chiave)
  2. Genera un numero casuale a 32 bit e xo tutti i segmenti con esso e aggiungilo all'inizio della matrice. (Ciò viene fatto per impedire a un utente malintenzionato di riconoscere che lo stesso messaggio o alcune parti di esso sono state inviate due volte)
  3. Xo tutti i segmenti con un hash della chiave e l'indice del segmento. L'indice è incluso per impedire a un utente malintenzionato di trovare pattern all'interno del messaggio in cui sono presenti 0 o altri dati noti.

Le mie domande sono:

  • Esiste già una funzione bidirezionale simile?
  • Ci sono dei difetti in esso, e se sì, cosa si può fare per correggerli?

Spiega in termini semplici, non sono un esperto in crittografia.

    
posta Runemoro 02.12.2014 - 03:40
fonte

3 risposte

5

Per prima cosa non eseguire il crypto e leggere la risposta DTK. Ma, credo che impariamo sperimentando così risponderò alle tue domande

Does there already exist a similar two-way function?

Sì. Sono chiamati cifrario a blocchi e sono dotati di diverse modalità operative. La cifratura a blocchi è una funzione che crittografa i dati per 1 blocco particolare. Nel tuo caso, sarebbe la tua funzione di hash che usa la coppia {chiave, indice} per creare un messaggio crittografato che poi XOR con il messaggio originale. La modalità di funzionamento è il modo in cui li si incatena. Nel tuo caso, la modalità di funzionamento più simile a quella che descrivi è CTR

Are there any flaws in it, and if so, what can be done to correct them?

Ci sono molti difetti

  1. Aggiungere sempre lo stesso numero casuale a 1 carattere (o un gruppo di caratteri) non ti aiuta. Controlla Analisi della frequenza
  2. L'hash dell'indice + chiave è sempre lo stesso finché la chiave non cambia. Questo è il difetto più critico nel tuo algoritmo.

    Xn = Hash (chiave + indice-n)
    R1 = numero casuale del primo messaggio
    R2 = numero casuale del secondo messaggio
    Y1n = Xn XOR R1
    Y2n = Xn XOR R2
    Z = R1 XOR R2

Se ti mando un primo messaggio e tu mi dai la risposta cifrata, posso quindi calcolare tutti i valori Y1n .

Quindi, se mi invii solo la versione criptata di un secondo messaggio, posso facilmente trovare il valore Z usando XOR sui primi 2 elementi dei tuoi messaggi

Quindi Y2n XOR Z = Y1n e conosco il tuo secondo messaggio anche se mi hai inviato solo la versione crittografata.

Il tuo problema più grande è la modalità di funzionamento . Ti suggerisco di iniziare da quello. Quindi, il tuo codice a blocchi potrebbe avere dei difetti da solo.

Fare questo esercizio può essere utile per l'apprendimento, ma non usarlo mai in nessun sistema.

    
risposta data 02.12.2014 - 19:56
fonte
7

Leggi il lavoro di Shannon del 1949 . Comprendere la diffusione e la confusione. Poi capisci che non capisci abbastanza * ANCORA * di teoria degli insiemi, probabilità e matematica lineare per sapere che non hai abbastanza background per progettare o implementare un algoritmo di cifratura. Leggi l'effetto Dunning-Kruger mentre ci sei, ma per favore continua ad imparare, in modo che un giorno ne saprai abbastanza per progettare un sistema segreto.

risposta data 02.12.2014 - 03:58
fonte
0

Come altri hanno dichiarato che è un codice a blocchi.

Va bene sperimentare con le tue idee e tecniche. Può essere divertente!

Semplicemente non mettere in produzione i tuoi esperimenti. Altre persone che sono molto più intelligenti di te o io probabilmente possono sconfiggere la tua protezione.

Dai un'occhiata alle modalità di funzionamento per i codici a blocchi, identifica la modalità più strettamente correlata alla tua e la loro dovrebbe essere un elenco di punti deboli associati a tale modalità.

    
risposta data 02.12.2014 - 20:25
fonte

Leggi altre domande sui tag