Chaqaloq qadam - ulkan qadam - Baby-step giant-step

Yilda guruh nazariyasi, matematikaning bir bo'lagi go'dak qadami ulkan qadam a o'rtada uchrashish algoritm hisoblash uchun alohida logaritma yoki buyurtma a elementidagi cheklangan abeliy guruhi sababli Daniel Shanks.[1] Diskret jurnal muammosi mintaqa uchun muhim ahamiyatga ega ochiq kalit kriptografiyasi.

Ko'p ishlatiladigan kriptografiya tizimlarining aksariyati diskret jurnalni hisoblash juda qiyin degan taxminga asoslanadi; qanchalik qiyin bo'lsa, ma'lumotlar uzatishni qanchalik xavfsizligini ta'minlaydi. Jurnalning diskret muammosini oshirishning usullaridan biri bu kriptotizimni katta guruhga asoslashdir.

Nazariya

Algoritm a ga asoslangan makon-vaqt almashinuvi. Bu sinovdan ko'paytirishning juda sodda modifikatsiyasi, diskret logaritmalarni topishning sodda usuli.

Berilgan tsiklik guruh tartib , a generator guruh va guruh elementi , muammo butun sonni topishdir shu kabi

Chaqaloq-qadam gigant-qadam algoritmi qayta yozishga asoslangan :

Shuning uchun bizda:

Algoritm oldindan hisoblab chiqiladi ning bir nechta qiymatlari uchun . Keyin u tuzatadi va qiymatlarini sinab ko'radi yuqoridagi muvofiqlikning o'ng tomonida, sinov usulida ko'paytirish usulida. U har qanday qiymat uchun moslik qondirilganligini tekshiradi , ning oldindan hisoblangan qiymatlaridan foydalangan holda .

Algoritm

Kiritish: Tsiklik guruh G tartib n, generatorga ega a va element β.

Chiqish: Qiymat x qoniqarli .

  1. m ← Shift (n)
  2. Barcha uchun j bu erda 0 ≤ j < m:
    1. Hisoblash aj va juftlikni saqlang (j, aj) jadvalda. (Qarang § Amalda )
  3. Hisoblash am.
  4. γβ. (o'rnatilgan γ = β)
  5. Barcha uchun men bu erda 0 ≤ men < m:
    1. Γ ikkinchi komponent ekanligini tekshiring (aj) jadvaldagi har qanday juftlikning.
    2. Agar shunday bo'lsa, qaytib keling im + j.
    3. Agar unday bo'lmasa, γγam.


C ++ algoritmi (C ++ 17)

# shu jumladan <cmath># shu jumladan <cstdint># shu jumladan <unordered_map>std::uint32_t kuch_m(std::uint32_t tayanch, std::uint32_t tugatish, std::uint32_t mod) {        // kvadrat-ko'paytirish-algoritmidan foydalangan holda modulli ko'rsatkich}/// x ni shunday hisoblaydiki, g ^ x% mod == hstd::ixtiyoriy<std::uint32_t> nilufar_abdullaev(std::uint32_t g, std::uint32_t h, std::uint32_t mod) {        konst avtomatik m = statik_cast<std::uint32_t>(std::shift(std::kv(mod)));        avtomatik stol = std::tartibsiz_harita<std::uint32_t, std::uint32_t>{};        avtomatik e = std::uint64_t{1}; // vaqtinchalik qiymatlar 32 bitdan kattaroq bo'lishi mumkin        uchun (avtomatik men = std::uint32_t{0}; men < m; ++men) {                stol[statik_cast<std::uint32_t>(e)] = men;                e = (e * g) % mod;        }        konst avtomatik omil = kuch_m(g, mod-m-1, mod);        e = h;        uchun (avtomatik men = std::uint32_t{}; men < m; ++men) {                agar (avtomatik u = stol.topmoq(statik_cast<std::uint32_t>(e)); u != stol.oxiri()) {                        qaytish {men*m + u->ikkinchi};                }                e = (e * omil) % mod;        }        qaytish std::nullopt;}

Amalda

Chaqaloq-qadam gigant-qadam algoritmini tezlashtirishning eng yaxshi usuli - jadvalni samarali qidirish sxemasidan foydalanish. Bu holatda eng yaxshisi a xash jadvali. Xeshlash ikkinchi komponentda amalga oshiriladi va asosiy tsiklning 1-bosqichida tekshirishni amalga oshirish uchun γ xeshga qo'yiladi va natijada olingan xotira manzili tekshiriladi. Xash jadvallar elementlarni olishlari va qo'shishlari mumkinligi sababli vaqt (doimiy vaqt), bu umumiy qadam-qadam gigant-qadam algoritmini sekinlashtirmaydi.

Algoritmning ishlash vaqti va kosmik murakkabligi , ga qaraganda ancha yaxshi qo'pol kuchlarni hisoblashning sodda vaqti.

Baby-step gigant-qadam algoritmi ko'pincha umumiy kalitni echishda ishlatiladi Diffie Hellman kalit almashinuvi, modul asosiy son bo'lganda. Agar modul asosiy bo'lmasa, the Pohlig-Hellman algoritmi kichikroq algoritmik murakkablikka ega va xuddi shu masalani hal qiladi.

Izohlar

  • Chaqaloq-qadam gigant-qadam algoritmi umumiy algoritmdir. Bu har bir cheklangan tsiklik guruh uchun ishlaydi.
  • Guruhning tartibini bilish shart emas G oldindan. Algoritm hali ham ishlaydi, agar n faqat guruh tartibining yuqori chegarasi.
  • Odatda go'dak-qadam gigant-qadam algoritmi buyurtmasi asosiy bo'lgan guruhlar uchun ishlatiladi. Agar guruhning tartibi kompozit bo'lsa, u holda Pohlig-Hellman algoritmi yanada samaraliroq.
  • Algoritm talab qiladi O (m) xotira. Kichikroqni tanlab, kamroq xotiradan foydalanish mumkin m algoritmning birinchi bosqichida. Bunday qilish ish vaqtini ko'paytiradi, keyin bo'ladi O (n/m). Shu bilan bir qatorda foydalanish mumkin Logarifmlar uchun Pollardning rho algoritmi, bu go'dak-qadam gigant-qadam algoritmi bilan bir xil ish vaqtiga ega, ammo xotiraga bo'lgan talab juda kichik.
  • Ushbu algoritm birinchi bo'lib paydo bo'lgan 1971 yilda nashr etilgan Daniel Shanksning hisobiga yozilgan bo'lsa, 1994 yilda Nechaev tomonidan nashr etilgan[2] ma'lum bo'lganligini ta'kidlaydi Gelfond 1962 yilda.

Qo'shimcha o'qish

  • H. Koen, Hisoblash algebraik sonlar nazariyasi kursi, Springer, 1996 y.
  • D. Shanks, Sinf raqami, faktorizatsiya nazariyasi va avlodlari. Proc-da. Simp. Sof matematik. 20, 415—440 betlar. AMS, Providence, R.I., 1971 yil.
  • A. Stein va E. Teske, Optimallashtirilgan bolalar uchun qadam-gigant qadam usullari, Ramanujan Matematik Jamiyati jurnali 20 (2005), №. 1, 1-32.
  • A. V. Sutherland, Umumiy guruhlarda hisoblashlarni buyurtma qiling, Doktorlik dissertatsiyasi, M.I.T., 2007 y.
  • D. C. Terr, Shanksning chaqaloqqa qadam bosish gigant-qadam algoritmining modifikatsiyasi, Matematik hisoblash matbuoti 69 (2000), 767-773. doi:10.1090 / S0025-5718-99-01141-2

Adabiyotlar

  1. ^ Daniel Shanks (1971), "Sinf raqami, faktorizatsiya va nasl nazariyasi", Proc-da. Simp. Sof matematik., Providence, R.I .: Amerika Matematik Jamiyati, 20, 415-440 betlar
  2. ^ V. I. Nechaev, Diskret logarifma uchun aniqlangan algoritmning murakkabligi, Matematik eslatmalar, vol. 55, yo'q. 2 1994 yil (165-172)

Tashqi havolalar