2 poin oleh GN⁺ 2024-09-08 | 1 komentar | Bagikan ke WhatsApp
  • ZIP kode sumber ANC Operation Vula yang disimpan dengan kata sandi sejak 1991 berhasil didekripsi, memungkinkan dirilisnya kode komunikasi rahasia yang digunakan untuk melawan rezim apartheid Afrika Selatan
  • Kode ini digunakan pada akhir 1980-an untuk membangun jaringan bawah tanah ANC di dalam Afrika Selatan, dan bertukar pesan terenkripsi dengan one-time pad menggunakan komputer 8-bit, nada DTMF, acoustic coupler, dan PowerBASIC
  • ZipCrypto pada PKZIP awal rentan terhadap serangan known-plaintext, dan kunci dipulihkan dengan bkcrack melalui pencarian plaintext 12 byte yang dapat diprediksi di dalam ZIP
  • Serangan memanfaatkan entri Store yang tidak terkompresi di dalam ALLBAS.ZIP, header PK dari ZIP internal, serta nama file pertama COMKEY.BAS; setelah 23 menit diperoleh kunci 98e0f009 48a0b11a c70f8499
  • RANDOM.BAS dan TECOD.BAS yang telah didekripsi dikompilasi dan dijalankan di DOSBox, sehingga terkonfirmasi cara pembuatan data acak, enkripsi/dekripsi file, penggunaan RAM disk, dan pemusnahan materi kunci setelah digunakan

Mengapa kode Operation Vula terkunci

  • Operation Vula adalah operasi pada akhir 1980-an untuk menyelundupkan pimpinan ANC dan perlengkapan ke Afrika Selatan, serta membangun jaringan bawah tanah yang menghubungkan unsur-unsur aktivitas di dalam negeri
  • Untuk komunikasi yang aman, mereka bertukar pesan terenkripsi one-time pad menggunakan komputer 8-bit, nada DTMF, acoustic coupler, berbagai perangkat, dan program PowerBASIC
  • Tim Jenkin, pembuat utama sistem kriptografinya, merilis kode asli di Vulacode GitHub, dan penjelasan detailnya ada di Talking To Vula.pdf
  • Alasan langsung mengapa rilis kode terlambat adalah sebuah file ZIP terenkripsi yang dibuat pada 1991
    • Saat meninggalkan Inggris dan kembali ke Afrika Selatan, Tim Jenkin mengemas seluruh kode sumber ke dalam ZIP dan memasang kata sandi
    • Setelah itu, di Afrika Selatan ia tidak perlu membuka kode tersebut, dan beberapa tahun kemudian ketika mencoba membukanya lagi, ia tidak ingat kata sandinya
    • Satu file yang dapat diakses adalah versi yang sangat awal, sedangkan sisanya tidak bisa diekstrak karena kata sandi

File PKZIP lama dan serangan known-plaintext

  • File yang diterima adalah ALLBAS.ZIP dan CODMAY93.ZIP; keduanya dibuat dengan PKZIP awal dan dilindungi kata sandi
  • Pada format ZIP saat itu, ZipCrypto memiliki serangan known-plaintext, dan implementasi open source bkcrack dapat digunakan
  • Serangan ini membutuhkan prediksi plaintext 12 byte pada posisi yang diketahui di dalam file ZIP
  • ALLBAS.ZIP berisi beberapa file .BAS, .INC, .ZIP, .EXE, dan sebagian entri ditandai dengan metode kompresi Store
    • Entri Store adalah file yang tidak dikompresi karena sudah berupa biner, sehingga plaintext bisa diprediksi tanpa harus mencocokkan hasil kompresi
    • File ZIP itu sendiri juga dimasukkan sebagai entri Store, dan karena file ZIP memiliki header PK di awal, ia cocok dijadikan kandidat plaintext

Mencari kandidat plaintext: nama file pertama di ZIP internal

  • Target serangan adalah file ZIP internal OLDCOD.ZIP yang berada di dalam ALLBAS.ZIP
  • Header PK di awal file ZIP memuat panjang nama file, panjang extra field, dan sebagainya, sehingga jika nama file pertama diketahui, plaintext yang dibutuhkan untuk serangan dapat dibuat
  • Jika nama file minimal 8 karakter, bersama ekstensi seperti .BAS atau .INC, ditambah byte ukuran nama file dan panjang extra field, 12 byte yang diperlukan bisa diperoleh
  • Dalam kasus terburuk, nama file berbentuk kombinasi huruf besar dan angka, maksimal 8 karakter beserta ekstensinya, juga bisa di-bruteforce, tetapi praktiknya tidak diperlukan
  • Tim Jenkin memiliki versi lain dari OLDCOD.ZIP, dan dapat memberi tahu bahwa file pertama di dalamnya adalah COMKEY.BAS

Pemulihan kunci dengan bkcrack

  • Untuk memasukkan COMKEY.BAS sebagai kandidat plaintext, sebuah program Perl sederhana ditulis, lalu serangan dijalankan dengan bentuk bkcrack -C ALLBAS.ZIP -c OLDCOD.ZIP -p ... -o 26 -j 8
  • Setelah 23 menit, kunci yang ditemukan bkcrack adalah sebagai berikut
    • 98e0f009 48a0b11a c70f8499
  • Dengan kunci yang sama, ALLBAS.ZIP didekripsi untuk membuat ALLBAS-DECRYPTED.ZIP, dan kunci yang sama juga bekerja pada CODMAY93.ZIP sehingga menghasilkan CODMAY93-DECRYPTED.ZIP
  • Alternatif lain adalah menyerang file ZIP internal lain dengan cara yang sama, dan jika tetap gagal, mencoba bruteforce nama file
  • Kandidat TECOD5.BAS yang diperiksa kemudian menemukan kunci yang sama hanya dalam 38 detik, menunjukkan bahwa pemilihan plaintext yang tepat sangat memengaruhi kecepatan serangan

Menjalankan kode yang telah didekripsi

  • Dua program dikompilasi dengan PowerBASIC dan dijalankan di DOSBox
    • RANDOM.BAS: digunakan untuk membuat disk angka acak untuk one-time pad
    • TECOD.BAS: digunakan untuk mengenkripsi dan mendekripsi pesan yang akan dikirim lewat email
    • Kode yang dikompilasi dan file executable yang dihasilkan ada di jgc-vula-september-2024
  • Kompilasi dilakukan dengan PowerBASIC Compiler Version 3.00b; TECOD.BAS ditampilkan memiliki 2.575 statement dan 2.329 baris, sedangkan RANDOM.BAS memiliki 2.194 statement dan 1.940 baris
  • RANDOM.EXE menggunakan tiga jenis algoritme pembangkit bilangan acak untuk menghasilkan data acak, salah satunya berbasis kunci acak yang dimasukkan langsung oleh pengguna
  • TECOD.EXE dilindungi kata sandi, dan kata sandi bawaan versi ini adalah TIMBOBIMBO, yang disimpan di kode dengan urutan karakter diacak
    • Tim Jenkin memasukkan kata sandi ini ke dalam program dengan cara sederhana tetapi diobfuskasi
    • Kata sandinya berbeda untuk tiap versi program yang dibagikan kepada anggota ANC yang berbeda
  • Manual untuk orang yang ingin menjalankannya sendiri ada di TECOD_HLP.pdf

Detail yang terungkap dari cara operasional saat itu

  • Contoh eksekusi menunjukkan alur membuat data acak untuk kunci dengan RANDOM.EXE ke RANDATA.1, mengenkripsi PLAIN.TXT menjadi PLAIN.BIN, lalu mengembalikannya lagi
  • Semua operasi kriptografi dirancang untuk dilakukan di RAM disk
  • Dalam contoh enkripsi, file program TECOD.EXE dan TECOD.CNF berada di floppy disk A:, disk data yang berisi file kunci berada di B:, dan RAM disk berada di R:
  • Pada tahap enkripsi, nama file RANDATA.1 harus diubah menjadi SNUM, sedangkan pada tahap dekripsi RANDATA.1 di B: harus bernama RNUM
  • Program ini mencakup perilaku untuk memusnahkan materi kunci setelah digunakan, pemeriksaan distribusi byte acak yang dihasilkan, dan penekanan pada penggunaan RAM disk

1 komentar

 
GN⁺ 2024-09-08
Komentar Hacker News
  • Hal yang menarik dari Vula adalah kurangnya kegunaan sistem pada akhirnya menjadi penyebab kejatuhannya
    Bahkan para aktivis yang sangat berdedikasi melawan rezim pembunuh demi kebebasan pun tidak bisa menggunakan sistem itu dengan benar
    Dokumen dibiarkan tidak terenkripsi, kunci mudah didapat, dan perangkat lunaknya terlalu merepotkan sehingga sebagian komunikasi penting dikirim sebagai teks biasa
    Kita semua tahu betapa merepotkannya menyiapkan dan menggunakan PGP dengan benar, dan pada akhirnya keamanan adalah kegunaan
    Tulisan sedikit lebih panjang tentang Vula: https://shkspr.mobi/blog/2014/01/the-hardest-problem-in-encr...

    • Bayangkan saja jika kehilangan kunci rumah berarti Anda tidak akan pernah bisa masuk ke rumah lagi
      Dalam kebanyakan kasus, kegunaan bekerja ke arah menurunkan keamanan
  • Saya melihat generator bilangan acak untuk one-time pad keamanan, dan Melissa O'Neil mungkin akan menyukainya. Hampir mirip PCG
    Ia menggunakan generator kongruensial linear (LCG) Rand dari sistem PowerBASIC untuk memilih salah satu dari set fungsi rand1-3 baru, dan dua di antaranya menggunakan LCG yang berbeda
    https://github.com/Vulacode/RANDOM/blob/d6a1a1d694b22e6a115b...

    • Cara pembuatan one-time pad itu tampaknya cukup buruk. Sepertinya cukup mungkin untuk memulihkan status seed dari generator yang berbeda, dan LCG sangat mudah direkayasa balik
      Karena generator pseudorandom tampaknya di-seed oleh generator acak sistem, pada akhirnya cukup memulihkan seed awal LCG sistem untuk merekayasa balik one-time pad
      Saya tidak tahu ukuran seed LCG sistemnya, tetapi jika 32-bit, sepertinya status seed bisa saja di-brute-force lalu hasilnya dianalisis dengan analisis entropi dan mungkin dipecahkan dalam satu jam
    • Ada juga fakta bahwa programmer aslinya menulisnya sambil belajar kriptografi dan BASIC secara spontan
      “Jangan membuat cipher sendiri” adalah aturan pertama, tetapi dalam situasi akhir 80-an ketika berurusan dengan teknologi baru yang keren, itu mungkin tampak seperti pengecualian
    • Tentu saja itu sangat jauh dari memadai untuk digunakan sebagai one-time pad sungguhan
  • Runtuhnya apartheid di Afrika Selatan secara keseluruhan cukup menarik. Saya hampir tidak tahu sisi seperti ini
    Fakta menariknya, gerakan BDS (boikot, divestasi, sanksi) dimulai dari sini, dan pada saat itu banyak orang menganggap apartheid tidak akan pernah berakhir
    Namun tekanan yang terus-menerus diberikan dalam waktu lama di berbagai titik tekan menciptakan stres besar, dan itulah yang mengarah pada keruntuhannya
    Fakta bahwa pekerjaan ini dilakukan di Toshiba T-100 juga cukup menarik; komputer yang keren

  • Menarik. Afrika Selatan benar-benar telah melalui banyak hal. Semoga GNU saat ini bisa memutar mundur jam kiamat
    Rekomendasi: Action Kommandant. Memberi sekilas gambaran tentang kehidupan Ashley Kriel, martir dan kebanggaan Bonteheuwel

    • Senang mengetahui nama Ashley Kriel. Kehidupan dan berbagai bakat rekan-rekan berbakat yang bersama ANC sering kali tertutupi, jadi saya sangat tertarik mempelajari tokoh-tokoh seperti itu
      Saat pelajaran bahasa Inggris di sekolah menengah, saya mengenal Athol Fugard lewat seorang guru radikal yang meninggalkan Afrika Selatan ke Kanada untuk menghindari pengawasan tahun 80-an, dan itu membuka wawasan saya
      Semoga orang-orang Afrika Selatan juga beruntung. Negara dengan begitu banyak orang berbakat dan kekayaan alam seharusnya diperlakukan jauh lebih baik. Setidaknya tampaknya era politik kaku di dalam ANC sudah berakhir
  • Kode Rust untuk brute force: https://github.com/rhulha/ZipMcKracken

  • Operation Vula, komputer 8-bit, nada DTMF, acoustic coupler—menarik
    CIA/NSA mengetahui gelagat bahwa Operation Vula dijalankan dengan Philips PX-1000 komersial yang memiliki DES bawaan, lalu menyuap Philips untuk menanam backdoor pada produk tersebut: https://www.cryptomuseum.com/crypto/philips/px1000/

    • Tim Jenkins mengakali masalah itu dengan menggunakan sistem dan cipher buatannya sendiri
      Alih-alih DES yang memiliki backdoor, ia menggunakan one-time pad yang dibawa awak pesawat dengan floppy ke masing-masing pihak
      Sekalipun satu floppy seperti itu tertangkap di Afrika Selatan, hanya pesan untuk penerima tersebut yang akan terekspos, dan pada akhirnya kemungkinan akan segera terdeteksi
    • Menggunakan teknologi enkripsi komersial apa pun umumnya bisa dianggap tamat
      Namun membuat kunci one-time pad dengan generator pseudorandom adalah pendekatan yang naif
      Inti one-time pad adalah memakai kunci yang benar-benar acak untuk memperoleh keamanan sejati. Dengan kunci seperti yang digunakan di sini, mereka sebenarnya bisa saja cukup menukar seed lalu membuatnya secara lokal, sehingga tidak perlu membahayakan awak pesawat
      Saya paham pengembangnya belajar sendiri dan bahkan mempelajarinya sambil jalan, tetapi orang yang menangani rahasia sangat penting seharusnya tidak melakukan kesalahan seperti ini
      Meski begitu, membuat bilangan acak sungguhan dalam jumlah besar juga tidak mudah. Pada akhirnya mungkin harus membuat perangkat keras sendiri, sementara sebagian besar peralatan komersial kemungkinan besar telah dimanipulasi
  • Jika Anda harus memecahkan kata sandi ZIP “lama” dan mengetahui beberapa karakter di dalam arsipnya, tidak ada yang lebih baik dari ini: https://github.com/kimci86/bkcrack

    • Bukankah seluruh artikel ini memang tentang program itu?