Quando un'applicazione chiama un HSM usando PKCS # 11 / KSP / etc. cosa viene effettivamente scambiato tra i due? Ad esempio, se una CA deve firmare un CRL, l'intero CRL è effettivamente inviato all'HSM per la firma?
Quando un'applicazione chiama un HSM usando PKCS # 11 / KSP / etc. cosa viene effettivamente scambiato tra i due? Ad esempio, se una CA deve firmare un CRL, l'intero CRL è effettivamente inviato all'HSM per la firma?
Firmare un CRL è come firmare qualsiasi altro dato e comporta diversi passaggi:
Leggi i dati che desideri firmare.
Calcola un hash dai dati che desideri firmare. Questo hash ha la stessa lunghezza, indipendentemente dalla lunghezza dei dati iniziali e diversi dati generano hash diversi.
Cripta l'hash con la chiave privata. Il risultato di questa operazione è la firma effettiva.
Questa firma può quindi essere aggiunta ai dati firmati (aggiunti al CRL per ottenere il certificato finale firmato per seguire l'esempio) per ottenere i dati firmati.
Come vedi, la chiave privata è coinvolta solo nell'ultimo passaggio. Sarebbe uno spreco di risorse per inviare l'intero dato all'HSM, quindi l'hash viene calcolato sul lato dell'applicazione e solo l'hash viene inviato all'HSM per ottenere la firma.
Guarda le funzioni che fanno parte dell'API PKCS # 11. Quando crei un CRL, è necessaria la funzione C_Sign
, a cui viene assegnato un valore hash.
La maggior parte dei token PKCS # 11 fornisce anche funzionalità hash, ma se ne hai davvero bisogno puoi farlo sul token invece che nel software, ma questo è molto raro.
Leggi altre domande sui tag cryptography encryption public-key-infrastructure key-management hsm