IBM Cloud Docs
Introduzione a PKCS #11 - Piano Standard

Introduzione a PKCS #11 - Piano Standard

PKCS #11 è uno standard che specifica un'API (application programming interface), denominata Cryptoki, per le periferiche che contengono informazioni crittografiche ed eseguono funzioni crittografiche. L'API Cryptoki segue un semplice approccio basato sugli oggetti. L'approccio si rivolge agli obiettivi di indipendenza della tecnologia e condivisione delle risorse, presentando alle applicazioni una vista logica comune della periferica denominata token crittografico.

Cryptoki isola un'applicazione dai dettagli del dispositivo crittografico. L'applicazione non deve modificare l'interfaccia in un tipo diverso di dispositivo o per essere eseguita in un ambiente diverso. Quindi, l'applicazione è portatile. Le funzioni dell'API Cryptoki sono organizzate nelle seguenti categorie:

Non tutte le funzioni PKCS #11 sono implementate da IBM Cloud® Hyper Protect Crypto Services. Per le funzioni PKCS #11 implementate, consultare Funzioni PKCS #11 supportate.

Per esaminare la documentazione standard PKCS #11 , consultare:

Componenti di implementazione PKCS #11

Per collegare e utilizzare l'API PKCS #11 , devi comprendere l'API PKCS #11 implementata da Hyper Protect Crypto Services e la relazione con l'API GREP11. Per ulteriori informazioni, vedi Confronto dell'API PKCS #11 con l'API GREP11. Con il sostegno dell'API PKCS #11 , non hai bisogno di modificare le tue applicazioni esistenti che utilizzano lo standard PKCS #11 . Hyper Protect Crypto Services fornisce anche i keystore isolati per memorizzare chiavi crittografiche generate dalle funzioni PKCS #11 . Queste chiavi sono protette dalla chiave principale e le applicazioni non vedono mai i file di chiavi localmente.

Prima di poter utilizzare l'API PKCS #11 , installare la libreria PKCS #11 . In questo modo, l'applicazione PKCS #11 può interagire con la libreria PKCS #11 , che richiama le funzioni crittografiche implementate da Hyper Protect Crypto Services tramite gRPC. Il seguente diagramma mostra i componenti chiave implementati dalla libreria Hyper Protect Crypto Services PKCS #11 e le interazioni tra i vari componenti.

Esecuzione di operazioni di crittografia con l'API PKCS #11
PKCS Figura 1. Esecuzione di operazioni crittografiche con PKCS #11 API

Le seguenti sezioni spiegano ogni componente PKCS #11 in dettaglio.

Applicazione

Un'applicazione viene eseguita all'interno di un singolo spazio di indirizzo. Tutti i thread di controllo sono in esecuzione nell'applicazione. Un'applicazione diventa un'applicazione Cryptoki richiamando la funzione Cryptoki C_Initialize da uno dei thread. Una volta effettuata questa chiamata, l'applicazione può richiamare altre funzioni Cryptoki. Quando l'applicazione termina di utilizzare Cryptoki, richiama la funzione Cryptoki C_Finalize e cessa di essere un'applicazione Cryptoki.

Se si sta eseguendo un'applicazione Java PKCS #11 utilizzando il provider SunPKCS11 sulla piattaforma IBM Z (s390x), assicurarsi di utilizzare la JVM IBM Semeru più recente e specificare l'opzione -Xjit:noResumableTrapHandler Java quando si avvia l'applicazione. Puoi scaricare la versione s390x più recente di IBM Semeru JVM modificando il campo del filtro Architettura in s390x nella pagina IBM Semeru Runtime Downloads.

Utente

Lo standard PKCS #11 definisce due tipi di utenti per il login: un responsabile della riservatezza (SO) e un utente normale. Se un utente non accede utilizzando la funzione C_Login Cryptoki, l'utente è anche noto come utente anonimo. Solo l'utente normale può accedere agli oggetti privati sul token e tale accesso viene concesso solo dopo che l'utente normale viene autenticato. Nell'implementazione Hyper Protect Crypto Services PKCS #11 , i responsabili della protezione e gli utenti normali vengono autenticati dalle chiavi API. Sono supportati anche utenti anonimi. Per istruzioni sull'impostazione dei tipi di utente PKCS #11 , consultare Procedure ottimali per l'impostazione dei tipi di utente PKCS #11.

Sessione

L'API Cryptoki richiede che un'applicazione apra una o più sessioni con un token per ottenere l'accesso agli oggetti e alle funzioni del token. Una sessione fornisce una connessione logica tra l'applicazione e il token. Una sessione può essere una sessione di lettura/scrittura (R/W) o una sessione di sola lettura (R/O).

Per ottenere l'accesso agli oggetti privati del token, l'utente normale deve accedere ed è autenticato. Per un'analisi approfondita delle sessioni, consultare PKCS #11 Cryptographic Token Interface Usage Guide.

Oggetto chiave

Gli oggetti chiave sono memorizzati nel keystore in memoria che si trova con l'applicazione PKCS #11 o in un keystore supportato dal database. Se l'attributo CKA_TOKEN è impostato su true per l'oggetto chiave, l'oggetto chiave viene archiviato nel keystore supportato dal database. Altrimenti, l'oggetto chiave viene memorizzato nel keystore in memoria.

Gli oggetti chiave nel keystore in memoria non vengono ruotati automaticamente dopo la rotazione della chiave principale. Se i keystore PKCS #11 sono abilitati nella propria istanza del servizio, è necessario riavviare tutte le applicazioni PKCS #11 attive per cancellare il keystore in memoria una volta completata la rotazione della chiave principale.

Come mostrato nel seguente diagramma, un oggetto chiave PKCS #11 è un esempio di una classe oggetto PKCS #11 :

  • Dati: un oggetto di dati è definito dall'applicazione.
  • Certificati: un oggetto certificato memorizza un certificato.
  • Chiavi: un oggetto chiave memorizza una chiave crittografica. La chiave può essere una chiave pubblica, una chiave privata o una chiave segreta. Ogni tipo di queste chiavi ha sottotipi da utilizzare in meccanismi specifici.
    • Chiave pubblica: il componente pubblico di una coppia di chiavi utilizzato da chiunque per crittografare i messaggi destinati a un particolare destinatario che ha accesso alla chiave privata della coppia di chiavi. La chiave pubblica viene utilizzata anche per verificare le firme create dalla chiave privata.
    • Chiave privata: il componente privato di una coppia di chiavi utilizzato per decodificare i messaggi. La chiave privata viene utilizzata anche per creare le firme.
    • Chiave segreta: una chiave segreta è un flusso generato di bit che viene utilizzato per codificare e decodificare i messaggi simmetricamente.

PKCS #11 object classes
Figura 2. PKCS #11 classi oggetto

Cloud Identity and Access Management

IBM Cloud Identity and Access Management (IAM) fornisce l'autenticazione utente e il controllo dell'accesso per l'implementazione dell'API PKCS #11 . Utilizzando le chiavi API, la libreria PKCS #11 ottiene i token di connessione utilizzati per eseguire le chiamate API Cryptoki.

Questa implementazione di PKCS #11 equivale ad una chiave API con un PIN dell'utente. Per ulteriori informazioni sull'impostazione dell'ID servizio e della corrispondente chiave API, vedi Crea gli ID servizio per l'utente SO, l'utente normale e l'utente anonimo.

Servizio crittografico

Come parte del processo di iniziazione della libreria PKCS #11 , viene effettuata una connessione gRPC dalla libreria PKCS #11 a IBM Cloud. La connessione gRPC facilita la libreria PKCS #11 per richiamare funzioni Cryptoki, come C_Encrypt, C_Decrypt, C_Sign e C_Verify, che richiedono l'uso di HSM (Hardware Security Module).

Keystore

Sono disponibili due tipi principali di keystore:

  • Keystore in memoria: memorizza temporaneamente gli oggetti chiave in memoria. Gli oggetti chiave memorizzati nel keystore in memoria sono noti anche come oggetti sessione. Gli oggetti sessione in una sessione specifica vengono eliminati quando si richiama la funzione C_CloseSession per quella sessione. Gli oggetti sessione in tutte le sessioni vengono eliminati dopo il richiamo della funzione C_Finalize.
  • Keystore supportati dal database: memorizza gli oggetti chiave nei database. Gli oggetti chiave memorizzati nel keystore supportato dal database sono noti anche come oggetti token. Se il parametro sessionauth è abilitato e viene configurata una password per il keystore, il keystore supportato dal database viene codificato e autenticato. Per impostazione predefinita, il parametro sessionauth è disabilitato. Per ogni istanza del servizio sono supportati un massimo di cinque keystore autenticati. È possibile abilitare il parametro sessionauth per codificare le chiavi generate nel keystore o per decodificare la chiave prima di utilizzarla. La password può contenere da 6 a 8 caratteri.

Le password del keystore non sono memorizzate nell'istanza del servizio. L'amministratore del keystore è responsabile della gestione di una copia locale delle password. Se una password viene persa, è necessario contattare il team di supporto per reimpostare il keystore, il che significa che tutti i dati nel keystore vengono cancellati.

I keystore in memoria e i keystore supportati dal database sono composti dai seguenti tipi di keystore:

  • Keystore pubblico: memorizza le chiavi che sono meno sensibili e a cui deve accedere qualsiasi tipo di utente.
  • Keystore privato: memorizza le chiavi che codificano i dati sensibili e a cui devono accedere solo gli utenti normali.

In base ai tipi utente e alle impostazioni degli attributi chiave, le chiavi generate vengono memorizzate in keystore differenti. Il seguente elenco riepiloga i criteri di memorizzazione delle chiavi:

  • Il valore dell'attributo CKA_TOKEN decide se la chiave generata è memorizzata in un keystore in memoria o in un keystore supportato dal database.

    Se si desidera archiviare la chiave nel keystore supportato dal database, impostare CKA_TOKEN su TRUE nei modelli di generazione chiave o coppia di chiavi. Il processo di inizializzazione della libreria PKCS #11 stabilisce una connessione gRPC con IBM Cloud, che facilita l'archiviazione e il richiamo degli oggetti chiave nel o dal keystore supportato dal database. Per impostazione predefinita, CKA_TOKEN è impostato su FALSE, il che significa che l'oggetto chiave viene archiviato in un keystore in memoria all'interno dello spazio di indirizzi del processo dell'applicazione PKCS #11 .

  • Il valore dell'attributo CKA_PRIVATE decide se una chiave generata da utenti normali deve essere memorizzata in un keystore pubblico o privato.

    Per impostazione predefinita, se un utente ha eseguito l'accesso come utente normale, le chiavi generate vengono memorizzate nei keystore privati, ad eccezione del caso in cui CKA_PRIVATE è impostato su FALSE. Se un utente è collegato come utente SO o non è collegato (noto come utente anonimo), le chiavi generate vengono sempre archiviate nei keystore pubblici. Se un utente SO o un utente anonimo specifica CKA_PRIVATE per TRUE nei template di generazione chiavi, viene restituito un errore dal server.

    Per una coppia di chiave asimmetrica, è necessario impostare l'attributo CKA_PRIVATE separatamente sia per le chiavi pubbliche che per quelle private, il che significa che le coppie di chiavi possono essere memorizzate in keystore differenti.

Fare riferimento alla seguente tabella per le spiegazioni dettagliate della relazione tra i tipi di utente, gli attributi chiave e i keystore e la modalità di memorizzazione delle chiavi.

Tabella 1. Casi di memorizzazione di chiavi EP11 in keystore differenti
Tipo di utente TOKEN CKA_PRIVATO Keystore per le chiavi Privato o pubblico?
Utente SO FALSE N/D Keystore in memoria Pubblico
Utente SO TRUE N/D Keystore supportato dal database Pubblico
Utente anonimo FALSE N/D Keystore in memoria Pubblico
Utente anonimo TRUE N/D Keystore supportato dal database Pubblico
Utente normale FALSE FALSE Keystore in memoria Pubblico
Utente normale FALSE TRUE Keystore in memoria Privato
Utente normale TRUE FALSE Keystore supportato dal database Pubblico
Utente normale TRUE TRUE Keystore supportato dal database Privato

Supporto di crittografia post - quantistica

Con l'API PKCS #11 , puoi anche eseguire operazioni post - quantum cryptographic. La crittografia tradizionale si basa su complessi problemi matematici che sono difficili da risolvere per i computer classici. Tuttavia, con le capacità di calcolo, i computer quantistici possono risolvere questi problemi. La crittografia post - quantistica è considerata resistente agli attacchi crittoanalitici dei computer quantistici. Di solito utilizza algoritmi asimmetrici e ha molteplici approcci.

L'API PKCS #11 fornisce l'algoritmo Dilithium per la codifica post - quantistica. Si tratta di uno schema di firma digitale basato su reticolo e può essere utilizzato per la generazione e la verifica della firma. Attualmente, è supportata solo la versione ad alta sicurezza del Dilithium round 2 e non è disponibile per operazioni C_SignUpdate e C_VerifyUpdate.

L'algoritmo di diligenza è supportato solo dalla scheda crittografica IBM 4769, indicata anche come Crypto Express 7S (CEX7S). Se crei le tue istanze in regioni basate su VPC (Virtual Private Cloud), dove vengono utilizzate le schede di crittografia CEX7S, puoi utilizzare l'algoritmo Dilithium per la crittografia post - quantistica con l'API PKCS #11 . Per un elenco di regioni basate su VPC, vedi Regioni e ubicazioni.

Per ulteriori informazioni sul supporto dell'algoritmo Dilithium in PKCS #11, vedi PKCS #11 API reference. Puoi anche trovare esempi di codice algoritmo Dilithium nel repository di esempioGitHub.