เดิมทีโหมด CTR ออกแบบมาสำหรับ PRF
กพร.ใดๆ* สามารถเปลี่ยนเป็นการเข้ารหัสสตรีมด้วยโหมด CTRอย่างไรก็ตาม ไม่ควรใช้ฟังก์ชันหนักที่สร้างขึ้นสำหรับ MAC เพื่อใช้เป็นรหัสสตรีม ใช้ ChaCha สำหรับรหัสสตรีมที่สร้างจาก PRF หรือใช้รหัสสตรีมโดยตรงเช่น Trivium
หากคุณต้องการใช้จริง ๆ ให้ใช้อินพุตเป็น $$F_k(\text{nonce_block}\mathbin\|\text{counter_block})$$ เป็นโหมด CTR และเข้ารหัสเป็น
$$c_i = m_i \oplus F_k(\text{nonce_block}\mathbin\|\text{counter_i})$$
ทำให้เเน่นอน
- $\text{counter_i}$ ไม่เกินขนาดของ $\text{counter_block}$,
- ไม่กลับสู่สถานะเริ่มต้นหากตัวนับถึงค่าสูงสุด $2^{\text{counter_block_size}}-1$
- อย่ายุ่งยากกับการดำเนินการตัวนับต่อสำหรับการเข้ารหัสอื่น
- ด้านล่าง ใหม่กว่า ให้ an $(IV,คีย์)$ ปรากฏขึ้นอีกครั้งที่ $IV = (\text{nonce_block}\mathbin\|\text{counter_i})$
* ที่จริงแล้ว การเข้ารหัสใดๆ ไม่เพียงพอสำหรับการเข้ารหัส ขนาดคีย์และขนาดอินพุตและเอาต์พุตมีความสำคัญ วันนี้เราชอบ xChaCha20 มากกว่าเนื่องจากเปิดใช้งาน nonce 192 บิตเพื่อหลีกเลี่ยงการชนกันของ nonce ภายใต้คีย์เดียวกัน และมีขนาดอินพุต/เอาต์พุต 512 บิต การรักษาความปลอดภัย 128 บิตของ Chaskey นั้นเพียงพอสำหรับการเข้ารหัสขนาดเล็ก อย่างไรก็ตาม สำหรับวัตถุประสงค์อื่น การรักษาความปลอดภัยไม่เพียงพอ