chiavi di ricerca crittografate per l'archivio di valori-chiave

1

Vorrei utilizzare un archivio di valori-chiave (cassandra, redis, ...), ma non mi fido del server.

I client hanno un segreto condiviso e lo sto usando per crittografare i valori memorizzati. Ma qual è il modo corretto di crittografare le chiavi (non le chiavi di crittografia, le chiavi del negozio di chiavi-valore)?

  1. L'archivio confronta le chiavi nelle query, quindi ogni chiave in chiaro deve avere solo una chiave crittografata corrispondente.

  2. Ovviamente, se un utente malintenzionato ottiene la chiave crittografata, deve essere altrettanto semplice scoprire la chiave in chiaro.

  3. Meno ovviamente, se un utente malintenzionato può indovinare la chiave in chiaro, deve essere impossibile ottenere la chiave crittografata senza il segreto. Non voglio che un utente malintenzionato sia in grado di confermare se una determinata chiave è presente nell'archivio valori-chiave.

  4. Le collisioni (diverse chiavi in chiaro con uguale chiave crittografata) dovrebbero essere così rare che non possono essere create di proposito da un utente malintenzionato.

La crittografia simmetrica con i vettori di inizializzazione casuale o l'hashing con i sali è proibita da (1). Un hash della chiave in chiaro senza sale non soddisfa (3).

Vedo due opzioni:

  1. crittografare con un IV statico.

  2. hash(secret || plaintext-key)

Il primo sembra molto simile all'improvvisazione di una funzione di hash con un codice. Permetterebbe anche la decrittazione, di cui non ho bisogno. Modifica: poiché IV non è casuale, le chiavi in chiaro con prefisso uguale avranno lo stesso prefisso nel testo cifrato, con possibilità di ragionare sul testo in chiaro.

Il secondo memorizza il segreto di hash, ma senza le solite precauzioni, come la salatura e lo stiramento delle chiavi. Modifica: è anche vulnerabile a Length_extension_attacks .

    
posta Stefan 26.08.2014 - 22:41
fonte

1 risposta

1

Ho trovato la risposta. Risulta che quello che ho chiesto è chiamato un codice di autenticazione del messaggio o MAC . Esistono varie implementazioni, basate su funzioni di hash e cifrari a blocchi.

HMAC utilizza hash(key || hash(key || message)) pattern con qualche padding aggiuntivo.

    
risposta data 28.08.2014 - 01:41
fonte

Leggi altre domande sui tag