English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

tamu
1 / ?
kembali ke pelajaran

Apa yang Membuat Format Penyimpanan Dapat Dipulihkan

Empat format penyimpanan, diurutkan berdasarkan tingkat pemulihan:

FormatDapat Dipulihkan?ContohMetode Pemulihan
PlaintextYapassword: hunter2Baca file
Base64YacGFzc3dvcmQ=base64 --decode
Cipher yang dapat dibalik (AES)YaENC[AES256:...]Dekripsi dengan kunci
Hash satu arah (bcrypt)Tidak$2b$12$...Tidak dapat dibalik; harus brute-force

Teks biasa, base64, & cipher yang dapat dibalik: semuanya dapat dipulihkan. Satu dump basis data kredensial memberikan penyerang semua kata sandi dalam bentuk teks biasa, untuk semua pengguna, secara bersamaan. Satu pelanggaran; paparan total.

Contoh Mailman 2.x

Mailman 2.x (pengelola daftar surat GNU): menyimpan kata sandi pelanggan dalam bentuk teks biasa. Email pengingat kata sandi bulanan: mengirimkan kata sandi mereka dalam bentuk teks biasa kepada semua pelanggan. Dua cacat terpisah, keduanya MOAD-0006:

1. Penyimpanan: teks biasa di basis data daftar. Kompromi server mengekspos semua kata sandi pelanggan.

2. Penyiaran: email bulanan mengirimkan kata sandi teks biasa melalui SMTP ke server email pelanggan. Email berjalan dalam bentuk teks biasa melalui beberapa lompatan SMTP.

Tim Mailman merancang kedua perilaku tersebut. Pemulihan adalah fitur: pelanggan dapat mengambil ulang kata sandi yang terlupa. Nama Glass Safe berasal dari ini: brankas menyimpan kredensial dalam bentuk yang terlihat. Siapa pun yang mencapai brankas dapat membaca seluruh isinya secara bersamaan.

Prinsip Sudah-Dicuri

Kredensial yang disimpan dalam bentuk yang dapat dipulihkan adalah kredensial yang sudah dicuri. Penyerang belum tiba. Pelanggaran belum terjadi. Namun arsitektur menjamin: ketika pelanggaran terjadi, semua kredensial jatuh secara bersamaan. Tidak ada pelanggaran yang terjadi secara terpisah; setiap kredensial dalam penyimpanan yang dapat dipulihkan berpindah ke penyerang dalam operasi yang sama.

MOAD-0006 vs MOAD-0004

MOAD-0004 (Logged Secret): kredensial yang tertulis ke log secara tidak sengaja. Penulisan log bukanlah tujuan; itu adalah efek samping dari mengaktifkan pencatatan header untuk debugging.

MOAD-0006 (Glass Safe): kredensial disimpan dalam bentuk yang dapat dipulihkan secara sengaja. Pemulihan adalah tujuannya. Fitur pengingat kata sandi memerlukan penyimpanan kata sandi. Fitur tampilkan-kata-sandi memerlukan penyimpanan kata sandi. Komitmen arsitektur terhadap pemulihan menciptakan cacat ini.

Perbedaan satu baris: MOAD-0004 menempatkan kredensial ke log secara tidak sengaja; MOAD-0006 menyimpan kredensial dalam bentuk yang dapat dipulihkan dengan sengaja. Perbaikan beroperasi pada lapisan yang berbeda.

Struktural vs Tidak Sengaja

Perbedaan arsitektur antara MOAD-0006 dan MOAD-0004 menentukan strategi perbaikan. Penulisan log yang tidak disengaja: perbaiki lapisan serialisasi. Penyimpanan yang dirancang untuk pemulihan: desain ulang fitur yang memerlukan pemulihan.

Mengapa Glass Safe secara struktural berbeda dari MOAD-0004? Satu baris menjelaskan setiap cacat. Apa artinya bagi perbaikan?

Mengapa bcrypt Bekerja

Fungsi hash satu arah menerima kata sandi & menghasilkan digest dengan panjang tetap. Diberikan digest tersebut, kata sandi asli tidak dapat dipulihkan. Bukan 'sulit dipulihkan': mustahil untuk dibalik. Fungsi hanya berjalan dalam satu arah.

Tiga properti yang diperlukan untuk penyimpanan kredensial:

1. One-way (preimage resistance). Diberikan hash(password), tidak ada algoritma yang dapat memulihkan password lebih cepat daripada brute-force. bcrypt, scrypt, & argon2 semuanya memenuhi properti ini.

2. Salt. Nilai acak yang ditambahkan di depan password sebelum di-hash. Password yang sama, salt yang berbeda, hash yang berbeda. Tujuan: mengalahkan rainbow tables (kamus hash yang telah dihitung sebelumnya). Tanpa salt: penyerang menghitung hash('password123') sekali & memeriksa semua 1 juta pengguna secara bersamaan. Dengan salt: setiap pengguna memiliki hash unik meskipun passwordnya sama.

3. Slow by design. bcrypt menerima work factor. Work factor lebih tinggi: lebih banyak iterasi, lebih banyak waktu komputasi per percobaan hash. Login: 300ms untuk sekali hash. Dapat diterima. Brute-force: 300ms per percobaan. Pada 1 miliar percobaan: 9,5 tahun per password. Tidak dapat diterima bagi penyerang. Sifat lambat ini: fitur, bukan cacat.

import bcrypt

# Store: one-way hash with salt
def store_password(plaintext: str) -> bytes:
return bcrypt.hashpw(plaintext.encode(), bcrypt.gensalt(rounds=12))

# Verifikasi: hash kandidat & bandingkan digest
def verify_password(plaintext: str, stored_hash: bytes) -> bool:
return bcrypt.checkpw(plaintext.encode(), stored_hash)

# TIDAK PERNAH disimpan: kata sandi plaintext
# TIDAK PERNAH dipulihkan: plaintext dari hash
# Reset kata sandi, bukan pengingat kata sandi

Trade-off

Hashing satu arah membuat pemulihan kata sandi menjadi mustahil. Pengguna yang lupa kata sandinya tidak dapat menerimanya kembali. Email pengingat kata sandi tidak dapat ada. Pengalaman pengguna berubah: 'lupa kata sandi? reset.' Bukan penurunan: batas keamanan. Sistem yang tidak dapat memulihkan kata sandi tidak dapat membocorkan kata sandi.

Pelanggaran basis data yang mengekspos hash bcrypt: semua hash terlihat, tidak ada kata sandi yang terlihat. Penyerang harus brute-force setiap hash secara individual, dengan 300ms per percobaan, dengan salt per-pengguna yang mengalahkan tabel prakomputasi. Pelanggaran yang mengekspos kata sandi plaintext: paparan total seketika.

Enkripsi Kuat Tidak Cukup

Sebuah audit keamanan mengidentifikasi sistem penyimpanan kredensial. Kata sandi disimpan menggunakan enkripsi AES-256-CBC dengan kunci sisi-server. Laporan audit menandainya sebagai cacat Glass Safe.

Tim engineering menjawab: 'AES-256 adalah cipher simetris terkuat yang tersedia. Kuncinya berada di dalam hardware security module. Tidak ada penyerang yang dapat mendekripsi kata sandi ini.'

Mengapa ini tetap MOAD-0006 meskipun enkripsi sangat kuat? Apa perbaikan yang benar?