0Pricing
Cryptology Academy · Pelajaran

Serangan Pewaktuan pada Kode Tingkat Aplikasi

Pelajari cara pewaktuan perbandingan string membocorkan rahasia dan cara perbandingan berdurasi konstan mencegahnya.

Serangan Pewaktuan pada Kode Tingkat Aplikasi adalah pelajaran Cryptology Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Cryptology Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cryptology Academy mencakup 4 pelajaran total.

Perbandingan Teks dengan Waktu Eksekusi Tidak Konstan

Operator kesetaraan teks standar dalam sebagian besar bahasa pemrograman berhenti segera setelah menemukan ketidakcocokan. Operator == Python pada objek bytes, strcmp dalam C, dan String.equals Java semuanya segera mengembalikan hasil ketika byte pertama yang berbeda ditemukan. Untuk perbandingan teks biasa, hal ini merupakan optimasi, tetapi untuk membandingkan nilai rahasia seperti tag MAC atau kata sandi, hal ini menciptakan saluran samping waktu yang dapat diukur dan membocorkan informasi.

Mengukur Waktu Perbandingan HMAC

Penyerang mengukur waktu yang diperlukan untuk membandingkan tag HMAC yang dikirimkan dengan nilai yang benar. Pengiriman HMAC dengan byte pertama yang cocok membutuhkan waktu sedikit lebih lama daripada HMAC dengan byte pertama yang salah (satu perbandingan byte tambahan). Dengan mengirimkan banyak nilai untuk setiap kemungkinan byte pertama dan mengukur waktu respons, penyerang dapat mengidentifikasi byte pertama yang benar. Proses ini diulangi byte demi byte hingga seluruh tag diperoleh.

Presisi Praktis Pengukuran Waktu Serangan

Serangan berbasis waktu melalui jaringan modern dapat mendeteksi perbedaan waktu puluhan hingga ratusan nanodetik melalui internet. Perbandingan HMAC 32 byte, dengan setiap byte yang benar menambahkan sekitar 10–100 ns waktu pemrosesan, memberikan sinyal yang dapat diukur melalui pengukuran berulang yang cukup untuk merata-ratakan variasi waktu jaringan. Dalam konteks jaringan lokal, bahkan perbedaan satu nanodetik dapat dieksploitasi dengan pengambilan sampel statistik yang memadai.

Kerentanan Operator == pada Python

Dalam Python, membandingkan tag MAC dengan == tidak aman: if mac == submitted_mac mengembalikan True atau False berdasarkan posisi ketidakcocokan pertama. Penyerang yang mengirimkan ribuan tag yang dibuat khusus dan mengukur waktu respons dapat memulihkan tag yang diharapkan byte demi byte. Kerentanan ini pernah muncul dalam aplikasi web produksi yang menerapkan perbandingan token sesi atau kunci API secara keliru tanpa fungsi waktu konstan.

hmac.compare_digest dalam Python

hmac.compare_digest(a, b) dalam Python membandingkan dua nilai byte atau string dalam waktu konstan, sehingga membutuhkan waktu yang sama di mana pun ketidakcocokan pertama terjadi. Fungsi ini diimplementasikan dalam C untuk memastikan perilaku waktu konstan, bahkan dengan overhead interpretasi kode byte Python. Selalu gunakan hmac.compare_digest untuk membandingkan tag MAC, token sesi, kunci API, atau nilai apa pun yang dapat menimbulkan bahaya jika informasi waktunya diketahui.

CRYPTO_memcmp dalam OpenSSL

OpenSSL menyediakan CRYPTO_memcmp(a, b, length) untuk perbandingan memori dalam waktu konstan. Berbeda dari memcmp, fungsi ini selalu memproses seluruh byte sejumlah length, terlepas dari adanya ketidakcocokan lebih awal. Nilai yang dikembalikan adalah nol jika nilainya sama dan bukan nol jika berbeda. Anda harus selalu membandingkan panjang lengkap yang diharapkan: membandingkan nilai dengan panjang berbeda hanya sepanjang nilai yang lebih pendek tetap dapat membocorkan informasi tentang panjangnya. Gunakan CRYPTO_memcmp dalam setiap perbandingan yang kritis bagi keamanan pada kode C/C++ yang menggunakan OpenSSL.

Serangan Berbasis Waktu pada RSA: Bleichenbacher

Serangan berbasis waktu tidak terbatas pada perbandingan string. Serangan Bleichenbacher tahun 2006 terhadap dekripsi RSA PKCS#1 v1.5 menunjukkan adanya orakel berbasis waktu yang praktis terhadap implementasi SSL/TLS. Waktu operasi kunci privat RSA bervariasi berdasarkan apakah nilai yang didekripsi memiliki pengisian PKCS#1 yang valid. Dengan mengirimkan ribuan teks tersandi yang dibuat khusus, penyerang dapat memulihkan kunci privat RSA. Hal ini mendorong penggunaan RSA-OAEP dan implementasi RSA dalam waktu konstan.

Serangan Berbasis Waktu pada Cache AES

Implementasi AES yang menggunakan tabel pencarian (umum demi kinerja) mengakses entri tabel berbeda berdasarkan kunci dan teks biasa. Perbedaan antara akses yang ditemukan di cache dan akses yang tidak ditemukan menghasilkan perbedaan waktu yang dapat diukur, yang membocorkan informasi tentang entri tabel yang diakses. Kanal samping ini dapat mengungkap kunci AES. Pertahanannya adalah menggunakan implementasi AES yang tidak bergantung pada pencarian tabel, seperti instruksi perangkat keras AES-NI atau implementasi perangkat lunak berbasis irisan bit.

Prinsip Implementasi Waktu Konstan

Menulis kode dalam waktu konstan mengharuskan Anda menghindari: percabangan bersyarat pada data rahasia (gunakan pemilihan tanpa percabangan dengan masking), pola akses memori yang bergantung pada data rahasia (hindari tabel pencarian yang indeksnya ditentukan oleh rahasia), dan operasi apa pun yang latensinya bergantung pada nilai rahasia (misalnya pembagian pada beberapa prosesor). Kompilator dapat mengoptimalkan konstruksi waktu konstan, sehingga kode rakitan atau akses memori volatile mungkin diperlukan dalam bagian kritis.

AEAD Menghapus Perbandingan MAC pada Tingkat Aplikasi

Pertahanan terbaik terhadap serangan berbasis waktu pada perbandingan MAC adalah menggunakan mode AEAD (GCM, ChaCha20-Poly1305) dan menyerahkan verifikasi MAC kepada pustaka kriptografi. Implementasi pustaka melakukan verifikasi dalam waktu konstan secara internal. Jika Anda menggunakan AEAD dengan benar (dekripsi gagal jika terjadi perubahan apa pun; jangan pernah mendekripsi sebelum memverifikasi tag), Anda tidak perlu membandingkan tag MAC dalam kode aplikasi, sehingga kerentanan waktu sepenuhnya dihilangkan.

Pengujian Kerentanan Berbasis Waktu

Pengujian kerentanan berbasis waktu memerlukan analisis statistik terhadap distribusi waktu respons. Alat seperti tlsfuzzer, skrip pengujian serangan berbasis waktu, dan kerangka kerja dudect membantu mendeteksi perbedaan waktu dalam implementasi kriptografi. Uji-t terhadap sampel waktu respons untuk input yang seharusnya menghasilkan waktu yang sama dapat mengungkapkan perbedaan yang signifikan secara statistik. Negatif palsu tetap mungkin terjadi; peninjauan kode waktu konstan juga penting selain pengujian.

Perbandingan Waktu Konstan

Fungsi Python apa yang harus digunakan untuk membandingkan tag HMAC dengan aman guna mencegah serangan berbasis waktu?

Ringkasan Serangan Berbasis Waktu

Ringkasan serangan berbasis waktu: perbandingan string yang berhenti lebih awal membocorkan nilai rahasia byte demi byte melalui perbedaan waktu respons; hal ini dapat diukur melalui jaringan dengan sampel yang memadai; gunakan hmac.compare_digest dalam Python dan CRYPTO_memcmp dalam OpenSSL untuk perbandingan waktu konstan; serangan berbasis waktu pada pengisian RSA dapat membahayakan kunci privat (gunakan RSA waktu konstan dan OAEP); serangan berbasis waktu pada pencarian tabel AES membocorkan bit kunci (gunakan AES-NI atau implementasi berbasis irisan bit); dan verifikasi oleh pustaka AEAD menghilangkan kebutuhan akan perbandingan MAC pada tingkat aplikasi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Serangan Pewaktuan pada Kode Tingkat Aplikasi” gratis?

Ya — teks lengkap “Serangan Pewaktuan pada Kode Tingkat Aplikasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cryptology Academy, upgrade ke CoddyKit PRO. Kursus Cryptology Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Serangan Pewaktuan pada Kode Tingkat Aplikasi”?

Pelajari cara pewaktuan perbandingan string membocorkan rahasia dan cara perbandingan berdurasi konstan mencegahnya. Kamu berlatih Cryptology Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Cryptology Academy?

Tidak diperlukan pengalaman sebelumnya. Cryptology Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Serangan Pewaktuan pada Kode Tingkat Aplikasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Cryptology Academy ini?

Ya. Setiap pelajaran Cryptology Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Serangan Padding Oracle secara Mendalam
  2. Serangan Pemutaran Ulang dan Kerentanan Penggunaan Ulang Nonce
  3. Serangan Pewaktuan pada Kode Tingkat Aplikasi
  4. Pola Penyalahgunaan Kriptografi Teratas
← Kembali ke Cryptology Academy