Apakah ada alternatif untuk / dev / urandom?


21

Apakah ada cara yang lebih cepat daripada / dev / [u] acak? Terkadang, saya perlu melakukan hal-hal seperti

cat / dev / urandom> / dev / sdb

Perangkat acak "terlalu" aman dan sayangnya terlalu lambat untuk itu. Saya tahu bahwa ada wipedan alat serupa untuk penghapusan aman, tapi saya kira ada juga beberapa cara on-board untuk itu di Linux.


Setara dengan StackOverflow: stackoverflow.com/questions/841356/…
David Z


1
Bukankah cara yang lebih baik untuk melakukan ini .. Mungkin pesaing untuk penghargaan UUoC?
Tom O'Connor

Jawaban:


12

Jika Anda ingin menghapus "hard" (atau file) hard drive, Anda harus melihat utilitas rusak.

Seperti yang ditunjukkan poster sebelumnya, perangkat / dev / * acak dimaksudkan untuk digunakan sebagai sumber potongan kecil data acak.


1
Menurut halaman manual, 'rusak' menggunakan / dev / urandom. Jadi, sementara jawaban yang baik untuk menghapus disk, itu tidak akan menawarkan percepatan atas membaca teknik lain dari / dev / urandom. (Kiat lain jika menggunakan 'rusak': kebanyakan orang mungkin akan lebih bahagia dengan 1-2 lintasan, daripada hitungan default raksasa, sehingga penghapusan tidak memakan waktu berhari-hari.)
gojomo

4
Sebenarnya rusak jauh lebih cepat daripada / dev / urandom. Dugaan saya adalah ia menyediakan data pseudorandom sendiri menggunakan / dev / urandom atau / dev / random sebagai seed.
thomasrutter

24

Sayangnya Linux memiliki implementasi urandom yang buruk. Anda dapat menggunakan aes256-ctr dengan kunci acak dan mendapatkan beberapa ratus megabyte pseudo-randomness per detik, jika CPU Anda mendukung AES-NI (akselerasi perangkat keras). Saya berharap untuk beralih urandom ke pendekatan modern juga.

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin

Anak anjing ini memiliki 1,0 GB / s di kotak saya (dibandingkan dengan 14 MB / s dari / dev / urandom). Ini menggunakan urandom hanya untuk membuat kata sandi acak dan kemudian melakukan enkripsi sangat cepat / dev / zero menggunakan kunci itu. Ini seharusnya PRNG yang aman secara kriptografis, tetapi saya tidak akan memberikan jaminan.


Terima kasih atas jawaban yang luar biasa ini, saya dapat naik dari 9,5 MB / s dengan / dev / urandom menjadi lebih dari 120 MB / s dengan openssl.
GDR

Kecuali untuk pernyataan pertama bahwa Linux memiliki implementasi urandom yang buruk , saya menyetujui jawaban ini. Cukup bagus untuk menghapus (atau mengisi?) Hard disk sebelum enkripsi.
Vikrant Chaudhary

5
Lewati pvuntuk indikator kemajuan yang bagus. openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | pv -pterb > /dev/sdb.
Vikrant Chaudhary

@VikrantChaudhary urandom menghasilkan angka acak semu yang berkualitas tinggi, tentu saja, tapi itu bukan alasan untuk lambat. Mode penghitung AES jauh lebih cepat dan sulit untuk memperdebatkan bagaimana itu akan menjadi kurang aman daripada / dev / urandom.
Perseids

1
Hanya untuk menambah pvrekomendasi, Anda dapat pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdbmeminta agar pvAnda menunjukkan kemajuan dalam menyelesaikan penulisan.
asciiphil

7

Dalam pengujian cepat di bawah Ubuntu 8.04 pada Thinkpad T60p dengan CPU T2500, 1GB data acak dari openssl randadalah 3-4X lebih cepat daripada /dev/urandom. Itu adalah,

time cat /dev/urandom | head -c 1000000000 > /dev/null

... sekitar 4 menit sementara ...

time openssl rand 1000000000 | head -c 1000000000 > /dev/null

... hanya lebih dari 1 menit.

Tidak yakin apakah ada perbedaan dalam kualitas acak, tetapi keduanya mungkin baik untuk penghapusan HD.


5

Saya melihat banyak jawaban yang mengatakan bahwa menggunakan data acak tidak penting. Itu cukup benar jika semua yang Anda coba lakukan adalah menghapus drive, tetapi tidak begitu banyak jika Anda menghapusnya dalam persiapan untuk enkripsi disk.

Jika Anda mengisi perangkat dengan data non-acak kemudian letakkan partisi terenkripsi di atasnya Anda mungkin mengalami masalah. Bagian drive yang menyimpan data terenkripsi akan menonjol dari sisa drive, karena data yang dienkripsi akan terlihat acak dan sisanya tidak. Ini dapat digunakan untuk menentukan informasi tentang disk crypto yang dapat digunakan untuk memecahkannya. Tautan di bawah ini menjelaskan teori di balik bagaimana beberapa serangan yang lebih umum bekerja dan bagaimana mempertahankannya (di Linux, tetap).

Pengaturan enkripsi hard disk Linux


1
Sangat benar. Dengan disk yang relatif modern (> 20 GB), setiap pass tunggal akan cukup dihapus. Bahkan NSA dan sejenisnya akan kesulitan untuk mendapatkan jumlah data yang signifikan dari drive. Dan itu sangat mahal. Pikirkan $ 100.000 per megabyte. Pernyataan tentang enkripsi sangat benar. Anda ingin bagian disk yang tidak digunakan terlihat "acak" seperti bagian yang digunakan.
Tonny

Tidakkah perangkat lunak enkripsi perangkat Anda mengacak seluruh disk?
Nathan Garabedian

5

Jika Anda perlu menghapus HD dengan aman, ada satu alat yang sangat kuat: DBAN


5

Jika Anda ingin menghapus perangkat blok besar maka saya telah menemukan itu lebih kuat untuk digunakan dddan perangkat mapper daripada redirection output data acak. Berikut ini akan memetakan /dev/sdbuntuk /dev/mapper/deviceToBeEraseden dan mendekripsi secara transparan di antaranya. Untuk mengisi perangkat di bagian terenkripsi, nol disalin ke sisi teks biasa mapper ( /dev/mapper/deviceToBeErased).

cryptsetup --cipher aes-xts-plain64 --key-file /dev/random --keyfile-size 32 create deviceToBeErased /dev/sdb
dd if=/dev/zero of=/dev/mapper/deviceToBeErased bs=1M

Data terenkripsi pada /dev/sdbdijamin tidak dapat dibedakan dari data acak jika tidak ada kelemahan serius dalam AES. Kunci yang digunakan diambil dari /dev/random(jangan khawatir - hanya menggunakan 32 byte).



2

Semakin cepat alat Anda semakin tidak aman hasilnya. Menghasilkan keacakan yang baik membutuhkan waktu.

Lagi pula, Anda bisa menggunakan sesuatu seperti dd jika = / dev / nol dari = / dev / sdb , tapi jelas itu tidak akan acak, itu hanya akan menghapus lebih cepat.

Pilihan lain mungkin menggunakan metode ini / sbin / badblocks -c 10240 -s -w -t acak -v / dev / sdb lebih cepat dari urandom, tetapi badblocks PRNG kurang acak.


1
dan jujur ​​- ini BANYAK keamanan untuk drive
warren

Banyak timpa, seperti yang rusak, membutuhkan waktu dan memberikan keamanan yang lebih baik daripada satu timpa data acak "sempurna".
Dijeda sampai pemberitahuan lebih lanjut.

"Semakin cepat alatmu semakin tidak aman hasilnya. Menghasilkan keacakan yang baik membutuhkan waktu." - Itu tidak benar. Generator nomor acak mode AES (pseudo) jauh lebih baik dianalisis dan urutan besarnya lebih cepat dari / dev / urandom. (Lihat jawaban Tronic.)
Perseid

2

/dev/random menggunakan banyak entropi sistem, dan hanya menghasilkan aliran data yang lambat.

/dev/urandom kurang aman, dan lebih cepat, tapi masih diarahkan pada potongan data yang lebih kecil - itu tidak dimaksudkan untuk memberikan aliran angka acak berkecepatan tinggi yang berkelanjutan.

Anda harus membuat PRNG dari desain Anda sendiri, dan menaburnya dengan sesuatu dari /dev/randomatau /dev/urandom. Jika Anda membutuhkannya sedikit lebih acak, tambahkan secara berkala - setiap beberapa MB (atau berapa pun panjang prng Anda). Mendapatkan 4 byte (nilai 32 bit) dari urandom atau acak cukup cepat sehingga Anda dapat melakukan ini setiap 1 k data (reseed prng Anda setiap 1k) dan mendapatkan hasil yang sangat acak, sambil berjalan dengan sangat, sangat, cepat.

-Adam


7
Sangat jarang seseorang dapat menulis generator nomor acak mereka sendiri yang lebih baik daripada yang sudah tersedia. Lebih sering daripada tidak, hasilnya adalah pola yang dapat diprediksi dan rasa aman yang salah. Saya akan merekomendasikan menggunakan rusak pada drive melalui entri / dev atau kehancuran fisik yang sangat menyeluruh.
Dijeda sampai pemberitahuan lebih lanjut.

Saya setuju. Saya akan menggunakan shred, yang secara default menggunakan urandom (yang saya terus terang tidak menemukan lambat). Sebagai catatan, dimungkinkan untuk menggunakan / dev / random dengan shred (dengan menentukan --random-source = / dev / random) jika Anda sangat sabar.
Matthew Flaschen

2

Jika Anda ingin menghapus hard drive dengan cepat, tulis data nonrandom ke dalamnya. Ini tidak kalah aman daripada menggunakan data acak. Either way, ketika terhubung ke komputer data asli tidak dapat dibaca. Menimpa Data Hard Drive: The Great Wiping Controversy menunjukkan bahwa data asli juga tidak dapat dibaca menggunakan mikroskop.


2

Format dengan LUKS, dan lakukan lebih dari volume terenkripsi. Kemudian gunakan / dev / urandom untuk menghapus header LUKS.

Jika Anda memiliki dukungan AES perangkat keras, ini adalah solusi yang sangat cepat.

Secara singkat:

cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX cryptodev
dd if=/dev/zero bs=1M of=/dev/mapper/cryptodev
cryptsetup luksClose cryptodev
# wipe the luks header.  Yes, it uses /dev/urandom but only for 2MB of data:
dd if=/dev/urandom bs=1M count=2 of=/dev/sdX

selesai!

Lihat blog saya: Isi disk dengan cepat dengan bit acak (tanpa / dev / urandom)


Mengapa Anda repot-repot dengan LUKS jika semua yang ingin Anda lakukan adalah menimpa perangkat? Plain dm-crypt ("mode polos" dari cryptsetup) jauh lebih mudah digunakan untuk itu.
Perseids

2

Jika Anda ingin menghapus harddrive, dd tidak menghapus konten dari sektor yang dialokasikan kembali, dan sangat lambat jika harddrive sedang sekarat. Sebagai gantinya Anda dapat menggunakan drive build in erase function, yang telah distandarisasi sejak lama.

Dalam contoh ini, saya menghapus hard drive mekanis 500GB hanya dalam 102 menit. Bahkan ketika penuh dengan sektor yang dialokasikan kembali:

root@ubuntu:~# hdparm --security-set-pass Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_SET_PASS command, password="Eins", user=user, mode=high
root@ubuntu:~# time hdparm --security-erase-enhanced Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_ERASE command, password="Eins", user=user

real    102m22.395s
user    0m0.001s
sys     0m0.010s

root@ubuntu:~# smartctl --all /dev/sdaj | grep Reallocated
  5 Reallocated_Sector_Ct   0x0033   036   036   036    Pre-fail Always   FAILING_NOW 1327 

Anda dapat melihat rincian lebih lanjut di ata.wiki.kernel.org , namun contoh mereka tidak menggunakan --security-erase-enhanced, yang diperlukan untuk menghapus sektor yang disebutkan sebelum dialokasikan kembali.


1

Dalam prakteknya mungkin tidak perlu untuk men-seed seluruh disk dari satu aliran acak yang berkelanjutan.

Anda bisa membuat potongan data acak berukuran sedang dan kemudian hanya mengulanginya di disk.

Pastikan saja bahwa potongan data itu bukan kelipatan dari ukuran blok normal disk, untuk memastikan bahwa Anda tidak akan menimpa blok data berkorelasi dengan bit data acak yang sama persis. Ukuran chunk yang merupakan bilangan prima dalam kisaran ~ 1MB sebaiknya dilakukan dengan baik.

Untuk keamanan tambahan, lakukan saja beberapa kali lebih banyak, menggunakan ukuran chunk yang berbeda setiap kali.


1

Utilitas 'rusak' mudah dan cepat. Jika atribut SMART drive menunjukkan nol sektor yang dialokasikan kembali, 'rusak' kemungkinan cukup aman.

Namun, jika drive memiliki sektor yang dialokasikan kembali, data pada sektor yang rusak tidak akan ditimpa. Jika lokasi yang rusak berisi data sensitif sebelum dialokasikan kembali, 'rusak' mungkin tidak cukup baik. Sektor 'buruk' dapat dibaca dengan mengatur ulang peta alokasi drive, dan (berulang kali) membacanya.

Kemampuan untuk mereset peta alokasi sektor buruk bervariasi tergantung pada produsen dan model drive.


0

Jika semua yang ingin Anda lakukan adalah menimpa disk, maka tidak masalah apa yang Anda gunakan karena apa pun akan mengalahkan apa pun yang kurang dari laboratorium forensik dan saya tidak akan mempercayai apa pun selain slagging drive untuk menghentikan sumber daya tingkat itu .

Cukup gunakan sumber tidak acak seperti semua nol atau yang atau pola berulang seperti (saya pikir ini akan berhasil)

(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb

Itu mungkin terjadi, tetapi kadang-kadang Anda tidak dapat meyakinkan manajemen bahwa keamanan yang diberikan oleh penulisan acak tidak benar-benar lebih besar daripada menggunakan semua nol mengingat tingkat teknologi yang diperlukan untuk memulihkan data sama untuk kedua skenario. Dalam hal ini sering kali lebih baik untuk memenuhi persyaratan dengan membangun generator nomor acak cepat Anda sendiri.
Adam Davis

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.