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.
Ishni bajarilish tartibi va qo’yilgan vazifa
Asosiy matn shifrlash usullaridan birida shifrlansin va qadamma – qadam izohlansin. Shuningdek, Delpi, Java, C++ va C# dasturlash tizimlaridan birida dasturiy ta’minoti yaratilsin.
TALABAGA TOPSHIRIQ!!!. Dasturiy ta’minotni ishlab chiqish va ushbu dastur talaba tomonidan ixtiyoriy dasturlash tili olinishi mumkin va hisobotda dasturiy ta’minot ishlashi to’liq tavsiflansin.
IKKITA BIR XIL ISH QABUL QILINMAYDI!!!!!
Men bu tajriba ishida Python dasturlash tilidan foydalanib, RSA shifriga dastur tuzdim:
Dastur kodi:
from decimal import Decimal
def gcd(a,b):
if b==0:
return a
else:
return gcd(b,a%b)
p = int(input(' p = '))
q = int(input(' q = '))
no = int(input('e = '))
n = p*q
t = (p-1)*(q-1)
for e in range(2,t):
if gcd(e,t)== 1:
break
for i in range(1,10):
x = 1 + i*t
if x % e == 0:
d = int(x/e)
break
ctt = Decimal(0)
ctt =pow(no,e)
ct = ctt % n
dtt = Decimal(0)
dtt = pow(ct,d)
dt = dtt % n
print('n = '+str(n)+' e = '+str(e)+' t = '+str(t)+' d = '+str(d)+' Shifrmatn = '+str(ct)+' Berilgan matn = '+str(dt))
Natija:
Dostları ilə paylaş: |