вності
Генератор псевдовипадкових чисел може бути описаний рекурентною формулою:
i=agi - 1 + b (mod m),
де: gi - i-й член послідовності псевдовипадкових чисел; a, b, m і g 0 - ключові параметри.
Дана послідовність складається з цілих чисел від 0 до m - 1, і якщо елементи gi і gj співпадуть, то наступні ділянки послідовності також співпадуть: g i + 1=g j + 1, g i + 2 =g j + 2, і т.д.
Тому послідовність {gi} є періодичною, і її період не перевищує m. Для того щоб період послідовності псевдовипадкових чисел, згенерованої за формулою (1), був максимальним (рівним m), параметри формули (1) повинні задовольняти таким умовам: і m -взаємне прості числа; a - 1 ділиться на будь-який простий дільник числа m; a - 1 кратно 4, якщо m кратно 4.
Приклад, що демонструє роботу процедури: використовувала компонент SpinEdit - для введення стартового (секретного) числа B більшого L (255), компонент Memo - для відображення результату і командна кнопка Button (рис. 6).
Рис. 7
Процедура, що реалізує алгоритм
RND_CODE (X, M: integer; var RCOD: array of integer) ;, A: integer;:=M + 1; [0]:=X mod 255; i:=1 to M - 1 do [i]:=(A * RCOD [i - 1] + X) mod 255; ;
Команда створення послідовності псевдо випадкових чисел
TForm1.Button1Click (Sender: TObject) ;: array [1..500] of integer; , X: integer;:=SpinEdit1.Value; _CODE (X, High (A), A);.Clear; i:=1 to High (A) do .Lines.Add ( № + IntToStr (i) + Значення числа= + IntToStr (A [i])) ;;
. Шифрування мультиплікативним ключем
Програма шифрування і дешифрування тексту використовує деяку функцію зміни ключа шифрування в залежності від поточного номера символу в тексті.
Для реалізації програми використовувала наступні компоненти (рис. 7): 1,2 - введення початкових значень стартового і мультиплікативного ключів; 1,2,3 - вікна введення тексту, уявлення шифрограми і ДЕШИФРОВАНОГО тексту; 1,2 - командні кнопки.
Рис. 8. Компоненти, що використовуються в програмі
Глобальні змінні рівня модуля
: TForm1 ;, MultKey: integer;
Функція шифрування і дешифрування
CCR (const TXT: string; StartKey, MultKey: Integer; CRT: Boolean): string ;: Integer;:= raquo ;; i:=1 to Length (TXT) do:= Result + Chr (Ord (TXT [i]) xor (StartKey shr 8)); CRT=true then:=(Ord (Result [i]) + StartKey) * MultKey:=(Ord (TXT [i]) + StartKey ) * MultKey ;;
Команда шифрування
TForm1.Button1Click (Sender: TObject);:=SpinEdit1.Value; :=SpinEdit2.Value;.Text:=CCR (Memo2.Text, StartKey, MultKey, true) ;;
Команда дешифрування
TForm1.Button2Click (Sender: TObject);:=SpinEdit1.Value;// (567) Значення стартового ключа:=SpinEdit2.Value;// (18367) Значення множітеля.Text:=CCR (Memo1.Text, StartKey, MultKey, false) ;;
. Обчислення первообразного кореня (алгоритм Ель-Гамаля)
Загальні положення
В основі алгоритму Ель-Гамаля лежить процедура відкритого розподілу ключів, опублікована в 1976 році в роботі У. Діффі і М.Е. Хеллмана «Нові напрямки в криптографії».
Ключі шифрування і дешифрування обчислюються за алгоритмом, де P - велике просте число, g - первісний корінь по модулю P. Секретне число a може бути будь-яким цілим числом, краще випадковим. Величина числа не обмежена.
первообразному (примітивним) коренем по модулю P, буде число g lt; P і взаємно просте з P, що належить показнику d. Показник d (дискретний логарифм числа g по модулю P при основине i т.е або) є найменшим, натуральним числом, що забезпечує порівняння. Звідси випливає, що для взаємно простих P і=P - 1 чисел показник (індекс) і отже, де: i=2,3,4, ..., P - 2. Виходячи з того факту, що першою підставою i, (для простого P і взаємно простого) утворюючим перший примітивний корінь можуть бути тільки числа 2 і 3, отже, обчислити перший корінь не складає труднощів. Наприклад, для модуля P=11, першого коренем буде число 2, оскільки: =, де: і d=5 =. Для модуля P=7 перших коренем буде число 3 ^ 3 (mod 7)=6, а другим коренем буде, 5 ^ 3 (mod 7)=6.
Первісні корені утворюють мультипликативную групу кільця, яка представляє ряд чисел, ступеня яких g0, g1, g2, ... g? (m) - 1 являє собою сукупність всіх взаємно простих з m чисел, менших m. Тобто gk пробігає систему відрахувань при k=1, 2, ...? (M), де:? (M) - функція Ейлера.
У програмі використовувала компоненти SpinEdit 1,2,...