ElGamal encryption (tsz. ElGamal encryptions)
Az ElGamal rendszer egyszerű, bizonyítottan biztonságos (a diszkrét logaritmus problémára épül), és támogatja a homomorf tulajdonságokat is, ami azt jelenti, hogy a titkosított adatokon végezhetők bizonyos számítások anélkül, hogy visszafejtenénk őket. Hátránya viszont, hogy nagyobb a kimeneti mérete, mint a bemeneté, és a titkosítás/visszafejtés lassabb, mint például RSA vagy ECC esetében.
Az ElGamal titkosítás a moduláris aritmetikán alapul, és a Zₚ* csoporton belül dolgozik, ahol p
egy nagy prímszám.
p
: egy nagy prímszám (pl. 2048 bit)g
: egy primitív gyök mod p
szerint (generátor)x
: a privát kulcs, egy véletlenszerű egész szám 1 < x < p−1
y = g^x mod p
: a nyilvános kulcs része
x
(p, g, y)
Tegyük fel, hogy Alice szeretne Bobnak üzenetet küldeni.
(p, g, y)
.k
(1 < k < p−1
), amely minden üzenetnél új kell legyen.m
) a következőképp titkosítja:
c1 = g^k mod p
c2 = m · y^k mod p
(c1, c2)
Bob a saját privát kulcsával x
visszafejti a titkosítást:
s = c1^x mod p
(ugyanaz, mint y^k
, mivel y = g^x
)s⁻¹ mod p
– az s
multiplikatív inverzét modulo p
m = c2 · s⁻¹ mod p
A biztonság alapja a diszkrét logaritmus probléma:
Adott
g
ésy = g^x mod p
, nagyon nehézx
-et kiszámolni, hap
elég nagy.
Ez a probléma jelenleg nem oldható meg hatékonyan klasszikus számítógépeken, így a rendszer kriptográfiailag biztonságos, feltéve, hogy a kulcshossz megfelelő (legalább 2048 bit).
Előny | Magyarázat |
---|---|
Egyszerűség | Könnyen implementálható, matematikailag tiszta |
Bizonyított biztonság | A diszkrét logaritmus problémára épül |
Homomorf titkosítás | Titkosított szorzás → visszafejtés után szorzott érték |
Aszimmetrikus | Nem kell előzetes kulcscsere, bárki titkosíthat a publikus kulccsal |
Hátrány | Miért? |
---|---|
Lassabb, mint pl. RSA vagy ECC | Műveletek sok moduláris exponenciálást igényelnek |
Ciphertext bővülés | A titkosított üzenet kétszer akkora, mint a bemeneti üzenet |
Nem determinisztikus | Azonos üzenet mindig más ciphertextet ad (ez biztonságos viszont) |
Az ElGamal egy multiplikatív homomorf rendszer, vagyis:
E(m1) · E(m2) = E(m1 * m2)
from Crypto.Util.number import getPrime, inverse
import random
# Paraméterek
p = getPrime(256)
g = 2
x = random.randint(1, p-2) # Privát kulcs
y = pow(g, x, p) # Nyilvános kulcs komponens
# Üzenet
m = 123456789
# Titkosítás
k = random.randint(1, p-2)
c1 = pow(g, k, p)
s = pow(y, k, p)
c2 = (m * s) % p
ciphertext = (c1, c2)
# Visszafejtés
s_dec = pow(c1, x, p)
s_inv = inverse(s_dec, p)
m_decrypted = (c2 * s_inv) % p
print("Eredeti:", m)
print("Visszafejtve:", m_decrypted)
Probléma | Megoldás |
---|---|
K újrahasználása | k mindig véletlenszerű és egyszer használatos kell legyen!
|
Diszkrét logaritmus támadások | Nagy p szükséges (legalább 2048 bit)
|
Chosen Ciphertext Attack (CCA) | Ajánlott CCA-biztos verziót használni (pl. ElGamal + MAC vagy AEAD kombinációval) |
Terület | Funkció |
---|---|
OpenPGP / GPG | Levelek, fájlok titkosítása |
e-voting rendszerek | Homomorf titkosítás miatt népszerű |
Digitális aláírások | ElGamal aláírás (külön változat, nem azonos az encrypttel) |
Tanulmányi cél | Egyszerűség miatt gyakori példarendszer oktatásban |
Fogalom | Jelentés |
---|---|
ElGamal titkosítás | Aszimmetrikus titkosító algoritmus |
Alapja | Diszkrét logaritmus probléma |
Kulcspár | Nyilvános: (p, g, y) , Privát: x
|
Titkosítás | (c1, c2) = (g^k mod p, m * y^k mod p)
|
Visszafejtés | m = c2 * (c1^x)^-1 mod p
|
Előnyök | Biztonságos, homomorf, nyílt kulcsú |
Hátrányok | Lassú, nagy kimenet, random k szükséges
|
Használat | PGP, tanulmány, e-voting, biztonságos kommunikáció |
Az ElGamal mára klasszikusnak számít a kriptográfiában: egyszerű, mégis nagyon hatékony matematikai struktúrára épül, és jó kiindulópont az aszimmetrikus kriptográfia megértéséhez.