Come faccio a sapere se il mio algoritmo di crittografia è abbastanza strong?

7

Sto usando ruby e ho il seguente algoritmo di crittografia:

 @@secret_key = Digest::SHA256.hexdigest(key)
 encrypted = Encryptor.encrypt("encrypt this", key: @@secret_key)
 encoded = Base64.encode64(encrypted).encode('utf-8')
 StoreInDB(encoded)

Il problema che sto cercando di risolvere: se un hacker ottiene una sospensione del mio database, non sarà in grado di decodificare la colonna "codificata" memorizzata.

È abbastanza strong? Essenzialmente, la colonna codificata è user_id.

    
posta Kamilski81 06.09.2012 - 00:06
fonte

2 risposte

2

OK - per prima cosa sembra strano che tu stia codificando un "user_id" (che suona come un nome utente) che io considererei un dato relativamente pubblico - e non una password o qualcosa di simile segreto - ma la domanda riguarda davvero la crittografia, quindi sto divagando ...

"Abbastanza strong" per ogni algoritmo di crittografia è valutato per quanto tempo occorrerà per decrittografare il testo senza la chiave (presumendo che tu abbia nascosto la tua chiave segreta in modo positivo). Nessun algoritmo è "perfetto" tranne il classico One Time Pad - che è un buon esempio accademico, ma non è così utilizzabile nel 99% dei casi, poiché richiede lo stesso spazio chiave della dimensione dei dati crittografati, e quindi genererai costantemente e la memorizzazione di una nuova chiave - che solleva i suoi problemi di sicurezza.

Quindi .. qualsiasi algoritmo realistico è considerato "abbastanza strong" se ci vorrà più tempo per decodificare il materiale senza la chiave di quanto valga l'informazione. Quindi, se l'informazione è il mio programma per il pranzo di domani, è probabile che il mio algoritmo di crittografia debba solo ritardare un attaccante 24 ore entro la quale l'evento sarà finito e non sarebbe importante perché non riesci a trovarmi c'è più ... ma può importare per anni, se il mio pranzo fosse un evento storico o qualcosa del genere.

Quindi i fattori del calcolo del cracking della crittografia includono: - quali sono i punti deboli dell'algoritmo - alcuni algoritmi possono avere set di chiavi deboli che sono più facili da decifrare, altri possono provare di aggiungere poco valore (alcune forme di DES)

  • qual è la dimensione dello spazio della chiave - se tutte le chiavi sono ugualmente sicure, allora il modo più ovvio per decifrare l'algoritmo è provare ogni possibile chiave della dimensione specificata - quante chiavi è un fattore di dimensioni della memoria e la natura di come vengono scelte le chiavi (ad esempio, i numeri primi sono utilizzati in crittografia asimmetrica)

  • quanto è difficile testare una decrittazione: quanto ci vorrà per provare un test con una determinata scelta di chiavi?

Quindi ... in un semplice algoritmo, il tempo di crack può essere:

# of keys in key space X time to test a key

Di solito viene calcolato su quante risorse puoi ragionevolmente aspettarti da un hacker? Una piccola organizzazione può avere 10-50 macchine. Uno stato nazionale può avere milioni. Qual è la natura della minaccia: quanta potenza di calcolo possono ragionevolmente avere? Non si presuppone necessariamente che sia limitato dal loro potere d'acquisto in Best Buy - se sono tecnicamente sofisticati, hanno una botnet di software dannoso in maniera massiccia parallela su macchine innocenti che effettuano il calcolo.

    
risposta data 07.09.2012 - 20:52
fonte
9

Quando la domanda è:

How do I know if my encryption algorithm is strong enough?

quindi la risposta breve probabile è:

  • Non è strong.
  • È abbastanza strong .
  • Manca il punto.

Quando i crittografi professionisti progettano un algoritmo, sempre presumono che ciò che hanno prodotto è debole. Non si fidano di esso fino a quando non sono stati seriamente guardati dai loro "colleghi" crittografi (che sono in realtà i loro concorrenti, e un gruppo piuttosto agguerrito, anche se generalmente di buon umore). Non sarebbe saggio, per un non crittografo, essere meno cauto di così.

Il tuo algoritmo è probabilmente abbastanza strong , dove "abbastanza" significa "abbastanza da non essere il punto più debole del tuo sistema". Ci vuole uno sforzo davvero speciale per creare un algoritmo crittografico così pateticamente debole che gli aggressori trovino utile distruggerlo in anticipo (un esempio è CSS usato su DVD, ma è ancora abbastanza raro).

Probabilmente il tuo algoritmo manca il punto perché la maggior parte della sicurezza non riguarda la crittografia; gli algoritmi crittografici svolgono un ruolo importante, ma con un ambito ristretto. Trascorro le mie giornate spiegando alle persone che la magia cripto-polvere che hanno cosparso su tutti i loro sistemi non è così magica come hanno supposto (ad esempio no, la crittografia di un database SQL non impedisce a un utente malintenzionato di modificare i suoi contenuti modificando i file sul disco ).

È possibile che il tuo algoritmo (di cui non fornisci alcun dettaglio) sia effettivamente strong e soddisfi un punto pertinente alla tua situazione. Possibile, ma, come mostra l'esperienza, non è probabile.

    
risposta data 07.09.2012 - 22:28
fonte

Leggi altre domande sui tag