1. Перетворення елемента основного поля на ціле число

У цьому підрозділі встановлено алгоритм перетворення елемента основного поля хє GF(2m) на ціле число а.

Вхідні дані алгоритму: елемент основного поля хє GF(2m), х=(хтИ,..., х0) і порядок базової точки еліптичної кривої п.

Результат виконання алгоритму — ціле число a = а0), що задовольняє умову

L = Ца)< Цп).

Алгоритм перетворення елемента основного поля на ціле число:

  1. Якщо елемент х основного поля дорівнює 0, то ««-0 L = L(«)<-1, кінець алгоритму.

  2. Обчислюють ціле число k=L(n)-1.

  3. Приймають сі,= х/ для / = 0 /с-1 та знаходять j, що дорівнює найбільшому Індексу і,

при якому а,= 1. Якщо такого індексу нема, то приймають 0 та закінчують виконання алгоритму.

  1. Двійковий рядок («;,...,д0) довжини L = L(tf)=y+1 зображує ціле число а, яке є результат виконання алгоритму.

  1. Перетворення геш-коду на елемент основного поля

У цьому підрозділі встановлено алгоритм перетворення результату обчислення функції гешу­вання Ло) на елемент основного поля хє GF(2m), x = (xm_1,..., х0).

Вхідні дані алгоритму: геш-код (hLif_b..., h0).

Результат виконання алгоритму— елемент основного поля хє GF(2m), x = (xm_1 х0).

Алгоритм перетворення результату обчислення функції гешування на елемент основного поля:

  1. Обчислюють ціле число k = min(m, LH).

  2. Приймають Xj = h, для і = 0 k - 1.

  3. Якщо k < т, то приймають х, = 0 для І= к,..., т - 1.

  4. Двійковий рядок х0) зображує елемент х основного поля, який є результат вико­

нання алгоритму.

  1. Перетворення пари цілих чисел на цифровий підпис

У цьому підрозділі встановлено алгоритм перетворення пари цілих чисел (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.

Алгоритм перетворення пари цілих чисел на цифровий підпис:

  1. Приймають /= Ld/2.

  2. Утворюють двійковий рядок R за правилом:

    1. Приймають R(:= rt для / = L(r)-1.

    2. Приймають = 0 для і-Цг),..., І- 1.

  3. Утворюють двійковий рядок S за правилом:

    1. Приймають S, = s, для /=0,..., L(s)-1.

    2. Приймають S, = 0 для /= L(s),..., І - 1.

  4. Рядок D є конкатенація двох рядків S||R.

  5. Двійковий рядок D = (Dt Do) довжини LD є результат виконання алгоритму.

  1. Перетворення двійкового рядка на пару цілих чисел

Цей підрозділ встановлює алгоритм перетворення двійкового рядка D парної довжини LD на пару цілих чисел r= Цгу_ь..., r0), s = з0).

Вхідні дані алгоритму: двійковий рядок D = парної довжини LD.

Результат виконання алгоритму — пара цілих чисел г = (гцГ)_і,..., г0) і s = з0).

Алгоритм перетворення двійкового рядка на пару цілих чисел:

  1. Обчислюють ціле число І - Ld/2 .

  2. Приймають r, = D, для /= 0,1.

  3. Визначають j як найбільше і, і=0,..., /-1, для якого г, = 1.

  4. Якщо такого індексу нема, то г<-О,у = О та переходять до кроку 6.

  5. Двійковий рядок (Гцг}_r0), L(r)=/+1, зображає ціле число г.

  6. Приймають s,= Dj і t для і- 0,..., ї-1.

  7. Визначають індекс / як найбільше і, i=Q Z-1, для якого з,= 1.

  8. Якщо такого індексу нема, то s«-0, j=0 та переходять до кроку 10.

  9. Двійковий рядок (sqS)_i,..., s0), L(s)=j+ 1, зображає ціле число s.

  10. Пара цілих чисел rise результат виконання алгоритму.

  1. ОБЧИСЛЮВАЛЬНІ АЛГОРИТМИ

У цьому розділі описано правила реалізації процедур, необхідних для побудови криптогра­фічних алгоритмів, установлених цим стандартом.

  1. Генератор випадкових послідовностей

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

Як генератор випадкових послідовностей треба використовувати генератор випадкових послі­довностей, визначений у додатку А, або будь-який інший генератор випадкових послідовностей, рекомендований уповноваженим органом державної влади у сфері криптографічного захисту інформації.

  1. Функція гешування

У цьому стандарті функцію гешування використовують для обчислення й перевіряння цифро­вого підпису. Функція гешування Н перетворює текст Т довільної довжини LT на двійковий рядок Н(Т) фіксованої довжини LH.

У цьому стандарті треба використовувати функцію гешування, встановлену в ГОСТ 34.311, або будь-яку іншу функцію гешування, рекомендовану уповноваженим органом державної влади у сфері криптографічного захисту інформації. Значення параметра LH однозначно визначається ідентифікатором ІН конкретної функції гешування, яка використовується сумісно з цим стандартом. Параметр іН належить до загальних параметрів цифрового підпису. Таких параметрів у групі корис­тувачів може бути декілька. При цьому LH>160 , Z_(/H)<64. Значення ІН=1, L(iH} = 8 відповідають функції гешування, встановленій в ГОСТ 34.311. Дозволено використовувати геш-функцію за про- мовчанням. При цьому ІН можна випускати.

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

  1. Обчислення випадкового цілого числа

У цьому підрозділі встановлено алгоритм обчислення випадкового цілого числа а, такого що Ца}<Цп}. Як генератор випадкових послідовностей треба використовувати генератор випадкових послідовностей, визначений у 6.1.

Вхідні дані алгоритму: порядок базової точки еліптичної кривої п, довжина t випадкової по­слідовності, що її видає генератор випадкових послідовностей за одне звернення до нього.

Результат виконання алгоритму — випадкове ціле число a. L(<z)<L(n).

Алгоритм обчислення випадкового цілого числа:

  1. Обчислюють довжину Цп} двійкового зображення цілого числа л.

  2. Обчислюють мінімальне значення к, для якого kt > Цп}- 1.

  3. За к звернень до генератора випадкових послідовностей формують випадковий двійко­вий рядок довжини kt. Перші L(n)-1 елементи цієї послідовності формують випадковий ДВІЙКОВИЙ рядок Рцп)-2 довжини Цп)- 1.

  4. Приймають «у = R, для /=0,..., L(n)-2.

  5. Знаходять індекс /як найбільше /, для якого д,- = 1; якщо такого індексу нема, то приймають «<—0 та припиняють виконання алгоритму.

  6. Випадковий рядок Яцп}-2>---> знищують.

Двійковий рядок зображує випадкове ціле число а, яке є результат виконання алго­

ритму.

  1. Обчислення випадкового елемента основного поля

У цьому підрозділі встановлено алгоритм обчислення випадкового елемента х основного поля GF(2m). Як генератор випадкових послідовностей треба використовувати генератор випадкових послідовностей, визначений у 6.1.

Вхідні дані алгоритму: степінь т основного поля, довжина t випадкової послідовності, що ви­дається генератором випадкових послідовностей за одне звернення до нього.

Результат виконання алгоритму — випадковий елемент х основного поля.

Алгоритм обчислення випадкового елемента основного поля:

  1. За k звернень до генератора випадкових послідовностей формують випадковий двійковий рядок довжини kt > m, де k мінімальне число з такою властивістю.

  2. Перші т елементів цього рядка формують випадковий двійковий рядок (Rm_i, .., Ro)-

  3. Приймають Х/=/?/Для / = 0,..., т-1.

  4. Випадковий двійковий рядок (Rm_^,..., Ro) знищують.

  5. Двійковий рядок (х^,..., х0) зображує випадковий елемент х основного поля.

  1. Обчислення сліду елемента основного поля

У цьому підрозділі встановлено алгоритм обчислення сліду елемента х основного поля.

Вхідні дані алгоритму: елемент х основного поля GF(2m).

Результат виконання алгоритму — слід tr(x) елемента х.

Алгоритм обчислення сліду:

  1. Приймають t = х.

  2. Для і від 1 до т - 1 обчислюють t 12 + х.

  3. Результат обчислення сліду tr(x) = t.

  1. Обчислення напівсліду елемента основного поля

У цьому підрозділі встановлено алгоритм обчислення напівсліду елемента х основного поля.

Вхідні дані алгоритму: елемент х основного поля GF(2m) непарного степеня т.

Результат виконання алгоритму — напівслід htr(x) елемента х.

Алгоритм обчислення напівсліду:

  1. Приймають t = х.

п ■ и m-1 с* *4

  1. Для t від 1 до —обчислюють t <- Г + х.

  2. Результат обчислення напівсліду: htr(x) = t.

  1. Розв’язання квадратного рівняння в основному полі

У цьому підрозділі встановлено алгоритм розв’язування квадратного рівняння z2+ uz = w в основному полі.

Вхідні дані алгоритму: квадратне рівняння z2+ uz = w; и, we GF(2m); m — непарне число.

Результат виконання алгоритму — кількість розв’язків k квадратного рівняння й один з роз­в’язків цього рівняння, якщо к> 0.

Алгоритм розв’язування квадратного рівняння:

  1. Якщо и = 0, то приймають z= w2= , k = 1 і переходять до кроку 8.

  2. Якщо w = 0, то приймають z = 0, k = 2, і переходять до кроку 8.

  3. Обчислюють елемент основного поля v=wu~2.

  4. Обчислюють слід елемента tr(y) згідно з 6.5.

  5. Якщо ґг(у)=1, то приймають /с = 0, z = 0, і переходять до кроку 8.

  6. Обчислюють напівслід елемента v, згідно з 6.6.

  7. Обчислюють елемент основного поля z = tu, приймають к =2.

  8. Результат виконання алгоритму: кількість розв’язків квадратного рівняння к та один з роз­в’язків z, якщо к> 0.

  1. Обчислення випадкової точки еліптичної кривої

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

Вхідні дані алгоритму: еліптична крива у2+ ху = х3+ Ах2+ В над полем GF(2m), т — непарне число, А є {0,1}, В* 0.

Результат виконання алгоритму — випадкова точка цієї еліптичної кривої Р = (хрр).

Алгоритм обчислення випадкової точки еліптичної кривої:

  1. Обчислюють випадковий елемент и основного поля згідно з 6.4.

  2. Обчислюють елемент ОСНОВНОГО ПОЛЯ IV = и3+ Аи2+ В.

  3. Розв’язують квадратне рівняння z2+ uz= w згідно з 6.7.

  4. Якщо кількість розв'язків квадратного рівняння дорівнює 0, то переходять до кроку 1, інакше переходять до кроку 5.

  5. Приймають хР= и, yP=z, z розв'язок квадратного рівняння, отриманий на кроці 3.

  6. Результат виконання алгоритму — випадкова точка еліптичної кривої Р з координатами (*Р.Ур)-

  1. Стискання точки еліптичної кривої

У цьому підрозділі встановлено алгоритм перетворення точки Р непарного простого порядку еліптичної кривої над GF(2m) з координатами Р, уР) у стиснене зображення Рє GF(2m), т — непарне число.

Вхідні дані алгоритму: точка еліптичної кривої Р непарного простого порядку п з координа­тами (хр, ур).

Результат виконання алгоритму — стиснене зображення PeGF(2m) точки Р еліптичної кривої.

Алгоритм стискання точки еліптичної кривої:

  1. Якщо хр = 0, то приймають Р=0 та переходять до кроку 3.

  2. Якщо Хр^О, ТО обчислюють елемент ОСНОВНОГО ПОЛЯ У = УрХр1 =(Ут-1>" > Уо), обчислюють слід елемента у, /=Гг(у) та приймають Р = (Рт_11 ... , Ро) = (^р.т-і тобто крайній

правий двійковий розряд координати хР замінюють на значення сліду елемента у.

  1. Результат виконання алгоритму: Рє GF(2m) стиснене зображення точки Р еліптичної кривої.

  1. Відновлення точки еліптичної кривої

У цьому підрозділі встановлено алгоритм відновлення точки еліптичної кривої Р з її стисне­ного зображення Р, отриманого згідно з 6.9.