Il riempimento di PKCS 1.5 consente a un utente malintenzionato di estrarre la chiave privata o no? PKCS 1.5 è sicuro da usare nel contesto dell'autenticazione?

5

Sto attualmente scrivendo un'app di autenticazione basata su RSA, per Android che dovrebbe essere impossibile da copiare, anche se hai accesso fisico a un telefono senza lockscreen / PIN.

Tuttavia, l'HSM all'interno del telefono, che assicura che la chiave privata non possa mai lasciare la memoria, sia solo "usato", supporta solo il riempimento di PKCS 1.5 a causa di un bug nell'implementazione di bouncycastle.

I messaggi crittografati, saranno diversi ogni volta (nonce) quindi non c'è possibilità di osservare che due messaggi cifrati sono identici sul filo.

Un attaccante o un avversario, pur non avendo accesso al telefono, non ha accesso a un oracolo di riempimento. L'app funziona facendo in modo che l'utente esegua la scansione di un QR crittografato e questo decrittografato QR crittografato in un codice OTP. Sì, l'utente malintenzionato può visualizzare, su una pagina di phishing o una connessione dirottata, un codice QR contenente errori di padding e osservare se l'utente procede con l'autenticazione (entra in un OTP valido) oppure no, ma quello che ho letto su alcune pagine, un oracle di riempimento attacco richiede milioni di "test" contro il padding.

Quando l'attaccante o l'avversario ha accesso al telefono, l'attaccante può usare il telefono stesso come padding oracle, ma anche, quando ha accesso al telefono, l'attaccante è in grado di decifrare i messaggi arbitary usando comunque l'app.

Gli obiettivi di sicurezza che devono essere soddisfatti è:

  • Mentre l'autore dell'attacco non ha accesso al telefono, l'autore dell'attacco non dovrebbe essere in grado di autenticarsi.

  • Se l'utente malintenzionato ha accesso al telefono, anche per un lungo periodo, dovrebbe essere in grado di autenticarsi, ma non estrarre la chiave privata.

  • Quando l'utente malintenzionato non ha più accesso al telefono, ad esempio se l'attaccante è un dipendente precedente che è stato licenziato e ha quindi attivato il telefono, l'utente malintenzionato non dovrebbe più essere in grado di autenticarsi, anche se in precedenza aveva accesso al telefono e, anche se la coppia di chiavi all'interno dell'hardware sicuro, non è stata modificata.

In questa pagina, la risposta menziona il suo possibile estrarre la chiave privata, montando un attacco oracle padding: Quale specifica debolezza di padding fa l'indirizzo OAEP nella RSA?

Tuttavia, la pagina di Wikipedia, non menziona alcuna rivelazione delle chiavi private: link

Ma la pagina wikipedia menziona, usando l'oracle padding, un attacker è in grado di decrittografare i messaggi arbitary, semplicemente controllando le risposte oracle di padding, senza avere accesso né alla chiave né all'output in chiaro del motore di decrittografia. Tuttavia, in questo caso, quando un utente malintenzionato ha accesso al padding oracle, l'utente malintenzionato ha anche accesso all'output in chiaro e viceversa, il che significa che la decrittografia dei messaggi arbitary è già possibile quando l'utente malintenzionato ha accesso al motore di decrittografia , senza dover ricorrere a un attacco di oracle padding.

Le 2 cose sono completamente diverse, perché con la chiave privata, l'attaccante è in grado di decrittografare mentre non ha più accesso al pad Oracle, ma se l'oracle padding può essere usato solo per decrittografare i messaggi, l'oracle di padding in questo caso diventa effettivamente inutile per l'utente malintenzionato, perché quando l'utente malintenzionato non ha più accesso oracle a padding, non può più decrittografare e l'obiettivo di sicurezza è soddisfatto.

Le domande che ho sono:

1: È sicuro usare PKCS 1.5 in questo caso?

2: E 'davvero possibile estrarre la chiave privata usando un padding oracle, o il pad Oracle solo permette la decifratura dei messaggi arbitary? I 2 articoli collegati sono ambigui al riguardo.

    
posta sebastian nielsen 08.06.2016 - 20:55
fonte

1 risposta

1

Is it safe to use PKCS 1.5 in this case?

Non posso rispondere "no" qui. Ma si raccomanda di evitare la "sicurezza in questo caso" per qualsiasi scopo pratico. Ad esempio, perché dovresti usare la crittografia RSA se tutto ciò che ti interessa è proteggere la chiave privata (ma non la riservatezza dei messaggi stessi)? Inoltre, se BouncyCastle non ha già corretto quel bug, è probabile che venga risolto presto (lo hai segnalato, tra l'altro?).

Is it really possible to extract the private key using a padding oracle, or does the padding oracle just allow arbitary message decryption?

No, RSA Padding Oracle consente solo la decifratura di messaggi arbitrari (non stiamo parlando di attacchi temporali, ecc.). Quindi la chiave privata RSA è sicura nell'HSM del telefono.

Il documento CRYPTO'12 riguardava l'applicazione di Padding Oracle to Key Wrapping - una chiave è "wrapped" (alias RSA-encrypted), passata al token e "unwrapped" lì (alias decrittografata e resa pronta per l'uso in questo token). Non ha senso applicare questo attacco alla normale crittografia / decrittografia, perché se hai il dispositivo (il tuo telefono, il tuo token crittografico) e il PIN - puoi dire al dispositivo di decifrare qualunque testo cifrato che hai ricevuto in una richiesta, no bisogno di fare leva a poco a poco.

Inoltre, considereresti uno schema di autenticazione basato sulla firma piuttosto che sulla decrittografia?

Aggiornamento

The reason I selected a auth scheme based on decryption instead of signatures, is because signatures get huge, as long as the key.

Per la crittografia RSA, il testo cifrato è grande quanto la chiave (modulo), proprio come nella firma RSA (e per la stessa ragione - ecco a cosa serve il padding). Ma immagino che non importi, perché è passato al telefono come una scansione QR ...?

But also the system needs to work without any network connectivity for the device, so I have based the system on encrypted QR codes, that decrypt to a simple OTP string, that is entered on server

In base ai tuoi commenti, intendi che il telefono stesso potrebbe non essere connesso, cioè non può reagire a ciò che ha scannerizzato QR. Visualizza solo il risultato (presumibilmente qualcosa di abbastanza breve che l'utente può digitare facilmente).

Nel caso d'uso che descrivi, suppongo che sia OK. E la tua chiave privata non è esposta comunque. Anche se mi chiedo come la tua chiave pubblica arriverà dal telefono al server che la userebbe per crittografare l'OTP per questo specifico client (quindi il tuo telefono avrebbe bisogno di alcuni di connettività ad un certo punto nel tempo) .

    
risposta data 17.10.2016 - 12:39
fonte

Leggi altre domande sui tag