Tổng Vốn Hóa Thị Trường:$00
API
VI
Tối

Tìm kiếmSSI/Mag7/Meme/ETF/Coin/Chỉ số/Biểu đồ/Nghiên cứu
00:00 / 00:00
Xem
    Thị trường
    Chỉ số
    Thông Tin
    TokenBar®
    Phân tích
    Vĩ mô
    Danh sách theo dõi
Chia sẻ

X-Wing: Đóng gói khóa PQC, nhưng tốt hơn

Prof Bill Buchanan OBE
1KTừ ngữ
30/06/2025

X-Wing: Đóng gói khóa PQC, nhưng tốt hơn

Chúng tôi đang chuyển từ ECDH sang một phương pháp hậu lượng tử. Điều này liên quan đến việc sử dụng đóng gói khóa, và ở đó chúng tôi tạo ra một khóa bí mật được đóng gói bởi một khóa công khai và sau đó được giải mã bởi một khóa riêng tư liên kết. Mặc dù ML-KEM là phương pháp được lựa chọn ở thời điểm hiện tại, nhưng có khả năng chúng tôi sẽ sử dụng một phương pháp kết hợp, chẳng hạn như ML-KEM768 và X25519.

X-Wing là một giải pháp cho vấn đề này và được tối ưu hóa để sử dụng X25519 và ML-KEM-768 [here][1]:

Nhìn chung, bài báo chứng minh rằng X-Wing thể hiện mức hiệu suất tuyệt vời và an toàn nếu X25519 hoặc ML-KEM-768 an toàn. Sự khác biệt chính giữa X-Wing và tiêu chuẩn X25519Kyber768 [here] là:

  • Sử dụng phiên bản cuối cùng của ML-KEM-768.
  • Tạo ra các hàm băm của các bí mật được chia sẻ, có thể được sử dụng ngoài mã hóa kết hợp.
  • Một bộ kết hợp đơn giản hơn làm phẳng DHKEM(X25519) thành một hàm băm.
  • Không băm bản mã ML-KEM-768.
  • Hiện tại, X-Wing đang được IETF soạn thảo [here]:

    Các bước chính là:

    sk,pk= ML-KEM-768.KeyGen_internal(z): Tạo một cặp khóa xác định từ một giá trị seed 32 byte (z).

    ss,ct = ML-KEM-768.Encaps(pk, w): Đóng gói một bí mật (ss) vào bản mã (ct) bằng cách sử dụng khóa công khai (pk) và một seed (w). Bản mã là xác định.

    ss2= ML-KEM-768.Decap(ct sk): Khôi phục một bí mật được chia sẻ (ss2) từ một bản mã (ct) bằng cách sử dụng khóa riêng tư (sk).

    Điều này có thể được minh họa bằng:

    Mã Golang cho việc này là [here]:


    package main

    import (

    "fmt"
    "math/rand"
    "github.com/cloudflare/circl/kem/xwing"
    )


    func main() {


    seed := make([]byte, 32)
    rand.Read(seed)

    sk, pk := xwing.DeriveKeyPairPacked(seed)

    eseed := make([]byte, 64)
    rand.Read(eseed)

    ss, ct, _ :=xwing.Encapsulate(pk, eseed)

    ss2 := xwing.Decapsulate(ct, sk)


    fmt.Printf("Seed for keys %x\n\n", seed)
    fmt.Printf("Seed for encapsulation %x\n\n", eseed)
    fmt.Printf("PK (first 100 bytes) %.200x (size=%d bytes)\n\n", pk,len(pk))
    fmt.Printf("SK %x (size=%d bytes)\n\n", sk,len(sk))

    fmt.Printf("Cipher (first 100 bytes): %.200x (size=%d bytes)\n\n", ct,len(ct))

    fmt.Printf("Shared secret (generated) %x\n\n", ss)
    fmt.Printf("Shared secret (decapsulated) %x\n\n", ss2)


    }

    và một mẫu chạy là [here]:

    Seed for keys 443d6bf9fd37c9b3fbcb641206216662bbe188da987b87086e28e10f5899a1ee

    Seed for encapsulation d429878feb6adbe4d20209c8dff8cb83ede58ef1b4c65ceb27a06d57baf8746a1faba4a85d020361e22956dc89251c6ed79b925618d89430122c55c97968d306

    PK (first 100 bytes) 19dc2f25a48dd4f8520a97cbf0e48e805428a00364cbb63f06379a45
    b53ba3b662029c8af5f12ba7a5bd68bb62971657cf33466ad295ca7557baf951486711e204c7
    1e65622dc4761c5c723777c10b7051ed40bb6b23c46aea2a5f579e00938d1c2722268b2ee6847
    14658b453b4bce7a844055c31ac962488445646bc91a67ac96c42ca304a70a719873836c2fe9
    2422a2b564e1387cf622e51a1360f13c500c5c9bed92422627d7086462cc26a8d744dc330323
    6549bb32a3ee0492a62d4239e73024ab8b3374b (size=1216 bytes)

    SK 443d6bf9fd37c9b3fbcb641206216662bbe188da987b87086e28e10f5899a1ee (size=32 bytes)

    Cipher (first 100 bytes): d0c62d70fc6e7ac9058edf6be7017df61a09d98146bee2f9469
    76a45a3e7be57f4be5896139fd9ebb99cec7febad80ef4598297bd5a6b617a3aae07448e6083
    e02820dcbcca0731ff5db2533894fe3629ad7642589eba33e5fe92535291d4c912230ff009d
    f1c4442b16f3e8bc18bccb1f1baa23af3992a037d4aafb36a637653c7caf711eb09e33cfbbad
    4633ffd3eb6f5b38b156d3a17615a371cf1d9607ef9fc5b7b624fc814636f88499230c1f9970
    f4fbce0584b07680340d53c47ba922d18d69a2cf4338e9 (size=1120 bytes)

    Shared secret (generated) 1be72faba7b4a6eea842d56e1d63229abdcb212b98defb46735a45aaaf81f4db

    Shared secret (decapsulated) 1be72faba7b4a6eea842d56e1d63229abdcb212b98defb46735a45aaaf81f4db

    Trong trường hợp này, chúng ta có thể thấy rằng khóa công khai dài 1.216 bytes, bản mã dài 1.120 bytes và khóa riêng tư chỉ dài 32 bytes (vì nó được băm). Thông thường, trong ML-768, khóa công khai dài 1.184 bytes, khóa riêng tư dài 2.400 bytes và bản mã dài 1.088 bytes. Các kích thước khóa này được xác định trong bài báo với [1]:

    Tài liệu tham khảo

    [1] Barbosa, M., Connolly, D., Duarte, J. D., Kaiser, A., Schwabe, P., Varner, K., & Westerbaan, B. (2024). X-wing: The hybrid kem you’ve been looking for. Cryptology ePrint Archive.

    10s Hiểu rõ thị trường crypto
    Điều khoảnChính Sách Bảo Mật của chúng tôiSách trắngXác minh chính thứcCookieBlog
    sha512-gmb+mMXJiXiv+eWvJ2SAkPYdcx2jn05V/UFSemmQN07Xzi5pn0QhnS09TkRj2IZm/UnUmYV4tRTVwvHiHwY2BQ==
    sha512-kYWj302xPe4RCV/dCeCy7bQu1jhBWhkeFeDJid4V8+5qSzhayXq80dsq8c+0s7YFQKiUUIWvHNzduvFJAPANWA==