Come memorizzare in modo sicuro un numero primo crittografato con PIN?

2

Situazione: all'interno di un'applicazione , stiamo generando e archiviando una chiave privata (RSA o ECC) che usiamo per firmare varie richieste con (per autenticare usando il cellulare come secondo fattore, o per firmare le transazioni).

Ora vogliamo archiviare in modo sicuro la chiave privata sul dispositivo mobile , protetta con PIN (e altre).

Abbiamo una situazione simile in cui memorizziamo i token bearer OAuth2 (token di aggiornamento), qui usiamo la derivazione della chiave per crittografare i token utilizzando il PIN inserito dall'utente. Per un PIN a 6 cifre, ci sono 1'000'000 risultati possibili quando si decodificano i token, di cui solo uno è il token corretto. Un utente malintenzionato non può eseguire un attacco bruteforce offline, poiché il token deve essere inviato al server per verificare se è corretto (e bloccheremo il dispositivo dopo ~ 3 tentativi falliti).

Quando si utilizza lo stesso meccanismo per crittografare una chiave RSA (si riduce a un numero primo ) utilizzando un PIN, otteniamo 1'000'000 possibili risultati per un PIN a 6 cifre, solo che questa volta alcuni risultati possono essere facilmente esclusi perché non sono primi.

Un test ha dimostrato che ~ 99,7% di tali risultati può essere facilmente definito come primo , lasciandoci con circa lo 0,3% dei possibili risultati che sono probabili prime. Un utente malintenzionato può ora ridurre rapidamente il numero di possibili PIN da un milione a circa 3'000.

Domande:

  • Si tratta di un problema noto (crittografia dei numeri primi), ed esiste una soluzione ben nota (non è stato possibile trovare qualcosa di utile su google).
  • Dovremmo dimenticare le chiavi RSA e utilizzare invece i tasti ECC (curva ellittica) e una chiave privata ECC può essere memorizzata in modo sicuro senza scartare i risultati errati durante la decrittografia con il PIN sbagliato?
posta Peter Walser 20.06.2017 - 11:34
fonte

0 risposte

Leggi altre domande sui tag