Serangan kriptografi: penjelasan untuk pikiran yang bingung

Pada kata "kriptografi", beberapa orang mengingat kata sandi WiFi mereka, kunci hijau di sebelah alamat situs favorit mereka dan betapa sulitnya untuk masuk ke surat orang lain. Yang lain mengingat serangkaian kerentanan beberapa tahun terakhir dengan singkatan berbicara (DROWN, FREAK, POODLE ...), logo penuh gaya, dan peringatan segera memperbarui peramban.

Kriptografi mencakup semua ini, tetapi esensinya berbeda. Intinya adalah antara yang sederhana dan kompleks. Beberapa hal mudah dilakukan, tetapi sulit untuk kembali: misalnya, memecahkan telur. Hal-hal lain mudah dilakukan, tetapi sulit untuk kembali ketika bagian penting yang kecil dan penting hilang: misalnya, membuka pintu yang terkunci ketika “bagian kritis” adalah kuncinya. Kriptografi mempelajari situasi ini dan bagaimana menggunakannya dalam praktik.

Selama beberapa tahun terakhir, kumpulan serangan kriptografi telah berubah menjadi kebun binatang logo mencolok penuh dengan formula artikel ilmiah dan telah menciptakan perasaan suram umum bahwa semuanya rusak. Tetapi pada kenyataannya, banyak dari serangan itu didasarkan pada beberapa prinsip umum, dan halaman formula yang tak berujung sering turun ke ide-ide yang mudah dipahami.

Dalam seri artikel ini, kita akan melihat berbagai jenis serangan kriptografi, dengan penekanan pada prinsip-prinsip dasar. Secara umum dan tidak cukup dalam urutan itu, tetapi kami akan memberi tahu yang berikut:

  • Strategi dasar: brute force, analisis frekuensi, interpolasi, downgrade, dan lintas protokol.
  • Kerentanan Merek: FREAK, CRIME, POODLE, DROWN, Logjam.
  • Strategi lanjutan: serangan Oracle (serangan Woden, serangan Kelsey); metode meet-in-the-middle, serangan ulang tahun, bias statistik (pembacaan sandi diferensial, pembacaan sandi integral, dll.).
  • Serangan pihak ketiga dan kerabat dekat mereka, metode analisis kegagalan.
  • Serangan pada kriptografi kunci publik: root kubik, Siaran, pesan terkait, serangan Coppersmith, algoritma Polyg - Hellman, saringan numerik, serangan Wiener, serangan Bleichenbacher.

Artikel khusus ini membahas materi di atas hingga serangan Kelsey.

Strategi dasar


Serangan-serangan berikut ini sederhana dalam arti bahwa mereka dapat hampir sepenuhnya dijelaskan tanpa rincian teknis khusus. Kami menjelaskan setiap jenis serangan dalam istilah yang paling sederhana, tanpa menggali ke dalam contoh kompleks atau kasus penggunaan lanjutan.

Beberapa serangan ini sebagian besar kehilangan relevansi dan tidak digunakan selama bertahun-tahun. Lainnya adalah orang-orang tua, mereka masih secara teratur merayap pada pengembang cryptosystem yang tidak curiga di abad ke-21. Kita dapat mengasumsikan bahwa era kriptografi modern dimulai dengan munculnya IBM DES - sandi pertama yang tahan terhadap semua serangan pada daftar ini.

Kekuatan kasar sederhana


Skema enkripsi terdiri dari dua bagian: 1) fungsi enkripsi yang menerima pesan (plaintext) dalam kombinasi dengan kunci, dan kemudian membuat pesan terenkripsi - ciphertext; 2) fungsi dekripsi yang mengambil ciphertext dan kunci dan membuat plaintext. Enkripsi dan dekripsi harus mudah dikomputasi dengan kunci - dan sulit tanpanya.

Misalkan kita melihat ciphertext dan mencoba mendekripsi tanpa informasi tambahan (ini disebut serangan ciphertext saja). Jika kami entah bagaimana secara ajaib menemukan kunci yang tepat, kami dapat dengan mudah memverifikasi bahwa memang benar jika hasilnya adalah pesan yang masuk akal.

Perhatikan bahwa ada dua asumsi implisit. Pertama, kita tahu cara melakukan dekripsi, yaitu cara kerja cryptosystem. Ini adalah asumsi standar ketika membahas kriptografi. Menyembunyikan detail implementasi sandi dari penyusup mungkin tampak seperti tindakan keamanan tambahan, tetapi begitu penyusup mengetahui detail ini, keamanan ekstra ini hilang secara tak terlihat dan tidak dapat dikembalikan lagi. Ini adalah prinsip Kerchhoffs : jatuh ke tangan musuh seharusnya tidak menyebabkan ketidaknyamanan.

Kedua, kami menganggap bahwa kunci yang benar adalah satu-satunya kunci yang akan mengarah pada dekripsi yang masuk akal. Ini juga merupakan asumsi yang masuk akal; dieksekusi jika ciphertext lebih panjang dari kunci dan dibaca dengan baik. Sebagai aturan, inilah yang terjadi di dunia nyata, dengan pengecualian kunci tidak praktis besar atau penipuan lainnya, yang lebih baik dikesampingkan (jika Anda tidak suka kami telah mengabaikan penjelasannya, silakan lihat Teorema 3.8 di sini ).

Mengingat hal di atas, muncul strategi: periksa setiap kunci yang mungkin. Ini disebut brute force, dan serangan semacam itu dijamin bekerja melawan semua sandi praktis - pada akhirnya. Sebagai contoh, kekuatan kasar sudah cukup untuk memecahkan sandi Caesar , sandi kuno, di mana kuncinya adalah satu huruf dari alfabet, yang menyiratkan lebih dari 20 kemungkinan kunci.

Sayangnya untuk cryptanalysts, meningkatkan ukuran kunci melindungi terhadap kekerasan. Saat ukuran kunci bertambah, jumlah kunci yang mungkin bertambah secara eksponensial. Dengan ukuran kunci modern, gaya kasar sederhana sama sekali tidak praktis. Untuk memahami apa yang kami maksud, ambil superkomputer tercepat yang dikenal pada pertengahan 2019: IBM's Summit , dengan kinerja puncak pada urutan 10 17 operasi per detik. Saat ini, panjang kunci tipikal adalah 128 bit, yang berarti 2.128 kemungkinan kombinasi. Menghitung semua kunci membutuhkan superkomputer Summit untuk mengambil sekitar 7800 kali usia semesta.

Haruskah kekerasan dianggap sebagai keingintahuan historis? Tidak sama sekali: itu adalah bahan yang diperlukan dalam buku masak cryptanalysis. Jarang sekali sandi yang lemah ditemukan sehingga mereka dapat dipecahkan hanya dengan serangan yang cerdas, tanpa menggunakan kekuatan sampai tingkat tertentu. Banyak peretasan yang berhasil menggunakan metode algoritmik terlebih dahulu untuk melemahkan cipher target dan kemudian menjalankan brute force.

Analisis frekuensi


Sebagian besar teks bukan omong kosong. Misalnya, dalam teks bahasa Inggris ada banyak huruf 'e' dan artikel 'the'; dalam file biner - banyak byte nol sebagai pengganti antara informasi. Analisis frekuensi adalah setiap serangan yang mengeksploitasi fakta ini.

Contoh kanonik dari sandi yang rentan terhadap serangan ini adalah sandi pengganti yang sederhana. Dalam sandi ini, kuncinya adalah tabel dengan penggantian semua huruf. Misalnya, 'g' diganti dengan 'h', 'o' oleh j, jadi kata 'go' berubah menjadi 'hj'. Cipher ini sulit dilakukan secara sederhana, karena ada banyak kemungkinan tabel pencarian. Jika Anda tertarik pada matematika, panjang kunci efektif adalah sekitar 88 bit: ini
log2(26!) . Tetapi analisis frekuensi biasanya melakukan pekerjaan dengan cepat.

Pertimbangkan ciphertext berikut yang diproses dengan cipher subtitusi sederhana:

  XDYLY ALY UGLY XDWNKE WN DYAJYN ANF YALXD DGLAXWG XDAN ALY FLYAUX GR WN OGQL ZDWBGEGZDO 

Karena Y adalah umum, termasuk di akhir banyak kata, kita dapat dengan tentatif mengasumsikan bahwa ini adalah huruf e :

  XDeLe ALe UGLe XDWNKE WN DeAJeN ANF eALXD DGLAXWG XDAN ALe FLeAUX GR WN OGQL ZDWBGEGZDO 

Pasangan XD diulang pada awal beberapa kata. Secara khusus, kombinasi XDeLe secara eksplisit menyiratkan kata these atau di there , jadi kami melanjutkan:

  theLe ALe UGLe thWNKE WN heAJeN ANF eALth DGLAtWG dari ALe FLeAUt GR WN OGQL ZDWBGEGZDO 

Lebih jauh, anggaplah L berhubungan dengan r , A - a dan sebagainya. Anda mungkin harus melakukan beberapa upaya, tetapi dibandingkan dengan kekuatan penuh, serangan ini mengembalikan teks sumber sesegera mungkin:

  ada lebih banyak hal di horatio surga dan bumi daripada yang diimpikan dalam filosofi Anda 

Bagi sebagian orang, solusi untuk "cryptograms" semacam itu adalah hobi yang menarik.

Gagasan analisis frekuensi lebih mendasar daripada yang terlihat pada pandangan pertama. Dan itu berlaku untuk cipher yang jauh lebih kompleks. Sepanjang sejarah, berbagai desain sandi berusaha menahan serangan semacam itu dengan menggunakan "substitusi polialfabet." Di sini, dalam proses enkripsi, tabel penggantian surat berubah dengan cara yang rumit namun dapat diprediksi yang bergantung pada kunci. Semua sandi ini pernah dianggap sulit untuk diretas; namun analisis frekuensi sederhana akhirnya mengalahkan mereka semua.

Cipher polyalphabetic yang paling ambisius dalam sejarah, dan mungkin yang paling terkenal, adalah cipher Enigma dalam Perang Dunia II. Itu relatif kompleks dibandingkan dengan pendahulunya, tetapi sebagai hasil dari kerja keras dan lama, cryptanalyst Inggris memecahkannya menggunakan analisis frekuensi. Tentu saja, mereka tidak dapat mengembangkan serangan yang elegan, seperti yang ditunjukkan di atas; mereka harus membandingkan pasangan teks terbuka dan terenkripsi yang terkenal (yang disebut "serangan plaintext") dan bahkan memprovokasi pengguna Enigma untuk mengenkripsi pesan tertentu dengan analisis hasilnya ("serangan berdasarkan plaintext yang dipilih"). Tetapi ini tidak memfasilitasi nasib pasukan musuh yang kalah dan kapal selam yang tenggelam.

Setelah kemenangan ini, analisis frekuensi menghilang dari sejarah cryptanalysis. Cipherer dari era digital modern dirancang untuk bekerja dengan bit, bukan huruf. Lebih penting lagi, sandi ini dirancang dengan pemahaman yang suram tentang apa yang kemudian dikenal sebagai hukum Schneier : siapa pun dapat membuat algoritma enkripsi yang ia sendiri tidak dapat memecahkannya. Tidak cukup bahwa sistem enkripsi tampaknya rumit: untuk membuktikan nilainya, ia harus melalui tinjauan keamanan yang kejam dari banyak cryptanalyst yang akan melakukan segala kemungkinan untuk memecahkan sandi.

Perhitungan awal


Ambil kota hipotetis Precom Heights dengan populasi 200.000. Di setiap rumah di kota terdapat barang-barang berharga rata-rata $ 30.000, tetapi tidak lebih dari $ 50.000. Pasar keamanan di Precom dimonopoli oleh ACME Industries, yang menghasilkan kunci pintu kelas Coyote (tm) yang legendaris. Menurut analisis para ahli, hanya mesin hipotetis yang sangat kompleks yang dapat memecahkan kunci kelas Coyote, yang pembuatannya membutuhkan sekitar lima tahun dan investasi $ 50.000. Apakah kota itu aman?

Kemungkinan besar tidak. Pada akhirnya, seorang penjahat yang agak ambisius akan muncul. Dia akan beralasan seperti ini: “Ya, saya akan dikenai biaya besar di muka. Lima tahun harapan pasien, dan $ 50.000. Tetapi setelah menyelesaikan pekerjaan, saya akan memiliki akses ke semua kekayaan kota ini . Jika saya memainkan kartu saya dengan benar, investasi ini akan terbayar berkali-kali. "

Demikian pula dalam kriptografi. Serangan terhadap sandi tertentu dikenai analisis biaya dan manfaat yang kejam. Jika rasio ini menguntungkan, serangan itu tidak akan terjadi. Tetapi serangan yang langsung menyerang banyak calon korban hampir selalu membuahkan hasil, dan dalam hal ini praktik desain terbaik adalah dengan menganggap bahwa mereka mulai dari hari pertama. Kami pada dasarnya memiliki versi kriptografi dari hukum Murphy: "Segala sesuatu yang benar-benar dapat merusak sistem akan merusak sistem."

Contoh paling sederhana dari cryptosystem yang rentan terhadap serangan dengan perhitungan pendahuluan adalah cipher dengan algoritma konstan tanpa menggunakan kunci. Ini adalah kasus dengan cipher Caesar , yang hanya menggeser setiap huruf dari alfabet tiga huruf ke depan (tabel diulang, sehingga huruf terakhir dalam alfabet dienkripsi dengan yang ketiga). Di sini sekali lagi, prinsip Kerchhoff dimanifestasikan: begitu sistem diretas, ia diretas selamanya.

Konsepnya sederhana. Bahkan pengembang cryptosystem pemula kemungkinan akan menyadari ancaman tersebut dan mempersiapkannya. Jika Anda melihat evolusi kriptografi, serangan seperti itu tidak sesuai untuk sebagian besar sandi, dimulai dengan versi peningkatan pertama dari sandi Caesar, hingga penurunan kode sandi polyalphabetic. Serangan seperti itu kembali hanya dengan munculnya era kriptografi modern.

Pengembalian ini karena dua faktor. Pertama, akhirnya, cryptosystems cukup kompleks muncul, di mana kemungkinan eksploitasi setelah peretasan tidak jelas. Kedua, kriptografi tersebar luas sehingga jutaan orang awam membuat keputusan setiap hari tentang di mana dan bagian mana dari kriptografi yang akan digunakan kembali. Itu beberapa waktu sebelum para ahli menyadari risiko dan mengangkat alarm.

Ingat serangan dengan perhitungan awal: di akhir artikel kita akan mempertimbangkan dua contoh kriptografi dari kehidupan nyata, di mana serangan itu memainkan peran penting.

Interpolasi


Berikut adalah detektif terkenal Sherlock Holmes, melakukan serangan dengan interpolasi pada Dr. Watson yang tidak beruntung:

Saya segera menduga bahwa Anda berasal dari Afghanistan ... Pikiranku adalah sebagai berikut: "Orang ini adalah seorang dokter menurut jenisnya, tetapi ia memiliki pengaruh militer. Jadi seorang dokter militer. Dia baru saja tiba dari daerah tropis - wajahnya gelap, tetapi ini bukan warna alami kulitnya, karena pergelangan tangannya jauh lebih putih. Wajah kurus, jelas, sangat menderita dan menderita penyakit ini. Dia terluka di tangan kirinya - dia memegangnya tak bergerak dan sedikit tidak wajar. Di mana, di bawah daerah tropis, bisakah seorang dokter medis Inggris menderita kesulitan dan mendapatkan luka? Tentu saja, di Afghanistan. " Seluruh rangkaian pemikiran tidak butuh sedetik pun. Jadi saya katakan bahwa Anda berasal dari Afghanistan, dan Anda terkejut.

Dari setiap bukti secara individual, Holmes dapat mengekstraksi sangat sedikit informasi. Dia bisa sampai pada kesimpulannya hanya dengan memeriksa semuanya bersama-sama. Serangan interpolasi bekerja dengan cara yang sama, mengeksplorasi pasangan teks terbuka dan terenkripsi yang diketahui diperoleh sebagai hasil dari penerapan kunci yang sama. Pengamatan terpisah diekstraksi dari masing-masing pasangan, yang memungkinkan kami untuk menarik kesimpulan umum tentang kuncinya. Semua kesimpulan ini tidak jelas dan tidak berguna sampai tiba-tiba mencapai massa kritis dan mengarah pada satu-satunya kesimpulan yang mungkin: tidak peduli seberapa luar biasa itu, itu pasti benar. Setelah itu, salah satu kunci dibuka, atau proses dekripsi menjadi sangat matang sehingga dapat diduplikasi.

Kami menggambarkan dengan contoh sederhana bagaimana interpolasi bekerja. Misalkan kita ingin membaca buku harian pribadi musuh kita, Bob. Dia mengenkripsi setiap angka dalam buku hariannya dengan bantuan cryptosystem sederhana, yang dia pelajari dari sebuah iklan di majalah "Mockery of cryptography". Sistem berfungsi sebagai berikut: Bob memilih dua angka yang disukainya: M dan N . Mulai sekarang, untuk mengenkripsi nomor apa pun x dia menghitung Mx+N . Misalnya, jika Bob memilih M=3 dan N=4 lalu angkanya 2 dienkripsi sebagai 32+4=10 .

Misalkan kita perhatikan pada tanggal 28 Desember bahwa Bob sedang menggaruk sesuatu di buku hariannya. Ketika dia selesai, kita diam-diam mengambilnya dan melihat entri terakhir:

Tanggal: 235/520

Dear Diary,

Hari ini adalah hari yang baik. Setelah 64 hari, saya berkencan dengan Alice, yang tinggal di apartemen 843 . Saya benar-benar berpikir dia bisa berusia 26 !

Karena kami sangat serius ingin mengikuti Bob pada kencannya (dalam skenario ini, kami berusia 15 tahun), penting untuk mengetahui tanggalnya, juga alamat Alice. Untungnya, kami melihat bahwa cryptosystem Bob rentan terhadap serangan interpolasi. Kita mungkin tidak tahu M dan N , tapi kami tahu tanggal hari ini, jadi kami memiliki dua pasang "plaintext - ciphertext". Yaitu, kita tahu itu 12 dienkripsi dalam 235 , dan 27 - masuk 520 . Apa yang kami tulis:

M12+N=235


M27+N=520


Karena kita berusia 15 tahun, kita sudah tahu tentang sistem dua persamaan dengan dua tidak diketahui, yang dalam situasi ini cukup untuk menemukan M dan N tanpa masalah. Setiap pasangan "plaintext-ciphertext" memberlakukan batasan pada kunci Bob, dan dua kendala bersama cukup untuk sepenuhnya mengembalikan kunci. Dalam contoh kita, jawabannya M=19 dan N=7 (di 19x+7=26 x=1 , jadi 26 dalam buku harian sesuai dengan kata 'satu', yaitu, "sama" - kira-kira. per.) .

Serangan interpolasi, tentu saja, tidak terbatas pada contoh sederhana seperti itu. Setiap cryptosystem, yang turun ke objek matematika yang dipahami dengan baik dan daftar parameter, beresiko serangan interpolasi - semakin mudah dipahami objek, semakin tinggi risikonya.

Para pemula sering mengeluh bahwa kriptografi adalah "seni mendesain hal-hal seburuk mungkin." Serangan interpolasi mungkin sebagian besar harus disalahkan. Bob dapat menggunakan desain matematika yang elegan, atau menjaga kerahasiaan kencan dengan Alice - tetapi sayangnya, biasanya Anda tidak bisa mendapatkan keduanya. Ini akan menjadi sangat jelas ketika kita akhirnya beralih ke topik kriptografi kunci publik.

Protokol Lintas / Downgrade


Dalam film "The Illusion of Deception" (2013), sekelompok ilusionis mencoba mengelabui seluruh negara bagian raja asuransi korup Arthur Tressler menjadi penipuan. Untuk mendapatkan akses ke rekening bank Arthur, ilusionis harus memberikan nama pengguna dan kata sandi, atau membuatnya secara pribadi muncul di bank dan berpartisipasi dalam skema.

Kedua opsi tersebut sangat sulit; mereka terbiasa tampil di atas panggung, dan tidak berpartisipasi dalam operasi intelijen. Karena itu, mereka memilih opsi ketiga: kaki tangan mereka memanggil bank dan berpura-pura menjadi Arthur. Bank mengajukan beberapa pertanyaan untuk verifikasi identitas, seperti nama paman dan nama hewan peliharaan pertama; pahlawan kita sebelumnya dengan mudah mendapatkan informasi ini dari Arthur dengan bantuan rekayasa sosial yang cerdas . Mulai sekarang, keamanan kata sandi yang baik tidak lagi penting.

(Menurut legenda kota, yang kami periksa dan konfirmasi secara pribadi, seorang ahli kriptografi Eli Behem pernah bertemu seorang kasir bank yang bersikeras membuat pertanyaan rahasia. Ketika kasir menanyakan nama nenek ibunya, Beeham mulai mendikte: "Capital X, little y, three ... ").

Itu sama dalam kriptografi, jika dua protokol kriptografi digunakan secara paralel untuk melindungi aset yang sama, sementara satu jauh lebih lemah dari yang lain. Sistem yang dihasilkan menjadi rentan terhadap serangan lintas protokol ketika protokol yang lebih lemah diserang untuk mendapatkan hadiah tanpa menyentuh yang lebih kuat.

Dalam beberapa kasus kompleks, tidak cukup hanya dengan menghubungi server menggunakan protokol yang lebih lemah, dan partisipasi sukarela dari klien yang sah diperlukan. Ini dapat diatur menggunakan serangan downgrade yang disebut. Untuk memahami serangan ini, misalkan ilusionis kita memiliki tugas yang lebih sulit daripada di film. Misalkan seorang pegawai bank (kasir) dan Arthur memiliki beberapa keadaan yang tidak terduga, akibatnya ada dialog seperti itu:

Pencuri: Halo? Ini adalah Arthur Tressler. Saya ingin mengatur ulang kata sandi saya.

Kasir: Hebat. Silakan lihat buku kode rahasia pribadi Anda, halaman 28, kata 3. Semua pesan berikut akan dienkripsi dengan kata khusus ini sebagai kunci. PQJGH. LOTJNAM PGGY MXVRL ZZLQ SRIU HHNMLPPPV ...

Cracker: Hei, hei, tunggu sebentar. Apakah ini benar-benar perlu? Tidak bisakah kita berbicara seperti orang normal?

Kasir: Saya tidak menyarankan melakukan ini.

Cracker: Aku hanya ... dengar, aku mengalami hari yang buruk, oke? Saya seorang klien VIP dan tidak berminat untuk menyelidiki buku kode bodoh ini.

Kasir: Bagus. Jika Anda bersikeras, Tn. Tressler. Apa yang kamu inginkan

Cracker: Tolong, saya ingin mentransfer semua uang saya ke Dana Korban Nasional Arthur Tressler.

(Diam)

Kasir: Oke. Harap berikan kode PIN Anda untuk transaksi besar.

Cracker: Apa?

Kasir: Atas permintaan pribadi Anda, transaksi sebesar ini memerlukan PIN untuk transaksi besar. Kode ini diberikan kepada Anda saat membuka akun.

Cracker: ... Aku kehilangan dia. Apakah ini benar-benar perlu? Tidak bisakah Anda menyetujui kesepakatan?

Kasir: Tidak Ada. Maaf, Tn. Tressler. Sekali lagi, ini adalah ukuran keamanan yang Anda minta. Jika mau, kami dapat mengirim kode PIN baru ke kotak surat.

Pahlawan kami menunda operasi. Mereka mendengarkan beberapa transaksi utama Tressler, berharap dapat mendengar kode pin; tetapi setiap kali percakapan berubah menjadi omong kosong terenkripsi sebelum sesuatu yang menarik terdengar di sana. Akhirnya, suatu hari rencana itu diberlakukan. Mereka dengan sabar menunggu saat ketika Tressler harus menyelesaikan transaksi besar melalui telepon, ia terhubung ke saluran, dan kemudian ...

Thressler: Halo. Tolong, saya ingin mengeluarkan transaksi jarak jauh.

Kasir: Hebat. Silakan lihat buku kode rahasia pribadi Anda, halaman ...

(Bising menekan tombol; suara kasir berubah menjadi suara yang tidak terdengar).

Kasir: - # @ $ # @ $ # * @ $$ @ # * akan dienkripsi dengan kata ini sebagai kunci. AAAYRR PLRQRZ MMNJK LOJBAN ...

Thressler: Maaf, saya tidak begitu mengerti. Sekali lagi Halaman yang mana? Apa kata

Kasir: Ini adalah halaman @ # $ @ # * $) # * # @ () # @ $ (# @ * $ (# @ *.

Thressler: Apa?

Kasir: Jumlah kata dua puluh @ $ # @ $ #% # $.

Thressler: Serius! Cukup sudah! Anda dan protokol keamanan Anda adalah semacam sirkus. Saya tahu bahwa Anda dapat berbicara secara normal dengan saya.

Kasir: Saya tidak menyarankan ...

Thressler: Dan saya tidak menyarankan Anda untuk membuang waktu saya. Saya tidak ingin mendengar lebih banyak tentang hal ini sampai saya memperbaiki masalah dengan saluran telepon saya. Bisakah kita mengatur kesepakatan ini atau tidak?

Kasir: ... ya. Bagus Apa yang kamu inginkan

Thressler: Saya ingin mentransfer $ 20.000 ke Lord Business Investments, nomor akun ...

Kasir: Mohon tunggu sebentar. Ini masalah besar. Harap berikan kode PIN Anda untuk transaksi besar.

Thressler: Apa? Oh tentu saja. 1234.

Inilah serangan jatuh. Protokol yang lebih lemah, "hanya berbicara langsung," dimaksudkan sebagai opsi dalam keadaan darurat. Namun kita ada di sini.

Anda dapat mengajukan pertanyaan tentang siapa, yang waras, akan merancang sistem nyata seperti "aman sampai ditanyakan sebaliknya", yang dijelaskan di atas. Tetapi sama seperti bank fiktif mengambil risiko untuk menyelamatkan pelanggan yang tidak menyukai kriptografi, sistem secara keseluruhan sering cenderung persyaratan yang acuh tak acuh atau bahkan secara terbuka memusuhi keamanan.

Ini persis cerita yang terjadi dengan SSLv2 pada tahun 1995. Pemerintah AS telah lama mulai mempertimbangkan kriptografi sebagai senjata yang paling baik dijauhkan dari musuh eksternal dan internal. Fragmen kode secara individual disetujui untuk ekspor dari Amerika Serikat, sering menjadi sasaran pelemahan yang disengaja dari algoritma. Netscape, pengembang peramban paling populer, Netscape Navigator, hanya diberi izin SSLv2 dengan kunci RSA yang awalnya rentan sebesar 512 bit (dan 40 bit untuk RC4).

Pada akhir milenium, aturan telah melunak dan akses ke enkripsi modern menjadi tersedia secara luas. Namun, klien dan server selama bertahun-tahun mendukung kriptografi “ekspor” yang melemah karena inersia yang sama yang mempertahankan dukungan untuk sistem yang sudah usang. Klien berpikir mereka mungkin menemukan server yang tidak mendukung hal lain. Server melakukan hal yang sama. Tentu saja, SSL menentukan bahwa klien dan server tidak boleh menggunakan protokol yang lemah ketika yang terbaik tersedia. Tetapi premis yang sama berlaku untuk Tressler dan banknya.

Teori ini menemukan aplikasi dalam dua serangan profil tinggi yang mengguncang keamanan protokol SSL satu demi satu pada tahun 2015, keduanya ditemukan oleh Microsoft dan peneliti INRIA . Pada awalnya, pada bulan Februari, rincian serangan FREAK diungkapkan, dan setelah tiga bulan - serangan serupa lainnya yang disebut Logjam, yang akan kita diskusikan secara lebih rinci ketika kita beralih ke serangan kriptografi kunci publik.

Kerentanan FREAK (juga dikenal sebagai "Smack TLS") muncul ketika para peneliti menganalisis implementasi TLS klien / server dan menemukan kesalahan yang aneh. Dalam implementasi ini, jika klien bahkan tidak meminta kriptografi ekspor yang lemah, tetapi server masih merespons dengan kunci seperti itu, klien mengatakan "Oke" dan beralih ke sekelompok sandi yang lemah.

Pada saat itu, semua orang menganggap kriptografi ekspor sudah ketinggalan zaman dan dilarang untuk digunakan, sehingga serangan itu sangat mengejutkan dan memengaruhi banyak domain penting, termasuk situs Gedung Putih, kantor pajak AS, dan NSA. Lebih buruk lagi, ternyata banyak server rentan mengoptimalkan kinerja dengan menggunakan kembali kunci yang sama daripada membuat yang baru untuk setiap sesi. Ini memungkinkan, setelah menurunkan protokol, untuk melakukan serangan dengan perhitungan: peretasan satu kunci tetap relatif mahal ($ 100 dan 12 jam pada saat publikasi), tetapi biaya praktis untuk menyerang koneksi menurun secara signifikan. Sudah cukup untuk mengambil kunci server sekali dan memecahkan cipher untuk semua koneksi selanjutnya mulai sekarang.

Dan sebelum melanjutkan, kita perlu menyebutkan satu serangan maju ...


Serangan Oracle


Moxie Marlinspike dikenal sebagai bapak dari cross-platform Signal crypto messenger; — (Cryptographic Doom Principle). , : « - , ». : « , , ».

, ; . « » - , , .

Misalnya, ambil desain fiktif dengan sandi substitusi yang rentan, dan kemudian tunjukkan kemungkinan serangan. Meskipun kita telah melihat serangan pada cipher substitusi menggunakan analisis frekuensi, ini bukan hanya "cara lain untuk memecahkan cipher yang sama". Sebaliknya, serangan oracle adalah penemuan yang jauh lebih modern, berlaku untuk banyak situasi di mana analisis frekuensi gagal, dan kita akan melihat demonstrasi ini di bagian selanjutnya. Di sini, sandi sederhana dipilih hanya untuk membuat contoh lebih jelas.

Jadi, Alice dan Bob berkomunikasi menggunakan cipher substitusi sederhana menggunakan kunci yang hanya diketahui oleh mereka. Mereka sangat ketat tentang panjang pesan: panjangnya persis 20 karakter. Oleh karena itu, mereka setuju bahwa jika seseorang ingin mengirim pesan yang lebih pendek, mereka harus menambahkan beberapa teks tiruan ke akhir pesan sehingga tepat 20 karakter. Setelah beberapa diskusi, mereka memutuskan bahwa mereka hanya akan menerima dummy teks berikut: a, bb, ccc, dddd, dll Dengan demikian, dikenal dummy teks dari setiap panjang yang diinginkan ...

Ketika Alice atau Bob menerima pesan, mereka pertama kali memeriksa bahwa pesan tersebut memiliki panjang yang benar (20 karakter), dan akhiran adalah teks boneka yang benar. Jika ini bukan masalahnya, maka mereka merespons dengan pesan kesalahan yang sesuai. Jika panjang teks dan teks fiktif berurutan, penerima membaca pesan itu sendiri dan mengirimkan respons terenkripsi.

Selama serangan, penyerang berpura-pura menjadi Bob dan mengirim pesan palsu kepada Alice. Pesan - omong kosong - penyerang tidak memiliki kunci, dan karena itu ia tidak dapat memalsukan pesan yang bermakna. Tetapi karena protokol melanggar prinsip azab, seorang penyerang masih dapat menjebak Alice, sehingga dia akan mengungkapkan informasi tentang kunci, seperti yang ditunjukkan di bawah ini.

: PREWF ZHJKL MMMN. LA

: .

: PREWF ZHJKL MMMN. LB

: .

: PREWF ZHJKL MMMN. LC

: ILCT? TLCT RUWO PUT KCAW CPS OWPOW!

, , , C a , .

: REWF ZHJKL MMMN. LAA

: .

: REWF ZHJKL MMMN. LBB

: .



: REWF ZHJKL MMMN. LGG

: .

: REWF ZHJKL MMMN. LHH

: TLQO JWCRO FQAW SUY LCR C OWQXYJW. IW PWWR TU TCFA CHUYT TLQO JWFCTQUPOLQZ.

Sekali lagi, cracker tidak tahu apa yang dikatakan Alice, tetapi mencatat bahwa H harus cocok dengan b karena Alice menerima teks tiruan.

Dan seterusnya, sampai penyerang mengetahui arti dari masing-masing karakter.

Sepintas, metode ini menyerupai serangan berdasarkan plaintext yang dipilih. Pada akhirnya, penyerang mengambil ciphertext, dan server dengan patuh memprosesnya. Perbedaan utama yang membuat serangan ini layak di dunia nyata adalah bahwa penyerang tidak perlu akses ke dekripsi aktual - hanya respons server, bahkan tidak berbahaya seperti "Teks fiktif yang salah", sudah cukup.

Meskipun serangan khusus ini bersifat instruktif, kita tidak boleh terlalu fokus pada spesifikasi skema “teks fiktif”, cryptosystem tertentu yang digunakan, atau urutan pesan yang dikirim oleh penyerang. Gagasan utamanya adalah bagaimana Alice bereaksi secara berbeda berdasarkan sifat-sifat plaintext, dan melakukan ini tanpa memverifikasi bahwa teks terenkripsi yang sesuai sebenarnya diterima dari pihak yang dipercaya. Dengan demikian, Alice memungkinkan penyerang untuk mengekstrak informasi rahasia dari tanggapannya.

Ada banyak perubahan dalam skenario ini. Karakter yang bereaksi Alice, atau perbedaan perilakunya, atau bahkan cryptosystem yang digunakan. Tetapi prinsipnya akan tetap sama, dan serangan secara keseluruhan akan tetap layak dalam satu bentuk atau lainnya. Implementasi dasar serangan ini membantu mendeteksi beberapa kesalahan keamanan yang akan segera kami atasi; tetapi pertama-tama beberapa pelajaran teori harus dipelajari. Bagaimana cara menggunakan "naskah Alice" fiksi ini dalam serangan yang mampu bekerja pada sandi modern yang sebenarnya? Apakah ini mungkin, bahkan dalam teori?

Pada tahun 1998, ahli kriptografi Swiss Daniel Bleichenbacher menjawab pertanyaan ini dengan tegas. Dia mendemonstrasikan serangan oracle dalam cryptosystem kunci publik RSA yang banyak digunakan menggunakan skema pesan tertentu. Dalam beberapa implementasi RSA, server merespons dengan pesan kesalahan yang berbeda, tergantung pada apakah plaintext cocok dengan skema atau tidak; itu sudah cukup untuk melancarkan serangan.

Empat tahun kemudian, pada tahun 2002, ahli kriptografi Prancis Serge Vaudenay mendemonstrasikan serangan oracle, hampir identik dengan yang dijelaskan dalam naskah Alice di atas - kecuali bahwa alih-alih sandi sandi fiktif, ia memecahkan kelas sandi modern yang sangat terhormat yang benar-benar orang gunakan. Secara khusus, serangan Wodene menargetkan sandi dengan ukuran input tetap ("blok sandi") ketika mereka digunakan dalam apa yang disebut "mode enkripsi CBC" dan dengan skema padding populer tertentu, pada dasarnya setara dengan yang ada di skrip Alice.

Juga pada tahun 2002, ahli kriptografi Amerika John Kelsey, penulis bersama Twofish- Mengusulkan berbagai serangan oracle pada sistem yang mengkompresi pesan dan kemudian mengenkripsi mereka. Yang paling mencolok di antara mereka adalah serangan, yang menggunakan fakta bahwa seringkali mungkin untuk mendapatkan panjang plaintext asli dari panjang ciphertext. Secara teori, ini memungkinkan serangan oracle yang mengembalikan bagian dari teks asli.

Selanjutnya, kami memberikan deskripsi yang lebih rinci tentang serangan Woden dan Kelsey (kami akan memberikan deskripsi yang lebih rinci tentang serangan Bleichenbacher ketika kami beralih ke serangan pada kriptografi kunci publik). Terlepas dari semua upaya kami, teks menjadi agak teknis; oleh karena itu, jika di atas sudah cukup untuk Anda, lewati dua bagian berikutnya.

Serangan Woden


Untuk memahami serangan Woden, pertama-tama Anda perlu berbicara lebih banyak tentang blok cipher dan mode enkripsi. "Block cipher" adalah, seperti yang telah disebutkan, sebuah cipher yang menerima kunci dan memasukkan panjang tetap tertentu ("panjang blok") dan menghasilkan blok terenkripsi dengan panjang yang sama. Cipher blok banyak digunakan dan dianggap relatif aman. DES yang sekarang sudah pensiun, dianggap sebagai sandi modern pertama, tidak jelas. Seperti disebutkan di atas, hal yang sama berlaku untuk AES, banyak digunakan saat ini.

Sayangnya, cipher blok memiliki satu kelemahan mencolok. Ukuran blok yang khas adalah 128 bit, atau 16 karakter. Jelas, kriptografi modern membutuhkan kerja dengan data input yang lebih besar, dan ini adalah tempat mode enkripsi muncul. Mode enkripsi pada dasarnya adalah peretasan: ini adalah cara untuk menerapkan cipher blok, yang menerima data input hanya dengan ukuran tertentu, untuk memasukkan data dengan panjang sewenang-wenang.

Serangan Woden difokuskan pada mode operasi CBC yang populer (Cipher Block Chaining, mode kopling blok ciphertext). Serangan itu melihat cipher blok dasar sebagai kotak hitam ajaib ditembus dan benar-benar melewati keamanannya.

Berikut adalah diagram yang menunjukkan cara kerja mode CBC:





Plus yang dilingkari menandakan operasi XOR (eksklusif ATAU). Misalnya, blok ciphertext kedua diterima:

  1. Melakukan operasi XOR pada blok kedua plaintext dengan blok pertama ciphertext.
  2. Enkripsi blok yang diterima menggunakan cipher blok menggunakan kunci.

Karena CBC menggunakan operasi biner XOR secara intensif, mari luangkan waktu sejenak untuk mengingat beberapa propertinya:

  • Idempotensi: A 0 = A
  • Komutatif: A B = B A
  • Asosiatif: A ( B C ) = ( A B ) C
  • Pembalikan diri: A A = 0
  • Byte-byte: Byte n of ( A B ) = (byte n dariA ) (byte n dariB )

Biasanya, sifat-sifat ini menyiratkan bahwa jika kita memiliki persamaan yang mencakup operasi XOR dan yang tidak diketahui, itu bisa diselesaikan. Misalnya, kalau kita tahu ituA X = B dengan tidak diketahuiX dan terkenalA dan B , maka kita bisa mengandalkan properti di atas untuk menyelesaikan persamaanX . Menerapkan XOR di kedua sisi persamaan dengan A kita dapatkanX = A B .Sebentar lagi, semua ini akan menjadi sangat relevan.

Ada dua perbedaan kecil dan satu perbedaan besar antara skrip Alice kami dan serangan Woden. Dua minor:

  • Dalam skenario Alice berharap bahwa ujung terbuka dalam teks a, bb, cccdan sebagainya. Dalam serangan Woden, korban malah mengharapkan plaintext untuk mengakhiri N kali dengan byte N (mis., Heksadesimal 01 atau 02 02, atau 03 03 03, dan seterusnya). Ini adalah perbedaan kosmetik murni.
  • Dalam naskah Alice, mudah untuk mengatakan apakah Alice telah menerima pesan, sebagai tanggapan atas “Teks fiktif yang salah.” Dalam serangan Woden, diperlukan lebih banyak analisis dan implementasi yang akurat di pihak korban adalah penting; tetapi untuk singkatnya kami menerima begitu saja bahwa analisis ini masih memungkinkan.

Perbedaan utama:

  • , ( ), , . .

Ini adalah perbedaan utama - bagian terakhir dari teka-teki untuk memahami serangan Woden, jadi mari kita berpikir sejenak tentang mengapa dan bagaimana Anda dapat mengatur serangan oracle pada CBC.

Misalkan ciphertext CBC dari 247 blok diberikan, dan kami ingin mendekripsi. Kami dapat mengirim pesan palsu ke server, seperti sebelumnya kami dapat mengirim pesan palsu ke Alice. Server akan mendekripsi pesan untuk kami, tetapi tidak akan menampilkan dekripsi - sebaliknya, seperti dalam kasus Alice, server hanya akan melaporkan sedikit informasi: dalam plaintext, apakah isian yang valid atau tidak.

Perhatikan bahwa dalam skenario Alice, kami memiliki hubungan berikut:

SIMPLE_SUBSTITUTION(ciphertext,key)=plaintext


Kami menyebutnya persamaan Alice. Kami mengendalikan ciphertext; server (Alice) menggabungkan informasi yang tidak jelas tentang plaintext yang diterima; dan ini memungkinkan kami untuk menampilkan informasi tentang faktor terakhir - kuncinya. Dengan analogi, jika kita dapat menemukan koneksi semacam itu untuk skrip CBC, kita dapat mengekstraksi beberapa informasi rahasia di sana juga.

Untungnya, memang ada hubungan yang bisa kita gunakan. Pertimbangkan keluaran panggilan akhir dekripsi blok sandi dan tetapkan data ini sebagaiW . Juga menunjukkan blok plaintext P 1 , P 2 , . . . dan blok ciphertextC 1 , C 2 , . . . . Lihatlah grafik CBC dan perhatikan ternyata:

C 246W = P 247


Kami menyebutnya "persamaan CBC."

Dalam skenario Alice, dengan memantau ciphertext dan mengamati kebocoran informasi tentang plaintext yang sesuai, kami dapat mengatur serangan yang memulihkan istilah ketiga persamaan - kuncinya. Dalam skenario CBC, kami juga mengontrol ciphertext dan mengamati kebocoran informasi di plaintext yang sesuai. Jika analogi berlaku, kita bisa mendapatkan informasi tentangW .

Misalkan kita benar-benar dipulihkan W , lalu apa? Nah, maka kita bisa langsung mencetak seluruh blok terakhir dari plaintext (P 247 ) hanya dengan mengetikC 246 (yang kita miliki) danterima
W dalam persamaan CBC. Jadi, kami optimis tentang rencana serangan secara umum, dan inilah saatnya untuk menyelesaikan perinciannya. Kami memperhatikan persis bagaimana server membocorkan informasi plaintext. Dalam skrip Alice, kebocoran terjadi karena Alice menjawab pesan yang benar hanya jika

SIMPLE_SUBSTITUTION(ciphertext,key)berakhir dengan garis a(atau bb, dan seterusnya, tetapi kemungkinan kondisi ini dipicu sangat kecil). Demikian pula dengan CBC, server menerima padding jika dan hanya jikaC 246W berakhir dalam heksadesimal. Jadi, mari kita coba trik yang sama: mengirim ciphertext palsu dengan nilai-nilai palsu kita sendiri01C 246 sampai server menerima isian. Ketika server menerima padding untuk salah satu pesan palsu kami, itu berarti bahwa:



C 246W = data dengan hex 01 di akhir


Sekarang gunakan properti byte XOR:

( byte terakhir dari  C 246 ) ( byte terakhir dari  W ) = hex 01


Kami tahu anggota pertama dan ketiga. Dan kita telah melihat bahwa ini memungkinkan Anda untuk mengembalikan anggota yang tersisa - byte terakhir dariW :

( byte terakhir dari  W ) = ( byte terakhir dari  C 246 ) ( hex 01 )


Ini juga memberi kita byte terakhir dari blok terakhir dari plaintext melalui persamaan CBC dan properti byte.

Kita bisa berakhir dengan ini dan merasa puas bahwa kita telah menyerang sandi yang kuat secara teoritis. Tetapi pada kenyataannya, kita dapat melakukan lebih banyak lagi: kita benar-benar dapat memulihkan seluruh teks. Ini membutuhkan trik tertentu, yang tidak ada dalam naskah asli Alice dan tidak termasuk dalam prasyarat untuk serangan oracle, tetapi metode ini masih layak untuk dijelajahi.

Untuk memahaminya, pertama-tama perhatikan bahwa sebagai hasil mendapatkan nilai yang benar dari byte terakhirW kita memiliki kemampuan baru. Sekarang, ketika memalsukan ciphertext, kita dapat mengontrol byte terakhir dari plaintext yang sesuai. Sekali lagi, ini disebabkan oleh persamaan CBC dan properti byte:

( byte terakhir dari  C 246 ) ( byte terakhir dari  W ) = byte terakhir dari  P 247


Karena kita sekarang tahu istilah kedua, kita bisa menggunakan kontrol kita yang pertama untuk mengontrol yang ketiga. Kami hanya menghitung:

( Byte terakhir dari palsu  C 246 ) = ( Byte terakhir yang diinginkan dari  P 247 ) ( Byte terakhir dari  W )


Kami tidak bisa melakukan ini sebelumnya, karena kami belum memiliki byte terakhir W .

Bagaimana ini akan membantu kami? Misalkan sekarang kita akan membuat semua ciphertext sehingga dalam plaintext yang sesuai byte terakhir sama 02. Sekarang server menerima padding hanya jika plaintext berakhir 02 02. Karena kami memperbaiki byte terakhir, ini hanya akan terjadi jika byte kedua dari plaintext juga 02. Kami terus mengirim blok ciphertext palsu, mengubah byte kedua, hingga server menerima bantalan untuk salah satunya. Saat ini kita mendapatkan:

( Byte kedua dari palsu  C 246 ) ( byte kedua dari belakang dari  W ) = hex 02


Dan kami mengembalikan byte kedua dari belakang W persis sama dengan yang terakhir dipulihkan. Kita lanjutkan dengan nada yang sama: kita perbaiki dua byte terakhir dari plaintext, ulangi serangan ini untuk byte ketiga dari akhir byte, dan seterusnya, akhirnya sepenuhnya pulih03 03W .

Bagaimana dengan sisa teks? Harap diperhatikan bahwa nilainyaW sebenarnyaBLOCK_DECRYPT(kunci,C247 ) . Kita dapat menempatkan blok lain sebagai gantinya C 247 , dan serangan itu masih akan berhasil. Bahkan, kita bisa meminta server untuk melakukannyaBLOCK_DECRYPTuntuk data apa pun. Pada titik ini, permainan sudah selesai - kita dapat mendekripsi ciphertext apa saja (sekali lagi lihat diagram dekripsi CBC untuk melihat ini; dan perhatikan bahwa vektor IV tersedia untuk umum).

Metode khusus ini memainkan peran penting dalam serangan oracle, yang akan kita temui nanti.

Serang kelsey


John Kelsey yang berpikiran dekat mengemukakan prinsip-prinsip yang mendasari banyak kemungkinan serangan, dan bukan hanya perincian serangan spesifik pada sandi tertentu. Artikel 2002 -nya adalah studi tentang kemungkinan serangan pada data terkompresi terenkripsi. Anda berpikir bahwa untuk melakukan serangan, informasi saja tidak cukup, bahwa data dikompresi sebelum enkripsi? Ternyata cukup.

Hasil luar biasa ini disebabkan oleh dua prinsip. Pertama, ada korelasi kuat antara panjang plaintext dan panjang ciphertext; bagi banyak cipher, kesetaraan yang tepat. Kedua, ketika kompresi dilakukan, ada juga korelasi yang kuat antara panjang pesan terkompresi dan tingkat "noise" dari plaintext, yaitu proporsi karakter yang tidak berulang (istilah teknisnya adalah "entropi besar").

Untuk melihat prinsip dalam tindakan, pertimbangkan dua teks plainteks:

Hapus teks 1: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Hapus teks 2: ATVXCAGTRSVPTVVULSJQHGEYCMQPCRQBGCYIXCFJGJ

Misalkan kedua plaintext dikompresi dan kemudian dienkripsi. Anda mendapatkan dua ciphertext yang dihasilkan dan Anda harus menebak ciphertext mana yang cocok dengan plaintext:

Ciphertext 1: PVOVEYBPJDPVANEAWVGCIUWAABCIYIKOOURMYDTA

Ciphertext 2: DWKJZXYU


Jawabannya jelas. Di antara plaintext, hanya plaintext 1 yang dapat dikompres dengan panjang terbatas dari ciphertext kedua. Kami mengetahuinya tanpa mengetahui apa pun tentang algoritma kompresi, kunci enkripsi, atau bahkan sandi itu sendiri. Dibandingkan dengan hierarki kemungkinan serangan kriptografi, ini adalah semacam kegilaan.

Lebih lanjut Kelsey menunjukkan bahwa dalam keadaan tertentu yang tidak lazim prinsip ini juga dapat digunakan untuk melakukan serangan oracle. Secara khusus, ia menjelaskan bagaimana penyerang dapat memulihkan plaintext rahasia jika ia dapat memaksa server untuk mengenkripsi data formulir (plaintext, diikuti olehX sementara dia mengendalikanX dan entah bagaimana dapat memeriksa panjang hasil terenkripsi). Sekali lagi, seperti dalam serangan oracle lainnya, kami memiliki rasio:



Enkripsi ( Kompresi ( Hapus teks diikuti oleh X ) ) = Ciphertext


Sekali lagi, kami mengontrol satu anggota ( X ), kami melihat sedikit kebocoran informasi tentang anggota lain (ciphertext) dan mencoba memulihkan yang terakhir (plaintext). Terlepas dari analoginya, ini adalah situasi yang agak tidak biasa dibandingkan dengan serangan oracle lainnya yang kami lihat.Untuk mengilustrasikan bagaimana serangan semacam itu dapat bekerja, kami menggunakan skema kompresi fiksi yang baru saja kami buat: TOYZIP. Itu mencari baris teks yang sudah muncul sebelumnya dalam teks, dan menggantinya dengan tiga byte placeholder yang menunjukkan di mana menemukan contoh baris sebelumnya dan berapa kali muncul di sana. Sebagai contoh, sebuah stringdapat dikompres denganpanjang 13 byte dibandingkan dengan 15 byte aslinya.Misalkan seorang penyerang mencoba untuk memulihkan plaintext dari suatu formulir

helloworldhellohelloworld[00][00][05]

password=...di mana kata sandi itu sendiri tidak dikenal. Menurut model serangan Kelsey, penyerang dapat meminta server untuk mengompres dan kemudian mengenkripsi pesan formulir (plaintext, diikuti olehX ) dimanaX adalah teks gratis. Ketika server selesai, ia melaporkan panjang hasilnya. Serangannya sebagai berikut:

Kerupuk: Harap kompres dan enkripsi plaintext tanpa mengisi apa pun.

Server: Hasil panjang 14.

Cracker: Harap kompres dan enkripsi enkripsi teks yang Anda tambahkan password=a.

Server: Hasil Panjang 18.

Catatan cracker: [asli 14] + [tiga byte yang diganti password=] +a

Kerupuk: Harap kompres dan enkripsi plaintext yang telah Anda tambahkan password=b.

Server: Panjang hasilnya 18.

Cracker: Harap kompres dan enkripsi enkripsi teks yang telah Anda tambahkan password=.

Server: Panjang hasil 17.

Catatan cracker: [asli 14] + [tiga byte yang diganti password=c]. Ini mengasumsikan bahwa teks asli berisi string password=c. Artinya, kata sandi dimulai dengan hurufc

Kerupuk: Harap kompres dan enkripsi plaintext yang telah Anda tambahkan password=a.

Server: Hasil Panjang 18.

Catatan cracker: [asli 14] + [tiga byte yang diganti password=] +a

Kerupuk: Harap kompres dan enkripsi plaintext yang telah Anda tambahkan password=b.

Server: Hasil Panjang 18.

(... beberapa waktu kemudian ...)

Kerupuk: Harap kompres dan enkripsi plaintext yang telah Anda tambahkan password=.

Server: Panjang hasil 17.

Catatan cracker: [asli 14] + [tiga byte yang diganti password=co]. Dengan logika yang sama, cracker menyimpulkan bahwa kata sandi dimulai dengan huruf-hurufco

Dan seterusnya sampai seluruh kata sandi dipulihkan.

Pembaca dimaafkan karena berpikir bahwa ini adalah latihan murni akademis dan skenario serangan seperti itu tidak akan pernah terjadi di dunia nyata. Sayangnya, seperti yang akan segera kita lihat, dalam kriptografi lebih baik tidak berjanji.

Kerentanan Merek: CRIME, POODLE, DROWN


Akhirnya, setelah mempelajari teori secara terperinci, kita dapat melihat bagaimana metode ini digunakan dalam serangan kriptografi nyata.

KEJAHATAN


Jika serangan itu menargetkan browser dan jaringan korban, sesuatu akan lebih sederhana, dan sesuatu yang lebih rumit. Misalnya, mudah untuk melihat lalu lintas korban: cukup duduk dengannya di kafe yang sama dengan WiFi. Karena alasan ini, calon korban (mis., Semua orang) biasanya disarankan untuk menggunakan koneksi terenkripsi. Ini akan lebih sulit, tetapi masih memungkinkan untuk mengeksekusi permintaan HTTP atas nama korban ke beberapa situs pihak ketiga (misalnya, Google). Penyerang harus memikat korban ke halaman web jahat dengan skrip yang akan membuat permintaan. Browser web akan secara otomatis menyediakan cookie sesi yang sesuai.

Itu tampak luar biasa. Jika Bob telah masuk evil.com, dapatkah skrip di situs ini meminta Google untuk mengirim email kata sandi Bob kepadaattacker@evil.com ? , , . ( Cross-Site Request Forgery , CSRF), 90-. , evil.com , Google ( ) : «, CSRF … … . , ». « » (same-origin policy), A , - B. evil.com google.com , .

Kita harus menekankan bahwa jika Bob tidak menggunakan koneksi terenkripsi, semua perlindungan ini tidak ada artinya. Seorang penyerang hanya dapat membaca lalu lintas Bob dan mengembalikan cookie sesi Google. Dengan cookie ini, ia hanya akan membuka tab Google baru tanpa meninggalkan perambannya sendiri, dan menyamar sebagai Bob tanpa menemui kebijakan asal yang sama. Tapi, sayangnya untuk cracker, ini menjadi kurang umum. Internet secara keseluruhan telah lama menyatakan perang terhadap koneksi yang tidak terenkripsi, dan lalu lintas keluar Bob mungkin dienkripsi, apakah dia suka atau tidak. Selain itu, sejak awal implementasi protokol, lalu lintas juga dikompresi sebelum enkripsi; itu adalah praktik umum untuk mengurangi latensi.

Di sinilah CRIME berperan .(Rasio Kompresi Infoleak Menjadi Mudah, kebocoran sederhana melalui rasio kompresi). Kerentanan itu diungkapkan pada September 2012 oleh peneliti keamanan Juliano Rizzo dan Thai Duong. Kami telah memeriksa keseluruhan landasan teoretis, yang memungkinkan kami untuk memahami apa yang mereka lakukan dan bagaimana. Seorang penyerang dapat memaksa browser Bob untuk mengirim permintaan ke Google, dan kemudian mendengarkan tanggapan di jaringan lokal dalam bentuk terkompresi, terenkripsi. Oleh karena itu, kami memiliki:

Lalu lintas web = Enkripsi ( Kompresi ( permintaan dan cookie ) )


Di sini, cracker mengontrol permintaan dan memiliki akses ke sniffer traffic, termasuk ukuran paket. Skenario fiksi Kelsey menjadi kenyataan.

Memahami teorinya, penulis CRIME membuat eksploit yang dapat mencuri cookie sesi untuk berbagai situs, termasuk Gmail, Twitter, Dropbox, dan Github. Kerentanan tersebut mempengaruhi sebagian besar browser web modern, akibatnya tambalan dirilis yang secara diam-diam mengubur fungsi kompresi di SSL sehingga tidak digunakan sama sekali. Satu-satunya yang terlindungi dari kerentanan adalah Internet Explorer yang terhormat, yang tidak pernah menggunakan kompresi SSL sama sekali.

POODLE


Pada Oktober 2014, tim keamanan Google membuat kegemparan di komunitas keamanan. Mereka mampu mengeksploitasi kerentanan dalam protokol SSL, diperbaiki lebih dari sepuluh tahun yang lalu.

Ternyata meskipun TLSv1.2 baru berjalan di server, banyak yang meninggalkan dukungan untuk SSLv3 usang untuk kompatibilitas mundur dengan Internet Explorer 6. Kami sudah berbicara tentang serangan downgrade, sehingga Anda dapat membayangkan apa yang terjadi. Sabotase protokol jabat tangan yang terorganisasi dengan baik - dan server siap untuk kembali ke SSLv3 lama yang baik, pada dasarnya membatalkan 15 tahun terakhir penelitian keamanan.

Untuk konteks historis, berikut adalah ringkasan singkat dari sejarah SSL hingga versi 2 dari Matthew Green :

Transport Layer Security (TLS) — . [..] , , TLS. [..] TLS TLS. Netscape Communications "Secure Sockets Layer" SSL. , SSL , -. , SSL SSL 2 . , [..] 90-, « ». , , . SSLv2 , — , SSLv2 .

Setelah peristiwa ini, pada tahun 1996, perusahaan Netscape yang frustrasi merancang ulang SSL dari awal. Hasilnya adalah SSL versi 3, yang memperbaiki beberapa masalah keamanan yang diketahui untuk pendahulunya .

Untungnya untuk kerupuk, "sedikit" tidak berarti "segalanya." Secara umum, SSLv3 menyediakan semua blok bangunan yang diperlukan untuk meluncurkan serangan Woden. Protokol menggunakan block cipher dalam mode CBC dan skema padding yang tidak aman (ini diperbaiki dalam TLS; oleh karena itu, serangan downgrade muncul). Jika Anda ingat pola isian di deskripsi asli kami tentang serangan Woden, pola SSLv3 sangat mirip.

Tapi, sayangnya untuk cracker, "mirip" tidak berarti "identik". Skema padding SSLv3 adalah "N byte acak diikuti oleh angka N". Dalam kondisi ini, cobalah untuk memilih blok imajiner ciphertext dan pergi melalui semua tahap skema Wodene asli: Anda akan menemukan bahwa serangan berhasil mengekstrak byte terakhir dari blok teks biasa yang sesuai, tetapi tidak melangkah lebih jauh. Menguraikan setiap byte ke-16 dari ciphertext adalah trik yang sangat baik, tetapi itu bukan kemenangan.

Menghadapi kegagalan, tim Google menggunakan pilihan ekstrem: mereka beralih ke model ancaman yang lebih kuat - yang digunakan dalam CRIME. Dengan asumsi bahwa penyerang adalah skrip yang diluncurkan pada tab browser korban dan dapat mengekstrak cookie sesi, serangan itu tetap mengesankan. Meskipun model ancaman yang lebih luas kurang realistis, kami telah melihat di bagian sebelumnya bahwa model khusus ini layak.

Mengingat kemampuan cracker yang lebih kuat ini, serangan sekarang dapat berlanjut. Harap perhatikan bahwa penyerang tahu di mana cookie sesi terenkripsi ditampilkan di header dan mengontrol panjang permintaan HTTP yang mendahuluinya. Oleh karena itu, ia dapat memanipulasi permintaan HTTP sehingga dapat menyelaraskan byte terakhir dari cookie sesuai dengan akhir blok. Sekarang byte ini cocok untuk dekripsi. Anda cukup menambahkan satu karakter ke permintaan, dan byte kedua dari cookie akan tetap berada di tempat yang sama dan cocok untuk dipilih dengan metode yang sama. Serangan berlanjut dengan cara ini sampai cookie benar-benar pulih. Ini disebut POODLE: Padding Oracle on Downgraded Legacy Encryption, mengisi oracle dengan mengurangi enkripsi usang.

Tenggelam


Seperti yang telah kami sebutkan, SSLv3 memiliki kekurangan, tetapi pada dasarnya berbeda dari pendahulunya, karena SSLv2 yang bocor adalah produk dari era yang berbeda. Di sana ada kemungkinan untuk menyela pesan di tengah: berubah menjadi ; klien dan server dapat bertemu di Internet, membangun kepercayaan dan bertukar rahasia di depan mata penyerang, yang kemudian dengan mudah berpura-pura menjadi keduanya. Ada juga masalah dengan kriptografi ekspor, yang kami sebutkan ketika mempertimbangkan FREAK. Ini adalah Sodom dan Gomora kriptografi.

Pada bulan Maret 2016, tim peneliti dari berbagai bidang teknis berkumpul dan membuat penemuan yang mengejutkan: SSLv2 masih digunakan dalam sistem keamanan. Ya, penyerang tidak bisa lagi menurunkan sesi TLS modern ke SSLv2, karena lubang ini ditutup setelah FREAK dan POODLE, tetapi mereka masih dapat terhubung ke server dan memulai sesi SSLv2 sendiri.

Anda bertanya, apa yang kita pedulikan apa yang mereka lakukan di sana? Mereka memiliki sesi yang rentan, tetapi ini seharusnya tidak mempengaruhi sesi lain atau keamanan server - kan? Yah, tidak juga. Ya, begitulah seharusnya dalam teori. Tetapi tidak - karena pembuatan sertifikat SSL membebankan beban tertentu, akibatnya banyak server menggunakan sertifikat yang sama dan, sebagai akibatnya, kunci RSA yang sama untuk koneksi TLS dan SSLv2. Lebih buruk lagi, karena bug OpenSSL dalam implementasi SSL populer ini, opsi "Nonaktifkan SSLv2" tidak benar-benar berfungsi.

Ini memungkinkan serangan lintas protokol pada TLS yang disebut DROWN(Mendekripsi RSA dengan usang dan Melemahnya enkripsi, mendekripsi RSA menggunakan enkripsi yang usang dan lemah). Ingatlah bahwa ini tidak sama dengan serangan jatuh; seorang penyerang tidak perlu bertindak sebagai "orang di tengah" dan tidak perlu melibatkan klien untuk berpartisipasi dalam sesi yang tidak aman. Penyerang hanya memulai sesi SSLv2 tidak aman dengan server sendiri, menyerang protokol yang lemah dan mengembalikan kunci server pribadi RSA. Kunci ini juga berlaku untuk koneksi TLS, dan mulai sekarang tidak ada keamanan TLS yang akan menyelamatkannya dari peretasan.

Tetapi peretasan membutuhkan serangan yang berfungsi terhadap SSLv2, yang memungkinkan Anda untuk memulihkan tidak hanya lalu lintas tertentu, tetapi juga kunci server rahasia RSA. Meskipun ini adalah produksi yang rumit, para peneliti dapat memilih kerentanan apa pun yang benar-benar ditutup setelah SSLv2. Pada akhirnya, mereka menemukan opsi yang cocok: serangan Bleichenbacher, yang telah kami sebutkan sebelumnya dan yang akan dijelaskan secara rinci di artikel berikutnya. SSL dan TLS dilindungi dari serangan ini, tetapi beberapa fungsi SSL acak, dikombinasikan dengan kunci pendek dalam kriptografi tingkat ekspor, memungkinkan implementasi DROWN tertentu .

Pada saat publikasi kerentanan DROWN, 25% dari situs internet teratas terpengaruh, dan serangan itu dapat dilakukan dengan sumber daya sederhana yang tersedia bahkan untuk peretas tunggal yang nakal. Butuh delapan jam komputasi dan $ 440 untuk mengambil kunci server RSA, dan SSLv2 mengubah statusnya dari "usang" menjadi "radioaktif".

Tunggu, bagaimana dengan Heartbleed?


Ini bukan serangan kriptografi dalam arti seperti yang dijelaskan di atas; ini adalah buffer overflow.

Istirahatlah


Kami mulai dengan beberapa metode dasar: brute force, interpolasi, downgrade, cross-protokol, dan pra-perhitungan. Kemudian mereka memeriksa satu teknik canggih, mungkin komponen utama dari serangan kriptografi modern: ini adalah serangan oracle. Kami sudah mengetahuinya untuk waktu yang lama - dan tidak hanya memahami prinsip pada intinya, tetapi juga detail teknis dari dua implementasi spesifik: serangan Wodene pada mode enkripsi CBC dan serangan Kelsey pada protokol enkripsi dengan kompresi awal.

Saat meninjau serangan downgrade dan dengan perhitungan awal, kami secara singkat menguraikan serangan FREAK, yang menggunakan kedua metode, karena situs target turun ke kunci yang lemah dan kemudian menggunakan kembali kunci yang sama. Untuk artikel berikutnya, kami meninggalkan serangan Logjam (sangat mirip) yang menargetkan algoritma kunci publik.

Kemudian kami memeriksa tiga contoh lagi penerapan prinsip-prinsip ini. Pertama, CRIME dan POODLE: dua serangan yang mengandalkan kemampuan cracker untuk menyuntikkan plaintext sewenang-wenang di sebelah plaintext target, lalu memeriksa respons server dan kemudian , menggunakan metodologi serangan oracle, gunakan informasi yang sedikit ini untuk memulihkan sebagian plaintext. CRIME mengambil jalur serangan Kelsey pada kompresi SSL, sementara POODLE malah menggunakan serangan Woden pada CBC dengan efek yang sama.

Kemudian kami mengalihkan perhatian kami ke serangan lintas-protokol DROWN, yang membuat koneksi ke server menggunakan protokol SSLv2 yang ketinggalan zaman, dan kemudian mengembalikan kunci server rahasia menggunakan serangan Bleichenbacher. Pada titik ini, kami telah melewatkan detail teknis dari serangan ini; seperti Logjam, dia harus menunggu sampai kita mempelajari secara menyeluruh cryptosystem kunci publik dan kerentanannya.

Pada artikel berikutnya, kita akan berbicara tentang serangan lanjutan - seperti metode meet-in-the-middle, pembacaan sandi diferensial, dan serangan "ulang tahun". Kami akan melakukan serangan singkat terhadap serangan melalui saluran pihak ketiga, dan kemudian kami akan mengambil hal yang paling enak - cryptosystems dengan kunci publik.

Source: https://habr.com/ru/post/id462437/


All Articles