Bagaimana Komputer Menjana Nombor Rawak

Komputer menghasilkan nombor rawak untuk semua perkara, dari kriptografi hingga permainan video dan perjudian. Terdapat dua kategori nombor rawak - nombor rawak "benar" dan nombor pseudorandom - dan perbezaannya penting untuk keselamatan sistem penyulitan.

Komputer dapat menghasilkan nombor yang benar-benar rawak dengan memerhatikan beberapa data luar, seperti pergerakan tetikus atau bunyi kipas, yang tidak dapat diramalkan, dan membuat data darinya. Ini dikenali sebagai entropi. Pada masa lain, mereka menghasilkan nombor "pseudorandom" dengan menggunakan algoritma sehingga hasilnya muncul secara rawak, walaupun tidak.

Topik ini menjadi lebih kontroversial baru-baru ini, dengan banyak orang mempersoalkan sama ada cip penjana nombor rawak perkakasan terbina dalam Intel boleh dipercayai. Untuk memahami mengapa ia tidak boleh dipercayai, anda harus memahami bagaimana nombor rawak mula-mula dihasilkan dan untuk apa ia digunakan.

Nombor Rawak Untuk Apa

Nombor rawak telah digunakan selama beribu-ribu tahun. Sama ada membalikkan duit syiling atau menggulung dadu, tujuannya adalah untuk membiarkan hasil akhirnya menjadi peluang rawak. Penjana nombor rawak di komputer serupa - mereka adalah usaha untuk mencapai hasil yang tidak dapat diramalkan dan rawak.

BERKAITAN: Apa itu Penyulitan, dan Bagaimana Ini Berfungsi?

Penjana nombor rawak berguna untuk pelbagai tujuan. Selain aplikasi yang jelas seperti menghasilkan nombor rawak untuk tujuan perjudian atau membuat hasil yang tidak dapat diramalkan dalam permainan komputer, keacakan adalah penting untuk kriptografi.

Kriptografi memerlukan nombor yang tidak dapat disangka oleh penyerang. Kita tidak boleh menggunakan nombor yang sama berulang kali. Kami ingin menghasilkan nombor ini dengan cara yang sangat tidak dapat diramalkan sehingga penyerang tidak dapat meneka mereka. Nombor rawak ini penting untuk penyulitan selamat, sama ada anda menyulitkan fail anda sendiri atau hanya menggunakan laman web HTTPS di Internet.

Nombor Rawak Benar

Anda mungkin tertanya-tanya bagaimana komputer sebenarnya dapat menghasilkan nombor rawak. Dari mana datangnya "rawak" ini. Sekiranya hanya sekeping kod komputer, tidak mungkin angka yang dihasilkan komputer dapat diramalkan?

Kami secara amnya mengelompokkan nombor rawak yang dihasilkan komputer menjadi dua jenis, bergantung pada bagaimana ia dihasilkan: nombor rawak "Benar" dan nombor pseudo-rawak.

Untuk menghasilkan nombor rawak "benar", komputer mengukur beberapa jenis fenomena fizikal yang berlaku di luar komputer. Sebagai contoh, komputer dapat mengukur kerosakan radioaktif atom. Menurut teori kuantum, tidak ada cara untuk mengetahui dengan pasti kapan kerosakan radioaktif akan berlaku, jadi ini pada dasarnya adalah "keacakan murni" dari alam semesta. Penyerang tidak dapat meramalkan kapan kerosakan radioaktif akan berlaku, jadi mereka tidak akan mengetahui nilai rawak.

Untuk contoh yang lebih sehari-hari, komputer boleh bergantung pada bunyi atmosfera atau hanya menggunakan waktu yang tepat ketika anda menekan kekunci pada papan kekunci anda sebagai sumber data yang tidak dapat diramalkan, atau entropi. Sebagai contoh, komputer anda mungkin menyedari bahawa anda menekan butang tepat pada 0.23423523 saat selepas jam 2 petang. Dapatkan cukup masa-masa tertentu yang berkaitan dengan penekanan kekunci ini dan anda akan mempunyai sumber entropi yang boleh anda gunakan untuk menghasilkan nombor rawak "benar". Anda bukan mesin yang dapat diramalkan, jadi penyerang tidak dapat meneka saat yang tepat ketika anda menekan kekunci ini. Peranti / dev / rawak di Linux, yang menghasilkan nombor rawak, "blok" dan tidak memberikan hasil sehingga mengumpulkan cukup banyak entropi untuk mengembalikan nombor yang benar-benar rawak.

Nombor Pseudorandom

Nombor pseudorandom adalah alternatif untuk nombor rawak "benar". Komputer boleh menggunakan nilai benih dan algoritma untuk menghasilkan nombor yang nampaknya tidak rawak, tetapi sebenarnya dapat diramalkan. Komputer tidak mengumpulkan data rawak dari persekitaran.

Ini tidak semestinya perkara buruk dalam setiap keadaan. Sebagai contoh, jika anda bermain permainan video, tidak masalah sama ada peristiwa yang berlaku dalam permainan itu disebabkan oleh nombor rawak "benar" atau nombor pseudorandom. Sebaliknya, jika anda menggunakan enkripsi, anda tidak mahu menggunakan nombor pseudorandom yang dapat ditebak oleh penyerang.

Sebagai contoh, katakan penyerang tahu algoritma dan nilai benih yang digunakan penjana nombor pseudorandom. Dan katakan algoritma penyulitan mendapat nombor pseudorandom dari algoritma ini dan menggunakannya untuk menghasilkan kunci penyulitan tanpa menambahkan sebarang rawak tambahan. Sekiranya penyerang cukup tahu, mereka dapat bekerja ke belakang dan menentukan nombor pseudorandom yang mesti dipilih oleh algoritma penyulitan dalam kes itu, melanggar enkripsi.

Penjana Nombor Rawak Perkakasan NSA dan Intel

Untuk menjadikan segalanya lebih mudah bagi pembangun dan membantu menghasilkan nombor rawak yang selamat, cip Intel termasuk penjana nombor rawak berasaskan perkakasan yang dikenali sebagai RdRand. Cip ini menggunakan sumber entropi pada pemproses dan memberikan nombor rawak kepada perisian apabila perisian memintanya.

Masalahnya di sini ialah penjana nombor rawak pada dasarnya adalah kotak hitam dan kita tidak tahu apa yang berlaku di dalamnya. Sekiranya RdRand berisi pintu belakang NSA, pemerintah akan dapat memecahkan kunci penyulitan yang dihasilkan dengan hanya data yang dibekalkan oleh penjana nombor rawak itu.

Ini adalah kebimbangan serius. Pada bulan Disember 2013, para pengembang FreeBSD membuang sokongan untuk menggunakan RdRand secara langsung sebagai sumber kebetulan, dengan mengatakan mereka tidak boleh mempercayainya. [Sumber] Keluaran peranti RdRand akan dimasukkan ke dalam algoritma lain yang menambahkan entropi tambahan, memastikan bahawa mana-mana ruang belakang di penjana nombor rawak tidak akan menjadi masalah. Linux sudah berfungsi dengan cara ini, lebih jauh mengacak data rawak yang berasal dari RdRand sehingga tidak dapat diramalkan walaupun ada pintu belakang. [Sumber] Dalam AMA baru-baru ini (“Ask Me Anything”) di Reddit, Ketua Pegawai Eksekutif Intel Brian Krzanich tidak menjawab pertanyaan mengenai masalah ini. [Sumber]

Sudah tentu, ini bukan hanya masalah dengan cip Intel. Pembangun FreeBSD memanggil cip Via dengan nama juga. Kontroversi ini menunjukkan mengapa menjana nombor rawak yang benar-benar rawak dan tidak dapat diramalkan sangat penting.

Untuk menghasilkan nombor rawak "benar", penjana nombor rawak mengumpulkan "entropi", atau data yang kelihatan rawak dari dunia fizikal di sekitarnya. Untuk nombor rawak yang tidak benar-benar perlu rawak, mereka hanya boleh menggunakan algoritma dan nilai benih.

Kredit Gambar: rekre89 di Flickr, Lisa Brewster di Flickr, Ryan Somma di Flickr, huangjiahui di Flickr