Перетворення елемента основного поля на ціле число
У цьому підрозділі встановлено алгоритм перетворення елемента основного поля хє GF(2m) на ціле число а.
Вхідні дані алгоритму: елемент основного поля хє GF(2m), х=(хтИ,..., х0) і порядок базової точки еліптичної кривої п.
Результат виконання алгоритму — ціле число a = а0), що задовольняє умову
L = Ца)< Цп).
Алгоритм перетворення елемента основного поля на ціле число:
Якщо елемент х основного поля дорівнює 0, то ««-0 L = L(«)<-1, кінець алгоритму.
Обчислюють ціле число k=L(n)-1.
Приймають сі,= х/ для / = 0 /с-1 та знаходять j, що дорівнює найбільшому Індексу і,
при якому а,= 1. Якщо такого індексу нема, то приймають 0 та закінчують виконання алгоритму.
Двійковий рядок («;,...,д0) довжини L = L(tf)=y+1 зображує ціле число а, яке є результат виконання алгоритму.
Перетворення геш-коду на елемент основного поля
У цьому підрозділі встановлено алгоритм перетворення результату обчислення функції гешування Ло) на елемент основного поля хє GF(2m), x = (xm_1,..., х0).
Вхідні дані алгоритму: геш-код (hLif_b..., h0).
Результат виконання алгоритму— елемент основного поля хє GF(2m), x = (xm_1 х0).
Алгоритм перетворення результату обчислення функції гешування на елемент основного поля:
Обчислюють ціле число k = min(m, LH).
Приймають Xj = h, для і = 0 k - 1.
Якщо k < т, то приймають х, = 0 для І= к,..., т - 1.
Двійковий рядок х0) зображує елемент х основного поля, який є результат вико
нання алгоритму.
Перетворення пари цілих чисел на цифровий підпис
У цьому підрозділі встановлено алгоритм перетворення пари цілих чисел (r, s), які задовольняють умови 0<г< п, 0<s<n, на цифровий підпис D = Do).
Вхідні дані алгоритму: пара цілих чисел (r, s) у двійковому зображенні: г = г0),
s = (sL(S)_i s0), 0<r<n, 0<s<n, довжина цифрового підпису LD: LD> 2Цп), LD кратне 16.
Результат виконання алгоритму — цифровий підпис D = (Df. -і,..., Do) довжини LD.
Алгоритм перетворення пари цілих чисел на цифровий підпис:
Приймають /= Ld/2.
Утворюють двійковий рядок R за правилом:
Приймають R(:= rt для / = L(r)-1.
Приймають = 0 для і-Цг),..., І- 1.
Утворюють двійковий рядок S за правилом:
Приймають S, = s, для /=0,..., L(s)-1.
Приймають S, = 0 для /= L(s),..., І - 1.
Рядок D є конкатенація двох рядків S||R.
Двійковий рядок D = (Dt Do) довжини LD є результат виконання алгоритму.
Перетворення двійкового рядка на пару цілих чисел
Цей підрозділ встановлює алгоритм перетворення двійкового рядка D парної довжини LD на пару цілих чисел r= (гЦгу_ь..., r0), s = з0).
Вхідні дані алгоритму: двійковий рядок D = парної довжини LD.
Результат виконання алгоритму — пара цілих чисел г = (гцГ)_і,..., г0) і s = з0).
Алгоритм перетворення двійкового рядка на пару цілих чисел:
Обчислюють ціле число І - Ld/2 .
Приймають r, = D, для /= 0,1.
Визначають j як найбільше і, і=0,..., /-1, для якого г, = 1.
Якщо такого індексу нема, то г<-О,у = О та переходять до кроку 6.
Двійковий рядок (Гцг}_r0), L(r)=/+1, зображає ціле число г.
Приймають s,= Dj і t для і- 0,..., ї-1.
Визначають індекс / як найбільше і, i=Q Z-1, для якого з,= 1.
Якщо такого індексу нема, то s«-0, j=0 та переходять до кроку 10.
Двійковий рядок (sqS)_i,..., s0), L(s)=j+ 1, зображає ціле число s.
Пара цілих чисел rise результат виконання алгоритму.
ОБЧИСЛЮВАЛЬНІ АЛГОРИТМИ
У цьому розділі описано правила реалізації процедур, необхідних для побудови криптографічних алгоритмів, установлених цим стандартом.
Генератор випадкових послідовностей
Генератор випадкових послідовностей використовують для отримування випадкових даних, необхідних для побудови загальних параметрів цифрового підпису, обчислення цифрового підпису, а також для побудови відкритих і особистих ключів цифрового підпису.
Як генератор випадкових послідовностей треба використовувати генератор випадкових послідовностей, визначений у додатку А, або будь-який інший генератор випадкових послідовностей, рекомендований уповноваженим органом державної влади у сфері криптографічного захисту інформації.
Функція гешування
У цьому стандарті функцію гешування використовують для обчислення й перевіряння цифрового підпису. Функція гешування Н перетворює текст Т довільної довжини LT на двійковий рядок Н(Т) фіксованої довжини LH.
У цьому стандарті треба використовувати функцію гешування, встановлену в ГОСТ 34.311, або будь-яку іншу функцію гешування, рекомендовану уповноваженим органом державної влади у сфері криптографічного захисту інформації. Значення параметра LH однозначно визначається ідентифікатором ІН конкретної функції гешування, яка використовується сумісно з цим стандартом. Параметр іН належить до загальних параметрів цифрового підпису. Таких параметрів у групі користувачів може бути декілька. При цьому LH>160 , Z_(/H)<64. Значення ІН=1, L(iH} = 8 відповідають функції гешування, встановленій в ГОСТ 34.311. Дозволено використовувати геш-функцію за про- мовчанням. При цьому ІН можна випускати.
Якщо використовувана функція гешування накладає обмеження на довжину LT повідомлення, то ці обмеження мають силу і для цього стандарту.
Обчислення випадкового цілого числа
У цьому підрозділі встановлено алгоритм обчислення випадкового цілого числа а, такого що Ца}<Цп}. Як генератор випадкових послідовностей треба використовувати генератор випадкових послідовностей, визначений у 6.1.
Вхідні дані алгоритму: порядок базової точки еліптичної кривої п, довжина t випадкової послідовності, що її видає генератор випадкових послідовностей за одне звернення до нього.
Результат виконання алгоритму — випадкове ціле число a. L(<z)<L(n).
Алгоритм обчислення випадкового цілого числа:
Обчислюють довжину Цп} двійкового зображення цілого числа л.
Обчислюють мінімальне значення к, для якого kt > Цп}- 1.
За к звернень до генератора випадкових послідовностей формують випадковий двійковий рядок довжини kt. Перші L(n)-1 елементи цієї послідовності формують випадковий ДВІЙКОВИЙ рядок Рцп)-2 довжини Цп)- 1.
Приймають «у = R, для /=0,..., L(n)-2.
Знаходять індекс /як найбільше /, для якого д,- = 1; якщо такого індексу нема, то приймають «<—0 та припиняють виконання алгоритму.
Випадковий рядок Яцп}-2>---> знищують.
Двійковий рядок зображує випадкове ціле число а, яке є результат виконання алго
ритму.
Обчислення випадкового елемента основного поля
У цьому підрозділі встановлено алгоритм обчислення випадкового елемента х основного поля GF(2m). Як генератор випадкових послідовностей треба використовувати генератор випадкових послідовностей, визначений у 6.1.
Вхідні дані алгоритму: степінь т основного поля, довжина t випадкової послідовності, що видається генератором випадкових послідовностей за одне звернення до нього.
Результат виконання алгоритму — випадковий елемент х основного поля.
Алгоритм обчислення випадкового елемента основного поля:
За k звернень до генератора випадкових послідовностей формують випадковий двійковий рядок довжини kt > m, де k — мінімальне число з такою властивістю.
Перші т елементів цього рядка формують випадковий двійковий рядок (Rm_i, .., Ro)-
Приймають Х/=/?/Для / = 0,..., т-1.
Випадковий двійковий рядок (Rm_^,..., Ro) знищують.
Двійковий рядок (х^,..., х0) зображує випадковий елемент х основного поля.
Обчислення сліду елемента основного поля
У цьому підрозділі встановлено алгоритм обчислення сліду елемента х основного поля.
Вхідні дані алгоритму: елемент х основного поля GF(2m).
Результат виконання алгоритму — слід tr(x) елемента х.
Алгоритм обчислення сліду:
Приймають t = х.
Для і від 1 до т - 1 обчислюють t 12 + х.
Результат обчислення сліду tr(x) = t.
Обчислення напівсліду елемента основного поля
У цьому підрозділі встановлено алгоритм обчислення напівсліду елемента х основного поля.
Вхідні дані алгоритму: елемент х основного поля GF(2m) непарного степеня т.
Результат виконання алгоритму — напівслід htr(x) елемента х.
Алгоритм обчислення напівсліду:
Приймають t = х.
п ■ и m-1 с* *4
Для t від 1 до —обчислюють t <- Г + х.
Результат обчислення напівсліду: htr(x) = t.
Розв’язання квадратного рівняння в основному полі
У цьому підрозділі встановлено алгоритм розв’язування квадратного рівняння z2+ uz = w в основному полі.
Вхідні дані алгоритму: квадратне рівняння z2+ uz = w; и, we GF(2m); m — непарне число.
Результат виконання алгоритму — кількість розв’язків k квадратного рівняння й один з розв’язків цього рівняння, якщо к> 0.
Алгоритм розв’язування квадратного рівняння:
Якщо и = 0, то приймають z= w2= , k = 1 і переходять до кроку 8.
Якщо w = 0, то приймають z = 0, k = 2, і переходять до кроку 8.
Обчислюють елемент основного поля v=wu~2.
Обчислюють слід елемента tr(y) згідно з 6.5.
Якщо ґг(у)=1, то приймають /с = 0, z = 0, і переходять до кроку 8.
Обчислюють напівслід елемента v, згідно з 6.6.
Обчислюють елемент основного поля z = tu, приймають к =2.
Результат виконання алгоритму: кількість розв’язків квадратного рівняння к та один з розв’язків z, якщо к> 0.
Обчислення випадкової точки еліптичної кривої
У цьому підрозділі встановлено алгоритм обчислення випадкової точки еліптичної кривої.
Вхідні дані алгоритму: еліптична крива у2+ ху = х3+ Ах2+ В над полем GF(2m), т — непарне число, А є {0,1}, В* 0.
Результат виконання алгоритму — випадкова точка цієї еліптичної кривої Р = (хр,ур).
Алгоритм обчислення випадкової точки еліптичної кривої:
Обчислюють випадковий елемент и основного поля згідно з 6.4.
Обчислюють елемент ОСНОВНОГО ПОЛЯ IV = и3+ Аи2+ В.
Розв’язують квадратне рівняння z2+ uz= w згідно з 6.7.
Якщо кількість розв'язків квадратного рівняння дорівнює 0, то переходять до кроку 1, інакше переходять до кроку 5.
Приймають хР= и, yP=z, z — розв'язок квадратного рівняння, отриманий на кроці 3.
Результат виконання алгоритму — випадкова точка еліптичної кривої Р з координатами (*Р.Ур)-
Стискання точки еліптичної кривої
У цьому підрозділі встановлено алгоритм перетворення точки Р непарного простого порядку еліптичної кривої над GF(2m) з координатами (хР, уР) у стиснене зображення Рє GF(2m), т — непарне число.
Вхідні дані алгоритму: точка еліптичної кривої Р непарного простого порядку п з координатами (хр, ур).
Результат виконання алгоритму — стиснене зображення PeGF(2m) точки Р еліптичної кривої.
Алгоритм стискання точки еліптичної кривої:
Якщо хр = 0, то приймають Р=0 та переходять до кроку 3.
Якщо Хр^О, ТО обчислюють елемент ОСНОВНОГО ПОЛЯ У = УрХр1 =(Ут-1>" > Уо), обчислюють слід елемента у, /=Гг(у) та приймають Р = (Рт_11 ... , Ро) = (^р.т-і тобто крайній
правий двійковий розряд координати хР замінюють на значення сліду елемента у.
Результат виконання алгоритму: Рє GF(2m) — стиснене зображення точки Р еліптичної кривої.
Відновлення точки еліптичної кривої
У цьому підрозділі встановлено алгоритм відновлення точки еліптичної кривої Р з її стисненого зображення Р, отриманого згідно з 6.9.