การเข้ารหัสแบบไฮบริดพื้นฐานจะรวมประสิทธิภาพของการเข้ารหัสแบบสมมาตรเข้ากับวิทยาการเข้ารหัสคีย์สาธารณะ (แบบอสมมาตร) เพื่อความสะดวก ทุกคนสามารถเข้ารหัสข้อมูลโดยใช้คีย์สาธารณะได้ แต่มีเพียงผู้ใช้ที่มีคีย์ส่วนตัวเท่านั้นที่จะถอดรหัสข้อมูลได้
สำหรับการเข้ารหัสแบบผสม ผู้ส่งจะสร้างคีย์แบบสมมาตรใหม่เพื่อเข้ารหัสข้อความธรรมดาของแต่ละข้อความเพื่อสร้างข้อความเข้ารหัส คีย์แบบสมมาตรดังกล่าวอยู่ภายในคีย์สาธารณะของผู้รับ สำหรับการถอดรหัสแบบผสม ผู้รับจะถอดรหัสคีย์แบบสมมาตรแล้วนำไปใช้ในการถอดรหัสข้อความเข้ารหัสเพื่อกู้คืนข้อความธรรมดาต้นฉบับ ดูรูปแบบสายการเข้ารหัสแบบผสม Tink สำหรับรายละเอียดเกี่ยวกับวิธีจัดเก็บหรือส่งข้อความที่เข้ารหัสพร้อมกับการห่อหุ้มคีย์
การเข้ารหัสแบบผสมมีคุณสมบัติดังต่อไปนี้
- ความลับ: ไม่มีใครได้รับข้อมูลเกี่ยวกับข้อความธรรมดาที่เข้ารหัส (ยกเว้นความยาว) จนกว่าจะมีสิทธิ์เข้าถึงคีย์ส่วนตัว
- ความไม่สมมาตร: การเข้ารหัสข้อความเข้ารหัสสามารถทำได้โดยใช้คีย์สาธารณะ แต่ต้องใช้คีย์ส่วนตัวในการถอดรหัส
- การสุ่ม: การเข้ารหัสจะเป็นแบบสุ่ม ข้อความ 2 ข้อความที่มีข้อความธรรมดาเดียวกันจะไม่แสดงข้อความเข้ารหัสเดียวกัน วิธีนี้จะป้องกันไม่ให้ผู้โจมตีรู้ว่าข้อความเข้ารหัสใดตรงกับข้อความธรรมดาที่ระบุ
การเข้ารหัสแบบไฮบริดจะแสดงเป็น Tink เป็นคู่ของรูปแบบพื้นฐาน ดังนี้
- HybridEncrypt สำหรับการเข้ารหัส
- HybridDecrypt สำหรับการถอดรหัส
พารามิเตอร์ข้อมูลบริบท
นอกเหนือจากข้อความธรรมดาแล้ว การเข้ารหัสแบบผสมยังยอมรับพารามิเตอร์เพิ่มเติม context_info
ซึ่งปกติแล้วจะเป็นข้อมูลสาธารณะโดยนัยจากบริบท แต่ควรเชื่อมโยงกับข้อความเข้ารหัสที่ได้ ซึ่งหมายความว่าข้อความเข้ารหัสจะให้คุณยืนยันความถูกต้องของข้อมูลบริบทได้ แต่เราไม่มีการรับประกันความเข้มงวดหรือความน่าเชื่อถือของข้อมูล ข้อมูลบริบทจริงอาจว่างเปล่าหรือไม่มีข้อมูลก็ได้ แต่เพื่อให้ถอดรหัสข้อความเข้ารหัสที่ได้ได้อย่างถูกต้อง คุณจะต้องระบุค่าข้อมูลบริบทเดียวกันสำหรับการถอดรหัส
การใช้การเข้ารหัสแบบผสมอย่างเป็นรูปธรรมสามารถเชื่อมโยงข้อมูลบริบทกับข้อความเข้ารหัสได้หลายวิธี ตัวอย่างเช่น
- ใช้
context_info
เป็นอินพุตข้อมูลที่เกี่ยวข้องสำหรับการเข้ารหัสแบบสมมาตร AEAD (cf. RFC 5116) - ใช้
context_info
เป็นอินพุต "CtxInfo" สำหรับ HKDF (หากการใช้งานใช้ HKDF เป็นฟังก์ชันการดึงคีย์ cf. RFC 5869)
เลือกประเภทคีย์
เราขอแนะนำให้ใช้ประเภทคีย์ DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
สำหรับกรณีการใช้งานส่วนใหญ่ คีย์ประเภทนี้ใช้มาตรฐานการเข้ารหัสคีย์สาธารณะ (HPKE) แบบไฮบริดตามที่ระบุไว้ใน RFC 9180 HPKE ประกอบด้วยกลไกการห่อหุ้มคีย์ (KEM) ฟังก์ชันการสืบทอดคีย์ (KDF) และการเข้ารหัสที่ผ่านการตรวจสอบสิทธิ์ด้วยอัลกอริทึมข้อมูลที่เกี่ยวข้อง (AEAD)
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
ทำงานอย่างใดอย่างหนึ่งโดยเฉพาะ
- KEM: Diffie–Hellman over Curve25519 กับ HKDF-SHA-256 เพื่อสืบสานความลับ ที่มีร่วมกัน
- KDF: HKDF-SHA-256 เพื่อดูบริบทของผู้ส่งและผู้รับ
- AEAD: AES-256-GCM ที่มี Nonce ขนาด 12 ไบต์ที่สร้างขึ้นตามมาตรฐาน HPKE
ประเภทคีย์ HPKE อื่นๆ ที่รองรับรวมถึงแต่ไม่จำกัดเพียงรายการต่อไปนี้
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305
DHKEM_P256_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_P521_HKDF_SHA512_HKDF_SHA512_AES_256_GCM
โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกอัลกอริทึมสำหรับ KEM, KDF และ AEAD ที่ RFC 9180
ถึงแม้จะไม่แนะนำ แต่ Tink ก็ยังรองรับ ECIES บางรูปแบบตามที่อธิบายไว้ในมาตรฐาน ISO 18033-2 ของ Victor Shoup อีกด้วย ประเภทคีย์ ECIES ที่รองรับบางส่วนมีดังนี้
ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
คุณสมบัติขั้นต่ำ
- ข้อความธรรมดาและข้อมูลบริบทมีความยาวตามที่ต้องการได้ (ภายในช่วง 0..232 ไบต์)
- ป้องกันการโจมตีผ่านข้อความเข้ารหัสที่เลือกแบบปรับเปลี่ยนได้
- การรักษาความปลอดภัย 128 บิตสำหรับรูปแบบเส้นโค้งวงรี
ตัวอย่าง Use Case
ดู ฉันต้องการแลกเปลี่ยนข้อมูล