CRYPTO.MN
ENCRYPTION

ChaCha20

256 битийн түлхүүр ашиглан мэдээллийг урсгал хэлбэрээр шифрлэдэг, программ хангамжид үр ашигтай ажиллах симметрик шифр.

Стандарт
RFC 8439
Түлхүүрийн урт
256 бит
Nonce-ийн урт
96 бит
12 байт
Баталгаажуулах tag
128 бит
16 байт

Чухал анхааруулга

  • Нэг нууц түлхүүртэй хамт nonce-ийг дахин ашиглаж болохгүй.
  • Давтан ашиглавал мэдээллийн нууцлал алдагдах эрсдэлтэй.
  • ChaCha20 дангаараа мэдээллийн бүрэн бүтэн байдлыг баталгаажуулдаггүй тул бодит системд ChaCha20-Poly1305 зэрэг баталгаажуулалттай шифрлэлтийн горим ашиглана.
  • Нууц түлхүүрийг аюулгүй хадгалж, баталгаажуулалт амжилтгүй болсон мэдээллийг ашиглаж болохгүй.

Юу вэ?

ChaCha20 нь Даниел Бернштейний зохион бүтээсэн симметрик stream cipher юм. Энэ алгоритм нь 256 битийн нууц түлхүүр ашиглан мэдээллийг шифрлэж, ижил түлхүүр болон тохирох nonce, counter-ийн тусламжтайгаар тайлдаг. ChaCha20-Poly1305 хослол нь мэдээллийн нууцлалын зэрэгцээ өөрчлөгдсөн эсэхийг шалгах боломж олгодог.

Хэрхэн ажилладаг вэ?

ChaCha20 нь 256 битийн түлхүүр, 96 битийн nonce болон 32 битийн counter ашиглан 512 битийн түлхүүрийн урсгалын блокууд үүсгэдэг. ARX (Addition, Rotation, XOR) үйлдлээр дотоод төлөвийг 20 үе шаттай хувиргаж, гарсан урсгалыг эх мэдээлэлтэй XOR үйлдлээр нэгтгэн шифрлэнэ. Тайлах үед ижил түлхүүр, nonce болон counter ашиглан ижил урсгалыг үүсгэдэг. Нэг түлхүүрийн хүрээнд nonce-ийг давтаж болохгүй.

Хаана ашиглагддаг вэ?

  • TLS 1.3
  • WireGuard VPN
  • QUIC протокол
  • ChaCha20-Poly1305 ашигладаг аюулгүй мессеж болон өгөгдөл дамжуулах системүүд

Түгээмэл алдаа

  • Nonce-ийг нэг түлхүүрийн хүрээнд давтан ашиглах
  • Нууц түлхүүрийг код дотор шууд бичиж хадгалах
  • Криптографийн түлхүүр үүсгэхдээ Math.random() ашиглах
  • ChaCha20 дангаараа мэдээллийн бүрэн бүтэн байдлыг хамгаална гэж үзэх
  • Poly1305-ийн баталгаажуулалтыг шалгалгүйгээр тайлагдсан мэдээллийг ашиглах
  • Nonce болон түлхүүрийг хамгаалалтгүй сувгаар дамжуулах
  • RFC 8439 стандартын бус өөрийн хэрэгжүүлэлт ашиглах

Жишээ код

Python
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
import os

# 256 битийн түлхүүр үүсгэх
key = ChaCha20Poly1305.generate_key()
cipher = ChaCha20Poly1305(key)

# 96 бит буюу 12 байтын nonce
nonce = os.urandom(12)

plaintext = b"Nuuts medeelel"
aad = b"message-v1"

# Шифрлэх: ciphertext + authentication tag
encrypted = cipher.encrypt(nonce, plaintext, aad)

# Тайлах ба баталгаажуулах
decrypted = cipher.decrypt(nonce, encrypted, aad)

assert decrypted == plaintext
print("Амжилттай тайлж, баталгаажууллаа")

ENCRYPTION ангилалын бусад алгоритм