Ugrás a tartalomhoz

Poly1305

A Wikiszótárból, a nyitott szótárból


Főnév

Poly1305 (tsz. Poly1305s)

  1. (informatika) A Poly1305 egy kriptográfiai MAC (Message Authentication Code) algoritmus, amelyet Daniel J. Bernstein tervezett 2005-ben. Célja, hogy gyors, egyszerű és biztonságos üzenethitelesítési módszert nyújtson, különösen szoftveres környezetekben és modern titkosítási protokollokban. A Poly1305 önmagában nem titkosító algoritmus, hanem egy hitelesítő függvény, amely biztosítja, hogy az adatot nem módosították, és valóban az a fél küldte, akinek szánták.

A Poly1305 gyakran együtt használatos a ChaCha20 stream cipher-rel, így jön létre a széles körben alkalmazott ChaCha20-Poly1305 AEAD (Authenticated Encryption with Associated Data) konstrukció, amely például megtalálható a TLS 1.3, OpenSSH, WireGuard VPN, Signal és sok más biztonságos rendszerben.



🧠 Mi az a MAC?

A Message Authentication Code (MAC) egy rövid, rögzített hosszúságú érték, amit az üzenet alapján és egy titkos kulcs felhasználásával számolnak ki. A célja, hogy:

  • Biztosítsa az üzenet hitelességét (azt a fél küldte, akitől származik),
  • Biztosítsa az integritást (nem módosították közben az adatot),
  • Megakadályozza a manipulációt vagy hamisítást.



🔐 A Poly1305 célja

A Poly1305 egy olyan MAC algoritmus, amely:

  • Nagyon gyorsan végrehajtható bármilyen CPU-n,
  • Nem igényel nehézkes műveleteket (mint pl. RSA vagy ECC),
  • Erősen ellenáll a kriptográfiai támadásoknak (pl. forgácsolási támadás, üzenet-módosítás),
  • Egyszerű és jól vizsgálható matematikai alapokon nyugszik.



📦 Technikai paraméterek

Tulajdonság Érték
Kimeneti méret 128 bit (16 byte)
Kulcs méret 256 bit (32 byte), amely két részből áll: 128-bit kulcs r, és 128-bit nonce-alapú s
Alapműveletek 32-bites addíció, szorzás, moduló számítás
Hash alap Szorzás és összeadás egy prím modulo alatt: 2^130 - 5
Sebesség Akár 1 ciklus/byte (x86 architektúrán)



⚙️ Hogyan működik a Poly1305?

Bemenetek:

  • Egy üzenet (tetszőleges hosszúságú),
  • Egy kulcs: két 128 bites komponensből áll:
    • r: a fő szorzókulcs (128 bit), speciális bitmaszkkal korlátozva,
    • s: a kimenethez adott érték (128 bit), amelyet általában a titkosítóból (pl. ChaCha20) származtatnak.

Lépések:

  1. Az üzenetet 16 bájtos blokkokra bontjuk.
  2. Minden blokkhoz hozzáadunk egy bájtos 0x01 paddinget, hogy 17 bájtos számként kezeljük.
  3. Az így kapott számokat összeadjuk és modulo 2^130 - 5 értékkel kezeljük.
  4. Végül hozzáadjuk az s kulcsrészletet.
  5. Az eredmény: 16 bájtos hitelesítési kód, amit az üzenethez mellékelhetünk.



🧪 Egyszerűsített példa

Tegyük fel, hogy az üzenet:

b"hello world"

és a kulcs r és s értékeit a ChaCha20 algoritmusból nyerjük ki. A Poly1305 ezt az üzenetet blokkokra bontja, 17 bájtos számként kezeli, elvégzi a polinomiális összeadást és modulózást, majd végül hozzáadja az s értéket → így jön létre az auth tag (MAC érték).



🔐 Poly1305 kulcskezelés – miért fontos?

A kulcs r részének sosem szabad ismétlődnie ugyanazzal az s értékkel. Ezért:

  • A Poly1305 kulcsát mindig egyszeri (one-time) titkosító kulcsból kell generálni (pl. egy stream cipher első 32 byte-jából).
  • A ChaCha20-Poly1305 AEAD esetén a kulcsot egy nonce és kulcs alapján származtatjuk ChaCha20 segítségével → ez biztonságos és hatékony.



⚠️ Milyen támadások ellen véd?

Támadás Védelmi módszer
Üzenet módosítása MAC érvénytelen lesz
Replay támadás Nonce használat → új MAC minden alkalommal
Forgácsolási támadás (bitflipping) MAC nem fog stimmelni
Üzenet aláírás hamisítása Ismeretlen r kulccsal lehetetlen



✅ Poly1305 előnyei

Előny Magyarázat
Hihetetlenül gyors Szoftveres környezetben akár 1 ciklus/byte
Matematikailag bizonyított Moduláris aritmetikán alapul
Egyszerű implementáció Nem igényel bonyolult logikát
Szabadon használható Nincs szabadalmi védelem
Modern szabványok része TLS 1.3, OpenSSH, WireGuard, libsodium stb.



🧩 Poly1305 AEAD konstrukcióban

A Poly1305 nem titkosít, ezért AEAD konstrukcióban, például ChaCha20-Poly1305-ben kombinálják egy titkosítóval.

AEAD = Authenticated Encryption with Associated Data, azaz: - Titkosítás + Hitelesítés + Kapcsolódó (nem titkosított) adatok védelme.

ChaCha20-Poly1305 működése: 1. A titkosító (ChaCha20) titkosítja az üzenetet. 2. Az első 32 byte-jából kulcs készül a Poly1305 számára. 3. Poly1305 hash-t számol a titkosított adat + egyéb adatok (AAD) alapján. 4. A végső kimenet: ciphertext || auth_tag



📚 Hol használják a Poly1305-öt?

Rendszer Használat
TLS 1.2 / 1.3 AEAD titkosítás (ChaCha20-Poly1305)
OpenSSH Alapértelmezett hitelesítő algoritmus
WireGuard VPN Gyors VPN-protokoll, ChaCha20-Poly1305-re építve
libsodium Modern kriptográfiai könyvtár, alapeszközként használja
NaCl (Networking and Cryptography Library) Első implementációja Poly1305-nek



🔬 Példa Pythonban

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

key = ChaCha20Poly1305.generate_key()
chacha = ChaCha20Poly1305(key)
nonce = os.urandom(12)
aad = b"header"
plaintext = b"titkos adat"

ciphertext = chacha.encrypt(nonce, plaintext, aad)
print("Titkosított adat:", ciphertext.hex())

# Visszafejtés
decrypted = chacha.decrypt(nonce, ciphertext, aad)
print("Visszafejtve:", decrypted.decode())

🧠 Összefoglalás

Fogalom Magyarázat
Poly1305 Nagyon gyors MAC algoritmus, nem titkosító
Kimenet 128 bites hitelesítési kód
Kulcs 256 bit (r + s), egyszer használatos
Sebesség Akár 1 ciklus/byte szoftverben
Alapműveletek Összeadás, szorzás, mod 2^130 - 5
Használat AEAD konstrukciókban (pl. ChaCha20-Poly1305)
Védelmi szint Magas – modern támadások ellen is biztonságos
Ajánlott Minden olyan rendszerhez, ahol gyors és biztonságos MAC szükséges



A Poly1305 ma az egyik leggyorsabb, legbiztonságosabb üzenet-hitelesítési megoldás, különösen ha ChaCha20 titkosítással együtt használjuk. Egyszerűsége, sebessége és kriptográfiai szilárdsága miatt mára szabvánnyá vált a legkritikusabb alkalmazásokban is.