ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.04.2019

Просмотров: 2332

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

86 

 

≤ 

β

1

(n)

≤ 

β(n) =[log

2

(n)]+1, т.е.β

1

(n) = O(log

2

(n)) 

 
Відзначимо, що функція β

1

(n) може бути рекурсивно задана наступним 

чином [4]: 

                                        

β

1

(0)=0; β

1

(1) = 1; 

                 

β

1

(n)        =    

β

1

(2n) = β

1

(n); 

                                        

β

1

(2n+1) 

= β

1

(n) + 1. 

 
3. Функція β

0

 (n)  

Функція  визначена  для  цілого  додатного  n,  і    β

0

(n) 

є  кількість  «0»  в 

двійковому  поданні  числа  n.  Функція  β

0

(n)  не  є  монотонно  зростаючою 

функцією. Для всіх  

 
                    n =2

k

-1,   

β

0

(n)=0 

Для будь-якого n справедливо співвідношення 
                

β(n) = β

0

(n) + β

1

(n). 

Для  подальшого  аналізу  представляє  також  інтерес  визначення 

середнього  значення  функції  β

1

(n) 

для  n = {0,1,…,N}, де  N=2

k

-1 (

тобто 

двійкове подання числа N займає k розрядів), позначимо його через βs (N). 

 

Тоді   

=

β

+

=

β

N

0

m

s

s

)

m

(

1

N

1

)

N

(

 . 

Оскільки  кількість  чисел,  що  мають  L  одиниць  в  K  розрядах  дорівнює 

кількості сполучень з L по K, то тоді: 

 

1

K

-1

k

0

L

L

K

k

1

L

-1

L

-1

K

k

1

L

L

K

N

0

m

s

2

*

K

C

*

K

C

L

K

*

L

C

*

L

(m)

β

=

=

=

=

=

=

=

=

,  

 
оскільки N=2

k

-1, 

то: 

 

2

β(N)

2

1)

(N

log

2

K

1

1

2

2

*

K

(m)

β

1

N

1

(N)

β

2

K

1

k

N

0

m

s

s

=

+

=

=

+

=

+

=

=

                    (11.1). 

 
Ідея  швидкого  алгоритму  розв'язання  задачі  про  зведення  в  ступінь 

полягає  у  використанні  двійкового  розкладання  числа  n  і  обчислення 
відповідних ступенів шляхом повторного зведення в квадрат [5].  

 


background image

87 

 

Нехай, наприклад,  n=11,  
 
 

тоді    x

11

 = x

8

 * x

2

 * x

1

,  x

4

 = x

2

 * x

2

   

і   x

8

 = x

4

 * x

4

 
Алгоритмічна  реалізація  ідеї  вимагає  послідовного  виділення  бітів, 

зведення  х  у  квадрат  і  множення  y  на  ті  ступені  х,  для  яких  у  двійковому 
розкладанні n присутня одиниця. 

 
XstK (x,n;y); 

 x; 

 1; 

Repeat 

If (n mod 2) = 1 

then  

 y*z; 

 z*z; 

 n div 2; 

Until n = 0 
Return (y) 
End 
 
Одержимо  функцію  трудомісткості  даного  алгоритму,  використовуючи 

введені  раніше  позначення  і  прийняту  методику  рахунків  елементарних 
операцій  у  формальній  системі  процедурно-орієнтованої  мови  високого 
рівня: 

Fa(n) = 2 + β(n)*(2+2+2+1) + β

1

(n)*(2)= 7*β(n) + 2*β1(n)+2      (11.2) 

 
Кількість  проходів  циклу  визначається  кількістю  бітів  у  двійковому 

поданні    n  –  β(n),  а  кількість  повторень  операції  y 

    y*z  –   

кількістю 

одиниць в цьому поданні – β

1

(n), що й відображає формула 11.2.  

Визначимо  трудомісткість  алгоритму  для  особливих  значень  n,  такими 

особливими значеннями є випадки, коли n=2

k

  

або n=2

k

 – 1

 
– 

в випадку коли  n=2

,  то β

1

(n)=1 і   Fa(n)= 7*β(n) + 4; 

 
– 

в випадку коли n=2

k

 -

1, то β

1

(n)= β(n) і  Fa(n)= 9*β(n) + 2

 


background image

88 

 

Якщо  показник  ступеня  заздалегідь  невідомий,  то  можна  отримати 

середню  оцінку,  в  припущенні,  що  подання  числа  n  займає  не  більше  k 
двійкових розрядів, тобто n <2k або log2n <k. Тоді за формулою (11.1)  

 
β

s

(N) = β(N)/2, где N=2

k

-1,  

 
звідки: 
 

Fa(n) 

≤ 

7*β(N) + 2*β

s

(N)+2 = 8*β(N) + 2 =8*([log

2

(n)]+1)+2 = 8*k +2. 

 
Таким  чином,  кількість  операцій,  виконуваних  швидким  алгоритмом 

зведення в ступінь, лінійно залежить від кількості бітів у двійковому поданні 
показника ступеня.  

Введення  спеціальних  функцій  β

1

(n)  і  β(n)  дозволило  отримати  точне 

значення функції трудомісткості цього алгоритму.  

 
 

11.2 

Відомості з теорії простих чисел 

 
а) Порівняння 

Кажуть,  що  два  числа  a  і  b  можна  порівняти  по  модулю  c,  якщо  вони 

дають при діленні на c рівні залишки. 

Операція  отримання  залишку  від  ділення  a  на  c  записується  у  вигляді:  

а modc = d, що еквівалентно поданням: a = k * c + d;  

Порівнянність двох чисел по модулю означає, що: 
а modc = b modc і записується як (a 

 b) modc 

 
Приклади: (13 

 6) mod7,  (17 

 22) mod5 

Якщо, а modc = 0, то, число а ділиться на c без залишку: (a 

 0)modc 

 
б) Прості числа 

Число  p  називається  простим,  якщо  вона  не  має  інших  дільників,  крім 

одиниці  і  самого  себе.  Очевидно,  що  в  якості  можливих  дільників  є  сенс 
перевіряти тільки прості числа, менші або рівні квадратному кореню з числа, 
що перевіряється. 

Безліч простих дільників, доказ належить Евкліду: 
Нехай p1, ..., pk, – всі прості числа, але тоді число  


background image

89 

 

а = (p1 * p2 * ... * pk + 1)  

 
у залишку від ділення на будь-яке з них дає одиницю  

 
a mod pi = 1 

і отже є простим.  

 
в) Функція 
π (n) 
Функція π (n) в теорії простих чисел позначає кількість простих чисел, 

не переважаючих n. 

Наприклад π (12) = 5, оскільки існує 5 простих чисел, не переважаючих 

12, 

а саме: 2,3,5,7,11. 

Асимптотична  поведінка  функції  π  (n)  було  отримано  наприкінці  XIX 

століття [5] і пов'язане з функцій інтегрального логарифма: 

 
Для великих n  –  

π

(n)  

   li(n)  

   n / ln n. 

 
Отриманий  результат  означає,  що  прості  числа  не  так  вже  «рідкісні», 

ймовірність того, що серед взятих випадково ln n чисел, що не перевершують 
n, 

одне з них просте, достатньо велика.  

Відзначимо, що це використовується при пошуку великих простих чисел 

в ймовірнісному тесті Міллера-Рабіна [5]. 

 
 

11.3 

Питання для самоконтролю 

 
1) 

Функції  підрахунку  кількості  бітів  і  кількості  одиниць  в  двійковому 

поданні числа та їх властивості. 

2) 

Алгоритм швидкого зведення в ступінь. 

3

) Аналіз трудомісткості алгоритму швидкого зведення в ступінь; 

4

) Поняття напівгрупи, моноїд і групи, приклади груп. 

5) 

Порівняння та відомості з теорії простих чисел. 

 
 

 


background image

90 

 

12.

 

КРИПТОСИСТЕМА RSA 

 

І

 

ТЕОРІЯ

 

АЛГОРИТМІВ 

 

12.1 

Мультиплікативна група відрахувань за модулем 

 
Розглянемо деякі групи, утворені на множині відрахувань за модулем n: 

 

Нехай n – ціле додатне число, тоді множина залишків від ділення будь-якого 
цілого додатного числа на n називається множиною відрахувань за модулем n 
і позначається як Zn: 

 
Z

n

 = { 0, 1, 2,…, n-1} 

 
Якщо як групову операцію розглянути операцію додавання за модулем n: 

(+  modn), 

то  множина  Zn  утворює  з  цією  операцією  і  нулем,  в  якості 

«

одиниці»,  групу  {Z

n

,  +  modn,  0}, 

яку  називають  адитивною  групою 

відрахувань за модулем n.  

Зворотним елементом для 

 Zn 

буде елемент a

-1

 = (n – a) modn 

Якщо як групову операцію розглянути операцію множення за модулем n: 

(*modn), 

то множина  Z'n утворює з  цією операцією і одиницею групу {Z'

n

*modn,  1}, 

яку  називають  мультиплікативною  групою  відрахувань  за 

модулем n, що позначається звичайно як Zn*. 

Зворотний  елемент  в  групі  Zn*  існує,  тільки  якщо  НСД  (z,  n) = 1  

Кількість  чисел, взаємопростих з n, і, отже, кількість елементів в  групі Zn* 
може бути отримано за формулою Ейлера [5, 9]: 

Z

n

*

 

ϕ

(n) = n*П (1-1/p

i

),  

де p

i

 – 

прості дільники числа n. 

Наприклад: 

ϕ

(15) = 15*(1-1/3)(1-1/5) = 15*2/3*4/5=8 

Якщо число n – просте число, тобто  n = p, то 

ϕ

(p) = p(1-1/p) = (p-1). 

Знаходження 

зворотного 

елементу 

для 

деякого 

елемента 

мультиплікативною групи по множенню зазвичай виконується за допомогою 
розширеного алгоритму Евкліда [5]. 

Зауважимо, що теорема про єдинство зворотного елемента в групі Zn* ,  

а  1  і  (n – 1)  є зворотними самі собі, тобто: 

1*1 = 1modn

    

і  (n-1)*(n-1) = (n

2

 – 2n +1)modn = 1