• Solаvey-Shtrаssen testi
  • I. Kirish II. Asosiy qism Ochiq kalitli kriptotizmlarda kalitlarni generatsiyalash usullari




    Download 385,21 Kb.
    bet10/12
    Sana05.12.2023
    Hajmi385,21 Kb.
    #111359
    1   ...   4   5   6   7   8   9   10   11   12
    Frobenius Kvadratik testi ( QFT ) bir sonning mumkin bo'lgan tub yoki yo'qligini
    tekshirish uchun ehtimollik birlamchi testidir . U Ferdinand Georg Frobenius sharafiga
    nomlangan . Sinovda kvadratik polinomlar va Frobenius avtomorfizmi tushunchalari
    qo'llaniladi . Buni kvadratik polinom yordamida umumiy Frobenius testi bilan
    aralashtirib yubormaslik kerak - QFT kirish asosida ruxsat etilgan ko'phadlarni cheklaydi 
    va bajarilishi kerak bo'lgan boshqa shartlarga ham ega. Ushbu testdan o'tgan kompozitsion 
    Frobenius psevdo-tub hisoblanadi , ammo buning aksi to'g'ri bo'lishi shart
    emas.
    Algoritmni ishlab chiqishda Granthamning ko'zlagan maqsadi tub sonlar har doim
    o'tishi va kompozitlar 1/7710 dan kam ehtimollik bilan o'tishini ta'minlash edi.
    Test keyinchalik Damgård va Frandsen tomonidan kengaytirilgan kvadratik 
    Frobenius testi (EQFT) deb nomlangan testga kengaytirildi.
    n musbat butun son bo'lsin , n toq bo'lsin va
    bu erda (X/n)Yakobi belgisini bildiradi . B=5000 deb olsak . Keyin ( b , c )
    parametrli n ustidagi QFT quyidagicha ishlaydi:
    (1) tub sonlardan biri ikkita n ga bo’linadigan B va
    qiymatning eng kichikidan
    kichik yoki teng ekanligini tekshiring. Ha bo'lsa, n murakkab.
    (2) 
    (3) ni hisoblang. Agar bo’lsa u holda n murakkab son.
    (4)  ni hisoblang. Agar bo’lsa u holda n murakkab son.
    (5)  s – toq son. Agar bo’lsa, n murakkab son boladi.
    Agar QFT shu besh qadamda to’xtamasa, u holda n soni ehtimoliy tub deyiladi.
    bu tenglik quyidagicha ifodalanadi:
    Bu yerda H va K polinomlardir. n ni tekshiring . Ha bo'lsa, n murakkab

    Solаvey-Shtrаssen testi:


    import random
    def power(a, n, p):
    res = 1
    a = a % p
    while n > 0:
    if n & 1:
    res = (res * a) % p
    n = n >> 1
    a = (a * a) % p
    return res
    def jacobi(a, n):
    if n <= 0 or n % 2 == 0:
    raise ValueError("n must be a positive odd integer.")
    if a == 0:
    return 0
    if a == 1:
    return 1
    result = 1
    while a != 0:
    while a % 2 == 0:
    a //= 2
    if n % 8 == 3 or n % 8 == 5:
    result = -result
    a, n = n, a
    if a % 4 == 3 and n % 4 == 3:
    result = -result
    a %= n
    if n == 1:
    return result
    return 0
    def solovay_strassen_test(n, k):
    if n <= 1:
    return False
    if n == 2 or n == 3:
    return True
    for _ in range(k):
    a = random.randint(2, n - 2)
    x = power(a, (n - 1) // 2, n)
    if x != 1 and x != n - 1:
    return False
    jacobi_val = jacobi(a, n)
    if x % n != jacobi_val % n:
    return False
    return True
    number_str = "151617181920212223242526272829303132333435363738394041424
    3444546474849505152535455565758596061 "
    number = int(number_str)
    iterations = 5
    if solovay_strassen_test(number, iterations):
    print("Berilgan son tub son hisoblanadi.")
    else:
    print("Berilgan son tub son emas.")



    1.1-rasm

    Download 385,21 Kb.
    1   ...   4   5   6   7   8   9   10   11   12




    Download 385,21 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    I. Kirish II. Asosiy qism Ochiq kalitli kriptotizmlarda kalitlarni generatsiyalash usullari

    Download 385,21 Kb.