Come si implementa la crittografia Multikey? [chiuso]

0

Sto cercando un algoritmo, grazie al quale posso crittografare un pezzo di dati con n chiavi e che per decifrare posso usarne uno qualsiasi.

Penso di ricordare bitcoin usando qualcosa di simile per i blocchi, ma ora non riesco a trovare qualcosa da usare.

    
posta Esloop 17.01.2017 - 16:09
fonte

3 risposte

2

È abbastanza facile:

  1. Genera una chiave master con cui crittografare i dati.
  2. Genera una chiave utente per ciascun utente che desideri sia in grado di decrittografare i dati.
  3. Cripta la chiave master con ciascuna delle chiavi utente e memorizza tutti i risultati crittografati.
  4. Quando si desidera decodificare, utilizzare la chiave dell'utente per decodificare il record della chiave master crittografato e utilizzarlo per decrittografare i dati.

Se usi le chiavi a 128 bit con AES, puoi semplicemente utilizzare AES direttamente senza una modalità di blocco (ECB se è forzato) per crittografare la chiave principale con ogni chiave utente, perché la chiave si inserisce perfettamente in un blocco taglia. Se utilizzi chiavi a 256 bit, dovresti utilizzare una modalità di blocco come CBC e archiviare l'IV accanto a ciascun record per la decrittografia.

Tenere presente che un tale schema non consente di revocare in modo sicuro l'accesso da un utente senza ricodificare completamente i dati, poiché un utente malintenzionato potrebbe conservare una copia della chiave master. Inoltre, questo non si ridimensionerà molto bene per molti e molti utenti (ad esempio migliaia), poiché il tuo set di chiavi diventa molto grande.

Per crittografare i file stessi, raccomando AES-CBC se la manomissione non è un problema. È possibile memorizzare l'IV in chiaro con i dati del file. Se la manomissione è un problema, si dovrebbe prendere in considerazione una modalità AEAD che impedisce una significativa manomissione dei dati del file.

    
risposta data 17.01.2017 - 16:28
fonte
0

Voglio dire, TrueCrypt lo fa semplicemente crittografando un breve messaggio contenente una chiave principale sotto N altre chiavi; quindi una di quelle chiavi può potenzialmente decrittografare la chiave master che può decifrare il carico utile. Se la chiave master è di 128 bit, è anche la dimensione del blocco per molti cifrari a blocchi e non è nemmeno necessaria una modalità di crittografia, anche se probabilmente si vorrà una modalità di crittografia autenticata solo su principi generali. (Anche se si utilizza una modalità crittografata per il payload, non si vuole davvero sprecare N * 128 bit in anticipo in cambio della decifrazione del payload potenzialmente di molti megabyte N volte per vedere se la propria scelta era corretta? è economico: basta fare N auth-encryptions della chiave master sotto chiavi diverse, quindi crittografare il payload in modo che si sappia che non è stato incasinato nella trasmissione.)

Se ciò non funziona per te, allora hai dei vincoli di progettazione che non hai comunicato e dovremmo conoscerli. Ad esempio, se "allora una delle parti può apportare una modifica al carico utile in volo, non è quello che volevo!" allora possiamo aggiustarlo; in ogni sezione della chiave master crittografata, memorizza anche un HMAC del carico utile crittografato sotto la tua chiave o la chiave principale.

    
risposta data 17.01.2017 - 16:17
fonte
0

Questo potrebbe essere implementato come da risposta sopra o con Condivisione Segreta, come la Condivisione Segreta di Shamir. Wikipedia ha un buon articolo su di esso, ma tu vuoi il 1 < t < n caso - dove t è il numero di chiavi necessarie per lo sblocco e n è il numero totale di chiavi. Vorrei fare il t = 2, n = 2 * numero di "chiavi" che vuoi e contare ogni "chiave" come due parti chiave da Shamir schema di.

Il motivo per cui ogni "chiave" che si desidera è due elementi chiave è perché gli schemi di condivisione segreti normalmente non gestiscono il caso t = 1 (perché normalmente se si desidera che una qualsiasi delle chiavi della gente sia in grado di decifrare, basta dare a tutti la stessa chiave).

    
risposta data 17.01.2017 - 16:24
fonte

Leggi altre domande sui tag