NTRUSign

Материал из testwiki
Перейти к навигации Перейти к поиску

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) пространстве, а не O(N2), как и в случае с другими схемами подписи на основе решёток. Операции занимают O(N2) времени, в отличие от O(N3) для криптографии на эллиптических кривых и RSA. Поэтому NTRUSign быстрее данных алгоритмов при низких уровнях безопасности и значительно быстрее при высоких уровнях безопасности.

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

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

Так же как и в NTRUEncrypt, в NTRUSign вычисления производятся в кольце R=q[X]/(XN1), где умножение „*“ является циклической сверткой по модулю q. Произведением двух полиномов f=[f0,f1,,fN1] и g=[g0,g1,,gN1] является f*g=i+jkmodNfigjmodq.


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

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

  • Входные данные: целые N,q,df,dg,B>0, строка t=standard или transpose.
  • Генерация B закрытых решёточных базисов и один открытый решеточный базис
Установить i=B. До тех пор, пока i>0:
  1. Произвольно выбрать f, g, взаимно простые с df, dg соответственно.
  2. Найти малые F,GR такие, что f*GF*g=q.
  3. Если t=standard, установить fi=f и f'i=F.
Если t=transpose, установить fi=f и f'i=g.
Вычислить hi=fi1*f'imodq. Установить i=i1.
  • Публичный ключ: входные параметры и h=ho=f01*f'0modq.
  • Закрытый ключ: {fi,f'i,hi} для i=0...B.

Подпись

Подпись требует хеш-функцию H:𝒟R на цифровом пространстве документа 𝒟.

  • Входные данные: цифровой документ D𝒟 и закрытый ключ {fi,f'i,hi} для i=0...B.
  • Установить r=0.
  • Установить s=0 и i=B. Представить r как строку бит. Установить mo=H(D||r), где || обозначает конкатенацию. Установить m=mo.
  1. {fi,f'i,hi} - i-е основание
  2. Вычислить x=1qmi*f'i
  3. Вычислить y=1qmi*fi
  4. si=x*f+y*f
  5. mi=si*(hihi1)modq
  6. Подпись: s=s+si

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

Верификация требует такую же хеш-функцию H, «нормирующую связь» 𝒩 и норму полинома ||.||. Норма ||t|| полинома t определяется как inf0k<q||t+kq||z, где ||r||z=i=0N1ri21Ni=0Nri (где последнее - евклидова норма).

  • Входные данные: Подписанные данные (D,r,s) и публичный ключ h.
  • Представить r как строку бит. Установить m=H(D||r).
  • Вычислить b=||(s,s*hmmodg))||.
  • подпись считается верной, если b<𝒩.

Замечание

  • Рекомендуемые параметры (N,q,df,dg,B,t,𝒩)=(251,128,73,71,1,transpose,310)

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Rq

Шаблон:Криптосистемы с открытым ключом