In primo luogo, devo dare una protesta obbligatoria:
Conosci il tuo modello di minaccia. Non è possibile proteggere il tuo sistema se non hai un modello di minaccia che descrive le minacce che stai impedendo. Una scansione di script-kiddie è molto diversa da quella del governo USA che ti sta scansionando, che è anche molto diversa da un governo in realtà cercando di ottenere i tuoi dati. Senza un modello di minaccia, gli algoritmi sicuri sono quasi inutili.
Ho il secondo consiglio di Lawri di usare SSL. Riduce drasticamente quanto devi pensare quando provi di poter difendere contro il tuo modello di minaccia. Fornisce inoltre la crittografia necessaria per il passaggio successivo.
Tuttavia, presumo che per qualche motivo SSH non sia accessibile. Forse è una cosa da prestazione.
Che cosa contiene il tuo modello di minaccia? Ecco la mia ipotesi
- Definizione di due parti: il Querier che avvia il modello di query / risposta e il risponditore che risponde.
- Attacchi di riproduzione: entrambi riproducono la trasmissione e un nodo sicuro facendo finta di avere ancora l'identificatore su un lato mantenendo l'hashcode per quell'identificatore.
- Attacchi di forza bruta: non riuscendo a osservare alcuna informazione utile, l'attaccante invia ciecamente richieste
- Risponditore malevolo: se chiedi a qualcuno dei dati, potresti rivelare che probabilmente lo hai.
- Attacchi sulla rete sottostante: considera xauth, che ha un attacco problematico noto in cui un utente malintenzionato crea pacchetti TCP fraudolenti per falsificare l'autenticazione.
- Gli hacker non hanno accesso fisico alle macchine, né possono ottenere l'accesso remoto con privilegi sufficienti per leggere gli identificatori direttamente dai tuoi file.
L'ultimo dovrò saltare questa risposta, perché non ne so abbastanza della tua rete sottostante. Tuttavia, poiché hai scelto di implementare la tua sicurezza piuttosto che utilizzare uno strumento standard come SSL, dovrai prestare attenzione ad esso.
Gli attacchi di replay mostrano come devi gestire il sale. Se il Querier può generare il proprio sale, non c'è modo per il Responder di distinguere tra una richiesta valida e un replay. Come minimo, Querier dovrebbe iniziare la sessione e il Responder dovrebbe scegliere il sale. Dovrebbe essere un grosso problema (io userei solo un numero casuale a 64 bit, io stesso). In questo modo, un attacco di replay è impossibile perché ciascun risponditore avrà un sale diverso.
Ora possiamo vedere che il sale può essere inviato in testo in chiaro, perché possiamo vedere che il sale non ha utilità se non per le richieste di salatura in questa sessione. Nessun potenziale replay e nessuna informazione è stata inviata in merito agli identificatori. Quando gli identificatori hash vengono inviati al risponditore, in teoria la funzione a senso unico li protegge ...
... ma scegliendo di non utilizzare una suite di software standard, ora sei messo a rischio. Devi scegliere un hash, e non hai una massiccia base di esperti di sicurezza che ti avvisano quando l'algoritmo hash si interrompe come fa SSL. Assicurati di sceglierne uno buono
Ora, per quanto riguarda il numero di sali, è sufficiente un sale. Possiamo usare il modello di minaccia per dimostrare che l'unica ragione per cui stiamo salendo è impedire i replay. Senza il modello della minaccia, questo non è chiaro. Il modello di minaccia rende anche chiaro che anche un Responder difettoso non può capire cosa ha richiesto un Querier, perché tutto ciò con cui devono lavorare è un salt e un hash o lo fa? . Un Responder malintenzionato potrebbe sempre offrire lo stesso sale e disporre di una tabella arcobaleno di identificatori salati con cui lavorare.
Senza un modello di minaccia, questo problema sarebbe sfuggito. Ora vediamo che il sale deve avere input sia da Querier che da Responder, non solo dal risponditore. Il Querier deve inviare metà dell'hash e il Responder fornisce la seconda metà. Forse inviano entrambi un numero casuale a 64 bit. Ora, con il nostro modello di minaccia, possiamo vedere che questo non compromette il sale più di quanto non fosse già, ma impedisce a un malintenzionato malintenzionato di ottenere informazioni con una tabella arcobaleno.
Per un test finale: quanto sono casuali i tuoi identificatori? Indipendentemente dal sistema che crei, sarà possibile tentare di forzare questi identificatori se non hanno abbastanza bit di entropia. Se non hanno abbastanza bit di entropia per loro, nessun sistema può proteggerli se una query di forza bruta dell'attaccante ...
... che riporta a SSL. SSL ha un sistema basato su certificati che è possibile utilizzare per rifiutare attacchi di forza bruta da qualsiasi nodo che non ha un certificato attendibile valido. È banale garantire che abbiano abbastanza bit di entropia (se li si genera con gli strumenti SSL standard, saranno più che sufficientemente sicuri).