O’zbekiston respublikasi axborot texnologiyalari va


Elisning maxfiy kalitini ???? topish uchun Diskret logarifmlash muammosini hal qilish uchun indekslarni hisoblash usulidan foydalaning?



Yüklə 1,05 Mb.
səhifə2/2
tarix30.07.2023
ölçüsü1,05 Mb.
#138005
1   2
Loyha ishi Zafar

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.


function findSecretKey(g, h, p) {
let power = 1;
let table = {};
for (let i = 0; i < p-1; i++) {
table[power] = i;
power = (power * g) % p;
}
let inverse = modInverse(g, p);
let y = h;
for (let i = 0; i < p-1; i++) {
if (table[y] != undefined) {
return table[y] + i*(p-1);
}
y = (y * inverse) % p;
}
return null;
}
function modPow(base, exp, mod) {
if (exp == 0) {
return 1;
}
if (exp % 2 == 0) {
let temp = modPow(base, exp/2, mod);
return (temp * temp) % mod;
}
else {
return (base * modPow(base, exp-1, mod)) % mod;
}
}
function modInverse(a, m) {
let m0 = m;
let y = 0, x = 1;
if (m == 1) {
return 0;
}
while (a > 1) {
let q = Math.floor(a / m);
let t = m;
m = a % m, a = t;
t = y;
y = x - q * y;
x = t;
}
if (x < 0) {
x += m0;
}
return x;
}
let h = 234;
let g = 5;
let p = 373;
let a = 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 :
function findSecretKey(g, h, p) {
let power = 1;
let table = {};
for (let i = 0; i < p-1; i++) {
table[power] = i;
power = (power * g) % p;
}
let inverse = modInverse(g, p);
let y = h;
for (let i = 0; i < p-1; i++) {
if (table[y] != undefined) {
return table[y] + i*(p-1);
}
y = (y * inverse) % p;
}
return null;
}
function modPow(base, exp, mod) {
if (exp == 0) {
return 1;
}
if (exp % 2 == 0) {
let temp = modPow(base, exp/2, mod);
return (temp * temp) % mod;
}
else {
return (base * modPow(base, exp-1, mod)) % mod;
}
}
function modInverse(a, m) {
let m0 = m;
let y = 0, x = 1;
if (m == 1) {
return 0;
}
while (a > 1) {
let q = Math.floor(a / m);
let t = m;
m = a % m, a = t;
t = y;
y = x - q * y;
x = t;
}
if (x < 0) {
x += m0;
}
return x;
}
let h = 234;
let g = 5;
let p = 373;
let ciphertext = [86, 110];
let a = findSecretKey(g, h, p);
let c1 = ciphertext[0];
let c2 = ciphertext[1];
let s = modPow(c1, a, p);
let m = (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.
Yüklə 1,05 Mb.

Dostları ilə paylaş:
1   2




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin