Funzione unidirezionale per la sincronizzazione dei dati

0

Devo sincronizzare piccoli insiemi di dati tra due o più sistemi su una rete non sicura. Per prima cosa devo verificare che l'altro sistema abbia le stesse informazioni di identificazione univoche per il set di dati, ma senza dare via i dati di identificazione, se così non fosse. Le stringhe di identificazione univoche hanno una lunghezza compresa tra 12 e 40 byte. Sto pensando di usare un hash unidirezionale per separare individualmente un gruppo di identificatori univoci, inviarlo al sistema remoto e fare in modo che il sistema remoto usi lo stesso hash salt per scucire gli stessi dati di identificazione dai suoi dataset (che avrà nel ordine di 1000 set), confrontare gli hash ricevuti con gli hash calcolati e inviare gli identificatori corrispondenti (crittografati ma non con hash). Un ovvio requisito è un rischio molto basso di collisione dell'hash per prevenire la perdita di dati in entrambe le direzioni.

Qual è il miglior algoritmo di hash da usare per questo? È corretto inviare hash salt con i dati hash? Posso usare un salt per diversi identificatori o devo avere un salt unico per ogni identificatore?

    
posta Tom Foale 05.01.2015 - 16:18
fonte

2 risposte

1

personalmente userò SSH con chiavi pubbliche / private per un lavoro come questo. che impiega un meccanismo per non inviare alcuna caratteristica identificativa (escluso il nome host e possibilmente il nome utente, non è sicuro su quello) ed è facile da configurare e facile da usare.

uno qualsiasi degli algoritmi SHA sarebbe adatto al conto, il suo 'migliore' per non inviare oltre il sale con i dati (il canale separato sarebbe sufficiente) e come per 1 o più sali, che dipende da quanto saranno segrete molte informazioni tenuto.

    
risposta data 05.01.2015 - 16:31
fonte
0

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).

    
risposta data 06.01.2015 - 04:56
fonte

Leggi altre domande sui tag