การเข้ารหัสแบบผสม

การเข้ารหัสแบบไฮบริดพื้นฐานจะรวมประสิทธิภาพของการเข้ารหัสแบบสมมาตรเข้ากับวิทยาการเข้ารหัสคีย์สาธารณะ (แบบอสมมาตร) เพื่อความสะดวก ทุกคนสามารถเข้ารหัสข้อมูลโดยใช้คีย์สาธารณะได้ แต่มีเพียงผู้ใช้ที่มีคีย์ส่วนตัวเท่านั้นที่จะถอดรหัสข้อมูลได้

สำหรับการเข้ารหัสแบบผสม ผู้ส่งจะสร้างคีย์แบบสมมาตรใหม่เพื่อเข้ารหัสข้อความธรรมดาของแต่ละข้อความเพื่อสร้างข้อความเข้ารหัส คีย์แบบสมมาตรดังกล่าวอยู่ภายในคีย์สาธารณะของผู้รับ สำหรับการถอดรหัสแบบผสม ผู้รับจะถอดรหัสคีย์แบบสมมาตรแล้วนำไปใช้ในการถอดรหัสข้อความเข้ารหัสเพื่อกู้คืนข้อความธรรมดาต้นฉบับ ดูรูปแบบสายการเข้ารหัสแบบผสม 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

ดู ฉันต้องการแลกเปลี่ยนข้อมูล