GNU/Linux >> Belajar Linux >  >> Linux

Menyimpan seed acak saat restart/shutdown, dan memulihkannya selama boot sistem

Mengapa melakukan itu sama sekali, di tempat pertama. Apakah kita perlu "melestarikan" seed acak di antara restart? Apa yang akan terjadi jika kita tidak melakukannya? Apakah komputer akan memiliki 0 keacakan saat boot?

Ini ternyata menjadi pertanyaan yang jauh lebih dalam daripada yang mungkin Anda sadari. Saya akan mencoba melakukan keadilan untuk itu tanpa menulis buku teks.

Pada dasarnya:komputer menyedot keacakan; jika Anda benar-benar memiliki keacakan (alias entropi), sebaiknya pertahankan.

Anggap saja komputer Anda tidak memiliki pembuat nomor acak perangkat keras. (Chip Intel modern memiliki rdrand instruksi yang memanfaatkan rng perangkat keras, tetapi karena alasan politik, kernel Linux tidak menggunakannya.)

Saat boot, dari mana kernel mendapatkan keacakan murni? Menurut Wikipedia:

Kernel Linux menghasilkan entropi dari pengaturan waktu keyboard, gerakan mouse, dan pengaturan waktu IDE dan membuat data karakter acak tersedia untuk proses sistem operasi lain melalui file khusus /dev/random dan /dev/urandom. Kemampuan ini diperkenalkan di Linux versi 1.3.30.

Jadi mouse, keyboard, dan waktu peristiwa IO harddisk. Katakanlah Anda memerlukan entropi selama boot OS (misalnya Anda memulai sshd yang perlu menghasilkan kunci pada startup pertama), Anda belum memuat driver mouse dan keyboard, dan di awal siklus boot Anda tidak akan melakukan banyak panggilan disk IO - sial, cukup awal di boot kernel masih berjalan di RAM FS, dan bahkan setelah itu Anda mungkin menggunakan SSD atau flash drive yang memiliki waktu IO yang sangat dapat diprediksi.

Jadi kembali ke pertanyaan Anda:

Apa yang akan terjadi jika kita tidak melakukannya? Apakah komputer akan memiliki 0 keacakan saat boot?

Itu mungkin.

Pada perangkat linux kecil yang disematkan seperti router yang melakukan booting dari memori flash (baik yang kecil di rumah, maupun yang besar di pusat data yang menggerakkan internet), ini sebenarnya masalah serius.

Untuk bacaan yang luar biasa tentang topik ini, lihat makalah tahun 2012 Menambang P dan Q Anda:Deteksi Kunci Lemah yang Meluas di Perangkat Jaringan yang memiliki temuan mengejutkan bahwa

0,75% sertifikat TLS [di internet] berbagi kunci karena entropi tidak mencukupi selama pembuatan kunci.


Hanya beberapa baris di bawah Short-Description Anda kutip, /etc/init.d/urandom catat beberapa asumsi tentang kerahasiaan:

## Assumption 1:  We assume [/var/lib/urandom/random-seed] is a file (or a symlink
## to a file) that resides on a non-volatile medium that persists
## across reboots.
## Case 1a: Ideally, it is readable and writeable.  Its is unshared,
## i.e. its contents are unique to this machine.  It is protected so
## that its contents are not known to attackers.
## Case 1b: Less than ideally, it is read-only.  Its contents are
## unique to this machine and not known to attackers.

Nanti di file itu, di mana seed ditulis ke disk, ada komentar:

# see documentation in linux/drivers/char/random.c

yang layak dibaca tetapi mencakup:

* When any operating system starts up, it will go through a sequence
* of actions that are fairly predictable by an adversary, especially
* if the start-up does not involve interaction with a human operator.
* This reduces the actual number of bits of unpredictability in the
* entropy pool below the value in entropy_count.  In order to
* counteract this effect, it helps to carry information in the
* entropy pool across shut-downs and start-ups.

... Even with
* complete knowledge of the start-up activities, predicting the state
* of the entropy pool requires knowledge of the previous history of
* the system.

Menyimpan entropi di antara reboot adalah solusi yang tidak sempurna untuk kekurangan entropi saat boot. Mengapa tidak sempurna? Pertama, karena entropi yang disimpan dapat ditemukan, jika calon penyerang dapat memperoleh benih yang disimpan itu, mereka juga dapat mengkompromikan semua generator nomor acak yang diunggulkan dengannya. Kedua, karena saat sistem dipulihkan dari cadangan atau beberapa instance VM yang dihasilkan dengan seed tersimpan yang sama, semuanya akan menggunakan kembali entropi tersimpan yang sama.

Namun, bencana seperti itu masih lebih disukai daripada tidak ada entropi waktu boot yang tersedia untuk sistem Anda.

Perlu diingat, jika Anda mengonfigurasi untuk menyimpan entropi, solusi Anda tidak akan dapat disertifikasi, karena FIPS dan hampir semua standar terkait crypto dan infosec lainnya melarang praktik ini.


Linux
  1. Cara Mendapatkan Waktu Boot dan Waktu Aktif di Ubuntu

  2. Perbedaan Antara Perintah Menghentikan dan Mematikan?

  3. Izin File Dan Menyimpan?

  1. Debian – Bagaimana Cara Shutdown Dan Restart Dirmngr?

  2. Masalah Boot Dan Shutdown Pada Aspire E 11 Model E3-111-c0wa?

  3. Cara Menggunakan Perintah Shutdown dan Reboot Linux dengan Contoh

  1. Cara dual boot Kali Linux dan Windows 10

  2. Contoh Perintah "shutdown" di Linux

  3. Bagaimana cara agar sistem Ubuntu mem-boot dan menjalankan sepenuhnya dalam RAM?