Я работаю в NTRU, поэтому я рад видеть этот интерес.
Стандарт IEEE 1363.1-2008 определяет, как реализовать NTRUEncrypt с самыми последними наборами параметров. Метод, который он определяет для двоичного-> тройного преобразования:
Преобразовать каждое трехразрядное число в два
троичные коэффициенты следующим образом, и
объединить полученную тройную
количества, чтобы получить [выход].
{0, 0, 0} -> {0, 0}
{0, 0, 1} -> {0, 1}
{0, 1, 0} -> {0, -1}
{0, 1, 1} -> {1, 0}
{1, 0, 0} -> {1, 1}
{1, 0, 1} -> {1, -1}
{1, 1, 0} -> {-1, 0}
{1, 1, 1} -> {-1, 1}
Чтобы преобразовать обратно:
Конвертировать каждый набор из двух троичных
коэффициенты до трех битов следующим образом,
и объединить полученный бит
количества, чтобы получить [выход]:
{0, 0} -> {0, 0, 0}
{0, 1} -> {0, 0, 1}
{0, -1} -> {0, 1, 0}
{1, 0} -> {0, 1, 1}
{1, 1} -> {1, 0, 0}
{1, -1} -> {1, 0, 1}
{-1, 0} -> {1, 1, 0}
{-1, 1} -> {1, 1, 1}
{-1, -1} -> set "fail" to 1 and set bit string to {1, 1, 1}
Обратите внимание, что для безопасного шифрования сообщения вы не можете просто преобразовать сообщение в триное и применить необработанное шифрование NTRU. Сообщение должно быть предварительно обработано перед шифрованием и постобработано после шифрования для защиты от активных злоумышленников, которые могут изменить сообщение при передаче. Необходимая обработка указана в стандарте IEEE 1363.1-2008 и обсуждается в нашей статье 2003 года «NAEP: Обеспечиваемая безопасность при наличии ошибок дешифрования» (доступно из http://www.ntru.com/cryptolab/articles.htm#2003_3,, хотя следует учитывать, что это описание предназначено для двоичных полиномов а не трина).
Надеюсь, это поможет.
@ Берт: в разное время мы рекомендовали двоичные или тройные полиномы. Тройной многочлен обеспечивает одинаковую защиту с более короткими ключами. Однако в прошлом мы думали, что двоичные полиномы позволяют q (большой модуль) быть 256. Это было привлекательным для 8-битных процессоров. С тех пор мы установили, что принятие значения q = 256 неприемлемо снижает безопасность (в частности, слишком высока вероятность ошибок дешифрования). Поскольку у нас больше нет маленькой буквы q в качестве цели, мы можем воспользоваться тройными полиномами, чтобы получить меньшие ключи в целом.