IBM Cloud Docs
TLS 中的后量子加密技术

TLS 中的后量子加密技术

您可以使用启用量子后的 TLS 连接,将请求发送到 IBM® Key Protect for IBM Cloud® 服务端点。

什么是后量子密码学?

后量子密码学是新一代公钥密码系统。后量子加密技术是新一代公钥加密系统,正在接受 NIST 评估。 这些新的量子加密算法基于艰深的数学问题,而根据目前的研究,即使是大型量子 数学问题,根据目前的研究,即使大型量子 计算机也无法破解。

当这些量子加密算法被用于 TLS 通信时,客户端和服务器之间的公钥交换的安全性有望得到保证。客户端和服务器之间的公钥交换的安全性预计将高于当前的 RSA 和 ECC 算法。Key Protect 采用了一种混合方法,结合了 NIST 评估的第二轮后量子算法和当前的 ECC 算法,以保护传输中的数据。

后量子 TLS 为什么重要?

随着量子计算的不断演进和推进,大型量子计算机将能够运行 "SHOR" 算法,可在几分钟内中断当前 TLS 通信算法 (RSA/ECC)。 虽然如今大型量子计算机不可用,但当这些大型量子计算机可用时,任何已被探知并存储的 TLS 数据传输都可能被突破。 数据具有较长的保质期,因此 Key Protect 支持量子安全密码算法以保护 TLS 通信至关重要。

为了使传输中的数据保持弹性, Key Protect 引入了 使用启用量子后 TLS 连接的功能,以确保您的数据在密钥交换过程中是安全的。在密钥交换过程中的数据安全。

后量子密码学有哪些注意事项?

在配置服务以将请求发送到 Key Protect 通过启用后量子 Key Protect 服务端点,请记住以下注意事项:

  • 性能结果可能与传统密钥算法不同。 与传统公钥算法相比,后量子算法使用更大的密钥大小,因此对网络带宽的要求更高。算法相比,后量子算法使用的密钥大小更大,因此对网络带宽的要求更高。 后量子算法的性能也会受到网络配置文件的影响、CPU 速度和 API 调用率。

  • 后量子 TLS 只保护传输中的数据,不保护静态数据。 所采用的后量子算法 Key Protect 保护您的数据不被泄露 在数据传输到 服务 端点。Key Protect 导入的根密钥 (包括其关联的有效内容) 由 TLS 会话密钥加密。 静态数据加密使用对称密钥,AES 256 对称密钥可免受大型量子计算机攻击。

  • Key Protect 仅支持 平台的后量子 TLS。Linux Key Protect 将在未来为更多操作系统提供后量子 TLS 连接支持。

  • 后量子 TLS 仅通过 Key Protect 软件开发工具包 (SDK) 支持。 要了解有关访问 Key Protect SDK,请查看 设置 SDK

使用后量子 TLS Key Protect

在发送请求时,您可以选择混合型和非混合型后量子 TLS 连接模式。 Key Protect.

后量子模式 vs 混合模式

Key Protect 支持两种在 TLS 连接期间保护密钥的模式 在 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 安全性。

混合算法是在后量子项目社区的指导下使用的。项目社区的指导。 有关该算法及其相关密钥大小的更多信息,请参阅 密钥大小的信息,请参见 后量子和混合密钥交换原型 以及 TLS 和 SSH 中的身份验证

  • 后量子模式: 后量子模式使用后量子算法在传输过程中保护数据。传输过程中保护您的数据。 当你使用这种模式发出请求时,后量子算法会被用于密钥交换机制,以加密保护你的请求。在密钥交换机制中使用,以加密保护您的数据。数据传输到 Key Protect 服务。

    后量子模式支持具有以下参数的 Kyber 算法 集(密钥大小):

    • kyber512
    • kyber768
    • kyber1024

根据建议使用 Kyber 算法 IBM Cloud. 要了解有关算法及其关联密钥大小的更多信息,请参阅 CRYSTALS-Kyber

启用量子后终端

IBM® Key Protect for IBM Cloud® 已启用后量子 两个区域的端点:和。US-South EU-GB 请参阅下表 表,以确定向 服务发送请求时要使用哪些启用了后量子功能的端点。IBM® Key Protect for IBM Cloud® 服务时使用哪个启用了后量子功能的端点。

列出启用量子后的公共端点,以便通过 IBM Cloud 的公共网络与 Key Protect API 交互
区域 公共端点
达拉斯 qsc.us-south.kms.cloud.ibm.com
伦敦 qsc.eu-gb.kms.cloud.ibm.com
法兰克福 qsc.eu-de.kms.cloud.ibm.com
列出启用量子后的专用端点,以便通过 IBM Cloud 的专用网络与 Key Protect API 交互
区域 专用端点
达拉斯 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 配置后量子 TLS

先决条件

在设置应用程序以使用 SDK 之前,请执行以下步骤:

  1. 下载 开放后量子软件栈(OQSSA)脚本。 该脚本会构建并安装所有必要的依赖项 (liboqsopenssllibcurl) 安装到您的 HOME 目录文件夹中。($HOME/opt/oqssa/)。

  2. 确保安装了构建 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"
    
  3. 安装并验证必备软件包后,执行用于构建和安装 OQSSA 的脚本:

    bash build-oqssa.sh
    
  4. 运行以下命令设置量子库路径:

    export LD_LIBRARY_PATH=$HOME/opt/oqssa/lib:$LD_LIBRARY_PATH
    

使用应用程序配置 Key Protect SDK

安装必备软件后,请遵循以下步骤来配置 带有应用程序的 Key Protect SDK:

  1. 通过运行以下命令,浏览到 go 客户机所在的文件夹:

        cd $HOME/keyprotect-go-client
    
  2. 在初始化中设置 Kyber 算法 应用程序代码中的 Key Protect 客户机。 如果未指定算法,那么应用程序将缺省使用 p384_kyber768 算法。 使用以下代码作为算法配置的示例:

    qscConfig := kp.ClientQSCConfig{
        AlgorithmID: kp.KP_QSC_ALGO_p384_KYBER768,
    }
    
  3. 运行以下命令编译 Key Protect SDK 运行以下命令编译

    LD_LIBRARY_PATH=$HOME/opt/oqssa/lib PKG_CONFIG_PATH=$HOME/opt/oqssa/lib/pkgconfig go build –-tags quantum
    

通过 CURL 使用启用了后量子技术的 Key Protect 端点

先决条件

在向以下用户发出 curl 请求之前 Key Protect 后启用量子终端、请按照以下步骤操作

  1. 下载 开放后量子软件栈(OQSSA)脚本。 此脚本将构建所有必需的依赖关系 (liboqsopenssllibcurl) 并将其安装到 HOME 目录文件夹 ($HOME/opt/oqssa/) 中。

  2. 确保安装了构建 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"
    
  3. 安装并验证先决条件软件包后,执行脚本以 编译并安装 OQSSA:

    bash build-oqssa.sh
    

向启用量子后的端点发送 CURL 请求

当通过 curl 请求时,必须具体明确,以确保请求 成功通过。 下表列出了提出量子后 请求时所需的标记。curl 请求时所需的标志。

描述了向 Key Protect 服务发出 curl 请求所需的标志。
标志 描述
-tlsv1.3 此标志强制实施 curl 连接到 TLS v1.3 服务器。
--curves 该标记用于指定 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 算法 需要。 密钥大小中的 kyber 算法,将用于保护传输中的数据。

可接受的算法 + 密钥大小: kyber512,kyber768,kyber1024,p256_kyber512,p384_kyber768和 p521_kyber1024。
区域 需要。 地区缩写,如 us-south 或 eu-gb,表示 Key Protect 实例所在的地理区域。

更多信息,请参阅 区域服务端点
IAM_token 需要。 您的 IBM Cloud 访问令牌。 在 curl 请求中包含 IAM 令牌的全部内容,包括承载器值。

更多信息,请参阅 检索访问令牌
instance_ID 需要。 分配给 Key Protect 服务实例的唯一标识符。

更多信息,请参阅 检索实例 ID