feat(encryption): HPKE for JWE (draft-ietf-jose-hpke-encrypt, awaiting AD go-ahead)
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
Issue này chưa được đánh giá.
Mô tả
Context
draft-ietf-jose-hpke-encrypt (-22, July 2026) is in "Waiting for AD Go-Ahead" — the last step before the RFC Editor queue, so an RFC number is a matter of months. It brings HPKE (RFC 9180) to JWE with fourteen alg values and two header parameters:
- Integrated encryption (HPKE does everything, no
enc):HPKE-0…HPKE-7. - Key encryption (HPKE wraps the CEK,
encas usual):HPKE-0-KE,-1-KE,-2-KE,-3-KE,-5-KE,-7-KE. - Suites:
0DHKEM(P-256)/HKDF-SHA256/AES-128-GCM,1P-384/HKDF-SHA384/AES-256-GCM,2P-521/HKDF-SHA512/AES-256-GCM,3X25519/HKDF-SHA256/AES-128-GCM,4X25519/HKDF-SHA256/ChaCha20-Poly1305,5X448/HKDF-SHA512/AES-256-GCM,6X448/HKDF-SHA512/ChaCha20-Poly1305,7P-256/HKDF-SHA256/AES-256-GCM. - Headers:
ek(base64url encapsulated key) andpsk_id;algandekare bound into the HPKEinfo/ AAD as the draft specifies, which is what makes the integrated mode safe against header tampering.
It is the first key-management addition to JWE since RFC 7518, and the JOSE path to post-quantum encryption (draft-ietf-jose-hpke-pq-pqt and draft-ietf-jose-pqc-kem build on it). The library has nothing HPKE-related; there is no HPKE in PHP core.
Backend: paragonie/hpke implements RFC 9180 in PHP (DHKEM P-256, P-521, X25519, ML-KEM; HKDF-SHA256/512; AES-128/256-GCM, ChaCha20-Poly1305) but has neither P-384 nor X448 KEMs at the time of writing — suites 1, 5 and 6 would be missing. To decide: depend on it and contribute the two KEMs upstream, or carry a minimal HPKE (base mode + PSK is all the draft needs) inside the library, which has all the primitives (ECDH through AbstractECDH, HKDF in ConcatKDF's neighbourhood, AES-GCM and ChaCha20 content encryption). cose-lib does not implement COSE-HPKE either, so a shared spomky-labs/hpke would serve both.
This issue is opened now so the design and the backend question are settled when the RFC lands; the implementation is not to be merged before the RFC number exists (identifiers can still change in AUTH48).
Scope
- Integrated mode: a new
Jose\Component\Encryption\Algorithm\KeyEncryptionkind, since HPKE replaces both key management and content encryption —JWEBuilder/JWEDecrypterneed a branch whereencis absent and the ciphertext / tag come from HPKESeal; check howRecipientSpecand the compact serializer behave with an emptyencrypted_keyand noiv/tag. - Key-encryption mode: fits
KeyEncryptionas it is — HPKESealon the CEK,ekset on the per-recipient header, and multi-recipient JSON serialization works as for ECDH-ES+A*KW. ekandpsk_idknown to the header machinery;psksupplied out of band to the algorithm (constructor orJWK-shaped secret, to design).- Recipient keys are the existing
EC(P-256/384/521) andOKP(X25519 / X448 — X448 requires the OKP work of #724) JWKs; sender ephemeral key generated by the KEM. - Bundle registration for the fourteen aliases; docs (algorithm table, a dedicated HPKE page explaining integrated vs key-encryption and the PSK option); changelog.
Out of scope
- Auth / AuthPSK HPKE modes (the draft uses base and PSK only).
- Post-quantum and hybrid KEMs (draft-ietf-jose-hpke-pq-pqt, draft-ietf-jose-pqc-kem): separate issues once those drafts stabilise.
- Merging before the RFC is published.
Acceptance criteria
- The draft's Appendix test vectors (integrated and key-encryption, compact and JSON) decrypt and re-encrypt with the vector's ephemeral material.
- Round-trip for the eight integrated and six key-encryption identifiers with generated keys, single and multiple recipients where the mode allows it; ChaCha20 suites gated on ext-sodium / OpenSSL availability like
C20Ptoday. - Tampering with
algorekin the protected header makes decryption fail (theinfo/ AAD binding). - A
HPKE-*recipient in a JWE that also carriesenc(integrated mode) is rejected; aHPKE-*-KEwithoutencis rejected.
References
- draft-ietf-jose-hpke-encrypt-22 (identifiers,
ek/psk_id,infoand AAD construction, test vectors) - RFC 9180 (HPKE), RFC 7516 §4.1.2 (
enc) - paragonie/hpke — https://github.com/paragonie/hpke-php
- draft-ietf-jose-hpke-pq-pqt, draft-ietf-jose-pqc-kem (follow-ups)
- Ngôn ngữ chính
- PHP
- Star
- 954
- Fork
- 119
- Merge trung bình
- 48 phút
- Pull request đã merge (30 ngày)
- 17
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của web-token/jwt-framework
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
web-token/jwt-framework#757 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 68/100
web-token/jwt-framework#773 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 57/100
web-token/jwt-framework#772 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
web-token/jwt-framework#771 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
web-token/jwt-framework#770 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của web-token/jwt-framework
Issue tương tự
-
enhancement priority Sales
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
novalo-dev/Prestashop-MCP-Server#201 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Include flows spanning the full report time windowCó thể đã có người làm @somethingwithproof đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 77/100
Cacti/plugin_flowview#306 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug origin: upstream priority: low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
mattytap/Mattytap-Sermons#105 ·
-
priority:low type:bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
crazy-goat/workerman-bundle#1189 ·
Maintainer thường phản hồi trong vòng 1 ngày