
我们需要用量子鲁棒的方法替换所有现有的公钥方法。Cloudflare 是推动加密方法最前沿的一家公司。事实上,他们的 CIRCL 库已经包含 Kyber、SIDH 和 Frodo:
- Kyber 密钥交换。Kyber,在本例中,我们将实施 Kyber512、Kyber738 和 Kyber1024,以创建量子鲁棒的密钥交换。
- Kyber,SIKE 和混合密钥交换。 Hybrid。
- 使用Cloudflare的SIDH。SIDH。后量子密钥交换。
- SIKE 与Go的秘密共享。SIKE。具有密钥封装的后量子密钥交换。
- CSIDH Go。CSIDH。后量子密钥交换。
- SIKE密钥交换。SIKE。
- Frodo。Frodo KEM是基于误差学习问题(LWE)的。
互联网安全的一个核心部分是每次我们连接到一个网站时发生的密钥交换机制。这是客户端和服务器之间协商加密密钥的地方。遗憾的是,互联网上现有的密钥交换大多使用ECDH(椭圆曲线Diffie Hellman),并且可能被量子计算机破解。
总的来说,Cloudflare的两个核心关注点是安全性和性能。他们的核心服务旨在以快速有效的方式交付内容,以及他们将在哪里缓存内容并以比从目标网站交付的速度更快的速度交付内容。因此,转向PQC进行密钥交换对于评估其对客户网络连接的影响是很重要的。
SIKE 正在努力解决一个重大漏洞,Kyber 在可能用于 PQC 密钥交换的方法上处于领先地位。该标准将于2024年完成。目前支持的方法包括X25519Kyber512 和 X25519Kyber768。

Cloudflare现在会要求公司注册他们的网站进行测试,并同时使用Kyber和经典的X25519密钥交换方法(以保持与现有系统的兼容性)。
测试
Cloudflare现在已经使用BoringSSL库和Go运行了混合密钥交换方法的体验。该脚本添加Xyber521D00的曲线名称,并运行:
$ git clone https://github.com/cloudflare/boringssl-pq
[snip]
$ cd boringssl-pq && mkdir build && cd build && cmake .. -Gninja && ninja
[snip]
$ ./tool/bssl client -connect pq.cloudflareresearch.com -server-name pq.cloudflareresearch.com -curves **Xyber512D00**
Connecting to [2606:4700:7::a29f:8a55]:443
Connected.
Version: TLSv1.3
Resumed session: no
Cipher: TLS_AES_128_GCM_SHA256
ECDHE curve: **X25519Kyber512Draft00**
Signature algorithm: ecdsa_secp256r1_sha256
Secure renegotiation: yes
Extended master secret: yes
Next protocol negotiated:
ALPN protocol:
OCSP staple: no
SCT list: no
Early data: no
Encrypted ClientHello: no
Cert subject: CN = *.pq.cloudflareresearch.com
Cert issuer: C = US, O = Let's Encrypt, CN = E1
Go代码:
package main
import (
"crypto/tls"
"fmt"
"net/http"
)
func main() {
http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{
CurvePreferences: []tls.CurveID{tls.X25519Kyber512Draft00, tls.X25519},
CFEventHandler: func(ev tls.CFEvent) {
switch e := ev.(type) {
case tls.CFEventTLS13HRR:
fmt.Printf("HelloRetryRequest\n")
case tls.CFEventTLS13NegotiatedKEX:
switch e.KEX {
case tls.X25519Kyber512Draft00:
fmt.Printf("Used X25519Kyber512Draft00\n")
default:
fmt.Printf("Used %d\n", e.KEX)
}
}
},
}
if _, err := http.Get("https://pq.cloudflareresearch.com"); err != nil {
fmt.Println(err)
}
}
为此,Cloudflare 分叉了 Go 存储库并更新了加密部分:

结果
使用Wireshark, Cloudflare检测X25519的TLS握手(例如从客户端Hello然后到服务器Hello):

我们可以看到,密钥长度为32字节(256位)。使用Kyber,Client Hello 发送单个数据包(但比X25519大),但Server Hello 需要三个数据包(相对于X25519的两个)。这是因为服务器有更大的密钥共享:

我们可以看到,Kyber512的公钥为800字节,密码为768字节。派生的共享密钥是32字节,然后映射到X25219:

总的来说,Cloudflare发现X25519和混合方法之间有微小的性能差异。应该指出的是,混合方法不是后量子鲁棒,但将允许我们慢慢迁移我们的现有系统。最终,X25519部分将被放弃,它将是纯 Kyber。
结论
离开RSA和ECC将是我们在互联网上看到的最根本的变化之一。
关于
ChinaDeFi – ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
Layer 2道友 – 欢迎对Layer 2感兴趣的区块链技术爱好者、研究分析人与Gavin(微信: chinadefi)联系,共同探讨Layer 2带来的落地机遇。敬请关注我们的微信公众号 “去中心化金融社区”。
