微软宣布更新SymCrypt加密库,新增对PQC算法的支持
2024年9月9日,微软(Microsoft)在其博客中宣布,已开始在其开源核心加密库SymCrypt中引入后量子算法的支持。目前,微软已经发布了包含ML-KEM和XMSS算法的SymCrypt更新,并计划在接下来的几个月内推出其他算法。微软表示,这是他们为迎接量子时代并帮助客户防范未来量子威胁所迈出的重要一步。
SymCrypt是什么?
SymCrypt是Microsoft的主要加密库,用于Azure、Microsoft 365、Windows 11、Windows 10、Windows Server 2025、Windows Server 2022、Azure Stack HCI和 Azure Linux等产品和服务。这些产品和服务使用SymCrypt为电子邮件安全、云存储、Web浏览、远程访问和设备管理等场景提供加密安全。
SymCrypt通常使用对称和非对称算法为加密、解密、签名、验证、哈希和密钥交换提供一致的接口。该库于2006年开始提供操作和算法,开发人员可以使用它们在他们创建的应用中安全地实现安全加密、解密、签名、验证、散列和密钥交换。它旨在实现跨多个平台和架构的快速、安全和可移植性。在Windows操作系统中,SymCrypt加密库嵌入在经过多次FIPS 140验证的加密基元库 (bcryptprimitives.dll和cng.sys) 。SymCrypt还作为基于Linux的操作系统的加密模块经过了FIPS 140验证。
PQC算法
2024年8月13日,NIST 发布首批 3 个最终确定的后量子加密标准:
- FIPS 203,基于模块晶格的密钥封装机制标准
- FIPS 204,基于模块点阵的数字签名标准
- FIPS 205,基于哈希的无状态数字签名标准
其中:
- FIPS 203,旨在作为通用加密的主要标准。它的优点之一是双方可以轻松交换的相对较小的加密密钥,以及它的运行速度。该标准基于 CRYSTALS-Kyber 算法,该算法已更名为 ML-KEM,是 Module-Lattice-Based Key-Encapsulation Mechanism 的缩写。
- FIPS 204,旨在作为保护数字签名的主要标准。该标准使用 CRYSTALS-Dilithium 算法,该算法已更名为 ML-DSA,即 Module-Lattice-Based Digital Signature Algorithm 的缩写。
- FIPS 205,也是为数字签名设计的。该标准采用 Sphincs+ 算法,该算法已更名为 SLH-DSA,即无状态基于哈希的数字签名算法的缩写。该标准基于与 ML-DSA 不同的数学方法,旨在作为 ML-DSA 被证明易受攻击的备用方法。
将PQC标准引入SymCrypt
微软表示,随着NIST发布首批后量子加密标准,首先已经将ML-KEM(FIPS 203)算法引入 SymCrypt。
在接下来的几个月内,微软还将集成基于格的数字签名方案 ML-DSA(FIPS 204)和基于无状态哈希的签名方案 SLH-DSA(FIPS 205)。
此外,NIST于2020年发布了SP 800-208指南,推荐具有状态哈希的签名方案,这些方案能够抵御量子计算威胁。NIST指出,这类算法并不适用于所有场景,因为其安全性依赖于对状态的严格管理,但在固件签名等特定应用中极为有效。
根据该建议,微软已将扩展的Merkle签名方案 (XMSS) 添加至SymCrypt,并计划在不久后引入 Leighton-Micali 签名方案(LMS)及其他算法。
“PQC算法【抗量子密码算法】经过NIST精心挑选,具备高安全性、高性能以及良好的兼容性。这些算法经过优化,提升了速度和效率,并通过了严格的安全性和稳健性测试。多个行业标准组织正在积极推动这些算法的应用,以确保其兼容现有标准和协议,如传输层安全性(TLS)、安全套接字外壳(SSH)和互联网协议安全性(IPSec)。同时,它们还能够与经典算法,如RSA、椭圆曲线Diffie-Hellman(ECDH)和椭圆曲线数字签名算法(ECDSA)在混合模式下共存。”微软强调,随着PQC标准的不断发展,他们将进一步将其他算法引入SymCrypt,以确保合规性、安全性和兼容性。
在Windows平台上,建议通过Cryptography API: Next Generation (CNG)来使用SymCrypt,而在Linux平台上,用户可以选择直接调用SymCrypt API,或通过OpenSSL的SymCrypt引擎(SCOSSL)或SymCrypt Rust Wrapper来使用。
在接下来的几个月内,这些接口将增加对PQC算法的支持,使客户能够在各自的环境和应用程序中进行测试和实验。
使用PQC算法保护TLS通信是一个快速发展的领域。虽然NIST算法的最终确定标志着这一领域的重大进展,但要实现广泛应用,仍需完成量子安全密钥交换和量子安全签名认证这两个关键标准。
微软表示,他们正在与IETF密切合作,开发并标准化这些关键标准,适用于TLS和其他IETF协议。
随着这些标准的最终敲定,微软将在Windows TLS堆栈(Schannel)和Linux上的OpenSSL SymCrypt引擎中提供这些标准。
此外,微软首席产品经理Aabha Thipsay强调:“PQC 算法为密码学的未来提供了一种有希望的解决方案,但它们也有一些缺点。例如,与传统算法相比,这些算法通常需要更大的密钥大小、更长的计算时间和更多的带宽。因此,在实际应用中实施PQC需要仔细优化并与现有系统和标准集成。”
未来展望
微软表示,PQC算法仍处于较新的阶段,因此不应将第一代PQC算法视为最终解决方案,而应把它视作一个不断发展的领域。
这突显了“加密敏捷性”的重要性,即设计能够适应不同算法的解决方案,或随着PQC标准的发展而升级到未来算法。
微软提倡构建加密敏捷的解决方案,并推广使用混合PQC操作模式的解决方案。“随着PQC算法和标准的成熟,我们预计将逐步转向纯PQC部署。”
“为底层加密引擎添加后量子算法支持是迈向量子安全的第一步。随着我们在更多系统组件和应用程序中启用PQC支持,我们将能够实现受PQC保护的端到端服务场景,并让客户在其环境和应用程序中进行试验和应用。”
同时,微软表示,向PQC的过渡是一个复杂而长期的过程,需要认真规划和关注。“我们建议组织首先创建正在使用的加密资产清单,以更好地了解现状并制定基于风险的PQC过渡计划。”
微软宣布更新SymCrypt加密库,新增对PQC算法的支持的更多相关文章
- 著名加密库收集 Encrypt
CryptoAPI 微软的CryptoAPI crypt32.lib,advapi32.lib,cryptui.lib #include <wincrypt.h>#include < ...
- 【Java库】如何使用优秀的加密库Jasypt来保护你的敏感信息?
1 简介 今天我们介绍一个Java库-Jasypt,全称为Java Simplified Encryption,用于加密解密.它能够让开发者用花费最小的工作而把加密集成到项目中,并且不需要对加密/解密 ...
- 12. 前后端联调 + ( proxy代理 ) + ( axios拦截器 ) + ( css Modules模块化方案 ) + ( css-loader ) + ( 非路由组件如何使用history ) + ( bodyParser,cookieParser中间件 ) + ( utility MD5加密库 ) + ( nodemon自动重启node ) + +
(1) proxy 前端的端口在:localhost:3000后端的端口在:localhost:1234所以要在webpack中配置proxy选项 (proxy是代理的意思) 在package.jso ...
- SharePoint 更新文档库文档标题(Title)字段
前言:记录下写代码中遇到的小问题,帮同事写一个批量更新文档库标题字段的小程序,本来以为就Update一下就可以了,10分钟可以搞定.结果10分钟过去了,代码写好了,执行起来不报错,调试也没问题,只是要 ...
- AES加密 C++调用Crypto++加密库 样例
这阵子写了一些数据加密的小程序,对照了好几种算法后,选择了AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES).听这名字就非常厉害的样子 预计会搜索到这 ...
- 批量自动更新SVN版本库 - Windows
开发过程中每天都要从SVN代码库里一个一个的update各个项目代码,不仅效率实在是低,也不符合程序员的"懒"精神,由于是在Windows环境做开发,自然就想到了使用bat来实现自 ...
- app 下载更新 file-downloader 文件下载库的简单介绍和使用
app 下载更新 file-downloader 文件下载库的简单介绍和使用 今天介绍一个下载库:file-downloader 文件下载库 说明: * 本文内容来自原 file-downloader ...
- Node.js_密码明文_密文_加密库_sha1
加密库 sha1 加密模块,能够将指定 明文 加密成一个长度相等的 密文 let pwd = 'qwe123456'; const secret = sha1(pwd); 同样的明文,加密得到同样的密 ...
- JS 的加密库简介
作为前端,数据提交到后台之前,重要的数据要进行加密一下,虽然已经有 https 等技术,但是增加一道前端的加密还是相对更安全的.虽然,前端的加密很容破解,但是有总比没有强. 尤其是涉及到用户名和密码, ...
- 【JS加密库】SJCL :斯坦福大学JS加密库
斯坦福大学Javascript加密库简称SJCL,是一个由斯坦福大学计算机安全实验室创立的项目,旨在创建一个安全.快速.短小精悍.易使用.跨浏览器的JavaScript加密库. 斯坦福大学下载地址:h ...
随机推荐
- springboot将文件处理成压缩文件
前言 在工作我们经常会出现有多个文件,为了节省资源会将多个文件放在一起进行压缩处理:为了让大家进一步了解我先将springboot处理的方法总结如下,有不到之处敬请大家批评指正! 一.文件准备: ht ...
- 高性能计算-openmp编程-(探究 for/collapse)(11)
1. 目标:探究嵌套循环 for 和 collapse 编程 2. 内容 (1). for 并行区默认对最近外层的循环控制变量私有,并对其划分并行,不必指明 private,内层循环体入口的循环控制变 ...
- 方法的虚分派(virtual dispatch)和方法表(method table)
Java方法调用的虚分派 JUN 2ND, 2013 | COMMENTS 本文通过介绍 Java 方法调用的虚分派,来加深对 Java 多态实现的理解.需要预先理解 Java 字节码和 JVM 的基 ...
- golang之go-spew
github: https://github.com/davecgh/go-spew 我们在使用Golang(Go语言)开发的过程中,会通过经常通过调试的方式查找问题的原因,解决问题,尤其是当遇到一个 ...
- laravel之任务调度(定时任务)
crontab指令线性增长.毕竟crontab是一项系统级的配置,在业务中我们为了节约机器,往往对于量不大的多个项目会放在同一台服务器上,crontab指令多了就容易管理混乱,并且功能也不够灵活强大( ...
- Laravel环境搭建之HomeStead
开发laravel,官方推荐使用HomeStead虚拟环境进行搭建. Linux: 1. 安装virtualbox(https://www.virtualbox.org/) 1)可以找到可供下载的镜像 ...
- npm depcheck 包依赖检查
1.概述 在前端开发时,如果经常会遇到一些依赖的问题,比如一个项目,之前在 package.json安装了某个包,后来又删除了这个包,但是node_modules 包还是在的,但是我们把代码给其他人安 ...
- VUE3 使用资源路径加载
1.使用场景 有些情况下,我需要使用组件路径动态的方式加载组件. 2.实现方法 import { defineAsyncComponent } from 'vue'; /** * 根据view组件路径 ...
- Fiddler模拟网络超时
前情 最近在优化接口请求错误的报错提示,希望尽可能的能从提示语知道当前错误大致原因,于是我需要模拟各种错误请求的状况. 问题 网络超时是很常见的接口请求错误情况,在没有服务端配合的情况下,我需要怎样来 ...
- django admin 后台管理 新手学习步骤记录 (2)
学习使用django admin后台管理. 参考.Django基础之Admin后台数据管理_django admin_马航行的博客-CSDN博客