Sto valutando i requisiti per la consegna di un design di applicazione sicuro su un sistema di gestione PIN. Il contesto dietro la necessità è che i PIN vengono generati e spediti in modo sicuro ai client per scopi di autenticazione su un sistema di telefonia telefonica. Il sistema di telefonia quando viene presentato con l'identificazione dell'account e il PIN chiamerà il sistema di gestione PIN per l'autenticazione del client.
A tutti gli effetti ho stabilito che dovrebbero essere seguite le migliori pratiche su un servizio di autenticazione. I PIN devono essere protetti e confidenziali in base a come si potrebbero proteggere le password in un sistema. La mia domanda tuttavia ha a che fare con il modo migliore per gestire la generazione di un PIN.
I clienti non hanno la possibilità di decidere il proprio PIN. Il sistema deve generare un PIN per il cliente, quindi trasferirlo in modo sicuro a un dispositivo di sicurezza che lo stampa all'interno di una busta privata sigillata. Il PIN non scade ma può essere revocato da un amministratore. Il client può richiedere un nuovo PIN per qualsiasi motivo che invalidi il loro attuale PIN. Il PIN è di 8 caratteri alfanumerici.
Il requisito di cui non sono sicuro è che l'azienda insiste sul fatto che tutti i PIN dovrebbero essere unici. Nessuno dei due clienti dovrebbe mai per caso ricevere lo stesso PIN. A prima vista questo sembra un requisito relativamente benigno finché non comincio a considerare come il sistema potrebbe essere in grado di verificare l'unicità di un PIN su scala globale. Penso che se è preferibile inserire il PIN con dati specifici del record, quindi eseguire il hash del risultato, archiviamo un PIN univoco crittografico che non può essere annullato ed è resistente all'attacco di una tabella arcobaleno. Tuttavia, per tenere un registro di tutti i PIN univoci che sono già stati generati, avrei bisogno di mantenere un hash separato di questi in un'altra posizione, ma salato globalmente in modo tale da poter verificare se un PIN appena generato possibilità è stata già generata.
Penserei che solo mantenere un elenco di PIN con hash che sono stati generati storicamente rappresenta un enorme rischio per la sicurezza del sistema, probabilmente più rischioso della possibilità che a due client possa capitare di avere lo stesso PIN.
Ho difficoltà a capire non solo perché il business è irremovibile su questo, se è solo perché un sistema legacy simile opera in questo modo, o se ci sono alcune ragioni normative per cui deve essere così. Ho anche difficoltà a capire come posso implementare in modo sicuro tale soluzione senza creare una vulnerabilità. Qualche suggerimento su come o se questo può essere realizzato in modo sicuro?
UPDATE: informazioni aggiuntive, questa è una quantità relativamente piccola di client, forse meno di 20k. Se si dovesse determinare qual era il sale globale osservando il codice, una tabella arcobaleno potrebbe determinare un numero elevato di PIN attualmente in uso. Qualsiasi PIN conosciuto potrebbe avere una probabilità di 1 / 20k di essere corretto per un determinato cliente.