Trovare la chiave privata ecc da testo in chiaro e chiave pubblica

0

Sto lavorando su uno schema di autenticazione dei messaggi usando libsodium e ed25519 . I messaggi hanno dimensioni comprese tra 256 byte e 1k più la firma 56byte. Con un potenziale compreso tra 90.000 e 350.000 firme + testo in chiaro al giorno, molti di essi avranno modifiche limitate e potrebbero essere molto simili (notifiche di stato con un incremento di timestamp ex. 2015083020000126 All's Well ).

Quanto è sensibile ECC (in particolare ed25519) a known plaintext attack ? Con quale frequenza dovrei cambiare la chiave privata di una fonte per impedire a un potenziale aggressore di raccogliere un numero sufficiente di messaggi e di decodificare la chiave privata?

    
posta Tyson of the Northwest 26.08.2015 - 19:17
fonte

1 risposta

1

Un buon primo passo sarebbe introdurre qualcosa di simile a una chiave di sessione, e quindi usare un codice a blocchi per crittografare il carico utile effettivo.

La crittografia funzionerebbe in questo modo:

  1. Genera una passphrase casuale che dovrebbe più o meno essere globalmente unica e non dovrebbe mai essere riutilizzata. Se hai bisogno di modificare il file crittografato e di ricodificarlo, genera una nuova chiave.
  2. Cifra che ha generato la passphrase usando ED 25519 e memorizza l'output in testa al file insieme ad altri metadati (es .: IV per il codice a blocchi, ecc.).
  3. Firma la tua passphrase crittografata usando ED 25519, in modo da non decifrare mai qualcosa che non è stato generato da te. Memorizzalo accanto alla chiave AES crittografata nel passaggio precedente.
  4. Usando la tua passphrase casuale per il tuo codice a blocchi, crittografa il payload usando qualcosa con autenticazione come AES in modalità GCM, o AES in modalità CBC con un HMAC.
  5. Alla fine del file, genera una firma del testo cifrato, dimostrando che tu, detentore della chiave privata, garantisci la sua integrità.

Questo ti dà molti benefici. In primo luogo, stai utilizzando un codice a blocchi standard per il tuo payload, e AES (nelle giuste modalità operative) non è vulnerabile agli attacchi di testo in chiaro noti. In secondo luogo, ora che utilizzi un codice a blocchi standard, la crittografia e la decrittografia saranno operazioni molto più veloci nel tempo della CPU. In terzo luogo, l'uso di una modalità di cifratura a blocchi che ha l'autenticazione ti dà integrità e, firmando il testo cifrato, asserisci che non solo il messaggio non è stato manomesso, è stato tu chi lo ha creato.

Il passaggio 5 di cui sopra potrebbe non essere necessario, in quanto la firma nel passaggio 3 dovrebbe essere abbastanza buona combinata con un codice a blocchi autenticato come AES in modalità GCM o CBC con HMAC.

La decifrazione ha questo aspetto:

  1. Decifra la tua passphrase casuale usando ED 25519 e controlla la sua firma. Se tutto sembra a posto, procedi, altrimenti fallisci.
  2. Usa la tua passphrase decrittografata per decrittografare il testo cifrato usando il codice a blocchi. Il codice a blocchi dovrebbe fornire supporto di integrità (GCM o CBC + HMAC) e dovrebbe fallire se qualcosa è stato ottimizzato.
  3. Allo stesso tempo in cui decifri ogni blocco, inserisci il testo cifrato originale tramite il metodo di verifica delle firme ED 25519 in modo da non dover eseguire nuovamente la scansione dell'intero payload una volta terminato.
  4. Dopo aver terminato la decrittografia del testo cifrato, verifica che la firma (generata nel passaggio 5 sopra) sia valida.

Questo dovrebbe fornire un sistema di crittografia piuttosto robusto.

Poiché ora vedo che stai principalmente cercando l'autenticazione dei messaggi, ho escogitato un'altra soluzione che fa proprio questo.

Generazione dei codici di autenticazione dei messaggi:

  1. Genera una chiave casuale da utilizzare con HMAC.
  2. Cifra e firma quella chiave e incollala nella parte anteriore di ogni messaggio.
  3. Esegui il tuo HMAC sull'intero testo in chiaro.
  4. Aggiungi l'output dell'HMAC alla fine.

Convalida dei codici di autenticazione dei messaggi:

  1. Decifra e convalida la chiave HMAC all'inizio del messaggio.
  2. Genera un HMAC sul testo in chiaro come sopra.
  3. Confronta l'output dell'HMAC con l'HMAC memorizzato alla fine del messaggio.

Se si utilizza una buona funzione di hash per l'HMAC (es .: SHA-256), questa dovrebbe essere una buona soluzione. Rimuove efficacemente la tua preoccupazione di attacchi con testo in chiaro per ED 25519 (non che esistano, necessariamente), e in genere sarà una soluzione molto più rapida delle prestazioni rispetto a fare le firme in modo nativo nell'ED 25519.

    
risposta data 26.08.2015 - 19:40
fonte

Leggi altre domande sui tag