Quantensichere Kryptographie in TLS
Sie können eine quantensichere TLS-Verbindung verwenden, um Anforderungen an einen IBM® Key Protect for IBM Cloud®-Serviceendpunkt zu senden.
Was ist quantensichere Kryptografie?
Die quantensichere Kryptografie, auch bekannt als Post-Quanten-Kryptografie, ist eine neue Generation von Kryptografiesystemen mit öffentlichen Schlüsseln, die derzeit vom NIST geprüft wird. Diese neuen quantenkryptografischen Algorithmen beruhen auf schwierigen mathematischen Problemen, die nach dem derzeitigen Stand der Forschung selbst große Quantencomputer nicht lösen können.
Wenn diese quantenkryptografischen Algorithmen für die TLS-Kommunikation verwendet werden, wird die Sicherheit des Austauschs öffentlicher Schlüssel zwischen Client und Server voraussichtlich höher sein als bei den derzeitigen RSA- und ECC-Algorithmen. NIST hat die Algorithmen jedoch nicht standardisiert und bis dahin hat Key Protect eine Hybridmethode angenommen, die sowohl Quantum Safe als auch aktuelle ECC-Algorithmen zum Schutz von Transitdaten kombiniert.
Warum ist quantumsicherer TLS wichtig?
Mit der weiteren Entwicklung der Quanteninformatik wird ein großer Quantencomputer in der Lage sein, einen "SHOR"-Algorithmus der die aktuellen TLS-Kommunikationsalgorithmen (RSA/ECC) in wenigen Minuten brechen kann minuten brechen kann. Zwar sind große Quantencomputer heute noch nicht verfügbar, doch können alle TLS-Daten, die ausgespäht und gespeichert wurden, geknackt werden, wenn diese großen Quantencomputer zur Verfügung stehen. Die Daten haben eine lange Haltbarkeit, so dass es entscheidend ist, dass Key Protect quantensichere Verschlüsselungsalgorithmen unterstützt, um die TLS-Kommunikation zu sichern.
Um Ihre In-Transit-Daten während der Übertragung ausfallsicher zu halten, hat Key Protect die Möglichkeit eingeführt, eine quantensichere TLS-Verbindung zu verwenden, um sicherzustellen, dass Ihre Daten während des Schlüsselaustauschprozesses sicher sind.
Was sind die Überlegungen zur quantensicheren Kryptografie?
Bevor Sie Ihren Service so konfigurieren, dass er Anfragen an Key Protect über einen quantensicher aktivierten Key Protect-Serviceendpunkt sendet, beachten Sie bitte die folgenden Punkte:
-
Das National Institute for Standards and Technology (NIST) arbeitet derzeit an der Standardisierung von Quantensicherheitsalgorithmen. Das NIST prüft derzeit Kandidaten für eine sichere Quantenkryptographie kryptografie und wird den Standardisierungsprozess voraussichtlich nicht vor nach 2023 abgeschlossen sein. {Das Key Protect verwendet den Kyber-Algorithmus, der einer der Kandidaten der dritten Runde ist, die gerade evaluiert werden. Wenn die NIST-Forschung ergibt, dass der Kyber-Algorithmus nicht quantensicher ist, ist der Schlüsselaustauschmechanismus immer noch durch die klassischen TLS-Algorithmen geschützt, wenn der Kyber-Algorithmus im Hybridmodus verwendet wird.
-
Die Leistungsergebnisse können von traditionellen Schlüsselalgorithmen abweichen. Der quantensichere Algorithmus verwendet im Vergleich zu klassischen Algorithmen für öffentliche Schlüssel eine größere Schlüsselgröße, so dass die Anforderungen an die Netzbandbreite höher sind. Die Leistung des quantensicheren Algorithmus kann auch durch Netzwerkprofil, CPU-Geschwindigkeit und API-Aufrufraten beeinflusst werden.
-
Quantum Safe TLS schützt nur Daten im Transit, nicht im Ruhezustand. Die quantensicheren Algorithmen, die von Key Protect genutzt werden, schützen Ihre Daten vor Verletzungen, wenn sie an einen Key Protect-Serviceendpunkt übertragen werden. Importierte Rootschlüssel (einschließlich ihrer zugehörigen Nutzdaten) werden durch TLS-Sitzungsschlüssel verschlüsselt. Daten in der Ruhe-Verschlüsselung verwendet symmetrische Schlüssel und AES 256 symmetrische Schlüssel sind sicher vor großen Quantencomputer-Attacken.
-
Key Protect unterstützt nur Quantum Safe TLS für Linux-Plattformen. Key Protect stellt in Zukunft eine quantensichere TLS-Verbindungsunterstützung für zusätzliche Betriebssysteme bereit.
-
Quantum Safe TLS wird nur über das Key Protect Software Development Kit (SDK) unterstützt. Die quantensichere TLS-Unterstützung wird zur Befehlszeilenschnittstelle (CLI) von Key Protect in der Zukunft hinzugefügt. Weitere Informationen zum Zugriff auf die Key Protect-SDK entnehmen Sie SDK einrichten.
Verwendung des quantensicheren TLS mit Key Protect
Sie können beim Senden von Anforderungen zwischen dem quantensicheren und dem nicht hybriden TLS-Verbindungsmodus wählen an Key Protect.
Quantensicherer Modus vs. Hybridmodus
Key Protect unterstützt zwei Modi, die Ihre Schlüssel während einer TLS-Verbindung schützen: Quantum Safe Mode-und Hybrid-Modus.
-
Hybridmodus: Der Hybridmodus verwendet eine Kombination aus einem quantensicheren Algorithmus und klassischen Schlüsselaustauschalgorithmen, um Ihre Daten während der Übertragung zu schützen. Wenn Sie eine Anforderung mit diesem Modus stellen, werden der klassische elliptische Algorithmus und der quantensichere Algorithmus in einem Schlüsselaustauschmechanismus verwendet, um Ihre Daten auf kryptografische Weise zu schützen, wenn sich Ihre Daten auf dem Weg machen zum Key Protect-Service zu verifizieren.
Der Hybridmodus unterstützt den Hybrid-Kyber-Algorithmus mit den folgenden Parametersätzen (Schlüsselgrößen):
p256_kyber512
: kombiniert kyber512 mit ECDH unter Verwendung der p_256-Kurve. Es bietet L1-Sicherheit.p384_kyber768
: kombiniert kyber768 mit ECDH mit der Kurve p_384. Es bietet L3-Sicherheit.p521_kyber1024
: kombiniert kyber1024 mit ECDH mit der Kurve p_521. Es bietet L5-Sicherheit.
Der Hybrid-Algorithmus basiert auf der Anleitung des Open Quantum Safe (OQS) Projekt-Community. Für weitere Informationen über den Algorithmus und die damit verbundenen schlüsselgrößen, siehe Prototyping von Post-Quantum- und Hybrid-Schlüsselaustausch.
-
Quantensicherer Modus: Der quantensichere Modus verwendet einen quantensicheren Algorithmus, um Ihre Daten während der Übertragung zu schützen. Wenn Sie eine Anforderung mit diesem Modus stellen, wird der quantensichere Algorithmus in einem Schlüsselaustauschmechanismus verwendet, um Ihre Daten auf dem Weg zum Key Protect-Service zu verifizieren.
Der Quanten-Safe-Modus unterstützt den Kyber-Algorithmus mit den folgenden Parametersätzen (Schlüsselgrößen):
kyber512
kyber768
kyber1024
Der Kyber-Algorithmus wird verwendet basierend auf der Empfehlung von IBM Cloud. Weitere Informationen über den Algorithmus und seine zugehörigen Schlüsselgrößen, siehe CRYSTALS-Kyber.
Quantum Safe-aktivierte Endpunkte
IBM® Key Protect for IBM Cloud® verfügt über quantensichere Endpunkte für 2 Regionen, US-South
und EU-GB
. Anhand der folgenden Tabelle können Sie ermitteln, welche quantensicheren Endpunkte beim Senden von Anforderungen
an den IBM® Key Protect for IBM Cloud® Service verwendet werden können.
Bereich | Öffentliche Endpunkte |
---|---|
Dallas | qsc.us-south.kms.cloud.ibm.com |
London | qsc.eu-gb.kms.cloud.ibm.com |
Frankfurt | qsc.eu-de.kms.cloud.ibm.com |
Bereich | Private Endpunkte |
---|---|
Dallas | private-qsc.us-south.kms.cloud.ibm.com |
London | private-qsc.eu-gb.kms.cloud.ibm.com |
Frankfurt | private-qsc.eu-de.kms.cloud.ibm.com |
Die klassischen Key Protect Serviceendpunkte sind nicht quantensicher aktiviert.
Konfigurieren Quantum Safe TLS mit Key Protect über das SDK
Voraussetzungen
Bevor Sie Ihre Anwendung für die Arbeit mit dem SDK einrichten, führen Sie die folgenden Schritte aus:
-
Laden Sie das Open Quantum Safe Software Stack(OQSSA)Skript. Dieses Script erstellt und installiert alle erforderlichen Abhängigkeiten (
liboqs
,openssl
undlibcurl
) in Ihrem HOME-Verzeichnis-Ordner ($HOME/opt/oqssa/
). -
Stellen Sie sicher, dass die für die Erstellung von OQSSA erforderlichen abhängigen Pakete installiert sind. Sie benötigen
sudo
-Berechtigungen, um die Abhängigkeitspakete zu installieren.- Debian-Abhängigkeiten (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
Wenn Sie eine Debian-Distribution verwenden, kopieren Sie das folgende Code-Snippet in eine Datei und führen Sie es aus, um zu überprüfen, ob alle erforderlichen Pakete installiert wurden:
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"
- RHEL-Abhängigkeiten (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'
Wenn Sie eine RHEL-Distribution verwenden, kopieren Sie das folgende Code-Snippet in eine Datei und führen Sie es aus, um zu überprüfen, ob alle erforderlichen Pakete installiert wurden:
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"
- Debian-Abhängigkeiten (Ubuntu):
-
Wenn die vorausgesetzten Pakete installiert und verifiziert werden, führen Sie das Script zum Erstellen und Installieren von OQSSA aus:
bash build-oqssa.sh
-
Führen Sie den folgenden Befehl aus, um den Quantum-Bibliothekspfad festzulegen:
export LD_LIBRARY_PATH=$HOME/opt/oqssa/lib:$LD_LIBRARY_PATH
Key Protect SDK mit Ihrer Anwendung konfigurieren
Nachdem Sie die Voraussetzungen installiert haben, führen Sie die folgenden Schritte aus, um die Key Protect SDK mit Ihrer Anwendung:
-
Navigieren Sie zu dem Ordner, in dem sich der go-Client befindet, indem Sie den folgenden Befehl ausführen:
cd $HOME/keyprotect-go-client
-
Legen Sie den Kyber-Algorithmus bei der Initialisierung des Key Protect-Clients in Ihrem Anwendungscode fest. Wenn Sie keinen Algorithmus angeben, wird Ihre Anwendung standardmäßig den Algorithmus
p384_kyber768
verwenden. Verwenden Sie den folgenden Code als Beispiel für die Algorithmuskonfiguration:qscConfig := kp.ClientQSCConfig{ AlgorithmID: kp.KP_QSC_ALGO_p384_KYBER768, }
-
Kompilieren Sie das Key Protect SDK, indem Sie den folgenden Befehl ausführen:
LD_LIBRARY_PATH=$HOME/opt/oqssa/lib PKG_CONFIG_PATH=$HOME/opt/oqssa/lib/pkgconfig go build –-tags quantum
Quantensichere Key Protect Endpunkte über CURL verwenden
Voraussetzungen
Bevor Sie eine curl
-Anforderung an einen quantensicher aktivierten Key Protect Endpunkt stellen, befolgen Sie diese Schritte:
-
Laden Sie das Open Quantum Safe Software Stack(OQSSA)Skript. Dieses Script erstellt und installiert alle erforderlichen Abhängigkeiten (
liboqs
,openssl
undlibcurl
) in Ihrem HOME-Verzeichnis-Ordner ($HOME/opt/oqssa/
). -
Stellen Sie sicher, dass die für die Erstellung von OQSSA erforderlichen abhängigen Pakete installiert sind. Sie benötigen
sudo
-Berechtigungen, um die Abhängigkeitspakete zu installieren.- Debian-Abhängigkeiten (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
Wenn Sie eine Debian-Distribution verwenden, kopieren Sie das folgende Code-Snippet in eine Datei und führen Sie es aus, um zu überprüfen, ob alle erforderlichen Pakete installiert wurden:
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"
- RHEL-Abhängigkeiten (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''
Wenn Sie eine RHEL-Distribution verwenden, kopieren Sie das folgende Code-Snippet in eine Datei und führen Sie es aus, um zu überprüfen, ob alle erforderlichen Pakete installiert wurden:
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"
- Debian-Abhängigkeiten (Ubuntu):
-
Wenn die vorausgesetzten Pakete installiert und verifiziert werden, führen Sie das Script zum Erstellen und Installieren von OQSSA aus:
bash build-oqssa.sh
Erstellen einer CURL-Anforderung an einen quantensicheren Endpunkt
Wenn Sie einen Aufruf an den quantensicher aktivierten Endpunkt über curl
anfrage zu stellen, müssen Sie spezifische Maßnahmen ergreifen, um sicherzustellen, dass die Anfrage erfolgreich durchgeht. Die folgende Tabelle enthält
eine Liste der Flags, die erforderlich sind, wenn eine quantensichere curl
-Anforderung erstellt wird.
Flag | Beschreibung |
---|---|
-tlsv1.3 | Diese Markierung erzwingt, dass curl eine Verbindung zu einem TLS v1.3-Server herstellt. |
--curves | Dieses Flag gibt an, welcher quantensichere Algorithmus verwendet werden sollte im |
Schlüsselaustauschmechanismus für TLSv1.3. Wenn Sie keinen Algorithmus angeben, wird standardmäßig der Algorithmus p384_kyber768 verwendet. |
Sie können die folgende Beispielanforderung verwenden, um eine Liste der Schlüssel für Ihre Key Protect-Instanz über einen quantensicheren Endpunkt abzurufen.
$ 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>"
Ersetzen Sie die Variablen in der Beispielanforderung wie in der folgenden Tabelle angegeben.
Variabel | Beschreibung |
---|---|
qsc_algorithm | Erforderlich. Der Kyber-Algorithmus in der Schlüsselgröße, die zum Schutz Ihrer Daten bei der Übertragung verwendet wird. Akzeptabler Algorithmus + Schlüsselgrößen: kyber512, kyber768, kyber1024, p256_kyber512, p384_kyber768, und p521_kyber1024. |
Bereich | Erforderlich. Die Abkürzung der Region, z. B. us-south oder eu-gb, die den geografischen Bereich bezeichnet, in dem sich Ihre Key Protect-Instanz befindet. For more information, see Regionale Dienstendpunkte. |
IAM_token | Erforderlich. Ihr IBM Cloud-Zugriffstoken. Fügen Sie den vollständigen Inhalt des IAM-Tokens, einschließlich des Träger-Wertes, in die Curl-Anforderung ein. For more information, see Abrufen eines Zugangstokens. |
instance_id | Erforderlich. Die eindeutige ID, die Ihrer Key Protect-Serviceinstanz zugewiesen ist. For more information, see Abrufen einer Instanz-ID. |