物理学的不断进步预示着大规模量子计算机的最终构建。这种未来的设备仍能解密当今的通信(HNDL攻击),让任何人都能解密当今传输的数据。
量子计算机未来可能破解传统非对称加密算法(如RSA、ECC)。抗量子算法(如ML-KEM-768)通过数学难题(如格密码、哈希函数)设计,目标是保护长期密钥和会话密钥的机密性,即使量子计算机出现也无法解密历史数据。
目前,openssl对于该密钥交换机制没有得到支持,需要引入第三方oqs-provider (将后量子加密算法集成到 OpenSSL 中的库) ,铜锁/Tongsuos 是现代密码学算法和安全通信协议的开源基础密码库,并且支持国密算法,本站之前也完成了国际/国密算法的改造,所以在安装好oqs-provider后引入到tongsuo即可。(注意:如果你引入了这个第三方库, tongsuo 的GM/T 0028《密码模块安全技术要求》的"软件密码模块安全二级"资质可能无效)
本次改造仅为实验性质,并不推荐在生产环境中使用,因为该库的开发者明确说明:WE DO NOT CURRENTLY RECOMMEND RELYING ON THIS SOFTWARE IN A PRODUCTION ENVIRONMENT OR TO PROTECT ANY SENSITIVE DATA. This software is meant to help with research and prototyping. While we make a best-effort approach to avoid security bugs, this library has not received the level of auditing and analysis that would be necessary to rely on it for high security use.
我们目前不建议在生产环境中依赖该软件或保护任何敏感数据。该软件旨在帮助研究和原型开发。虽然我们会尽最大努力避免安全漏洞,但该库尚未接受必要的审计和分析,因此无法将其用于高安全性用途。
如果你只是想单独体验X25519MLKEM768,你可以直接将oqs-provider 引入到openssl 3.0.0以上版本的cnf配置即可。tongsuo组件不是必须的。
下面我们来看看怎么安装oqs-provider,你需要准备如下配置:
操作系统:openEuler 24.03 LTS SP1 TLS
证书:ECC 算法签发的X509格式证书 (acme.sh自动签发)
密码库:oqs-provider (将后量子加密算法集成到 OpenSSL 中的库)
浏览器:Chrome 最新版本 版本 132.0.6834.111(正式版本) (64 位)以上
安装必要的编译库
dnf install git cmake ninja-build gcc pcre-devel zlib-devel openssl-devel -y
克隆oqs的源代码
git clone https://github.com/open-quantum-safe/oqs-provider.git
执行编译环境,(注意:OPENSSL_ROOT_DIR路径是你tongsuo或者openssl安装的路径,通过执行 openssl version -d 查看)
export CFLAGS="-fPIC" export OPENSSL_ROOT_DIR=/etc/pki/tls export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH bash scripts/fullbuild.sh cmake --install _build
执行到100%即可完成安装,(注意:记录好.so文件安装目录)
随后编辑openssl的cnf配置文件(一般是在tongsuo或者openssl安装的路径下有个oepnssl.cnf)
我们需要编辑62/72行代码,增加如下配置,其中module就是上图中.so文件路径
oqs = oqs_sect activate = 1 [oqs_sect] module = /XXXX/oqsprovider.so activate = 1
接下来我们需要安装或者重装tengine/nginx到最新的版本,下面是我tengine的配置
./configure --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_sub_module \ --with-http_auth_request_module \ --with-http_v3_module \ --with-http_v2_module \ --with-http_ssl_module \ --with-pcre --with-stream \ --with-stream_ssl_module \ --user=nginx --group=nginx
安装好tengine后,我们就能在conf文件内引入相应的算法了。核心点在ssl_ecdh_curve,配置X25519:X25519MLKEM768;(为了兼容部分国产浏览器,请一定要配置X25519否则低版本、
Chrome内核的浏览器将无法打开网站)
server { listen 443 ssl; server_name yujunhong.cn; ssl_protocols TLSv1.2 TLSv1.3; enable_ntls on; ssl_certificate fullchain.cer; ssl_certificate_key yujunhong.cn.key; ssl_sign_certificate yujunhong.cn_sm2_sign.cer; ssl_sign_certificate_key yujunhong.cn_sm2_sign.key; ssl_enc_certificate yujunhong.cn_sm2_encrypt.cer; ssl_enc_certificate_key yujunhong.cn_sm2_encrypt.key; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; ssl_ecdh_curve X25519:X25519MLKEM768; ssl_ciphers ECC-SM2-SM4-CBC-SM3:ECC-SM2-SM4-GCM-SM3:ECDHE-SM2-SM4-CBC-SM3:ECDHE-SM2-SM4-GCM-SM3: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA: ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384: AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!RC4:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS; } ......
重载nginx后,我们使用Chrome 已是最新版本 版本 135.0.7049.115(正式版本) (64 位)来访问我的网站,可以发现,已经支持了相应的密钥交换算法!
当然,在低版本内核的浏览器中,浏览器选择支持X25519经典算法
本站还是继续支持国密算法访问。
从X25519MLKEM768开始部署,既是对当前加密体系中最脆弱环节的针对性加固,也是平衡安全性与兼容性的策略选择。通过混合机制和分阶段实施,能够在抵御量子威胁的同时,逐步推动整个生态系统的升级。