9 April 2016
Teknik Enkripsi WhatsApp dan Peluang Kejahatan Oleh: Amiruddin,
[email protected] "Messages you send to this chat and calls are now secured with end-to-end encryption." WhatsApp Hari gini belum kenal WhatsApp (WA)? Ini ada berita baru soal fitur keamanan WA yang baru saja dirilis. WA yang dibuat tahun 2009 ini, memungkinkan kita bertukar berbagai macam pesan mulai dari obrolan, obroal grup, gambar, video, suara, dan berkas, dan juga melakukan panggilan telepon ke seluruh dunia. Layanan ini membuat pengguna aplikasi WA berkembang pesat, sampai saat ini sudah lebih dari satu milyar pengguna aktif di seluruh dunia. Seolah ingin terus menyenangkan penggunanya, WA terus menambahkan layanan, salah satunya adalah keamanan. Aplikasi WA yang dirilis setelah 31 Maret 2016, sudah dilengkapi fitur enkripsi end-to-end (e2e) sebagai bentuk pengamanan komunikasi rahasia secara default. Maksudnya, pesan atau panggilan melalui WA ini disembunyikan dengan teknik enkripsi dan hanya pengirim dan penerima yang berada di ujung saluran komunikasi yang memiliki kunci enkripsinya sehingga hanya merekalah pengirim dan penerima tersebut yang dapat membuka (mendekripsi) pesan tersebut. Jadi, selama perjalanan, pesan tersebut berbentuk rangkaian karakter yang tak terbaca (sebenranya sih, terbaca tapi tak bermakna seperti ini: 13(c) %+1).
Pengirim
Penerima Ilustrasi pesan terenkripsi antara pengirim dan penerima
Sekali klien WA mengenali kontak sebagai fully e2e capable, klien WA tidak akan membolehkan pengiriman plaintext ke kontak tersebut, meskipun jika kontak tersebut menurunkan versi WA-nya menjadi versi yang belum memiliki kemampuan e2e. Hal ini dimaksudkan untuk mencegah server atau network attacker melakukan downgrade attack. Teknik enkripsi e2e yang digunakan WA didasarkan pada Protokol Signal, sebuah protokol open source yang dirancang di Open Whisper Systems. Dengan fitur tersebut, pesan atau panggilan WA tidak dapat diakses oleh pihak ketiga maupun WA sendiri. Bahkan, jika seandainya kunci enkripsi dari perangkat pengguna bocor atau diketahui oleh pihak yang tak berhak, maka kunci enkripsi tersebut tidak dapat digunakan untuk mendekripsi pesan yang telah ditransmisikan sebelumnya. Komponen utama dari fitur e2e pada WA adalah protokol Signal yang memanfaatkan algoritma double ratcheting untuk menyediakan forward secrecy yaitu sebuah fitur yang dapat mempertahankan kerahasiaan komunikasi meskipun kunci kriptografis yang digunakan bisa dipecahkan oleh musuh. Selai itu, protokol Signal ini juga menggunakan primitif kriptografi yang kuat untuk untuk membangun dan mengirimkan pesan, trmasuk ECDH dan Curve25519. Untuk
9 April 2016 mendukung komunikasi yang cepat dan kuat antara klien dan server WA, juga digunakan enkripsi menggunakan Noise Pipes dari Noise Protocol Framework. Berikut adalah penjelasan singkat protokol Signal yang digunakan untuk keamanan pesan WA. Jenis Kunci Publik Pada kriptografi kunci publik selalu dibutuhkan pasangan kunci pribadi dan publik. Ada tiga jenis kunci publik yang digunakan dalam protokol Signal yang digunakan WA seperti ditunjukkan pada tabel berikut. No
Jenis kunci publik
Basis kurva elips
Waktu dibuat
Masa penggunaan
Keterangan lain
1
Identity pair
Key Curve25519
Saat instalasi
Jangka panjang
-
2
Signed Pre Key Curve25519
Saat instalasi
Jangka menengah
Ditandatangani dengan Identity Key, dirotasi secara periodik
3
One-Time Key
Saat instalasi
sekali
Dapat dibangkitkan lagi jika dibutuhkan
Pre Curve25519
Penjelasan Curve25519 Dalam dunia kriptografi, terdapat metode kriptografi publik yang disebut Elliptic Curve Cryptography (ECC) yaitu metode kriptografi yang menggunakan fungsi kurva elips untuk membangkitkan pasangan kunci. Curve25519 adalah sebuah kurva eliptikal yang menawarkan keamanan 128 bit dan dirancang untuk digunakan dengan skema perjanjian kunci Elliptic Curve Diffie–Hellman (ECDH). Curve25519 merupakan salah satu kurva ECC tercepat dan diketahui belum didaftarkan sebagai paten sehingga tergolong ke dalam open source. Curve25519 yang diusulkan oleh Daniel J Bernstein, ternyata kurang baik digunakan untuk random-number-generator (RNG) yang lemah. Implementasi kurva ini direkomendasikan digunakan untuk domain publik. Curve25519 menggunakan kurva y2 = x3 + 486662x2 + x, sebuah kurva Montgomery untuk medan bilangan prima yang didefiniskan dengan bilang prima 2255 − 19, menggunakan base point x = 9. Gambar berikut menunjukkan ilsutrasi aliran data dari secret key menjadi shared secret melalui public key dengan base point x =9.
Aliran data dari secret key melalui public key menjadi shared secret (Berstein, 2006)
9 April 2016 Protokol ini menggunakan titik eliptikal terkompres (hanya koordinat X), sehingga memungkinkan penggunaan efisien Montgomery ladder untuk ECDH, hanya menggunakan koordinat XZ. Curve25519 dibangun dengan upaya menghindari berbagai macam kelemahan pada saat implementasi. Curve25519 menghindari side channel attacks dengan random-number-generators (RNG) berkualitas rendah. Curve25519 ekuivalen dengan Ed25519, sebuah kurva Twisted Edwards. Curve25519 pertama kali dirilis pada tahun 2005 oleh Daniel J. Bernstein in 2005, namun baru mendaat perhatian luas setelah 2013 ketika diketahui bahwa NSA telah mengimplementasi sebuah backdoor pada Dual EC DRBG. Jenis Kunci Sesi 1. Root Key – berukuran 32-byte yang digunakan untuk membuat Chain Keys. 2. Chain Key – berukuran 32-byte yang digunakan untuk membuat Message Keys. 3. Message Key – berukruan 80-byte yang dibunakan untuk mengenkripsi isi pesan dengan rincian 32 bytes untuk kunci AES-256, 32 bytes untuk kunci HMAC-SHA256, dan 16 bytes untuk Initialization Vector (IV). Registrasi Klien Pada saat registrasi, klien WA mengirim kunci-kunci publiknya yaitu: Identity Key, public Signed Pre-Key (beserta signature-nya), dan sejumlah One-Time Pre Key kepada server. Server WA kemudian menyimpan kunci publik tersebut yang diasosiasikan dengan identitas pengguna. Jadi WA tidak pernah ada waktu untuk dapat mengakses kunci-kunci pribadi klien. Menginisiasi Setup Sesi Untuk berkomunikasi dengan pengguna lain, kilen WA pertama-tama harus membentuk sesi terenkripsi. Ketika sesi terenkripsi telah terbentuk maka klien tidak perlu membangun ulang sebuah sesi baru sampai sesi tersebut hilang karena suatu kejadian eksternal misalnya instal ulang aplikasi atau ganti perangkat. Tahapan untuk membangun sebuah sesi adalah: 1. Inisiator meminta Identity Key publik, publik Signed Pre Key, dan One-Time Pre Key tunggal publik untuk penerima. 2. Server mengembalikan nilai-nilai kunci publik yang diminta. One-Time Pre Key hanya digunakan sekali, sehingga dihapus dari server penyimpanan setelah diminta. Jika batch terbaru One-Time Pre Keys penerima telah digunakan dan penerima tidak mengisi-ulang, maka tidak ada One-Time Pre Key akan dikembalikan. 3. Inisiator akan menyimpan Identity Key penerima sebagai I penerima, signed Pre Key sebagai S penerima, dan One-Time Pre Key sebagai O penerima. 4. Inisiator menghasilkan pasangan kunci Curve25519 fana, E inisiator. 5. Inisiator memuat Identity Key sendiri sebagai I inisiator. 6. Inisiator menghitung master_secret sebagai master_secret = ECDH (I inisiator, S penerima) || ECDH (E inisiator, I penerima) || ECDH (E inisiator, S penerima) || ECDH (E inisiator, O penerima). Jika tidak ada One Time Pre Key, ECDH akhir dihilangkan. 7. Inisiator menggunakan HKDF untuk membuat Root Key dan Chain Keys dari master_secret. Menerima Setup Sesi Setelah membangun sesi terenkripsi berlangsung-lama (long-running), inisiator dapat segera mulai mengirim pesan ke penerima, meskipun penerima sedang offline. Inisiator menyertakan informasi, di header dari semua pesan yang dikirim, termasuk E inisiator dan I inisiator, yang memberitahu penerima bahwa pengirim perlu membangun sesi yang sesuai. Ketika penerima menerima pesan yang berisi informasi pengaturan sesi: 1. Penerima menghitung master_secret bersesuaian menggunakan kunci pribadi dan kunci
9 April 2016 publik yang diiklankan di header pesan masuk. 2. Penerima menghapus One-Time Pre Key yang digunakan oleh inisiator. 3. Inisiator menggunakan HKDF untuk menurunkan Root Keys dan Chain Keys bersesuaian dari master secret. Bertukar Pesan Setelah sesi telah ditetapkan, klien dapat bertukar pesan yang diproteksi dengan Message Key menggunakan AES256 mode CBC untuk enkripsi dan HMAC-SHA256 untuk otentikasi. Message Key berganti/berubah untuk setiap pesan yang dikirimkan, dan ephemeral (sekali pakai), sehingga Message Key yang digunakan mengenkripsi pesan tidak dapat direkonstruksi dari kondisi sesi setelah pesan dikirim atau diterima. Message Key berasal dari Chain Key pengirim yang “ratchests” teruskan bersama setiap pesan yang dikirim. Selain itu, perjanjian ECDH baru dilakukan dengan masing-masing jemput pesan untuk membuat Chain Key baru. Hal ini memberikan forward secrecy melalui kombinasi "hash ratchet" immediate dan "DH ratchet “ roundtrip. Menghitung Message Key dari Chain Key Setiap kali Message Key baru dibutuhkan oleh pengirim pesan, maka itu dihitung sebagai berikut: 1. Message Key = HMAC-SHA256 (Gantungan Kunci, 0x01). 2. Chain Key kemudian diperbarui sebagai Chain Key = HMAC-SHA256 (Chain Key, 0x02). Hal ini menyebabkan Chain Key menjadi "ratchet" forward, dan juga berarti bahwa Message Key tersimpan tidak dapat digunakan untuk menurunkan nilai saat ini atau masa lalu dari Chain Key. Menghitung Chain Key dari Root Key Setiap kali pesan dikirimkan, sebuah kunci publik ephemeral Curve25519 diiklankan bersamanya. Setelah respon diterima, Chain Keydan Root Key dihitung sebagai berikut: 1. Ephemeral Secret = ECDH (Ephemeral pengirim, Ephemeral penerima). 2. Chain Key, Root Key = HKDF (Root Key, Ephemeral Secret). Sebuah rantai hanya pernah digunakan untuk mengirim pesan dari satu pengguna, sehingga kunci pesan tidak digunakan kembali. Karena cara Message Keys dan Chain Keys dihitung seperti itu maka pesan bisa tiba tertunda, rusak, atau bisa hilang sepenuhnya tanpa masalah. Media Transmisi dan Perlengkapan Lainnya Lampiran besar dari jenis apa pun (video, audio, gambar, atau file) juga dienkripsi e2e sebagai berikut: 1. Pengguna WA mengirim pesan yang menghasilkan kunci ephemeral AES256 32 byte dan kunci ephemeral HMAC-SHA256 32 byte. 2. Pengirim mengenkripsi lampiran dengan kunci AES256 mode CBC dengan IV acak, kemudian menambahkan MAC dari ciphertext menggunakan HMAC-SHA256. 3. Pengirim mengunggah lampiran terenkripsi tersebut blob store. 4. Pengirim mengirimkan pesan terenkripsi normal kepada penerima yang berisi kunci enkripsi, kunci HMAC, hash SHA256 dari blob terenkripsi, dan pointer ke blob di blob store. 5. Penerima mendekripsi pesan, mengambil gumpalan terenkripsi dari blob store, memverifikasi hash SHA256 itu, memverifikasi MAC, dan mendekripsi plaintext. Group Message Aplikasi perpesanan tradisional tidak terenkripsi biasanya menggunakan "server-side fan-out" untuk pesan grup. Seorang klien yang ingin mengirim pesan ke anggota grup mengirimkan pesan tunggal,
9 April 2016 yang kemudian didistribusikan N kali ke N anggota kelompok yang berbeda oleh server. Hal ini berbeda dengan "client-side fan-out," di mana klien akan mengirimkan satu pesan N kali ke N anggota lain kelompok itu sendiri. Pesan ke grup WA yang dibangun di atas sesi terenkripsi berpasangan untuk mencapai 'server-side fan-out' efisien untuk sebagian besar pesan yang dikirim ke kelompok. Hal ini dicapai dengan menggunakan komponen "Sender Keys" dari Signal Messaging Protocol. Saat pertama kali anggota sebuah grup WA mengirim sebuah pesan ke grup: 1. Pengirim membangkitkan Chain Key acak 32-byte. 2. Pengirim membangkitkan pasangan kunci Curve25519 Signature Key. 3. Pengirim mengkombinasikan Chain Key 32-byte dan kunci publik dari Signature Key menjadi sebuah Sender Key message. 4. Pengirim mengenkripsi satu per satu Sender Key dari setiap anggota grup menggunakan protokol pairwise messaging protocol yang dijelaskan di bagian sebelumnya. Untuk semua pesan berikutnya ke grup: 1. Pengirim menrunkan Kunci Pesan dari Chain Key, dan memperbarui Chain Key tersebut. 2. Pengirim mengenkripsi pesan menggunakan AES 256 mode CBC. 3. Pengirim menandatangani ciphertext menggunakan Signature Key. 4. Pengirim mengirimkan pesan ciphertext tunggal ke server, yang melakukan server-side fanout untuk semua anggota grup. The "hash ratchet" dari Chain Key pengirim menyediakan forward secrecy. Jika ada anggota grup keluar grup, semua anggota lain menghapus Sender Key mereka dan memulai lagi dari awal. Call Setup Panggilan telepon melalui WA juga dienkripsi. Saat seorang pengguna WA menginisiasi sebuah panggilan telepon: 1. Inisiator membangun sesi terenkripsi dengan lawan bicara (responder), jika tidak ada sesi yang sudah terbentuk. 2. Inisiator membangkitkan master_secret SRTP 32-byte. 3. Inisiator mengirim pesan terenkripsi ke calon responder yang memberi sinyal sebuah panggilan masuk, dan berisi master_secret SRTP. 4. Jika responder menjawab panggilan tersebut, maka panggilan terenkripsi SRTP dapat dilakukan. Verifikasi Kunci Pengguna WA memiliki pilihan untuk memverifikasi kunci-kunci dari pengguna lain yang berkomunikasi dengannya sehingga mereka dapat mengkonfirmasi pihak ketiga ilegal atau WA tidak melakukan serangan Man-In-The-Middle (MITM). Hal ini dapat dilakukan dengan memindai QR code atau membandingkan sebuah angka 60-digit. QR code berisi: versi, pengenal (id) pengguna (kedua pihak), dan Identity Key publik 32-byte untuk kedua pihak. Jika salah satu pengguna memindai QR code pengguna lain, kunci tersebut dibandingkan untuk memastikan bahwa isi QR code tersebut sesuai dengan Identity Key yang diambil dari server. Angka 60-digit ini dihitung dengan menggabungkan dua fingerprints numerik 30-digit untuk setiap Identity Key pengguna. Fingerprint numerik 30-digit dikalkulasi sebagai berikut: 1. SHA-512 meng-hash Identity Key publik dan Id pengguna 5200 kali. 2. Ambil 30 bytes pertama dari output hash terakhir. 3. Pecah hasil 30-byte tersebut menjadi enam potongan 5-byte
9 April 2016 4. Konversikan setiap potongan 5-byte menjadi 5 digit dengan menerjemahkan tiap 5-byte tersebut sebagai big-endian unsigned integer dan mereduksinya dengan modulo 100000. 5. Gabungkan (konkatenasi) enam grup 5-digit menjadi 30 digit. Keamanan Transport Semua komunikasi antara klien dan server WA dibuat berlapis dalam kanal terenkripsi terpisah. Pada Windows Phone, iPhone, and Android, fitur enkripsi pada klien menggunakan Noise Pipes with Curve25519, AES-GCM, dan SHA256 dari Noise Protocol Framework untuk koneksi interaktif yang lama. Fitur ini memberikan klien properti berikut: 1. Setup dan resume koneksi yang sangat ringan dan cepat. 2. Enkripsi metada untuk menyembunyikannya dari mata-mata jaringan. Tidak ada informasi apapaun terkait identitas pengguna yang dibuk. 3. Tidak ada kredential autentikasi klien disimpan pada server. Server hanya menyimpan kunci autentikasi publik sehingga jika database server pengguna bocor, tidak ada kredential autentikasi pribadi yang akan terungkap. Jalan Terang Kejahatan (?) Mengamankan komunikasi pribadi pengguna memang menjadi salah satu keyakinan utama (core beliefs) dari WA. Namun, dengan adanya fitur enkripsi e2e ini, jika benar WA dan pihak ketiga tidak dapat mengakses data terenkripsi pengguna, maka ini juga menjadi ancaman keamanan. Sebuah simalakama, sepertinya. Aksi-aksi kejahatan lewat dunia maya seperti perjudian, narkoba, pornografi, dan terorisme, akan memiliki jalan terang untuk berkembang dengan pesat, mengingat layanan WA ini cukup cepat kinerjanya dan murah. Diberitakan India Times, bahwa di Jammu dan Kashmir, aplikasi messenger ini telah digunakan secara besar-besaran oleh kaum separatis dan antinasionalis untuk menyebarkan rumor yang berujung pada berbagai kasus kekerasan. Namun di sisi lain, demi kepentingan dunia dan mendesak, mungkin saja secara diam-diam WA akan membuka data penting terutama untuk memberantas kejahatan terorisme yang menjadi musuh seluruh dunia. Namun, yang jauh lebih penting adalah memberantas akar terorisme itu sendiri, salah duanya adalah kebodohan dan ketidakadilan. Referensi: 1. WhatsApp Encryption Overview, Technical White Paper, 4 April 2016, https://www.whatsaap.com/security/WhatsApp-Security-Whitepaper.pdf 2. Bernstein, Daniel J, Curve25519: new Die-Hellman speed records, 2006 https://cr.yp.to/ecdh/curve25519-20060209.pdf 3. WhatsApp's Signal Protocol integration is now complete, Open Whisper Systems, https://www.whispersystems.org/blog/whatsapp-complete/, diakses 8 April 2016 4. WhatsApp encryption breakdown: 8 things you need to know now, http://timesofindia.indiatimes.com/tech/computing/-WhatsApp-encryption-8-things-toknow/articleshow/51739353.cms, diakses 8 April 2016