Entropi Rawak di Bash

Entropi Rawak di Bash

Apabila menggunakan nombor rawak di bash, persoalan entropi rawak akan lambat laun muncul. Artikel ini akan membantu anda memahami entropi apa, bagaimana ia dapat diubahsuai dan dioptimumkan dalam bash, dan bagaimana ia akan mempengaruhi penjanaan nombor rawak.

Dalam tutorial ini anda akan belajar:

  • Cara menjana entropi rawak di bash
  • Cara Pra-Menyatukan Penjana Nombor Rawak di Bash
  • Contoh menunjukkan generasi entropi rawak di Bash
Entropi Rawak di Bash

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran linux-bebas
Perisian Baris perintah bash, sistem berasaskan linux
Konvensyen # - memerlukan komando linux untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-Memerlukan komando linux untuk dilaksanakan sebagai pengguna yang tidak istimewa

Contoh 1: secara rawak, atau tidak begitu rawak?

Kita boleh menjana nombor rawak dengan mudah di bash:

$ echo $ rawak 13 


Walau bagaimanapun, sementara nombor ini kelihatan rawak, sebenarnya tidak, atau yang terbaik pseudo-random. Ini kerana komputer boleh masuk dan dengan sendirinya tidak pernah benar-benar rawak, dan penjana nombor rawak dalam bash adalah pra-unggulan dengan nilai, yang menentukan semua panggilan berikutnya $ Rawak pembolehubah/fungsi.

Mari kita pra-menyatukan penjana nombor rawak dalam beberapa cara yang berbeza. Kami akan dimulakan dengan pra-pembahagian penjana rawak dengan benih '1' dengan menetapkan Rawak ke 1:

$ echo $ random 25552 $ random = 1 $ echo $ random 16807 $ random = 1 $ echo $ random 16807 $ echo $ random 15089 $ random = 1 $ echo $ random 16807 $ echo $ random 15089 $ random = a $ echo $ random 20034 

Perhatikan bahawa 16807 dan panggilan menengah 15089 Keputusan tetap sama sementara penjana rawak pra-unggul 1. Ia berubah ketika pra-unggulan dengan a.

Manakala $ Rawak Pembolehubah dalam bash akan sentiasa menghasilkan nombor rawak yang dihasilkan oleh penjana nombor rawak bash, ia juga merupakan pembolehubah yang, apabila ditetapkan, pra-biji penjana rawak. Cabarannya ialah jika benih adalah sama, hasilnya (dan urutan!) juga akan sama, seperti yang anda lihat dari mengkaji contoh di atas.

Bagaimana penjana rawak diasaskan dalam sistem anda mungkin bergantung pada sistem operasi Linux atau Unix yang digunakan, perkakasan yang digunakan, dan tetapan konfigurasi. Mari kita setuju dengan serta -merta bukan cara yang sangat selamat untuk menjana nombor rawak yang benar/sebenar, oleh itu terma pseudo-random dan pseudo-randomness. Yang mengatakan, banyak yang dapat dilakukan untuk menjadikannya lebih baik.

Contoh 2: Penjana entropi rawak kita sendiri

Satu -satunya input yang tersedia untuk penjana rawak pada dasarnya adalah benih seperti yang diluluskan Rawak =. Jadi bagaimana kita dapat menghasilkan benih yang benar -benar rawak untuk benih penjana rawak, dan mencipta entropi rawak sebenar (entropi: kualiti kekurangan ramalan)? Entropi rawak adalah penting, terutamanya dalam bidang keselamatan komputer.

Fikirkan soalan ini; Bagaimana anda boleh memberikan (bash) input yang paling rawak untuk digunakan sebagai benih untuk generasi entropi rawak?

Saya percaya saya telah menemui penyelesaian dalam kod berikut:



$ tarikh +%s%n 1593785871313595555 # | -------- | < Selected part indicated $ date +%s%N | cut -b10-19 4418322030 $ date +%s%N | cut -b10-19 4914627208 $ date +%s%N | cut -b10-19 5282934388 $ date +%s%N | cut -b10-19 5635463163 $ date +%s%N | cut -b10-19 5967700148 $ date +%s%N | cut -b10-19 6322917009 $ RANDOM=$(date +%s%N | cut -b10-19) $ echo $RANDOM 16349 $ RANDOM=$(date +%s%N | cut -b10-19) $ echo $RANDOM 9713 

Final 9713 Hasilnya hampir benar -benar rawak.

tarikh +%s%n adalah gabungan dari %s yang sejak detik sejak itu 1970-01-01 00:00:00 UTC - cukup nombor yang unik, tetapi masih sesuatu yang berpotensi akan dikira semula. Dan %N adalah nanoseconds. Kemudian kami mengiris input untuk merebut hanya 10 digit terakhir.

Ini bermaksud kita melewati yang kedua (yang terakhir 0-9 digit) + nanosecond tepat 000000000-9999999999 kepada penjana rawak sebagai benih. Ini semestinya mustahil untuk membina semula, melainkan jika anda menangkap nilai yang dihasilkan sebelum memberikannya. Hampir benar -benar rawak.

Ini juga bermakna anda boleh mendapatkan nombor separuh rawak x digit dengan hanya memilih bahagian paling berbutir dari mikrosecond:

tarikh +%s%n | CUT -B19-19 TARIKH +%S%N | CUT -B18-19 TARIKH +%S%N | CUT -B17-19 

Perintah pertama akan menghasilkan 1 digit, 2 digit kedua dll.

Namun, semakin lama anda potong kepingan menjadi (dengan meningkatkan potong panjang), bilangan pseudo-rawak yang kurang, terutamanya apabila anda memotong ke bahagian detik. Anda juga boleh meninggalkan %s, dan mengurangkan saiz potong untuk mempunyai panggilan sistem yang kurang intensif. Sementara itu mungkin tidak penting untuk satu panggilan $ Rawak, ia akan menjadi masalah jika dipanggil beratus -ratus ribu kali.

Kesimpulan

Dalam artikel ini, kita melihat cara menjana entropi rawak, dengan cara yang agak rawak. Walaupun tiada penjana entropi rawak adalah sempurna (dan oleh itu sebarang nombor rawak yang terhasil daripadanya), kami datang dengan memanggil masa nanosecond. Kami juga melihat bagaimana pemboleh ubah entropi penjana secara rawak dengan benih tertentu kemudiannya akan menghasilkan hasil yang sama apabila nombor rawak dijana menggunakan $ Rawak pembolehubah.

Kemas kini skrip anda dengan inisialisasi entropi rawak kami, atau beritahu kami jika anda menemui yang lebih baik dalam komen di bawah. Siapa lagi yang berminat dengan entropi yang lebih baik?!

Nikmati!

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Menguasai Gelung Skrip Bash
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Cara Menyiapkan Pelayan OpenVPN di Ubuntu 20.04
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Gelung bersarang dalam skrip bash
  • Muat turun linux
  • Bolehkah linux mendapat virus? Meneroka kelemahan Linux ..