ไบต์ที่คุณ XOR พร้อมข้อความเพื่อรับไซเฟอร์เท็กซ์เรียกว่า คีย์สตรีม. มีความปลอดภัยในการสร้างสตรีมคีย์โดยใช้ CSPRNG ใช่ ตัวสร้างตัวเลขสุ่มหลอกที่ปลอดภัยแบบเข้ารหัสและเมล็ดพันธุ์แบบสแตติก
อย่างไรก็ตาม มีปัญหาในทางปฏิบัติหากคุณใช้ CSPRNG ของระบบ:
- มันอาจจะตัดสินใจ (re-) เมล็ดเป็นครั้งคราว;
- อัลกอริทึมอาจเปลี่ยนแปลงตามเวลาหรือระหว่างระบบ
- วิธีแยกไบต์แบบสุ่มอาจเปลี่ยนแปลงได้ (เช่น ตัดสินใจจัดตำแหน่งคำ)
ดังนั้นคุณต้องแน่ใจว่าการดำเนินการ CSPRNG นั้นสมบูรณ์ก่อนที่คุณจะใช้มันเพื่อเข้ารหัสบางอย่าง ในกรณีที่เลวร้ายที่สุดจะมีการรวมข้อมูลแบบสุ่มเพื่อวางรหัสของคุณ ซึ่งในกรณีนี้ข้อมูลจะสูญหายไปอย่างมีประสิทธิภาพ นี้ ได้เกิดขึ้นมาก่อน เมื่อ "SHA1PRNG" ของ Sun ถูกแทนที่ด้วยอัลกอริทึมอื่นก่อน แล้วจึงตามด้วยข้อมูลสุ่ม OpenSSL บน Android
ในทางทฤษฎี stream cipher - หรือ block cipher ในโหมด stream คือ CSPRNG ที่มีเมล็ดเดียว (การรวมกันของคีย์และ IV/nonce) อัลกอริทึมเฉพาะและวิธีการดึงคีย์สตรีมที่กำหนดไว้ โดยทั่วไปแล้ว คำตอบที่น่าเบื่อคือการใช้ AES-CTR เพื่อสร้างคีย์สตรีม และใช้ AES-GCM ซึ่งใช้ AES-CTR ภายใน หากคุณต้องการการตรวจสอบข้อความด้วย ในระบบที่ไม่มีการเร่งด้วยฮาร์ดแวร์ สามารถใช้รหัสสตรีมเช่น ChaCha20 แทนได้
คุณยังสามารถสร้างการเข้ารหัสสตรีมจากฟังก์ชันแฮชได้โดยใช้โหมดตัวนับ คุณควรจะใช้โครงสร้าง MAC เช่น HMAC สำหรับสิ่งนั้น ที่จริงแล้ว CSPRNG ส่วนใหญ่ที่ระบบจัดหาให้นั้นมีไม่มากไปกว่านั้น - แต่ตามที่ระบุไว้ โดยทั่วไปแล้ว CSPRNG ได้รับการออกแบบมาเพื่อให้ข้อมูลแบบสุ่ม ไม่ใช่ข้อมูลเชิงกำหนด และใช่ โดยทั่วไปแล้วอัลกอริทึมเหล่านี้จะช้ากว่ารหัสสตรีมเฉพาะหรือรหัสบล็อกเร่งด้วยฮาร์ดแวร์ - พวกมันคือ ซับซ้อนยิ่งขึ้น ค่อนข้างซับซ้อนน้อยกว่า