È possibile firmare / verificare una coppia di chiavi?

1

Al momento abbiamo la necessità di autenticare e verificare i keypair generati. Il nostro sistema consente agli utenti di registrarsi per il nostro servizio che genera loro una coppia di chiavi da utilizzare sulla nostra rete. Abbiamo bisogno di un modo per autenticare le coppie di chiavi in modo da poter verificare che siano state generate da noi e non da qualcun altro.

È possibile firmare ciascuna coppia di chiavi generata con una chiave principale che può quindi essere utilizzata per verificare ogni coppia di chiavi generata? Ho pensato che fosse possibile perché è in qualche modo simile al modo in cui funzionano i certificati.

EDIT: per essere più chiaro su quello che sto dopo. Stiamo sviluppando una rete di contenuti decentralizzata (come prova del concetto). I fornitori di contenuti autorizzati (coloro che sono autorevoli sul contenuto che servono) potranno registrare il loro "nome di dominio" tramite un registro principale. Questo registro principale manterrà una coppia di chiavi master che viene utilizzata. Il registro rilascerà al fornitore di contenuti una coppia di chiavi che può essere utilizzata per firmare digitalmente il loro contenuto e qualsiasi informazione trasmessa in modo che il cliente possa verificare che la persona che trasmette i dati sia autorevole rispetto al nome di dominio. Il problema che stiamo avendo è come comunicare al client quando emettiamo una nuova coppia di chiavi in un nuovo host autorevole? Abbiamo pensato che se potessimo firmare ogni coppia di chiavi con la coppia di chiavi dei registri principali, potremmo inserire la chiave pubblica nel client e utilizzarla per verificare ogni coppia di chiavi.

    
posta jduncanator 16.04.2014 - 06:11
fonte

2 risposte

2

Quello che stai descrivendo è il problema esatto della distribuzione della chiave pubblica che PKI è destinato a risolvere. Quando la "coppia chiave principale" viene utilizzata per firmare la chiave pubblica di un fornitore di contenuti autorevole per un dominio specifico, viene rilasciato un certificato che collega il nome del dominio a una chiave pubblica. Questo è quello che intendi fare, e questo è PKI, che tu lo voglia o no.

Dove vengono generate le chiavi private è ortogonale al problema. Un fornitore di contenuti ottiene un certificato (coppia di chiavi collegata al suo nome di dominio) attraverso una procedura progettata per garantire che solo il fornitore giusto ottenga la chiave privata. Esistono molti modi per organizzare tale procedura e la coppia di chiavi può essere generata dalla tua parte o dal lato del provider. In generale, è preferibile che le chiavi private siano generate dal lato del provider, perché altrimenti la chiave privata deve viaggiare e non ci piace quando viaggiano le chiavi private. Ma questa è solo l'affermazione generale; in pratica, il contesto conta molto. Per esempio. se incontri fisicamente le persone del provider, puoi organizzare un trasferimento protetto fisicamente della chiave privata o una password grossa che è stata utilizzata per crittografare la chiave privata.

Per quanto riguarda i formati e i protocolli effettivi, è altamente raccomandato attenersi agli standard esistenti, ad esempio X.509 nel caso di certificati. Il motivo principale è che il software che è più facile da sviluppare è il software che è già stato sviluppato. Troverai un sacco di supporto X.509 negli strumenti che stai già utilizzando, integrati nel tuo framework di programmazione (ad esempio nativamente i certificati handle Java e .NET) o come librerie opensource extra. È allettante reinventare il proprio formato, ma l'esperienza ha ripetutamente dimostrato che è una cattiva idea. Il punto centrale è che è molto difficile per progettare correttamente un protocollo crittografico sicuro; è facile avere qualcosa che "funzioni", ma la parte "sicura" è difficile, soprattutto perché non può essere testata. Fatti un favore: non reinventare la ruota. NIH è chiamato "sindrome" per buone ragioni.

    
risposta data 16.04.2014 - 13:37
fonte
0

Abbiamo deciso di adottare un approccio basato sulle impronte digitali. Quando emettiamo un fornitore con una coppia di chiavi, abbiamo hash la chiave pubblica più il dominio è autorevole per insieme e quindi firmarlo utilizzando la chiave di registri principale. In questo modo, possiamo verificare che una chiave di provider sia valida e autorevole per il loro dominio verificando l'hash della chiave + il dominio sia valido.

Se qualcuno ha dei suggerimenti migliori, io sono ancora tutto orecchie.

NB: Questo è in qualche modo essenzialmente ciò che PKI fa con i certificati, ma senza tutto il superfluo di funzionalità non necessarie che il nostro PoC non ha bisogno.

    
risposta data 16.04.2014 - 10:05
fonte

Leggi altre domande sui tag