Bosh sahifa Wiki ChaCha20

ChaCha20

ChaCha20 — Daniel J. Bernstein yaratgan, 256 bitlik kalit bilan ishlaydigan stream cipher. U Salsa20 algoritmining variantidir va ARX, ya’ni addition, rotation va XOR amallariga asoslanadi. ChaCha20 plaintext bilan XOR qilinadigan pseudorandom key stream hosil qiladi. Algoritm maxfiylik beradi, ammo yakka holda ciphertext yaxlitligini tekshirmaydi; amalda ko‘pincha Poly1305 bilan AEAD sxemasi sifatida ishlatiladi.

State va quarter round

ChaCha20 ichki state’i o‘n oltita 32 bitlik so‘zdan iborat: to‘rtta constant, sakkizta key so‘zi, counter va nonce qismlari. IETF variantida 32 bit block counter va 96 bit nonce qo‘llanadi. State 20 raund, ya’ni o‘nta double-round orqali aralashtiriladi. Har double-round column va diagonal quarter-roundlardan iborat.

Quarter-round modulli qo‘shish, XOR va 16, 12, 8, 7 bitga aylantirishlarni bajaradi. Yakuniy state boshlang‘ich state bilan qo‘shilib, little-endian byte’larda 64 byte key stream blokini beradi. Plaintext shu oqim bilan XOR qilinadi; decryption ham ayni amal, chunki P XOR K XOR K = P.

Nonce va counter

Ayni key va nonce juftligi qayta ishlatilsa, ayni key stream hosil bo‘ladi. Ikki ciphertext XORi ikki plaintext XORiga tenglashib, ma’lumot ochilishiga olib keladi. Shu sababli nonce secret emas, lekin key doirasida noyob bo‘lishi shart. Counter har 64 byte blokda oshadi va bitta nonce ostida maksimal ma’lumot hajmini cheklaydi.

XChaCha20 192 bitlik nonce va HChaCha20 orqali subkey hosil qilishdan foydalanadi. Katta nonce random tanlashda collision xavfini juda kamaytiradi va distributed tizimda boshqarishni soddalashtiradi. XChaCha20-IETF keng kutubxonalarda mavjud, lekin protokol tomonlari ayni variant va formatni kelishishi kerak.

ChaCha20-Poly1305

ChaCha20-Poly1305 AEAD sxemasida ChaCha20 ciphertext, Poly1305 esa authentication tag hosil qiladi. Birinchi key stream blokidan bir martalik Poly1305 key olinadi; keyingi counterlardan shifrlash boshlanadi. Associated data shifrlanmaydi, lekin uzunliklar bilan birga MACga kiritiladi.

Receiver avval tagni tekshiradi va faqat muvaffaqiyatli bo‘lsa plaintextni qabul qiladi. Tagni tekshirmasdan xom ChaCha20 ishlatish bit-flipping hujumiga ochiq: hujumchi ciphertextdagi bitni o‘zgartirib, plaintextdagi tegishli bitni boshqaradi. Tayyor AEAD API tag va formatni to‘g‘ri boshqaradi.

AES bilan taqqoslash

AES apparat tezlashtirishi mavjud protsessorda AES-GCM juda tez ishlaydi. AES instruktsiyasi yo‘q yoki constant-time AES implementatsiyasi qimmat qurilmada ChaCha20 software orqali yuqori va barqaror tezlik berishi mumkin. ARX amallari oddiy CPUda constant-time yozishga qulayroq, ammo side-channel xavfi butun implementatsiya va key managementga bog‘liq.

TLS 1.3 va QUIC ChaCha20-Poly1305ni qo‘llab-quvvatlaydi. Client va server cipher suite tanlashda platforma imkoniyatlarini hisobga olishi mumkin. Algoritmlar bir-biriga “qaysi har doim kuchli” mezonida emas, standart profil, nonce boshqaruvi, apparat va interoperability bo‘yicha tanlanadi.

Implementatsiya chegaralari

Key tasodifiy 32 byte bo‘lishi yoki passworddan Argon2id/scrypt kabi KDF bilan olinishi kerak. Nonce bilan key ciphertext metadata’sida aralashmaydi: nonce ochiq saqlanadi, key esa secret managerda. Message soni va counter limiti kutubxona/protokol talabiga muvofiq kuzatiladi.

Ciphertext formati algoritm versiyasi, nonce, tag va key IDni aniq saqlaydi. Boshqa kutubxona nonce yoki tagni boshqacha joylashtirishi mumkin; xom byte’larni taxmin bilan parse qilish o‘rniga format hujjatlashtiriladi. Test vector, nonce reuse testi va modified ciphertextning rad etilishi implementatsiya tekshiruvining asosiy qismlaridir.

Bog‘liq tushunchalar

Stream cipher, ChaCha20-Poly1305, Poly1305, AEAD, Nonce, XOR, XChaCha20