Come posso fare in modo che il mio codice mostri leffetto valanga?

Sono un principiante in crittografia. Ho progettato un algoritmo di crittografia-decrittografia basato su password, che utilizza un salt casuale e una password per crittografare un messaggio. Sto usando SHA-512 per lhashing, operazioni con matrici per mescolare, XOR bit per bit per mescolare dati e recuperare. La lunghezza del salt e del testo cifrato è di 256 lettere.

Per quanto ne so, il effetto valanga significa che una leggera modifica in uno dei seguenti:

  • cifratura
  • password
  • salt

deve cambiare drasticamente loutput.

Nella mia implementazione, se cambio il sale o il cifrario, non vedo grandi cambiamenti nel mio produzione. Tuttavia, quando cè un leggero cambiamento nella password, loutput cambia drasticamente.

Quindi, le mie domande:

  • La mia comprensione delleffetto valanga è generalmente corretta? In caso contrario, cosa dovrebbe essere?
  • Cosa posso fare per produrre al meglio leffetto valanga nel mio (o in qualsiasi altro) cifrario? devo ridurre la lunghezza del sale di meno e generare un testo cifrato più piccolo per creare un effetto valanga? In caso contrario, come posso ottenere questo risultato?

Commenti

  • Per curiosità, per cosa stai usando lhash?
  • Benvenuto in Cryptography Stack Exchange. @Avinash, la tua domanda è stata migrata qui perché è più in tema qui che su Stack Overflow. Per favore registra il tuo account qui per poter commentare e accettare una risposta.
  • Se vuoi risposte costruttive, dovresti mostrare come funziona attualmente il tuo cifrario (in formule matematiche, preferibile). Quindi possiamo dare unocchiata per vedere come migliorarlo.
  • Ho ‘ ho rimosso i commenti sulla falsariga di ” don ‘ t progetta il tuo codice ” – qui su crypto ‘ s perfettamente accettabile da provare, anche se dovresti capire che è tutto a tuo rischio, naturalmente 🙂 ‘ ho anche modificato un po la domanda per concentrarmi maggiormente sulleffetto valanga in assenza delle costruzioni di cifratura rilevanti. Se qualcuno ritiene che non sia necessario, sentiti libero di tornare indietro e / o migliorare ciò che ‘ ho fatto.

Rispondi

Non preoccuparti di cambiare lalgoritmo di cifratura effettivo. Leggi il principio di Kerckhoffs : dovresti cambia solo cose come la chiave e lIV, non lalgoritmo vero e proprio.

Per testare la tua valanga, capovolgi un bit nella tua chiave. Questo dovrebbe cambiare circa la metà dei bit nel tuo output.

Per la progettazione di cifrari, è già stata suggerita Crittografia applicata . Oltre a questo, devi considerare lintroduzione di Diffusione e Confusione nel tuo algoritmo. Inoltre vale la pena studiare gli algoritmi esistenti per vedere come vanno le cose. Ho iniziato progettando il mio semplice cifrario Feistel , in questo modo gran parte della struttura circostante è già pronta per te. Inoltre semplifica il design, in quanto la funzione F non deve essere invertibile. Ciò ti consente molta più flessibilità in quellarea.

Lavvertimento di non utilizzare il tuo progetto per qualcosa di diverso da un esercizio di apprendimento è positivo.

Commenti

  • Grazie mille ….
  • Cypher / cipher è una cosa tra Regno Unito e Stati Uniti.

Rispondi

Penso che sia fantastico che tu stia costruendo il tuo algoritmo di crittografia-decrittografia. Imparerai molto sulla crittografia in questo modo. Finora, tutti coloro che creano un lalgoritmo di crittografia-decrittografia di crittografia crea qualcosa di orribilmente difettoso in un modo o nellaltro – molto educativo – la prima volta.

terminologia

Se capisco correttamente la tua domanda, hai perfettamente domanda ragionevole sulleffetto valanga, ma la maggior parte delle persone su questo sito è così confusa riguardo alla tua terminologia non standard che non riesce nemmeno a capire cosa stai chiedendo.

Se capisco correttamente la tua domanda, stai costruendo un sistema di crittografia-decrittografia che accetta il testo in chiaro come input, memorizza i dati come file crittografati e successivamente consente a qualcuno con la password corretta di decrittografare i file memorizzati e recuperare il testo in chiaro decrittografato bit per bit identico allinput di testo in chiaro originale.

Come tu probabilmente già lo sapete, un tipico programma di crittografia crea file crittografati che iniziano con un vettore di inizializzazione (IV) che è stato appena generato da un generatore di numeri casuali crittograficamente sicuro quando è stato creato il file crittografato.Il programma di crittografia quindi suddivide il file di input in blocchi di testo in chiaro con una dimensione di blocco fissa, utilizza una modalità di cifratura a blocchi di operazione in “modalità di crittografia” per elaborare ogni blocco (e la chiave di crittografia) attraverso un cifrario a blocchi per finire con un blocco crittografato di la stessa dimensione del blocco, che viene aggiunta al file crittografato. Ci sono spesso alcuni bit poco pratici alla fine relativi al “riempimento” e all “autenticazione del messaggio”.

Successivamente il programma di decrittografia sminuzza il file crittografato in blocchi crittografati della stessa dimensione di blocco fissa, alimenta ogni blocco ( e la chiave di crittografia) tramite il codice a blocchi utilizzando la stessa modalità di funzionamento di crittografia a blocchi in “modalità di decrittografia” per recuperare il blocco di testo normale e concatena tutti i blocchi di testo in chiaro insieme per recuperare un file bit per bit identico al file di testo normale originale .

Sto usando SHA-512 per lhashing

OK, SHA-512 è un eccellente algoritmo di hashing. Se lo stai utilizzando come parte della funzione di arrotondamento interna o per generare sottochiavi dalla chiave di crittografia principale, funzionerebbe; sembra solo inutilmente complicato.

Se stai usando SHA-512 come una funzione di derivazione della chiave (KDF) per generare la chiave di crittografia principale dalla password, molte persone direbbero che non è “abbastanza complicato.

operazioni con matrici per mescolare

È un po insolito, ma potrebbe funzionare.

XOR bit per bit per la miscelazione dei dati e il recupero.

Praticamente tutti gli algoritmi di crittografia moderni utilizzano molte operazioni XOR bit per bit. Molti algoritmi di crittografia moderni sono progettati per utilizzare solo aggiunte modulari, rotazione con quantità di rotazione fisse e XOR (ARX) nel ciclo interno (iterazione circolare).

Sono carino che una funzione di arrotondamento interno che utilizzi solo XOR, o solo rotazione, o solo aggiunta modulare, sarà fatalmente insicuro, indipendentemente dal numero di iterazioni di round utilizzate.

(Non ne so abbastanza per dire nulla sulla sicurezza della tua particolare combinazione di operazioni XOR e matrice).

La lunghezza del salt e il testo cifrato è di 256 lettere.

Presumo che tu volessi dire “La lunghezza del vettore di inizializzazione (IV) e ogni blocco di testo cifrato è di 256 lettere . “

Un” salt “viene utilizzato per lhashing crittografico unidirezionale – vedi Puoi aiutarmi a capire cosè un salt ” è? . Un “IV” viene utilizzato nella crittografia a due vie: sia crittografia che decrittografia. Sia “salt” che “IV” sono valori casuali appena generati che si presume siano noti pubblicamente, ma la terminologia suggerisce che verranno utilizzati in diversi tipi di sistemi.

Quasi tutti impostano la lunghezza di lIV è uguale alla dimensione del blocco, quindi è fantastico.

La mia comprensione è che praticamente tutti i cifrari sviluppati prima dellannuncio del concorso AES del 1997 utilizzavano una dimensione del blocco di 64 bit (8 byte) o meno. Alcuni crittografi apparentemente pensava che non fosse abbastanza, ma per quanto ne so tutti ora sembrano pensare che una dimensione di blocco di 128 bit (16 byte) sia adeguata.

Una dimensione di blocco di 256 byte funzionerebbe; sembra solo inutilmente grande.

leffetto valanga

Quando si esegue ogni blocco di testo in chiaro attraverso il cifrario a blocchi (in alcune modalità di crittografia), leffetto valanga significa che un singolo bit cambia in uno dei seguenti:

  • dati nel blocco di testo normale
  • password
  • IV

devono cambiare il emette un blocco di testo cifrato drasticamente (circa la metà dei bit).

Quando si esegue ogni blocco di testo cifrato attraverso il cifrario a blocchi (in alcune modalità di decrittazione), leffetto valanga significa che un singolo bit cambia in uno dei seguenti:

  • blocco di testo cifrato
  • password
  • IV

deve cambiare drasticamente il blocco di “testo in chiaro” di output (circa metà dei bit).

Nella mia implementazione, se cambio il sale o il codice, non vedo grandi cambiamenti nel mio output.

Immagino che volessi dire una di queste due cose:

  • “se cambio un po vicino al inizio o Per il file crittografato (cioè, nel IV o in qualche blocco di testo cifrato precedente), non vedo grandi cambiamenti verso la fine del mio file di testo in chiaro di output.

Questa mancanza di il cambiamento avviene sempre quando si utilizza il Cipher Block Chaining (CBC) (sicuro) o altre modalità di funzionamento. Quindi non è necessariamente un problema.

Tuttavia, questo può essere un problema se pensavi di utilizzare la modalità (sicura) Propagating Cipher Block Chaining (PCBC), dove questa mancanza di modifica indica un bug nellimplementazione.

Inoltre, questa mancanza di modifiche è il risultato atteso quando si utilizza la modalità (non sicura) Electronic Codebook (ECB).

Indipendentemente dalla modalità di funzionamento selezionata, il programma di decrittografia dovrebbe stampare grandi allarmi spaventosi che il file non ha superato il controllo di autenticazione MAC ogni volta che un singolo bit del file crittografato è danneggiato.

  • “se cambio un singolo bit in un singolo blocco di testo cifrato crittografato in un file crittografato, non vedo grandi cambiamenti nel corrispondente blocco di testo in chiaro nel mio file di testo in chiaro di output. “

Sì, questo indica un grave difetto: il lalgoritmo di cifratura a blocchi non ha un buon effetto valanga. Questo è un segno che lalgoritmo non ha una miscelazione sufficiente. Ciò significa generalmente che il sistema è vulnerabile all attacco con testo cifrato scelto e ad attacchi simili.

Cosa posso fare per produrre al meglio leffetto valanga nel mio (o in qualsiasi altro) cifrario? dovrei ridurre la lunghezza del sale di meno e generare un testo cifrato più piccolo per creare un effetto valanga?

Presumo che tu volessi chiedere “devo ridurre la dimensione di la IV e la dimensione del blocco per creare un effetto valanga? “

Generalmente non è necessario.

Gli approcci più comuni per produrre leffetto valanga sono elencati in Wikipedia cifrario a blocchi :

Non conosco alcun cifrario a blocchi che produca una valanga completa dopo un singolo round. Le persone che progettano codici a blocchi cercano di scegliere un numero di cicli sufficiente per fare in modo che il codice a blocchi resista a tutti gli attacchi crittografici standard , che è più che sufficiente per produrre una valanga completa .

Le persone che progettano un codice a blocchi in genere scelgono uno schema generale di progettazione di codici a blocchi e fanno sì che il programma di cifratura a blocchi lo iteri più e più volte per il numero di cicli selezionato. Alcuni dei più popolari schemi generali di progettazione di cifratura a blocchi sono:

  • rete di permutazione di sostituzione
  • cifratura Feistel
  • cifratura Lai-Massey

Ognuno di questi richiede una funzione interna non lineare. I primi cifrari a blocchi usano spesso alcune complicate funzioni interne su ogni round che quasi raggiunge la valanga in un singolo round. I cifrari moderni spesso utilizzano una funzione interna molto semplice e veloce ogni round (alcune funzioni ARX) con una non linearità appena sufficiente per ottenere una valanga dopo un gran numero di round.

Commenti

  • Nota a margine: il cifrario khazad ha piena diffusione dopo un singolo round. ‘ ho realizzato anche giocattoli che lo fanno, ‘ è certamente possibile e scoprire come farlo è divertente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *