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.