Esiste un checksum standard per verificare i frammenti di chiavi multipart?

1

Avremo una chiave simmetrica che arriva in tre parti. Una volta che tutte le parti sono arrivate, i custodi principali si riuniranno per una cerimonia in cui ognuno inserirà la propria parte della chiave in un sistema protetto. Questo sistema XOR riunirà le parti per combinarle in una chiave finale che verrà iniettata nel sistema di ricezione. Il sistema di combinazione segreta verifica che ciascun custode abbia inserito correttamente la propria parte della chiave facendo in modo che ogni custode inserisca un checksum per la propria parte chiave; questi checksum sono stati generati nel momento in cui la chiave è stata divisa. Per evitare di immettere una chiave corrotta, se ci sono errori nella registrazione dei dati, il processo deve essere terminato e riavviato.

La mia domanda è se ci sono algoritmi di checksum standard usati per convalidare l'inserimento della chiave in un sistema di scambio di chiavi multipart? O è questo qualcosa in genere ogni fornitore di crittografia viene in genere da solo?

    
posta John Deters 25.05.2018 - 00:35
fonte

1 risposta

3

Non esiste un algoritmo standard per la verifica delle chiavi * , ma esistono checksum standard.

Supponendo che la verifica sia eseguita per rilevare semplici errori durante il recupero o l'invio della chiave, qualsiasi algoritmo di checksum affidabile come CRC32 funzionerà. In effetti, può essere reso trasparente al portachiavi includendo il checksum nella chiave stessa. Questo può essere fatto facilmente per qualsiasi tasto K creando K '= K || H (K) , dove H è un hash o somma di controllo. Qualsiasi errore nella chiave stessa o nel checksum comporterebbe il rifiuto della chiave. Opzionalmente, i tasti immessi potrebbero avere il loro checksum rimosso dopo la verifica. Ciò rispecchia le tecniche storiche in cui le chiavi di crittografia per algoritmi come DES includevano bit di parità nello standard per garantire che ogni 8 bit chunk è odd-parity.

Hai alcune opzioni per il checksum stesso. I bit di parità sono i più facili da implementare, ma sono progettati per rilevare errori di trasmissione in cui si prevede che cambi solo un singolo bit. Un errore creato dall'uomo che cambia "da" a "b" comporterà due bit modificati e un bit di parità non rileverebbe la modifica. I checksum sono simili, ma più complicati. Calcolano una somma della moltiplicazione ponderata di ciascuna parte componente dell'input. I CRC, d'altro canto, sono progettati per un efficiente rilevamento degli errori in quasi tutte le circostanze. Possono essere garantiti liberi da collisioni fino a un certo numero di errori. Hanno un overhead configurabile.

Quello che usi dipende da te. I CRC sono i più efficaci, dal momento che le prestazioni non sono un problema (non verificherete milioni di chiavi al secondo). Uno standard comunemente usato è CRC32c. Ha un output a 32 bit e ha un polinomio ben scelto . Se ti aspetti solo errori a bit singolo, i controlli di parità saranno più semplici con meno spese generali (solo un bit in più per ogni blocco di dati).

* Come sottolineato in un commento, esistono degli standard per la verifica delle chiavi denominate Key Check Values o KCV, ad esempio ANSI X9.24-1: 2009 KCV. Tuttavia, questi sono progettati per rilevare errori di trasmissione elettronica, non errori umani.

Per rispondere alle tue domande direttamente ...

My question is if there are standard checksum algorithms used for validating key entry into a multipart key exchange system?

Non esiste uno standard per la convalida della voce della chiave, ma ci sono dei checksum che sono stati standardizzati per il rilevamento degli errori che puoi tranquillamente usare nel tuo schema. Tuttavia, è uno standard per la condivisione segreta (input chiave multipart) che non è il tuo semplice K '= K 0 ⊕ K 1 ⊕ K 2 . L'algoritmo è chiamato Condivisione segreta di Shamir e fornisce parametri configurabili per il numero di chiavi corrette richieste per calcolare il segreto, il quantità di ridondanza rispetto alle chiavi errate, ecc.

Per ridurre l'impatto di input non corretti, puoi utilizzare un codice di correzione degli errori . Questi espandono leggermente la dimensione del materiale chiave, ma assicurano che il valore originale possa sempre essere derivato anche se ha fino a un certo numero di errori. Maggiore è il codice di correzione degli errori (e l'overhead associato), più errori possono correggere. Ciò ti consente non solo di rilevare un errore, ma di correggerlo allo stesso tempo.

Or is this something each crypto vendor typically comes up with on their own?

La maggior parte dei venditori arriva da sola a causa di un grave caso di sindrome NIH , non perché non ci siano primitive standard con cui lavorare o best practice da rispettare. La risposta dipende anche dall'organizzazione specifica. Varie agenzie di intelligence statunitensi tendono a utilizzare (o utilizzare) riempire dispositivi che spesso utilizzavano bit di parità per l'integrità della chiave. La risposta qui è che in genere escogitano il loro schema, a volte imperfetto. Questo non significa che sia necessario farlo.

    
risposta data 25.05.2018 - 04:35
fonte

Leggi altre domande sui tag