Arseniy Sharoglazov, seorang peneliti keamanan siber di Positive Technologies selama akhir pekan berbagi eksperimen sederhana di mana ia menghasilkan file ZIP yang dilindungi kata sandi yang disebut x.zip.
Kata sandi yang dipilih Sharoglazov untuk mengenkripsi ZIP-nya adalah plesetan dari hit 1987 yang menjadi meme teknologi populer:
Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You
Tetapi peneliti menunjukkan bahwa ketika mengekstrak x.zip menggunakan kata sandi yang sama sekali berbeda, dia tidak menerima pesan kesalahan.
Faktanya, menggunakan kata sandi yang berbeda menghasilkan ekstraksi ZIP yang berhasil, dengan konten asli yang utuh:
pkH8a0AqNbHcdw8GrmSp
BleepingComputer berhasil mereproduksi percobaan menggunakan program ZIP yang berbeda. Kami menggunakan p7zip (setara 7-Zip untuk macOS) dan utilitas ZIP lain yang disebut Keka.
Seperti arsip ZIP peneliti, arsip kami dibuat dengan kata sandi yang lebih panjang yang disebutkan di atas, dan dengan mode enkripsi AES-256 diaktifkan.
Sementara ZIP dienkripsi dengan kata sandi yang lebih panjang, menggunakan salah satu kata sandi berhasil mengekstrak arsip.
Saat membuat arsip ZIP yang dilindungi kata sandi dengan mode AES-256 diaktifkan, format ZIP menggunakan algoritme PBKDF2 dan meng-hash kata sandi yang diberikan oleh pengguna, jika kata sandi terlalu panjang. Terlalu panjang, yang kami maksud lebih dari 64 byte (karakter), jelas peneliti.
Alih-alih kata sandi yang dipilih pengguna (dalam hal ini “Nev1r-G0nna-G2ve-…”) hash yang baru dihitung ini menjadi kata sandi sebenarnya untuk file tersebut.
Saat pengguna mencoba mengekstrak file, dan memasukkan kata sandi yang lebih panjang dari 64 byte (“Nev1r-G0nna-G2ve-… “), input pengguna akan sekali lagi di-hash oleh aplikasi ZIP dan dibandingkan dengan yang benar kata sandi (yang sekarang menjadi hash). Kecocokan akan menghasilkan ekstraksi file yang sukses.
Kata sandi alternatif yang digunakan dalam contoh ini (“pkH8a0AqNbHcdw8GrmSp”) sebenarnya adalah representasi ASCII dari hash SHA-1 kata sandi yang lebih panjang.
SHA-1 checksum dari “Nev1r-G0nna-G2ve-…” = 706b4838613041714e62486364773847726d5370.
Checksum ini ketika dikonversi ke ASCII menghasilkan: pkH8a0AqNbHcdw8GrmSp
Namun, perhatikan bahwa saat mengenkripsi atau mendekripsi file, proses hashing hanya terjadi jika panjang kata sandi lebih dari 64 karakter.
Dengan kata lain, kata sandi yang lebih pendek tidak akan di-hash pada tahap kompresi atau dekompresi ZIP.
Inilah sebabnya mengapa ketika memilih string panjang “Nev1r-G0nna-G2ve-… ” sebagai kata sandi pada tahap enkripsi, kata sandi sebenarnya yang ditetapkan oleh program ZIP secara efektif adalah hash (SHA1) dari string ini.
Pada tahap dekripsi, jika Anda memasukkan “Nev1r-G0nna-G2ve-…,” itu akan di-hash dan dibandingkan dengan kata sandi yang disimpan sebelumnya (yang merupakan hash SHA1). Namun, memasukkan kata sandi “pkH8a0AqNbHcdw8GrmSp” yang lebih pendek pada tahap dekripsi akan membuat aplikasi secara langsung membandingkan nilai ini dengan kata sandi yang disimpan (yaitu, sekali lagi hash SHA1).
Subbagian Tabrakan HMAC dari PBKDF2 di Wikipedia memberikan lebih banyak wawasan teknis kepada pembaca yang tertarik.
Namun, fakta bahwa sekarang ada dua kemungkinan kata sandi untuk ZIP yang sama tidak menunjukkan kerentanan keamanan, “karena seseorang masih harus mengetahui kata sandi asli untuk menghasilkan hash kata sandi,” entri tersebut menjelaskan lebih lanjut.
Aspek kunci yang menarik untuk diperhatikan di sini adalah, representasi ASCII dari setiap hash SHA-1 tidak harus berupa alfanumerik.
Dengan kata lain, mari kita asumsikan kita telah memilih kata sandi berikut untuk file ZIP kita selama percobaan ini. Kata sandi lebih panjang dari 64 byte:
Bl33pingC0mputer-Sh0w-M3-H0W-t0-pR0Duc3-an-eNcRyPT3D-ZIP-File-dengan cara paling sederhana
Checksum SHA-1 yang keluar menjadi: bd0b8c7ab2bf5934574474fb403e3c0a7e789b61
Dan representasi ASCII dari checksum ini terlihat seperti sekumpulan byte yang tidak masuk akal—hampir tidak elegan seperti kata sandi alternatif yang dibuat oleh peneliti untuk eksperimennya:
BleepingComputer bertanya kepada Sharoglazov bagaimana dia bisa memilih kata sandi yang checksum SHA-1-nya sedemikian rupa sehingga representasi ASCII-nya menghasilkan string alfanumerik yang bersih.
Dengan menggunakan versi yang sedikit dimodifikasi dari alat pemulihan kata sandi sumber terbuka, hashcat, peneliti membuat variasi dari string “Never Gonna Give You Up…” menggunakan karakter alfanumerik hingga dia mendapatkan kata sandi yang sempurna.
Dan, begitulah cara Sharoglazov sampai pada kata sandi yang kira-kira berbunyi seperti “Never Gonna Give You Up…,” tetapi representasi ASCII dari checksum SHA-1-nya adalah satu string alfanumerik yang rapi.
Bagi sebagian besar pengguna, membuat file ZIP yang dilindungi kata sandi dengan pilihan kata sandi mereka sudah cukup dan hanya itu yang perlu mereka ketahui.
Tetapi jika Anda memutuskan untuk bertualang, eksperimen ini memberikan gambaran tentang salah satu dari banyak misteri seputar ZIP terenkripsi, seperti memiliki dua kata sandi untuk rahasia Anda yang dijaga.
Sumber: Bleeping Computer