0Pricing
Cryptology Academy · Pelajaran

PRNG yang Aman secara Kriptografis

Pelajari /dev/urandom, ChaCha20-CSPRNG, dan Fortuna.

PRNG yang Aman secara Kriptografis adalah pelajaran Cryptology Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Cryptology Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cryptology Academy mencakup 4 pelajaran total.

Ringkasan Persyaratan CSPRNG

CSPRNG harus memenuhi: (1) ketakterprediksian bit berikutnya—setelah semua bit sebelumnya diketahui, bit berikutnya tidak dapat diprediksi dengan probabilitas > 1/2 + dapat diabaikan. (2) ketahanan terhadap perluasan kompromi keadaan—mengetahui keadaan saat ini tidak mengungkapkan apa pun tentang keluaran masa lalu.

/dev/urandom dan getrandom()

Linux /dev/urandom menggunakan CSPRNG yang diberi nilai awal dari kumpulan entropi. Setelah pemberian nilai awal pertama (entropi 128 bit), CSPRNG ini aman digunakan bahkan saat kumpulan tersebut "kosong"—CSPRNG mempertahankan keadaan internalnya sendiri. getrandom() adalah padanan panggilan sistem modernnya.

CSPRNG Berbasis ChaCha20

Kernel Linux 5.17+ mengganti CSPRNG-nya dengan desain berbasis ChaCha20. ChaCha20 cepat (tidak memerlukan akselerasi perangkat keras), menyediakan keamanan 256 bit, dan memiliki pembuktian keamanan yang dipahami dengan baik. Nonce adalah pencacah; kunci berasal dari kumpulan entropi.

Fortuna

Fortuna (Ferguson & Schneier, 2003) adalah desain CSPRNG yang mempertahankan 32 kumpulan entropi dan mengakumulasikan entropi secara berkelanjutan. Generator diberi nilai awal ulang dari kumpulan-kumpulan tersebut saat kumpulan itu terisi. Tahan terhadap serangan pengaturan ulang RNG dan kompromi sebagian keadaan.

Pintu Belakang DUAL_EC_DRBG

NIST SP 800-90A awalnya mencakup DUAL_EC_DRBG, yang berbasis kurva eliptik. Dokumen Snowden mengungkapkan bahwa NSA menyisipkan pintu belakang: titik EC dipilih sedemikian rupa sehingga NSA dapat memprediksi keluaran dari nilai awal apa pun. Jangan pernah menggunakan DUAL_EC_DRBG. NIST menghapusnya pada 2014.

CTR_DRBG

CTR_DRBG (NIST SP 800-90A) menggunakan AES dalam mode pencacah sebagai CSPRNG. Nilai awal = kunci 256 bit + nonce 128 bit. Setiap pemanggilan memajukan pencacah. Banyak diimplementasikan dalam OpenSSL, BoringSSL, dan Windows BCrypt. Dipercepat perangkat keras pada CPU dengan AES-NI.

HASH_DRBG dan HMAC_DRBG

HASH_DRBG menggunakan fungsi hash (SHA-256) secara iteratif dengan nilai awal. HMAC_DRBG menggunakan HMAC untuk pencampuran. HMAC_DRBG lebih sederhana untuk diimplementasikan dengan benar dan digunakan dalam banyak sistem tertanam (mbedTLS, WolfSSL).

Pemberian Nilai Awal Ulang dan Injeksi Entropi

Bahkan CSPRNG harus diberi nilai awal ulang secara berkala. CTR_DRBG memiliki interval pemberian nilai awal ulang sebesar 2^48 permintaan. Fortuna diberi nilai awal ulang dari kumpulan entropinya. Pemberian nilai awal ulang manual: tambahkan entropi baru (byte hasil getrandom()) ke keadaan CSPRNG saat memulai dan setelah fork().

Masalah Fork

Saat suatu proses melakukan fork, proses induk dan anak mewarisi keadaan CSPRNG yang sama—keduanya akan menghasilkan keluaran identik. Perbaikan: panggil getrandom() untuk segera memberikan nilai awal ulang setelah fork(). OpenSSL menanganinya secara otomatis melalui pthread_atfork() pada versi terbaru.

CSPRNG dalam Praktik: Python

import secrets key = secrets.token_bytes(32) # 256-bit key nonce = secrets.token_bytes(12) # 96-bit nonce for AES-GCM pin = secrets.randbelow(10**6) # 6-digit PIN # Never use random module for cryptography

Kriptografi Peramban

window.crypto.getRandomValues(typedArray) adalah CSPRNG peramban. Fungsi ini memanggil sumber entropi OS. Digunakan oleh WebCrypto API untuk pembuatan kunci. Jangan pernah menggunakan Math.random() untuk keamanan—fungsi tersebut adalah PRNG non-kriptografis yang diberi nilai awal dari waktu sistem.

Pemeriksaan Singkat

Modul Python mana yang harus Anda gunakan untuk menghasilkan byte acak kriptografis?

Rangkuman

CSPRNG seperti ChaCha20, CTR_DRBG, dan Fortuna menghasilkan keluaran yang tidak dapat diprediksi dari nilai awal entropi. Hindari DUAL_EC_DRBG, random.random(), dan Math.random(). Gunakan secrets (Python) atau window.crypto (peramban). Berikutnya: kegagalan entropi di dunia nyata.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “PRNG yang Aman secara Kriptografis” gratis?

Ya — teks lengkap “PRNG yang Aman secara Kriptografis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cryptology Academy, upgrade ke CoddyKit PRO. Kursus Cryptology Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “PRNG yang Aman secara Kriptografis”?

Pelajari /dev/urandom, ChaCha20-CSPRNG, dan Fortuna. Kamu berlatih Cryptology Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Cryptology Academy?

Tidak diperlukan pengalaman sebelumnya. Cryptology Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “PRNG yang Aman secara Kriptografis” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Cryptology Academy ini?

Ya. Setiap pelajaran Cryptology Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Keacakan Sejati vs Keacakan Semu
  2. PRNG yang Aman secara Kriptografis
  3. Kekurangan Entropi & Kesalahan Kunci Lemah
  4. Membangkitkan Kunci, Nonce & IV dengan Aman
← Kembali ke Cryptology Academy