Implicazioni sulla sicurezza dell'uso della codifica Base64 con crittografia

8

Ci sono implicazioni sulla sicurezza della conversione di una chiave di crittografia di array di byte in una stringa Base64 prima dell'uso?

Sto creando un helper di crittografia generico per un progetto e, per motivi di coerenza e generalità, utilizzo array di byte per tutti gli input e output (dati semplici, chiave, sale, ecc.)

Tuttavia, la libreria di crittografia che uso internamente si aspetta delle stringhe. Sono preoccupato che codificare la chiave come una stringa base64 prima dell'uso possa in qualche modo indebolire la sua forza in termini di entropia, ecc.

Qualche idea? In generale, la codifica Base64 influisce in alcun modo sulla forza della crittografia?

    
posta prmph 19.10.2014 - 01:09
fonte

3 risposte

1

Non è possibile che una moderna libreria di crittografia funzioni sui caratteri. Tutti i codici moderni sono definiti per operare su byte (alcuni sono definiti per operare su bit, ma la maggior parte delle biblioteche assumerà che un byte sia l'unità minima di dati). Se la tua libreria accetta stringhe carattere allora saranno convertite in byte all'interno. Nota che ad es. std:string fa not deve contenere stringhe di caratteri, può contenere anche stringhe di byte (stringhe a.k.a. ottetto).

D'altra parte la maggior parte delle librerie di crittografia utilizza l'intera gamma dello spazio delle chiavi. Ciò significa che i byte che compongono la chiave possono avere qualsiasi valore. Quindi, finché la chiave codificata 64 di base ha una dimensione di chiave valida, potrebbe essere accettata. In questo caso l'unico problema è che base64 conterrà 3/4 dell'entropia di una chiave completamente casuale. Quindi se hai una chiave AES a 192 bit verrà convertita in una chiave AES 256 bit. In tal caso non dovresti rivendicare la sicurezza a 256 bit, dato che la quantità di chiavi possibili nel tuo schema è ancora 2 ^ 192.

Se la libreria di crittografia stessa decodifica base64, la chiave viene prima convertita 1: 1 in base64 e quindi nuovamente nella chiave originale. Ovviamente in questo caso base64 non fa differenza. Ci si aspetterebbe che la conversione da base64 o esadecimali sia ben documentata per la libreria.

Sembra che ci siano preziose informazioni disponibili per Synercoding.Encryption: non è un buon segno.

Se la chiave non è una chiave ma una password inserita in PBKDF2, è sufficiente fornire sufficiente entropia. Se questo viene inserito direttamente in PBKDF2 o se viene prima codificato come base64 non fa differenza.

Abbastanza divertente per una funzione basata su password PBKDF2 è anche definito per operare su byte. L'API dovrebbe quindi anche specificare la codifica dei caratteri. Di solito è compatibile con ASCII, quindi è probabile che la base 64 funzioni. Può anche essere usato come una sorta di livello di compatibilità tra le implementazioni di PBKDF2.

    
risposta data 19.10.2014 - 02:33
fonte
2

Finché la chiave viene riconvertita nel formato binario prima dell'uso, la diluizione dei bit causata dalla codifica base-64 verrà annullata.

Tuttavia, se passi le chiavi attorno a un'applicazione, fai attenzione a come lo fai. Cancella i buffer di testo, minimizza i transiti tra metodi e applicazioni, ecc.

    
risposta data 19.10.2014 - 01:17
fonte
1

Poiché tutti gli algoritmi di crittografia decenti sono definiti per operare su sequenze di bit o byte, ci sono solo due possibilità per la tua "libreria di crittografia":

  • o converte internamente le stringhe di caratteri in byte;
  • o utilizza un algoritmo personalizzato basato sui caratteri.

Nel primo caso, la libreria ha un'API sciatta; non dovrebbe essere limitato artificialmente alle stringhe di caratteri. Nel secondo caso, questo è peggio: gli algoritmi personalizzati sono invariabilmente deboli.

In ogni caso, la cosa più importante non è la libreria ma l'algoritmo. La libreria è responsabile dell'implementazione corretta dell'algoritmo, ma la sicurezza deriva dall'algoritmo sottostante e da come viene utilizzato (l'assemblaggio di algoritmi crittografici viene spesso definito un protocollo ). Se ciò che fa la tua biblioteca è noto solo come "fa un po 'di crittografia", allora non c'è modo di dare una risposta significativa alla tua domanda. Se la tua libreria non specifica quale protocollo implementa, come standard ben definito e studiato, l'unica azione sensata che puoi eseguire è liberarti di quella libreria, e trovarne una migliore.

    
risposta data 19.10.2014 - 05:46
fonte

Leggi altre domande sui tag