Che cos'è PKCS#11?
PKCS#11 definisce un API per comunicare con token crittografici di sicurezza come Smart card, chiavi USB e Hardware Security Module (HSM). Noto anche come "Cryptoki", PKCS#11 fa parte degli standard di crittografia a chiave pubblica.
PKCS#11 è un API indipendente da piattaforma che può essere utilizzato per gestire e servirsi di hardware di sicurezza con crittografia. Tali dispositivi hardware vengono spesso definiti token crittografici, da qui il nome "Cryptoki" (da Cryptographic Token Interface).
L'hardware di sicurezza con crittografia può includere:
- Chiavi di protezione USB
- Smart Card
- Hardware Security Module (HSM).
L'API PKCS#11 consente la gestione (creazione, modifica, cancellazione) di oggetti crittografici onboard del token, tra cui:
- Chiavi RSA
- Certificati X.509
- Chiavi simmetriche (ad es., AES, 3DES)
- Chiavi di crittografia ellittica (ECC)
Le applicazioni software possono richiamare l'API per l'utilizzo di questi oggetti per:
- Criptazione/decriptazione
- Calcolo e verifica della firma digitale
PKCS#11 nel software dell'applicazione
PKCS#11 riassume i dettagli specifici della comunicazione sottostante tra l'applicazione e la crittografia hardware. Una chiave di applicazione software tipica che utilizza PKCS#11 viene mostrata di seguito.
L'applicazione chiama l'API PKCS#11 che è dotato sia di una library specifica del fornitore che di una library PKCS#11 comune che include la funzionalità di comunicazione con l'hardware da una varietà di fornitori (ad es., OpenSC).
Comunemente l'implementazione PKCS#11 utilizza PC/SC per comunicare con la crittografia hardware. PC/SC è una specifica per l'integrazione delle Smart Card negli ambienti informatici. Il supporto PC/SC è integrato in Windows fin da XP e una implementazione gratuita è disponibile per Linux e Mac.
Sviluppo software PKCS#11
PKCS#11 è principalmente un C API con file di intestazione di riferimento disponibili da OASIS (il Comitato Tecnico OASIS PKCS11 ha intrapreso la manutenzione dello standard PKCS#11 da RSA Security nel 2013).
Porte e wrapper esistono per altri linguaggi, tra cui:
- C/C++
- File di intestazione di riferimento disponibili da OASIS. Microcosm PKI SDK include file di intestazione, codice campione C e binari Windows.
- Java
- Provider Sun PKCS#11 (nel pacchetto
sun.security.pkcs11.SunPKCS11
) che è incluso in Java SE. - Wrapper IAIK PKCS#11.
- Esempi dell'utilizzo di entrambi sono inclusi in Microcosm PKI SDK.
- Provider Sun PKCS#11 (nel pacchetto
- C# e VB.NET
- I wrapper esistono ma Microcosm non ne promuove uno specifico. Una rapida ricerca su Google presenta le varie opzioni.
- Javascript
pkcs11.js
consente di richiamare i token crittografici direttamente da una pagina web utilizzando Javascript. Questo è incluso come parte di Microcosm PKI SDK.