Entropi acak dalam bash

Entropi acak dalam bash

Saat menggunakan angka acak dalam bash, pertanyaan entropi acak akan cepat atau lambat akan muncul. Artikel ini akan membantu Anda memahami apa itu entropi, bagaimana hal itu dapat dimodifikasi dan dioptimalkan dalam pesta, dan bagaimana hal itu akan mempengaruhi pembuatan angka acak.

Dalam tutorial ini Anda akan belajar:

  • Cara menghasilkan entropi acak dalam bash
  • Cara pra-seed generator bilangan acak dalam bash
  • Contoh yang menunjukkan generasi entropi acak dalam pesta bash
Entropi acak dalam bash

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Linux-independen
Perangkat lunak Baris perintah bash, sistem berbasis Linux
Konvensi # - mengharuskan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mengharuskan Linux-Commands untuk dieksekusi sebagai pengguna biasa

Contoh 1: acak, atau tidak begitu acak?

Kami dapat dengan mudah menghasilkan nomor acak dalam bash:

$ echo $ acak 13 


Namun, sementara angka ini terlihat acak, sebenarnya tidak, atau paling tidak Pseudo-Random. Ini karena komputer dapat masuk dan dengan sendirinya tidak pernah benar-benar acak, dan generator nomor acak dalam bash pra-unggulan dengan nilai, yang menentukan semua panggilan selanjutnya dari $ Acak variabel/fungsi.

Mari kita pra-seed generator bilangan acak dalam beberapa cara berbeda. Kami akan memulai dengan pra-seeding generator acak dengan benih '1' dengan pengaturan ACAK ke 1:

$ echo $ acak 25552 $ acak = 1 $ echo $ acak 16807 $ acak = 1 $ echo $ acak 16807 $ echo $ acak 15089 $ acak = 1 $ echo $ acak 16807 $ echo $ acak 15089 $ acak = $ echo $ acak $ 16807 $ echo $ acak 15089 $ acak = $ echo $ acak $ $ $ $ echo $ acak 15089 $ acak = $ echo $ $ acak $ $ $ echo $ acak 15089 $ acak = A $ echo $ echo $ random $ acak 20034 

Perhatikan bahwa 16807 dan panggilan sekunder 15089 Hasil tetap sama saat generator acak telah diunggulkan 1. Itu berubah saat pra-unggulan dengan A.

Sementara itu $ Acak Variabel dalam bash akan selalu menghasilkan angka acak yang dihasilkan oleh generator bilangan acak bash, itu juga merupakan variabel yang, ketika diatur, pra-seeds generator acak. Tantangannya adalah jika benihnya sama, hasilnya (dan urutan!) juga akan sama, seperti yang dapat Anda lihat dari mempelajari contoh di atas.

Bagaimana generator acak diinisialisasi dalam sistem Anda mungkin tergantung pada sistem operasi Linux atau UNIX yang digunakan, perangkat keras yang digunakan, dan pengaturan konfigurasi. Mari segera setuju itu bukan cara yang sangat aman untuk menghasilkan nomor acak yang benar/nyata, oleh karena itu persyaratannya Pseudo-Random Dan pseudo-randomness. Yang mengatakan, banyak yang bisa dilakukan untuk membuatnya (jauh) lebih baik.

Contoh 2: generator entropi acak kami sendiri

Satu -satunya input yang tersedia untuk generator acak pada dasarnya adalah benih seperti yang diteruskan Acak =. Jadi bagaimana kita bisa menghasilkan benih yang benar -benar acak untuk menyemai generator acak, dan membuat entropi acak nyata (entropi: kualitas kurangnya prediktabilitas)? Entropi acak penting, terutama di bidang keamanan komputer.

Pikirkan pertanyaan ini; Bagaimana Anda dapat memberikan (untuk menampar) input paling acak untuk digunakan sebagai benih untuk pembuatan entropi acak?

Saya yakin saya telah menemukan solusi dalam kode berikut:



$ Tanggal +%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 

Akhir 9713 Hasilnya hampir benar -benar acak.

tanggal +%s%n adalah kombinasi dari %S yang merupakan detik sejak itu 1970-01-01 00:00:00 UTC - Angka yang cukup unik, tetapi masih sesuatu yang berpotensi dihitung ulang. Dan %N adalah nanodetik. Kemudian kami mengiris input untuk mengambil hanya 10 digit terakhir.

Ini berarti kita melewati yang kedua (terakhir 0-9 digit) + nanosecond penuh persis 000000000-999999999 ke generator acak sebagai biji. Ini akan sebaik mungkin untuk merekonstruksi, kecuali jika Anda menangkap nilai yang dihasilkan sebelum menugaskannya. Hampir benar -benar acak.

Ini juga berarti Anda bisa mendapatkan jumlah semi-acak dari X digit dengan hanya memilih bagian mikrodetik yang paling granular:

Tanggal +%S%n | CUT -B19-19 Tanggal +%S%n | CUT -B18-19 Tanggal +%S%n | CUT -B17-19 

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

Namun, semakin lama memotong irisan menjadi (dengan meningkatkan memotong panjang), semakin sedikit pseudo-acak jumlahnya, terutama setelah Anda mengiris bagian detik. Anda juga bisa meninggalkan %S, dan mengurangi ukuran potongan untuk memiliki panggilan sistem yang kurang intensif. Sementara itu mungkin tidak masalah untuk satu panggilan $ Acak, akan penting jika disebut ratusan ribu kali.

Kesimpulan

Dalam artikel ini, kami melihat cara menghasilkan entropi acak, dengan cara yang cukup acak. Sementara tidak ada generator entropi acak yang sempurna (dan oleh karena itu nomor acak apa pun yang dihasilkan darinya), kami mendekati dengan memanggil waktu nanosecond. Kami juga melihat bagaimana pra-seeding variabel entropi generator acak dengan benih tertentu selanjutnya akan menghasilkan hasil yang sama setiap kali angka acak dihasilkan menggunakan $ Acak variabel.

Perbarui skrip Anda dengan inisialisasi entropi acak kami, atau beri tahu kami jika Anda menemukan yang lebih baik di komentar di bawah. Siapa lagi yang tertarik dengan entropi yang lebih baik?!

Menikmati!

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Menguasai loop skrip bash
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Cara Mengatur Server OpenVPN di Ubuntu 20.04
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Loop bersarang dalam skrip bash
  • Unduh Linux
  • Can Linux mendapatkan virus? Menjelajahi kerentanan Linux…