Introduzione alla crittografia quantistica sicura in TLS
È possibile utilizzare una connessione TLS abilitata quantum safe per inviare richieste a IBM® Key Protect for IBM Cloud® endpoint del servizio.
Che cos' è la crittografia Quantum Safe?
La crittografia quantistica sicura, nota anche come post - crittografia quantistica, è una nuova generazione del sistema crittografico a chiave pubblica che è in fase di valutazione NIST. Questi nuovi algoritmi di crittografia quantistica si basano su difficili problemi matematici che, basandosi sulla ricerca attuale, anche i grandi computer quantistici non possono rompersi.
Quando questi algoritmi di crittografia quantistica vengono utilizzati per le comunicazioni TLS, si prevede che la sicurezza dello scambio di chiavi pubbliche tra il client e il server abbia livelli di sicurezza più elevati rispetto agli attuali algoritmi RSA ed ECC. Tuttavia, NIST non ha standardizzato gli algoritmi e fino a quel momento, Key Protect ha adottato un metodo ibrido che combina gli algoritmi ECC corrente e Quantum Safe per proteggere i dati in transito.
Perché è importante Quantum Safe TLS?
Mentre il calcolo quantistico continua a evolversi e avanzare, un grande computer quantistico sarà in grado di eseguire un Algoritmo "SHOR" che può interrompere gli algoritmi di comunicazione TLS correnti (RSA/ECC) in pochi minuti. Mentre i grandi computer quantistici non sono disponibili oggi, tutti i dati TLS in transito che sono stati snoopati e archiviati possono essere violati quando questi grandi computer quantistici sono resi disponibili. I dati hanno una durata di conservazione lunga, quindi è fondamentale che Key Protect supporti algoritmi crittografici quantistici sicuri per proteggere le comunicazioni TLS.
Per mantenere la resilienza dei dati in transito, Key Protect ha introdotto la possibilità di utilizzare una connessione TLS abilitata per la sicurezza quantistica per garantire che i tuoi dati siano protetti durante il processo di scambio chiavi.
Quali sono le considerazioni di Quantum Safe Cryptography?
Prima di configurare il tuo servizio per inviare richieste a Key Protect tramite un sistema di sicurezza quantistico abilitato Endpoint del servizio Key Protect, tenere presente le seguenti considerazioni:
-
Il NIST (National Institute for Standards and Technology) sta per standardizzare gli algoritmi di sicurezza quantistica. Il NIST sta attualmente valutando gli approcci candidati alla crittografia quantistica sicura e non si prevede di completare il processo di standardizzazione fino a dopo il 2023. Key Protect utilizza l'algoritmo Kyber, che è uno dei candidati della terza fase in fase di valutazione. Se la ricerca del NIST rivela che l'algoritmo di Kyber non è quantistico sicuro, il meccanismo di scambio delle chiavi è ancora protetto dai classici algoritmi TLS quando si utilizza l'algoritmo di Kyber in modalità ibrida.
-
I risultati delle prestazioni possono variare dagli algoritmi chiave tradizionali. L'algoritmo quantistico sicuro utilizza una dimensione chiave più grande rispetto ai classici algoritmi di chiave pubblica, quindi i requisiti di larghezza di banda della rete saranno più elevati. Le prestazioni degli algoritmi di sicurezza quantistica possono essere influenzate anche dal profilo di rete, dalla velocità della CPU e dalle velocità di chiamata API.
-
Quantum Safe TLS protegge solo i dati in transito, non quelli inattivi. Gli algoritmi di sicurezza quantistica utilizzati da Key Protect protegge i tuoi dati dalla violazione mentre viaggiano a un endpoint del servizio Key Protect. Le chiavi root importate (inclusi i relativi payload associati) sono crittografati dalle chiavi della sessione TLS. La crittografia dei dati inattivi utilizza chiavi simmetriche e le chiavi simmetriche AES 256 sono al sicuro da grandi attacchi di computer quantistici.
-
Key Protect supporta solo Quantum Safe TLS per le piattaforme Linux. Key Protect fornirà in futuro un supporto di connessione TLS sicuro per ulteriori sistemi operativi.
-
Quantum Safe TLS è supportato solo tramite Key Protect SDK (software development kit) Il supporto TLS quantistico sicuro verrà aggiunto al CLI (command line interface) Key Protect in futuro. Per ulteriori informazioni sull'accesso al Key Protect, controlla Configurazione dell'SDK.
Utilizzo di Quantum Safe TLS con Key Protect
È possibile scegliere tra le modalità di connessione TLS sicura quantistica ibrida e non ibrida quando si inviano richieste a Key Protect.
Modalità Quantum Safe vs Hybrid Mode
Key Protect supporta due modalità che proteggono le tue chiavi durante una connessione TLS: Quantum Safe Mode e Hybrid mode.
-
Modalità ibrida: La modalità ibrida utilizza una combinazione di un algoritmo quantistico sicuro e di algoritmi di scambio chiave classici per proteggere i dati durante il transito. Quando si effettua una richiesta utilizzando questa modalit ..., l'algoritmo ellittico classico e l'algoritmo di sicurezza quantistica verranno utilizzati in un meccanismo di scambio di chiavi per proteggere crittograficamente i dati mentre si fa strada verso il Servizio Key Protect.
La modalità ibrida supporta l'algoritmo Kyber ibrido con le seguenti serie di parametri (dimensioni chiave):
p256_kyber512
: combina kyber512 con ECDH utilizzando la curva p_256. Fornisce Sicurezza L1.p384_kyber768
: combina kyber768 con ECDH utilizzando la curva p_384. Fornisce Sicurezza L3.p521_kyber1024
: combina kyber1024 con ECDH utilizzando la curva p_521. Fornisce la sicurezza L5.
L'algoritmo ibrido viene utilizzato sulla base della guida dell'Open Quantum Safe (OQS) comunità di progetto. Per ulteriori informazioni sull'algoritmo e le relative dimensioni di chiave associate, consultare Prototipazione dello scambio di chiavi post - quantum e ibride.
-
Modalità sicura quantistica: La modalità di sicurezza quantistica utilizza un algoritmo di sicurezza quantistica per proteggere i dati durante il transito. Quando si effettua una richiesta utilizzando questa modalit ..., l'algoritmo di sicurezza quantistica verr ... utilizzato in un meccanismo di scambio di chiavi per proteggere crittograficamente i dati mentre si fa strada Servizio Key Protect.
La modalità Quantum Safe supporta l'algoritmo Kyber con le seguenti serie di parametri (dimensioni chiave):
kyber512
kyber768
kyber1024
L'algoritmo Kyber viene utilizzato in base alla raccomandazione di IBM Cloud. Per ulteriori informazioni sull'algoritmo e sulle dimensioni delle chiavi associate, consultare CRYSTALS-Kyber.
Endpoint abilitati Quantum Safe
IBM® Key Protect for IBM Cloud® ha endpoint abilitati con sicurezza quantistica per 2 regioni; US-South
e EU-GB
. Consulta la seguente tabella per determinare quali endpoint abilitati quantum safe utilizzare quando
si inviano richieste al servizio IBM® Key Protect for IBM Cloud®.
Regione | Endpoint pubblici |
---|---|
Dallas | qsc.us-south.kms.cloud.ibm.com |
Londra | qsc.eu-gb.kms.cloud.ibm.com |
Francoforte | qsc.eu-de.kms.cloud.ibm.com |
Regione | Endpoint privati |
---|---|
Dallas | private-qsc.us-south.kms.cloud.ibm.com |
Londra | private-qsc.eu-gb.kms.cloud.ibm.com |
Francoforte | private-qsc.eu-de.kms.cloud.ibm.com |
Gli endpoint del servizio Key Protect classici non sono abilitati alla sicurezza quantistica.
Configura Quantum Safe TLS con Key Protect tramite SDK
Prerequisiti
Prima di configurare la tua applicazione per utilizzare l'SDK, attieniti alla seguente procedura:
-
Scarica il Script OQSSA(Open Quantum Safe Software Stack) Questo script creerà e installerà tutte le dipendenze necessarie (
liboqs
,openssl
elibcurl
) nella cartella della directory HOME ($HOME/opt/oqssa/
). -
Assicurarsi che i pacchetti dipendenti richiesti per la creazione di OQSSA siano installati. Saranno necessarie le autorizzazioni
sudo
per installare i pacchetti di dipendenza.- Dipendenze Debian (Ubuntu):
libtool automake autoconf cmake (3.5 or above) make openssl libssl-dev build-essential git wget golang (1.14 or above) patch perl diffutils
Se si sta utilizzando una distribuzione Debian, copiare il seguente frammento di codice in un file ed eseguirlo per verificare che tutti i pacchetti necessari siano stati installati:
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="libtool automake autoconf cmake make openssl libssl-dev git wget build-essential golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(dpkg-query -W --showformat='${Version},${Status}\n' $REQUIRED_PKG|grep "install ok installed") if [ "" = "$PKG_STATUS" ] then echo "$REQUIRED_PKG is NOT installed" #sudo apt-get -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done echo "Prerequisites verification completed"
- Dipendenze RHEL (Centos/Fedora):
libtool automake autoconf cmake (3.5 or above) make openssl ncurses-devel gcc-c++ glibc-locale-source glibc-langpack-enopenssl-devel git wget golang (1.14 or above) patch perl diffutils 'Developement Tools'
Se si utilizza una distribuzione RHEL, copiare il seguente frammento di codice in un file ed eseguirlo per verificare che tutti i pacchetti necessari siano stati installati:
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="git libtool automake autoconf cmake make openssl ncurses-devel gcc-c++ openssl-devel wget glibc-locale-source glibc-langpack-en sudo golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(rpm -q --qf '%{VERSION},%{INSTALLTIME}\n' $REQUIRED_PKG) if [[ "$PKG_STATUS" == *"not installed"* ]]; then echo "$REQUIRED_PKG is NOT installed" #sudo yum -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done PKG_STATUS=$(yum grouplist Dev* |grep "Development Tools") if [ "" = "$PKG_STATUS" ] then echo "Developement Tools is NOT installed" fi echo "Prerequisites verification completed"
- Dipendenze Debian (Ubuntu):
-
Una volta installati e verificati i pacchetti prerequisiti, eseguire lo script per creare e installare OQSSA:
bash build-oqssa.sh
-
Eseguire il seguente comando per impostare il percorso della libreria Quantum:
export LD_LIBRARY_PATH=$HOME/opt/oqssa/lib:$LD_LIBRARY_PATH
Configurazione dell'SDK Key Protect con la tua applicazione
Una volta installati i prerequisiti, attenersi alla seguente procedura per configurare SDKKey Protect con l'applicazione:
-
Passare alla cartella in cui si trova il client go eseguendo il comando riportato di seguito:
cd $HOME/keyprotect-go-client
-
Impostare l'algoritmo Kyber nell'inizializzazione del Key Protect nel tuo codice dell'applicazione. Se non si specifica un algoritmo, per impostazione predefinita l'applicazione utilizzerà l'algoritmo
p384_kyber768
. Utilizzare il codice riportato di seguito come un esempio di configurazione degli algoritmi:qscConfig := kp.ClientQSCConfig{ AlgorithmID: kp.KP_QSC_ALGO_p384_KYBER768, }
-
Compila l'SDK Key Protect immettendo il seguente comando:
LD_LIBRARY_PATH=$HOME/opt/oqssa/lib PKG_CONFIG_PATH=$HOME/opt/oqssa/lib/pkgconfig go build –-tags quantum
Utilizzo degli endpoint Quantum Safe Key Protect via CURL
Prerequisiti
Prima di effettuare una richiesta curl
a un Key Protect endpoint abilitato quantum safe, attenersi alla seguente procedura:
-
Scarica il Script OQSSA(Open Quantum Safe Software Stack) Questo script creerà e installerà tutte le dipendenze necessarie (
liboqs
,openssl
elibcurl
) nella cartella della directory HOME ($HOME/opt/oqssa/
). -
Assicurarsi che i pacchetti dipendenti richiesti per la creazione di OQSSA siano installati. Saranno necessarie le autorizzazioni
sudo
per installare i pacchetti di dipendenza.- Dipendenze Debian (Ubuntu):
libtool automake autoconf cmake (3.5 or above) make openssl libssl-dev build-essential git wget golang (1.14 or above) patch perl diffutils
Se si sta utilizzando una distribuzione Debian, copiare il seguente frammento di codice in un file ed eseguirlo per verificare che tutti i pacchetti necessari siano stati installati:
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="libtool automake autoconf cmake make openssl libssl-dev git wget build-essential golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(dpkg-query -W --showformat='${Version},${Status}\n' $REQUIRED_PKG|grep "install ok installed") if [ "" = "$PKG_STATUS" ] then echo "$REQUIRED_PKG is NOT installed" #sudo apt-get -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done echo "Prerequisites verification completed"
- Dipendenze RHEL (Centos/Fedora):
libtool automake autoconf cmake (3.5 or above) make openssl ncurses-devel gcc-c++ glibc-locale-source glibc-langpack-enopenssl-devel git wget golang (1.14 or above) patch perl diffutils 'Developement Tools''
Se si utilizza una distribuzione RHEL, copiare il seguente frammento di codice in un file ed eseguirlo per verificare che tutti i pacchetti necessari siano stati installati:
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="git libtool automake autoconf cmake make openssl ncurses-devel gcc-c++ openssl-devel wget glibc-locale-source glibc-langpack-en sudo golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(rpm -q --qf '%{VERSION},%{INSTALLTIME}\n' $REQUIRED_PKG) if [[ "$PKG_STATUS" == *"not installed"* ]]; then echo "$REQUIRED_PKG is NOT installed" #sudo yum -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done PKG_STATUS=$(yum grouplist Dev* |grep "Development Tools") if [ "" = "$PKG_STATUS" ] then echo "Developement Tools is NOT installed" fi echo "Prerequisites verification completed"
- Dipendenze Debian (Ubuntu):
-
Una volta installati e verificati i pacchetti prerequisiti, eseguire lo script per creare e installare OQSSA:
bash build-oqssa.sh
Esecuzione di una richiesta CURL a un endpoint abilitato quantum safe
Quando si effettua una chiamata a un endpoint abilitato per la sicurezza quantistica tramite curl
, sarà necessario utilizzare una specifica per garantire che la richiesta venga eseguita correttamente. La seguente tabella contiene
un elenco di indicatori richiesti quando si effettua una richiesta Quantum Safe curl
.
Indicatore | Descrizione |
---|---|
-tlsv1.3 | Questo indicatore applica la connessione curl a un server TLS v1.3. |
-- curve | Questo indicatore specificherà quale algoritmo di sicurezza quantistica deve essere utilizzato nel |
Meccanismo di scambio chiavi TLSv1.3. Se non si specifica un algoritmo, l'indicatore utilizzerà per impostazione predefinita l'algoritmo p384_kyber768. |
Puoi utilizzare la seguente richiesta di esempio per richiamare un elenco di chiavi per il tuo Istanza Key Protect tramite un endpoint abilitato a sicurezza quantistica.
$ curl --tlsv1.3 --curves <qsc_algorithm> -X GET \
"https://qsc.<region>.kms.cloud.ibm.com/api/v2/keys" \
-H "accept: application/vnd.ibm.kms.key+json" \
-H "authorization: Bearer <IAM_token>" \
-H "bluemix-instance: <instance_ID>"
Sostituire le variabili nella richiesta in base alla seguente tabella.
Variabile | Descrizione |
---|---|
algoritmo_qsc_ | Obbligatorio. L'algoritmo kyber nella dimensione chiave che verrà utilizzato per proteggere i dati in transito. Algoritmo + dimensioni chiave accettabili: kyber512, kyber768, kyber1024, p256_kyber512, p384_kyber768e p521_kyber1024. |
regione | Obbligatorio. L'abbreviazione della regione, come us - south o eu - gb, che rappresenta l'area geografica in cui risiede la tua istanza Key Protect. Per ulteriori informazioni, vedi Endpoint del servizio regionali. |
Token IAM | Obbligatorio. Il tuo token di accesso IBM Cloud. Includi il contenuto completo del token IAM, incluso il valore Bearer, nella richiesta curl. Per ulteriori informazioni, vedi Richiamo di un token di accesso. |
instance_id | Obbligatorio. L'identificativo univoco assegnato alla tua istanza del servizio Key Protect. Per ulteriori informazioni, consultare Richiamo di un ID istanza. |