NTRUSign

NTRUSign
Ґрунтується на Goldreich-Goldwasser-Halevi signature schemed
Дата публікації 1999
Описано за адресою www3.ntu.edu.sg/home/wuhj/research/publications/2000_ACISP_PASS.pdf
math.brown.edu/~jpipher/NTRUSign_RSA.pdf

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 швидше даних алгоритмів при низьких рівнях безпеки і значно швидше при високих рівнях безпеки.[2][3]

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 , E , R {\displaystyle F,G,E,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. Процитовано 2018-04-16.
  2. http://www.szydlo.com/ntru-revised-full02.pdf
  3. P. Nguyen and O. Regev, "Learning a Parallelepiped: Cryptanalysis of GGH and NTRU Signatures", available from http://www.cims.nyu.edu/~regev/papers/gghattack.pdf

Посилання

  • Most recent NTRUSign paper, including parameter sets for multiple security levels
  • A Java implementation of NTRUSign. sourceforge.net. Архів оригіналу за 23 грудня 2015.
Freebase: /m/09hnhv