TLS 中的量子安全密码术简介
您可以使用启用了量子安全的 TLS 连接将请求发送到 IBM® Key Protect for IBM Cloud® 服务端点。
什么是量子安全密码术?
量子安全密码术,又称后量子密码术,是正在进行 NIST 评估的新一代公钥密码系统。 这些新的量子密码算法是基于基于当前研究的硬数学问题,即使是大型量子计算机也无法破解。
当这些量子密码算法用于 TLS 通信时,客户机和服务器之间的公用密钥交换的安全性预期比当前 RSA 和 ECC 算法具有更高的安全性级别。 但是,NIST hast 并未对算法进行标准化,在此之前,Key Protect 已采用混合方法,将 Quantum Safe 算法和当前 ECC 算法相结合,以保护传输中的数据。
为什么 Quantum Safe TLS 很重要?
随着量子计算的不断演进和推进,大型量子计算机将能够运行 "SHOR" 算法,可在几分钟内中断当前 TLS 通信算法 (RSA/ECC)。 虽然如今大型量子计算机不可用,但当这些大型量子计算机可用时,任何已被探知并存储的 TLS 数据传输都可能被突破。 数据具有较长的保质期,因此 Key Protect 支持量子安全密码算法以保护 TLS 通信至关重要。
为了使传输中的数据保持弹性, Key Protect 引入了使用启用了量子安全的 TLS 连接的功能,以确保在密钥交换过程中数据安全。
量子安全密码术有哪些注意事项?
在配置服务以将请求发送到 Key Protect (通过启用了量子安全) Key Protect 服务端点,请记住以下注意事项:
-
美国国家标准技术学会 (NIST) 正在 标准化量子安全算法。 NIST 目前正在评估量子安全密码学的候选方法,预计在 2023 年之后才会完成标准化过程。Key Protect 使用 Kyber 算法,这是正在评估的第三轮候选者之一。 如果 NIST 的研究揭示了 Kyber 算法并非量子安全,那么在混合模式下使用 Kyber 算法时,密钥交换机制仍然受到经典 TLS 算法的保护。
-
性能结果可能与传统密钥算法不同。 与经典的公钥算法相比,量子安全算法使用更大的密钥大小,因此网络带宽要求会更高。 量子安全算法性能也会受到网络概要文件,CPU 速度和 API 调用速率的影响。
-
Quantum Safe TLS 仅保护传输中的数据,而不是静态数据。 利用的量子安全算法 Key Protect 保护数据在传输到 Key Protect 服务端点时免受违规。 导入的根密钥 (包括其关联的有效内容) 由 TLS 会话密钥加密。 静态数据加密使用对称密钥,AES 256 对称密钥可免受大型量子计算机攻击。
-
Key Protect 仅支持针对 Linux 平台的 Quantum Safe TLS。 Key Protect 将在将来向其他操作系统提供量子安全 TLS 连接支持。
-
Quantum Safe TLS 仅通过 Key Protect 软件开发包 (SDK) 受支持。 量子安全 TLS 支持将被添加到 Key Protect 命令行界面 (CLI) 在未来 要了解有关访问 Key Protect SDK,请查看 设置 SDK。
将 Quantum Safe TLS 与 Key Protect 配合使用
发送请求时,可以在混合和非混合量子安全 TLS 连接方式之间进行选择 Key Protect.
Quantum 安全模式与混合模式
Key Protect 支持在 TLS 连接期间保护密钥的两种方式: 量子安全方式和混合方式。
-
混合方式: 混合模式使用量子安全算法和经典密钥交换算法的组合,在传输过程中保护您的数据。 当您使用此方式发出请求时,将在密钥交换机制中使用经典的椭圆算法和量子安全算法,以加密方式保护您的数据。 Key Protect 服务。
混合模式支持具有以下参数集 (密钥大小) 的混合 Kyber 算法:
p256_kyber512
: 使用 p_256 曲线将 kyber512 与 ECDH 组合在一起。 它提供 L1 安全性。p384_kyber768
: 使用 p_384 曲线将 kyber768 与 ECDH 相结合。 它提供 L3 安全性。p521_kyber1024
: 使用 p_521 曲线将 kyber1024 与 ECDH 组合在一起。 它提供 L5 安全性。
基于开放式量子安全 (OQS) 的指导使用混合算法 项目社区。 有关算法及其关联密钥大小的更多信息,请参阅 原型设计后量子密钥和混合密钥交换。
-
量子安全模式: 量子安全模式使用量子安全算法在传输过程中保护您的数据。 当您使用此方式发出请求时,将在密钥交换机制中使用量子安全算法,以加密方式保护您的数据。 Key Protect 服务。
Quantum Safe 模式支持具有以下参数集 (密钥大小) 的 Kyber 算法:
kyber512
kyber768
kyber1024
根据建议使用 Kyber 算法 IBM Cloud. 要了解有关算法及其关联密钥大小的更多信息,请参阅 CRYSTALS-Kyber。
支持量子安全的端点
IBM® Key Protect for IBM Cloud® 具有针对 2 区域,US-South
和 EU-GB
启用了量子安全的端点。 请参阅下表以确定向 IBM® Key Protect for IBM Cloud® 服务发送请求时要使用的启用了量子安全的端点。
区域 | 公共端点 |
---|---|
达拉斯 | qsc.us-south.kms.cloud.ibm.com |
伦敦 | qsc.eu-gb.kms.cloud.ibm.com |
法兰克福 | qsc.eu-de.kms.cloud.ibm.com |
区域 | 专用端点 |
---|---|
达拉斯 | private-qsc.us-south.kms.cloud.ibm.com |
伦敦 | private-qsc.eu-gb.kms.cloud.ibm.com |
法兰克福 | private-qsc.eu-de.kms.cloud.ibm.com |
经典 Key Protect 服务端点未启用量子安全。
通过 SDK 使用 Key Protect 配置 Quantum Safe TLS
先决条件
在设置应用程序以使用 SDK 之前,请执行以下步骤:
-
下载 Open Quantum Safe Software Stack(OQSSA)脚本。 此脚本将构建所有必需的依赖关系 (
liboqs
,openssl
和libcurl
) 并将其安装到 HOME 目录文件夹 ($HOME/opt/oqssa/
) 中。 -
确保安装了构建 OQSSA 所需的从属软件包。 您将需要
sudo
许可权才能安装依赖关系包。- 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
如果要使用 Debian 分发,请将以下代码片段复制到文件并执行该代码片段以验证是否已安装所有必需的软件包:
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 (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'
如果您正在使用 RHEL 分发,请将以下代码片段复制到文件并执行该文件,以验证是否已安装所有必需的软件包:
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 (Ubuntu) 依赖关系:
-
安装并验证必备软件包后,执行用于构建和安装 OQSSA 的脚本:
bash build-oqssa.sh
-
运行以下命令以设置 Quantum 库路径:
export LD_LIBRARY_PATH=$HOME/opt/oqssa/lib:$LD_LIBRARY_PATH
使用应用程序配置 Key Protect SDK
安装必备软件后,请遵循以下步骤来配置 带有应用程序的 Key Protect SDK:
-
通过运行以下命令,浏览到 go 客户机所在的文件夹:
cd $HOME/keyprotect-go-client
-
在初始化中设置 Kyber 算法 应用程序代码中的 Key Protect 客户机。 如果未指定算法,那么应用程序将缺省使用
p384_kyber768
算法。 使用以下代码作为算法配置的示例:qscConfig := kp.ClientQSCConfig{ AlgorithmID: kp.KP_QSC_ALGO_p384_KYBER768, }
-
通过运行以下命令来编译 Key Protect SDK:
LD_LIBRARY_PATH=$HOME/opt/oqssa/lib PKG_CONFIG_PATH=$HOME/opt/oqssa/lib/pkgconfig go build –-tags quantum
通过 CURL 使用 Quantum Safe Key Protect 端点
先决条件
在向以下用户发出 curl
请求之前 Key Protect 启用了量子安全的端点,请遵循以下步骤:
-
下载 Open Quantum Safe Software Stack(OQSSA)脚本。 此脚本将构建所有必需的依赖关系 (
liboqs
,openssl
和libcurl
) 并将其安装到 HOME 目录文件夹 ($HOME/opt/oqssa/
) 中。 -
确保安装了构建 OQSSA 所需的从属软件包。 您将需要
sudo
许可权才能安装依赖关系包。- 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
如果要使用 Debian 分发,请将以下代码片段复制到文件并执行该代码片段以验证是否已安装所有必需的软件包:
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 (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''
如果您正在使用 RHEL 分发,请将以下代码片段复制到文件并执行该文件,以验证是否已安装所有必需的软件包:
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 (Ubuntu) 依赖关系:
-
安装并验证必备软件包后,执行用于构建和安装 OQSSA 的脚本:
bash build-oqssa.sh
向启用了量子安全的端点发出 CURL 请求
通过 curl
调用启用了量子安全的端点时 请求,您将需要特定于请求以确保请求成功通过。 下表包含发出量子安全 curl
请求时所需的标志列表。
标志 | 描述 |
---|---|
-tlsv1.3 | 此标志强制实施 curl 连接到 TLS v1.3 服务器。 |
-- 曲线 | 此标志将指定应该在以下项中使用的量子安全算法: |
TLSv1.3 密钥交换机制。 如果未指定算法,那么该标志将缺省为 p384_kyber768 算法。 |
您可以使用以下示例请求来检索 Key Protect 实例 (通过启用了量子安全的端点)。
$ 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>"
根据下表替换请求中的变量。
变量 | 描述 |
---|---|
qsc_algorithm | 必需。 密钥大小中的 kyber 算法,将用于保护传输中的数据。 可接受的算法 + 密钥大小: kyber512,kyber768,kyber1024,p256_kyber512,p384_kyber768和 p521_kyber1024。 |
区域 | 必需。 区域缩写,例如 us-south 或 eu-gb,表示 Key Protect 实例所在的地理区域。 有关更多信息,请参阅 区域服务端点。 |
IAM_token | 必需。 您的 IBM Cloud 访问令牌。 在 curl 请求中包含 IAM 令牌的完整内容,包括 Bearer 值。 有关更多信息,请参阅 检索访问令牌。 |
instance_ID | 必需。 分配给 Key Protect 服务实例的唯一标识。 有关更多信息,请参阅 检索实例标识。 |