作者:十只北羊鱼 | 来源:互联网 | 2023-07-22 12:28
我们需要用量子鲁棒的方法替换所有现有的公钥方法。Cloudflare 是推动加密方法最前沿的一家公司。事实上,他们的 CIRCL 库已经包含 Kyber、SIDH 和 Frodo:Kyber 密钥交换
我们需要用量子鲁棒的方法替换所有现有的公钥方法。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 将是我们在互联网上看到的最根本的变化之一。
Source:https://medium.com/asecuritysite-when-bob-met-alice/experimenting-with-post-quantum-cryptography-the-greatest-change-in-the-internet-has-started-67a03f8f39d9
关于
ChinaDeFi - ChinaDeFi.com 是一个研究驱动的 DeFi 创新组织,同时我们也是区块链开发团队。每天从全球超过 500 个优质信息源的近 900 篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
Layer 2 道友 - 欢迎对 Layer 2 感兴趣的区块链技术爱好者、研究分析人与 Gavin(微信: chinadefi)联系,共同探讨 Layer 2 带来的落地机遇。敬请关注我们的微信公众号 “去中心化金融社区”。