TLS1.3的后量子算法集成

简介: 本实验带您了解TLS1.3的后量子算法集成。

TLS1.3的后量子算法集成

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

在实验室页面,单击创建资源。

(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. 实验原理

背景知识

密钥封装

由于公钥机密的性能远远慢于私钥加密,在实际使用中我们一般会采用一种公钥加密和私钥加密同时使用的混合此方法的基本思想是,发送方使用公钥加密来获取共享密钥k,再使用私钥加密方案和密钥k加密消息m。接收方使用长期(非对称)私钥解密出k,在使用私钥解密恢复出原始消息方式。需要强调的是,发送方和接收方事先不用共享任何秘密信息。

更直接的实现方法是应用称为密钥封装机制(Key-Encapsulation Mechanism,KEM)的公钥密码学原语“一次性”完成这两个步骤。

绝大多数密钥封装机制采用非对称的加密方法。在密钥封装机制中,发起方运行一个封装算法产生一个会话密钥以及与之对应的密文,也称为会话密钥的封装,随后将会话密钥封装发送给接收方;接收方运行解封装算法得到与发起方相同的会话密钥。在这个过程中,要保证双方获得的会话密钥必须是一致和新鲜的,同时不会泄露会话密钥的相关信息。

格密码

由于目前使用的公钥密码体制会被量子计算机在多项式时间攻破, 为保护关键基础设施和敏感资产,需要寻找能够抵抗这种攻击的替代方案.这些研究的目标是确定无法在多项式时间内通过量子算法解决的 NP 困难问题或子问题.其中, 为传统计算机部署一套新的公钥密码系统, 以抵御量子计算机攻击的方法因为可以更好地兼容现有的计算机体系结构和网络基础设施, 便于实现抗量子算法向现有应有和协议迁移过渡, 具备较强的竞争力.这种新的密码系统被称为后量子密码 (post quantum cryptography).目前, 已经存在很多后量子密码算法, 业界认为以下五种类型的后量子算法是有希望的替代方案:

基于 hash 的 (hash-based cryptosystems)

基于编码的 (code-based cryptosystems)

基于多变量的 (multivariate cryptosystems)

基于同源的 (supersingular isogeny cryptosystems)

基于格的 (lattice-based cryptosystems)

其中, 基于格的密码算法简单并且可以高度并行化, 在安全性、公私钥尺寸、计算速度上达到了更好的平衡, 甚至可以在某些情况下表现出比传统基于数论构造的密码算法更快的计算速度.与其它几种后量子密码实现相比, 在相同的安全强度下, 它更适用于实际应用.尤其是近年来, 基于格的 LWE (learningwith errors) 问题和 RLWE (ring-LWE) 问题的密码学构造发展迅速, 被认为是最有希望被标准化的技术路线之一.

TLS1.3

TLS 运行在 TCP/IP 协议栈上, 提供端到端的身份认证, 并在它们之间建立加密的通信隧道, 提供通信数据的机密性、完整性和真实性保证.图1 展示了 TLS1.3 完整 1-RTT 握手过程, 该过程主要密包括密钥交换、发送服务器参数和认证三个部分.密钥交换用于选择 TLS 协议版本和加密的算法, 协商算法所需的参数, 这些消息是明文传输; 发送服务器参数用于协商握手协议的其它通信参数, 例如是否需要认证客户端, 支持何种应用层协议等, 这些消息是密文传输; 认证用于对服务器进行认证 (包括可选的客户端认证), 提供密钥确认和验证握手完整性, 这些消息加密传输。

首先, 客户端生成用于密钥交换的临时公私钥对, 并向服务器发送 ClientHello 消息, 该消息携带了随机数、客户端支持的协议版本、密码组件等重要信息和一些可能存在的扩展 (extension).这些扩展包括: signature_algorithms, 用于指示支持的签名算法列表; supported_groups, 用于指示支持的椭圆曲线类型; key_share, 用于表示 supported_groups 中每一个椭圆曲线的公钥信息等.

第二步, 服务器响应 ClientHello 消息, 它计算自己的临时密钥对, 确定所需的加密参数, 产生包含服务器随机数和 key_share 扩展的 ServerHello 消息并将该消息发送给客户端.其中 key_share 扩展包含了协商的椭圆曲线和服务器的公钥信息.此时, 通过组合 ClientHello 和 ServerHello 消息, 两个实体生成共享密钥, 此后的消息使用此密钥加密。

实验题目

将saber密钥封装方案以模块化的方式嵌入TLS1.3,将嵌入后量子算法的混合密钥定义为新的椭圆曲线,并保证原本的TLS协议结构不变。

在标准 TLS 1.3 中, 密钥协商使用的是椭圆曲线上的 Diffie-Hellman (ECDH) 算法.客户端发送ClientHello 请求, 并在该消息中携带 supported_groups 扩展 (extension) 来指示客户端支持的椭圆曲线类型; 同时, 客户端需要提供 key_share 扩展发送每一个其所支持的椭圆曲线对应的公钥 (椭圆曲线上的点).服务器收到 ClientHello 消息得到了 supported_groups 值并依据自己支持的椭圆曲线类型选择双方共同接受的椭圆曲线参数, 计算自己的公私钥, 提取 ClientHello 消息 key_Share 扩展中相应的值 (公钥),计算共享密钥 (此时为 handshake_traffic_key), 并用 ServerHello 消息回复客户端, 同时在 ServerHello消息的 key_share 扩展中存放其选择的椭圆曲线和相应的公钥.客户端在接收到 ServerHello 消息之后根据服务器的公钥和自己的私钥计算共享密钥 (此时为 handshake_traffic_key)。

TLS 协议规范要求服务器先使用客户端的公钥和自己的私钥生成共享密钥, 再发送自己的公钥给客户端, 这为我们使用后量子 KEM 算法提供可能.另外, TLS 1.3 中 key_share 扩展的最大容量是65 535 字节, 这一容量可以支持大部分 (混合模式) 后量子 KEM 算法的消息。

混合模式在保留协议原有公钥算法的同时加入了后量子密码算法, 并确保只要其中一个密码算法是安全的, 则组合算法就是安全的.对于混合模式密钥交换, 只要其中一个密钥交换算法未被攻破, 就可以保持混合密钥交换算法会话密钥的安全, 应用程序数据的机密性就能得到保证.对于混合模式数字签名, 只要在会话建立时其中一个数字签名方案未被攻破, 协议就可以提供安全认证。

混合模式要在协议双方协商出两个密钥交换算法, 一个是传统的 ECDH 算法, 一个是后量子 KEM 算法。

为了在 TLS 1.3 中可以使用后量子密钥交换算法或者混合模式密钥交换算法, 首先需要扩展 NamedGroup 中定义的椭圆曲线枚举值, 将它们伪装成为一个新的椭圆曲线, 并将其映射到对应的执行逻辑和处理流程。

TLS 1.3 密钥交换没有提供 KEM 风格的接口.标准 TLS 1.3 的密钥交换使用的是基于椭圆曲线上的 Diffie-Hellman 算法, 客户端和服务器在握手阶段密钥生成、公钥交换和共享秘密的计算处理完全一样.但是 NIST 提供的可用于密钥交换的后量子 KEM 算法和 DH 密钥交换完全不同, 客户端和服务器具有不同的处理逻辑和消息结构.为了让 TLS 1.3 可以处理这种接口, 需要将 KEM 伪装成为DH 椭圆曲线上的密钥交换, 适配标准 TLS 1.3 的处理逻辑和消息结构.Fizz 中用 KeyExchange 类抽象了密钥交换算法, 为了能够使用后量子 KEM, 需要在该类中增加 bool IsServer() 接口, 用于标记在 KEM形式密钥协商过程中参与者的身份 (客户端还是服务器), 使得计算过程差异化.而传统的 DH 密钥交换可以忽略这个过程 (函数体为空)。

统一了不同密钥交换算法的接口, 我们就可以将后量子密钥算法视作是对 crypto 层函数的调用, 同样的接口根据密码算法的来源可以有不同的实现.从 KeyExchange 派生出的 HybridKeyExchange 类用于实现混合模式密钥交换, 利用组合设计模式 (composition design pattern), 该类一方面可以重用原有代码,简化实现, 另一方面可以隐藏混合方案的实现细节, 让混合方案和非混合方案, 经典算法和后量子 KEM算法都可以具有相同的调用接口.这种抽象、继承、派生和组合的设计与实现把所有关于算法的处理逻辑都放置在 crypto 层, SSL 层仅仅需要扩展 NamedGroup 并建立 NamedGroup 枚举值和类实体之间的映射关系即可。

3. 实验内容

实验内容

准备工作(已完成)

(1)安装openssl。

(2)安装开源库 liboqs, 该库已经提供了使用后量子密码算法的统一接口。

(3)(可选)Facebook 的 TLS 1.3 协议实现库 fizz。需要注意的是 fizz仅仅是 TLS 1.3 协议的实现, 它并不涉及密码算法和证书处理的细节, 对密码算法和证书的处理依赖于其它算法库。

实验步骤

(1)添加saber方案集成到openssl中。

(2)在TLS1.3中以混合模式定义新的椭圆曲线。

实验链接:https://developer.aliyun.com/adc/scenario/aa0cd732070a4d76a45e52236cbd092d

相关文章
|
2月前
|
机器学习/深度学习 算法 Oracle
ICLR 2024:近似最优的最大损失函数量子优化算法
【2月更文挑战第27天】ICLR 2024:近似最优的最大损失函数量子优化算法
33 3
ICLR 2024:近似最优的最大损失函数量子优化算法
|
4月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
32 1
|
8月前
|
机器学习/深度学习 算法 数据挖掘
机器学习集成学习进阶Xgboost算法原理
机器学习集成学习进阶Xgboost算法原理
75 0
|
8月前
|
机器学习/深度学习 算法 JavaScript
机器学习集成学习算法2
机器学习集成学习算法2
45 0
|
14天前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
14天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
21 0
|
8月前
|
机器学习/深度学习 算法 前端开发
机器学习集成学习算法1
机器学习集成学习算法1
46 0
|
8月前
|
机器学习/深度学习 算法 数据挖掘
机器学习集成学习进阶Xgboost算法案例分析 2
机器学习集成学习进阶Xgboost算法案例分析
55 0
|
8月前
|
机器学习/深度学习 缓存 Dart
机器学习集成学习进阶Xgboost算法案例分析 1
机器学习集成学习进阶Xgboost算法案例分析
73 0
|
9月前
|
机器学习/深度学习 算法 机器人
PETS:伯克利大神Sergey Levine指导的概率集成轨迹采样算法
PETS:伯克利大神Sergey Levine指导的概率集成轨迹采样算法