
后量子密码学(PQC),也称为量子安全、量子防护或抗量子密码学,是开发和部署在经典计算机和量子计算机攻击下都很强健的密码算法。PQC旨在保护数字通信免受可能使用量子计算机破解广泛使用的密码系统(如RSA和ECC(椭圆曲线密码学))的对手的攻击。
目标很明确:识别和标准化在面对量子威胁时仍然安全的算法,同时保持效率和成本的平衡。 这项工作是紧迫的,因为量子计算机正在迅速发展,并且全世界加密系统的过渡所需的时间也相当可观。
关键词: 后量子密码学,抗量子,量子安全,量子计算,PQC,NIST,基于格的密码学,基于哈希的密码学,网络安全,迁移,量子威胁
经典密码学依赖于数学问题(如大整数分解或求解离散对数),这些问题对于传统计算机来说耗时极长。但量子计算机可以运行诸如Shor和Grover算法,这会使我们现有的许多密码系统过时。
使用量子计算机,可以:
……可能在几小时或几分钟内完成,从而立即危及全球数字通信的安全。
今天使用量子易受攻击算法加密的数据可以被对手拦截并存储。在强大的量子计算机出现后,这些数据可以被逆向解密——这对具有长保密周期的敏感政府、金融或健康信息尤其严重。
Shor算法(1994年)展示了一个量子计算机,若具有足够的量子位和相干性,可以有效地分解大整数和计算离散对数。这直接攻击了:
这两者是当前数字签名、安全通信(TLS/SSL)等技术的基础。
另一方面,Grover算法可以将暴力搜索的速度提高一倍,影响对称密钥算法(如AES),但不会使其过时。通过增加密钥长度可以减轻Grover的影响。
要点:
公钥密码学在量子时代面临生死存亡的威胁;对称密码学有所削弱,但通过加长密钥仍可行。
为了确保隐私和认证,PQC探索能够抵御经典和量子计算攻击的新数学基础。
基于格的密码学利用高维格上的问题的难度,例如:
这些问题被认为即使对于量子计算机也极难解决。基于格的方案因其:
而受到青睐。
示例:
基于哈希的密码学从安全的哈希函数构建数字签名。由于强碰撞抗性的哈希仍能抵御量子计算机(需要较大的输出),哈希签名提供了简单性和强大的基础。
示例:
这些依赖于解码通用线性码的难度,该问题尚未被经典或量子算法解决。基于编码的方案自20世纪70年代以来就已存在。
基于在有限域上求解多元二次方程系统的困难性。
认识到标准化的紧迫性,美国国家标准与技术研究院 (NIST) 启动了一项耗时多年的全球比赛,以选择适合全球部署的抗量子密码算法。该进程始于2017年,目前正在进行中。
2022年7月5日,NIST宣布了四个商业级的抗量子算法进入标准化:
这四种算法来源于结构化的格和哈希函数,每种都代表了已知能够抵御量子攻击的强大安全基础。
总结:
算法如BIKE、Classic McEliece和SIKE仍在研究中,未来可能标准化。
PQC的采用已经在敏感行业和认识到“现在窃取,未来解密”威胁的政府中进行。
抗量子通信包括使用PQC算法来保护:
最新版本的TLS正在测试PQC“混合”模式——结合经典和量子安全的密钥交换。例如:
Cloudflare、Google和Microsoft均已进行混合模式在TLS握手中的真实世界测试 [1][2]。
迁移是一个重大工程,需要细致的计划。
在过渡之前,组织应映射所有使用的密码算法实例:
自动化工具可以扫描网络和代码库中使用的RSA、DSA和ECC(量子易受攻击)情况。
nmap 扫描密码算法:# 扫描Web服务器以支持的SSL/TLS密码和密钥交换方法
nmap -p 443 --script ssl-enum-ciphers example.com
假设您想从扫描结果中提取RSA/ECC使用情况。
nmap -p 443 --script ssl-enum-ciphers example.com \
| grep -E "TLS_RSA|TLS_ECDHE" > weak_tls.txt
import re
with open('nmap_output.txt') as f:
for line in f:
if re.search(r'TLS_(RSA|ECDHE)', line):
print("量子易受攻击的密码:", line.strip())
采用需要升级库、固件和硬件。
示例:使用pyca/cryptography和liboqs进行Python中的密钥建立(见代码样例部分)。
识别X.509证书和TLS配置中量子易受攻击的密钥交换和签名算法。
# 列出目录中的所有x509证书并检查RSA/ECC
for file in $(find /etc/ssl/certs -name "*.pem"); do
openssl x509 -in $file -text -noout | grep "Public Key Algorithm"
done
import subprocess
cert_files = ["/etc/ssl/certs/server.pem", "/etc/ssl/certs/other.pem"]
for cert in cert_files:
out = subprocess.check_output(['openssl', 'x509', '-in', cert, '-text', '-noout'])
if b'RSA' in out or b'EC' in out:
print(f"{cert}: 量子易受攻击")
for host in $(cat hosts.txt); do
nmap -p 443 --script ssl-enum-ciphers $host >> scan_results.txt
done
假设您想使用 pyca/cryptography(用于经典)和 python-oqs(用于PQC)生成一个量子安全的密钥对:
注意:
python-oqs是 开放量子安全 项目的官方绑定(liboqs)。
安装依赖:
pip install oqs
import oqs
# 列出可用的密钥封装机制 (KEMs)
print("可用的KEMs:", oqs.get_supported_KEM_algorithms())
# 使用Kyber768进行量子安全的密钥交换
with oqs.KeyEncapsulation('Kyber768') as server:
public_key = server.generate_keypair()
# 模拟客户封装
with oqs.KeyEncapsulation('Kyber768') as client:
ciphertext, shared_secret_client = client.encap_secret(public_key)
# 服务器解封
shared_secret_server = server.decap_secret(ciphertext)
assert shared_secret_client == shared_secret_server
print(f"建立的共享密钥(十六进制):{shared_secret_server.hex()}")
import oqs
# 列出数字签名算法
print("支持的签名算法:", oqs.get_supported_sig_algorithms())
# 使用Dilithium3进行签名
with oqs.Signature('Dilithium3') as signer:
public_key = signer.generate_keypair()
message = b"量子安全的信息"
signature = signer.sign(message)
# 使用公钥进行验证(由验证者进行)
with oqs.Signature('Dilithium3') as verifier:
if verifier.verify(message, signature, public_key):
print("签名验证成功,量子安全!")
后量子密码学 不是一个遥远的关注点——
它是全球IT、安全和合规团队明显而紧迫的任务。虽然能够破解RSA/ECC的实用量子计算机尚未普及,但过渡时间和全球密码系统的广泛规模意味着必须现在开始工作。
要点:
提前准备。保持灵活。今天就拥抱后量子密码学。