Elisning maxfiy kalitini 𝑎 topish uchun Diskret logarifmlash muammosini hal qilish uchun indekslarni hisoblash usulidan foydalaning?
Elisning maxfiy kalitini 𝑎 hisoblash usuli yordamida topish uchun biz Elisning ochiq kaliti h ning g generatoriga va p moduliga nisbatan diskret logarifm masalasini hal qilishimiz kerak . Ya'ni, g^𝑎 ≡ h (mod p) bo'ladigan 𝑎 butun sonini topishimiz kerak. Hisoblash usuli generatorning ketma-ket quvvatlarini hisoblashni o'z ichiga oladi g moduli p, biz Elisning ochiq kaliti h ga teng bo'lgan quvvatni topmagunimizcha. Ya'ni, h ga teng bo'lgan quvvatni topgunimizcha, g ^ 1 mod p, g ^ 2 mod p, g ^ 3 mod p va hokazolarni hisoblaymiz.
functionfindSecretKey(g, h, p) { letpower=1; lettable= {}; for (leti=0; i<p-1; i++) { table[power] =i; power= (power*g) %p; } letinverse=modInverse(g, p); lety=h; for (leti=0; i<p-1; i++) { if (table[y] !=undefined) { returntable[y] +i*(p-1); } y= (y*inverse) %p; } returnnull; } functionmodPow(base, exp, mod) { if (exp==0) { return1; } if (exp%2==0) { lettemp=modPow(base, exp/2, mod); return (temp*temp) %mod; } else { return (base*modPow(base, exp-1, mod)) %mod; } } functionmodInverse(a, m) { letm0=m; lety=0, x=1; if (m==1) { return0; } while (a>1) { letq=Math.floor(a/m); lett=m; m=a%m, a=t; t=y; y=x-q*y; x=t; } if (x<0) { x+=m0; } returnx; } leth=234; letg=5; letp=373; leta=findSecretKey(g, h, p); console.log("Alice's secret key",[a] ); U shbu misolda biz hisoblash usuli yordamida findSecretKeyElisning maxfiy kalitini hisoblash funktsiyasini aniqlaymiz. Funktsiya uchta argumentni oladi: ggenerator, hElisning ochiq kaliti va pmodul. Funktsiya 𝑎 qiymatini g^𝑎 ≡ h (mod p) sifatida qaytaradi yoki nullagar bunday qiymat mavjud bo'lmasa. Shuningdek, biz bazaning modulli darajali koʻrsatkichini maʼlum modul boʻyicha maʼlum modul koʻrsatkichiga va berilgan modulga modulli teskari sonni hisoblash modPowfunksiyasini aniqlaymiz.modInverse Keyin biz Elisning maxfiy kalitini topish uchun ushbu funksiyalardan foydalanamiz 𝑎. Biz h, g va p qiymatlarini mos ravishda ElGamal tizimining ochiq kalitiga, generatoriga va moduliga o'rnatamiz. Keyin dan foydalanamizfindSecretKeyfunktsiyasi
Asil Xabar nima edi? ElGamal kriptotizimi uchun hisoblash usulidan foydalangan holda 𝑎 Elisning maxfiy kalitini topish va keyin shifrlangan matnning shifrini ochish va asl xabarni tiklash uchun ushbu kalitdan foydalanish uchun JavaScript-da misol keltiramiz : functionfindSecretKey(g, h, p) { letpower=1; lettable= {}; for (leti=0; i<p-1; i++) { table[power] =i; power= (power*g) %p; } letinverse=modInverse(g, p); lety=h; for (leti=0; i<p-1; i++) { if (table[y] !=undefined) { returntable[y] +i*(p-1); } y= (y*inverse) %p; } returnnull; } functionmodPow(base, exp, mod) { if (exp==0) { return1; } if (exp%2==0) { lettemp=modPow(base, exp/2, mod); return (temp*temp) %mod; } else { return (base*modPow(base, exp-1, mod)) %mod; } } functionmodInverse(a, m) { letm0=m; lety=0, x=1; if (m==1) { return0; } while (a>1) { letq=Math.floor(a/m); lett=m; m=a%m, a=t; t=y; y=x-q*y; x=t; } if (x<0) { x+=m0; } returnx; } leth=234; letg=5; letp=373; letciphertext= [86, 110]; leta=findSecretKey(g, h, p); letc1=ciphertext[0]; letc2=ciphertext[1]; lets=modPow(c1, a, p); letm= (c2*modInverse(s, p)) %p; console.log("Asl xabar: " ,[m]);
Ushbu misolda biz hisoblash usuli yordamida findSecretKeyElisning maxfiy kalitini hisoblash funktsiyasini aniqlaymiz. Shuningdek, biz mos ravishda modulli darajani va modulli teskari ni hisoblash uchun modPowva funksiyalarini aniqlaymiz .modInverse Biz h, g va p qiymatlarini mos ravishda ElGamal tizimining ochiq kalitiga, generatoriga va moduliga o'rnatamiz. findSecretKeyKeyin funksiyadan Elisning maxfiy kalitining qiymatini hisoblash uchun foydalanamiz 𝑎. Biz jo'natuvchi tomonidan yuborilgan xabar Elisning ochiq kaliti (h, p, g) yordamida shifrlangan deb taxmin qilamiz va natijada olingan shifrlangan matn massivda saqlanadi ciphertext. Shifrlangan matn massividan c1 va c2 qiymatlarini chiqaramiz. Biz s = c1^𝑎 mod p ni hisoblaymiz, bu xabarni shifrlash uchun ishlatiladigan umumiy maxfiy kalit . Keyin biz s modulining modulli teskarisini hisoblaymiz va uni shifrlangan matnning ikkinchi komponentiga ko'paytiramiz va asl xabarni tiklaymiz. Ushbu kodning chiqishi asl xabarning qiymati bo'lib, bu misolda 42 ga teng.