NTRUSign

NTRUSign, также известный как NTRU Signature Algorithm, является ключевым алгоритмом шифрования с открытым ключом цифровой подписи на основе схемы подписи GGH.

История

Впервые алгоритм был представлен на сессии en:Asiacrypt 2001 года и опубликован в рецензируемой форме на конференции RSA 2003 года[1]. Издание 2003 года включало рекомендации параметров для уровня безопасности 80 бит. В следующей публикации 2005 года были пересмотрены рекомендации для уровня безопасности 80 бит, а также представлены параметры востребованных уровней безопасности 112, 128, 160, 192 и 256 бит и описаны алгоритмы для получения наборов параметров для любого желаемого уровня безопасности. NTRU Cryptosystems, Inc. подали заявку на патент на данный алгоритм.[когда?]

Особенности

NTRUSign включает в себя отображение сообщения для случайной точки в 2N-мерном пространстве, где N является одним из параметров NTRUSign, и решение проблемы нахождения ближайшего вектора в решётке, тесно связанной с решёткой NTRUEncrypt. Данная решётка обладает свойством: частный 2N-мерный базис для решётки можно описать с помощью 2-х векторов, каждый из которых состоит из N коэффициентов и базиса, который может быть определён отдельным N-размерным вектором. Это позволяет представлять открытые ключи в O ( N ) {\displaystyle O(N)} пространстве, а не O ( N 2 ) {\displaystyle O(N^{2})} , как и в случае с другими схемами подписи на основе решёток. Операции занимают O ( N 2 ) {\displaystyle O(N^{2})} времени, в отличие от O ( N 3 ) {\displaystyle O(N^{3})} для криптографии на эллиптических кривых и RSA. Поэтому NTRUSign быстрее данных алгоритмов при низких уровнях безопасности и значительно быстрее при высоких уровнях безопасности.

NTRUSign находится в стадии рассмотрения по стандартизации рабочей группой IEEE P1363.

Описание алгоритма

Так же как и в NTRUEncrypt, в NTRUSign вычисления производятся в кольце R = Z q [ X ] / ( X N 1 ) {\displaystyle R=\mathbb {Z} _{q}[X]/(X^{N}-1)} , где умножение „ {\displaystyle *} “ является циклической сверткой по модулю q {\displaystyle q} . Произведением двух полиномов f = [ f 0 , f 1 , , f N 1 ] {\displaystyle f=[f_{0},f_{1},\ldots ,f_{N-1}]} и g = [ g 0 , g 1 , , g N 1 ] {\displaystyle g=[g_{0},g_{1},\ldots ,g_{N-1}]} является f g = i + j k mod N f i g j mod q {\displaystyle f*g=\sum _{i+j\equiv k\mod N}f_{i}\cdot g_{j}\mod q} .


За основу NTRUSign могут быть взяты стандартные или транспонированные решетки. Основное преимущество транспонированной решетки заключается в том, что коэффициенты многочлена принадлежат {-1,0,1}. Это увеличивает скорость умножения.

Генерация ключа

  • Входные данные: целые N , q , d f , d g , B > 0 {\displaystyle N,q,d_{f},d_{g},B>0} , строка t = s t a n d a r d {\displaystyle t=standard} или t r a n s p o s e {\displaystyle transpose} .
  • Генерация B {\displaystyle B} закрытых решёточных базисов и один открытый решеточный базис
Установить i = B {\displaystyle i=B} . До тех пор, пока i > 0 {\displaystyle i>0} :
  1. Произвольно выбрать f {\displaystyle f} , g {\displaystyle g} R {\displaystyle \mathbb {R} } , взаимно простые с d f {\displaystyle d_{f}} , d g {\displaystyle d_{g}} соответственно.
  2. Найти малые F , G R {\displaystyle F,G\in R} такие, что f G F g = q {\displaystyle f*G-F*g=q} .
  3. Если t = s t a n d a r d {\displaystyle t=standard} , установить f i = f {\displaystyle f_{i}=f} и f i = F {\displaystyle f'_{i}=F} .
Если t = t r a n s p o s e {\displaystyle t=transpose} , установить f i = f {\displaystyle f_{i}=f} и f i = g {\displaystyle f'_{i}=g} .
Вычислить h i = f i 1 f i m o d q {\displaystyle h_{i}=f_{i}^{-1}*f'_{i}modq} . Установить i = i 1 {\displaystyle i=i-1} .
  • Публичный ключ: входные параметры и h = h o = f 0 1 f 0 mod q {\displaystyle h=ho=f_{0}^{-1}*f'_{0}\operatorname {mod} q} .
  • Закрытый ключ: { f i , f i , h i } {\displaystyle \left\{f_{i},f'_{i},h_{i}\right\}} для i = 0... B {\displaystyle i=0...B} .

Подпись

Подпись требует хеш-функцию H : D R {\displaystyle H:{\mathcal {D}}\rightarrow R} на цифровом пространстве документа D {\displaystyle {\mathcal {D}}} .

  • Входные данные: цифровой документ D D {\displaystyle D\in {\mathcal {D}}} и закрытый ключ { f i , f i , h i } {\displaystyle \left\{f_{i},f'_{i},h_{i}\right\}} для i = 0... B {\displaystyle i=0...B} .
  • Установить r = 0 {\displaystyle r=0} .
  • Установить s = 0 {\displaystyle s=0} и i = B {\displaystyle i=B} . Представить r {\displaystyle r} как строку бит. Установить m o = H ( D | | r ) {\displaystyle m_{o}=H(D||r)} , где | | {\displaystyle ||} обозначает конкатенацию. Установить m = m o {\displaystyle m=m_{o}} .
  1. { f i , f i , h i } {\displaystyle \left\{f_{i},f'_{i},h_{i}\right\}} - i {\displaystyle i} -е основание
  2. Вычислить x = 1 q m i f i {\displaystyle x=\lfloor -{\frac {1}{q}}m_{i}*f'_{i}\rceil }
  3. Вычислить y = 1 q m i f i {\displaystyle y=\lfloor {\frac {1}{q}}m_{i}*f_{i}\rceil }
  4. s i = x f + y f {\displaystyle s_{i}=x*f+y*f'}
  5. m i = s i ( h i h i 1 ) mod q {\displaystyle m_{i}=si*(h_{i}-h_{i-1})\mod q}
  6. Подпись: s = s + s i {\displaystyle s=s+s_{i}}

Проверка подписи

Верификация требует такую же хеш-функцию H {\displaystyle H} , «нормирующую связь» N R {\displaystyle {\mathcal {N}}\in \mathbb {R} } и норму полинома | | . | | {\displaystyle ||.||} . Норма | | t | | {\displaystyle ||t||} полинома t {\displaystyle t} определяется как inf 0 k < q | | t + k q | | z {\displaystyle \inf _{0\leq k<q}||t+kq||_{z}} , где | | r | | z = i = 0 N 1 r i 2 1 N i = 0 N r i {\displaystyle ||r||_{z}=\sum _{i=0}^{N-1}r_{i}^{2}-{\frac {1}{N}}\sum _{i=0}^{N}r_{i}} (где последнее - евклидова норма).

  • Входные данные: Подписанные данные ( D , r , s ) {\displaystyle (D,r,s)} и публичный ключ h {\displaystyle h} .
  • Представить r как строку бит. Установить m = H ( D | | r ) {\displaystyle m=H(D||r)} .
  • Вычислить b = | | ( s , s h m mod g ) ) | | {\displaystyle b=||(s,s*h-m\operatorname {mod} g))||} .
  • подпись считается верной, если b < N {\displaystyle b<{\mathcal {N}}} .

Замечание

  • Рекомендуемые параметры ( N , q , d f , d g , B , t , N ) = ( 251 , 128 , 73 , 71 , 1 , t r a n s p o s e , 310 ) {\displaystyle (N,q,d_{f},d_{g},B,t,{\mathcal {N}})=(251,128,73,71,1,transpose,310)}

Примечания

  1. Jeffrey Hoffstein, Nick Howgrave-Graham, Jill Pipher, Joseph H. Silverman, William Whyte. NTRUSign: Digital Signatures Using the NTRU Lattice. Архивировано 30 января 2013 года.

Ссылки

  • Most recent NTRUSign paper, including parameter sets for multiple security levels
  • A Java implementation of NTRUSign Архивная копия от 23 декабря 2015 на Wayback Machine
Перейти к шаблону «Криптосистемы с открытым ключом»
Алгоритмы
Факторизация целых чисел
Дискретное логарифмирование
Криптография на решётках
Другие
Теория
Стандарты
Темы