El-Gamal shifrlash algoritmi. Ushbu ochiq kalitli shifrlash algoritmi diskert logarifmlash muammosiga asoslangan bo’lib, kalitlar uzunligi teng bo’lgan holda bardoshliligi RSA algoritmi bardoshligiga teng.
Kalit generatori. El-Gamal algoritmida kalit generatori quyidagi bosqichlardan iborat:
p – tub son tanlanadi;
g
shartni qanoatlantiruvchi g butun son tanlanadi;
maxfiy kalit sifatida a
shartni qanoatlantiruvchi butun son tanlanadi;
ochiq kalit sifatida y = ga mod p hisoblanadi;
ochiq kalitlar jufti (y, g, p) ma’lumotni shifrlovchi tomonlarga yoki ixtiyoriy odamlarga tarqatiladi.
Shifrlash qoidasi: Biror foydalanuvchi (A) maxfiy kalit a sonini tanlab oladi va y = ga mod p bo‘lgan ochiq kalitni hisoblaydi. Agarda foydalanuvchi A bo’lsa, boshqa foydalanuvchi B - maxfiy ma’lumotni jo‘natuvchi bo’lsa, u holda B tomon p sonidan kichik bo‘lgan biror kriptotizim uchun talab etiluvchi sonni tanlab olib,
y1 = gk (mod p) va y2 = (m* yk )(mod p),
sonlarini hisoblaydi. Bu yerda k EKUB( k, p -1) =1 shartni qanoatlantiruvchi butun son. So’ngra (B) (y1>y2) ma’lumotlarini (A)ga jo’natadi.
Deshifrlash qoidasi: O‘z navbatida (A) bu shifrlangan ma’lumotni qabul qilib, quyidagi
(y2 * yp-1-a mod p) = m
bo‘lgan hisoblash bilan ma’lumotning ochiq matnini tiklaydi.
Misol. A tomon o’zining maxfiy kaliti asosida ochiq kalit juftini hosil kiladi va uni B tomonda yuboradi. Olingan qiymatlar quyidagilar: g=3; p=31; a=4; y=(g^a)modp=(3^4)mod31=19. Bu yerda (p,g,y) - ochiq kalitlar jufti va a maxfiy kalit.
Shifrlash. Bu bosqich A tomonning ochiq kalitlari orqali B foydalanuvchi tomonidan amalga oshiriladi. Ochiq ma’lumot sifatida M=CDEF (2,3,4,5 -alifbodani o’rni) olinib, EKUB(k, p-1) =1 shartni qanoatlantiruvchi k=7 tanlandi. Shundan so’ng quyidagilar hisoblanadi:
r=(g^k)modp=(3^7)mod31=17;
C1=m*y^k=2 *(19^7)mod31=14;
C2= m*y^k =3 *(19^7)mod31=21;
C3= m*y^k =4*(19^7)mod31=28;
C4= m*y^k =5*(19^7)mod31=4;
Shundan so’ng C1,C2,C3,C4 lardan iborat S va r A tomonga yuboriladi. Deshifrlash. Bu jarayon maxfiy kalitga ega bo’lgan A tomondan amalga oshiriladi va ochiq matn olinadi:
M1=C1 *r^(p-1 -a)modp=14*17^(31-1 -4)mod31=2;
M2= C2 *r^(p-1 -a)modp =21*17^(31-1 -4)mod31=3;
M3= C3 *r^(p-1 -a)modp =28* 17^(31-1 -4)mod31=4;
M4=C4 *r^(p-1 -a)modp=4 * 17^(31-1 -4)mod31=5.
p = int(input("PPP="))
q = int(input("qqq="))
e = int(input("eee="))
fn = (p-1)*(q-1)
n = q*p
S = [2201, 4565, 1019, 1087, 2989, 4565, 667, 1019,1087,1334,1505,1,2201]
k = []
for j in range(1,fn):
if (e*j)%fn==1:
d=j
print("ddd==",d)
for i in S:
r = ((i**d)%n)%26
k.append(r)
print(k)
for a in k:
print(chr(a+64))
Do'stlaringiz bilan baham: |