ChaCha20 Inner State Stepper
ChaCha20'nin 4×4 state matrix'ini quarter-round bazında adım adım izle. Key + nonce verilebilir, 320 sub-op'un her birinde hangi hücrelerin değiştiğini gör.
chacha20 · stream-cipher · rfc-7539
ChaCha20'nin 4×4 state matrix'ini quarter-round bazında adım adım izle. Key + nonce verilebilir, 320 sub-op'un her birinde hangi hücrelerin değiştiğini gör.
chacha20 · stream-cipher · rfc-7539
ChaCha20 stream cipher'ın güzelliği, sadeliğinde: 16 adet 32-bit değer, ARX (add–rotate–xor) operasyonları, 20 round. Tüm gizem quarter round dediğimiz 4 satırlık fonksiyon ve column → diagonal dönüşümünden ibaret.
Bu lab algoritmayı sub-op düzeyinde ayrıştırır. Her tıklama tam 1 satır ARX uygular; key/nonce'u rastgeleleştirebilir, 1× / 4× / 16× hızlarda otomatik oynatabilirsin. 320 sub-op = 80 quarter round = 10 double round = full ChaCha20.
Educational only. RFC 7539 inner permutation görselleştirmek için TS'te yeniden yazıldı — WebCrypto round state vermiyor. Üretimde crypto.subtle veya @noble/ciphers kullan.
—617078653320646e79622d326b20657403020100070605040b0a09080f0e0d0c13121110171615141b1a19181f1e1d1c00000000090000004a00000000000000Counter'ı değiştir — keystream tamamen değişir, ciphertext da değişir. Aynı key/nonce çifti ile farklı counter her zaman farklı bir 64-byte blok üretir. Aynı XOR hem encrypt hem decrypt yapar.
4×4 grid'in her hücresi farklı bir rolü temsil eder, kart üzerindeki renk kodu:
"expand 32-byte k" ASCII'sinin 4 word'ü — 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574. Hiç değişmez (başlangıçta), her ChaCha20 instance'ı aynı.0, 1, 2, ... ile blok ayırt etmek için kullanılır.Tek satırlık tanım, 4 sub-op:
a += b; d ^= a; d = ROTL(d, 16)c += d; b ^= c; b = ROTL(b, 12)a += b; d ^= a; d = ROTL(d, 8)c += d; b ^= c; b = ROTL(b, 7)
Sadece toplama, XOR, sola döndürme — sabit zamanlı, branchless, donanım dostu.
Bir double round'da:
QR(0,4,8,12), QR(1,5,9,13), QR(2,6,10,14), QR(3,7,11,15)QR(0,5,10,15), QR(1,6,11,12), QR(2,7,8,13), QR(3,4,9,14)10 double round = 20 round. Sonunda working state initial state'e eklenir, little-endian serialize edilir → 64-byte keystream bloğu.
Bu implementation sadece görselleştirme için — RFC 7539'a uygun ama timing-attack korumalı değil, side-channel hardened değil.
Gerçek şifreleme için:
crypto.subtle (Node 19+ dahil) — ChaCha20-Poly1305 desteklenmiyor olabilir, AES-GCM kullan@noble/ciphers veya @stablelib/chacha20poly1305crypto.createCipheriv('chacha20-poly1305', ...) (OpenSSL altta)