Enkripsi Hybrid

Primitif Enkripsi Hybrid menggabungkan efisiensi enkripsi simetris dengan kemudahan kriptografi kunci publik (asimetris). Siapa pun dapat mengenkripsi data menggunakan kunci publik, tetapi hanya pengguna dengan kunci pribadi yang dapat mendekripsi data tersebut.

Untuk Enkripsi Hybrid, pengirim menghasilkan kunci simetris baru untuk mengenkripsi teks biasa dari setiap pesan agar menghasilkan ciphertext. Kunci simetris tersebut dienkapsulasi dengan kunci publik penerima. Untuk Dekripsi Hybrid, kunci simetris didekapsulasi oleh penerima, lalu digunakan untuk mendekripsi ciphertext guna memulihkan teks biasa yang asli. Lihat Format kabel Enkripsi Hybrid Tink untuk mengetahui detail cara menyimpan atau mengirimkan ciphertext beserta enkapsulasi kunci.

Enkripsi Hybrid memiliki properti berikut:

  • Kerahasiaan: Tidak ada yang bisa mendapatkan informasi tentang teks biasa yang dienkripsi (kecuali panjangnya), kecuali jika mereka memiliki akses ke kunci pribadi.
  • Asimetri: Mengenkripsi ciphertext dapat dilakukan dengan kunci publik, tetapi untuk dekripsi, kunci pribadi diperlukan.
  • Pengacakan: Enkripsi diacak. Dua pesan dengan teks polos yang sama tidak akan menghasilkan teks tersandi yang sama. Hal ini mencegah penyerang mengetahui teks tersandi mana yang sesuai dengan teks polos.

Enkripsi Hybrid direpresentasikan di Tink sebagai pasangan primitif:

  • HybridEncrypt untuk enkripsi
  • HybridDecrypt untuk dekripsi

Parameter info konteks

Selain teks biasa, Enkripsi Hybrid menerima parameter tambahan, context_info, yang biasanya merupakan data publik implisit dari konteks, tetapi harus terikat dengan ciphertext yang dihasilkan. Artinya, ciphertext ini memungkinkan Anda mengonfirmasi integritas info konteks, tetapi tidak ada jaminan kerahasiaan atau keasliannya. Info konteks sebenarnya boleh kosong atau null, tetapi untuk memastikan dekripsi teks tersandi yang dihasilkan benar, nilai info konteks yang sama harus diberikan untuk dekripsi.

Penerapan konkret Enkripsi Hybrid dapat mengikat info konteks ke teks cipher dalam berbagai cara, misalnya:

  • Menggunakan context_info sebagai input data terkait untuk enkripsi simetris AEAD (lihat RFC 5116).
  • Gunakan context_info sebagai input "CtxInfo" untuk HKDF (jika implementasinya menggunakan HKDF sebagai fungsi turunan kunci, lihat RFC 5869).

Pilih jenis kunci

Sebaiknya gunakan jenis kunci DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM untuk sebagian besar kasus penggunaan. Jenis kunci ini menerapkan standar Hybrid Public Key Encryption (HPKE) seperti yang ditetapkan dalam RFC 9180. HPKE terdiri dari mekanisme enkapsulasi kunci (KEM), fungsi turunan kunci (KDF), dan enkripsi terautentikasi dengan algoritma data terkait (AEAD).

DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM secara khusus menggunakan:

  • KEM: Diffie–Hellman melalui Curve25519 dengan HKDF-SHA-256 untuk mendapatkan rahasia bersama.
  • KDF: HKDF-SHA-256 untuk memperoleh konteks pengirim dan penerima.
  • AEAD: AES-256-GCM dengan nonce 12 byte yang dihasilkan sesuai dengan standar HPKE.

Jenis kunci HPKE lain yang didukung termasuk, tetapi tidak terbatas pada, hal berikut:

  • 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

Lihat RFC 9180 untuk detail selengkapnya tentang pilihan algoritme untuk KEM, KDF, dan AEAD.

Meskipun tidak lagi direkomendasikan, Tink juga mendukung beberapa variasi ECIES seperti yang dijelaskan dalam standar ISO 18033-2 Victor Shoup. Beberapa jenis kunci ECIES yang didukung tercantum di bawah:

  • 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

Properti minimal

  • Teks biasa dan info konteks dapat memiliki panjang arbitrer (dalam rentang 0,232 byte)
  • Mengamankan dari serangan ciphertext terpilih adaptif
  • Keamanan 128-bit untuk skema berbasis kurva eliptis

Contoh kasus penggunaan

Lihat saya ingin bertukar data.