NTRUEncrypt

редактировать

NTRUEncryptкриптосистема с открытым ключом, также известная как Алгоритм шифрования NTRU представляет собой решетчатую альтернативу RSA и ECC и основан на задаче кратчайшего вектора в решетке (которая, как известно, не может быть взломана с помощью квантовых компьютеров ).

Он основан на предполагаемой сложности факторизации определенных многочленов в усеченном кольце многочленов в частное двух многочленов с очень маленькими коэффициентами. Взлом криптосистемы тесно связан, хотя и не эквивалентен, с алгоритмической проблемой редукции решетки в некоторых решетках. Чтобы предотвратить некоторые опубликованные атаки, необходим тщательный выбор параметров.

Поскольку и для шифрования, и для дешифрования используется только простое полиномиальное умножение, эти операции выполняются очень быстро по сравнению с другими схемами асимметричного шифрования, такими как RSA, ElGamal и криптография с эллиптической кривой. Однако NTRUEncrypt еще не прошел сопоставимый объем криптографического анализа в развернутой форме.

Связанный алгоритм - это NTRUSign алгоритм цифровой подписи.

В частности, операции NTRU основаны на объектах в усеченном кольце многочленов R = Z [X] / (XN - 1) {\ displaystyle \ R = \ mathbb {Z} [X] / ( X ^ {N} -1)}\ R = {\ mathbb {Z}} [X] / ( X ^ {N} -1) со сверточным умножением, и все полиномы в кольце имеют целое коэффициенты и степень не выше N-1:

a знак равно a 0 + a 1 X + a 2 X 2 + ⋯ + a N - 2 XN - 2 + a N - 1 XN - 1 {\ displaystyle {\ textbf {a}} = a_ {0} + a_ {1 } X + a_ {2} X ^ {2} + \ cdots + a_ {N-2} X ^ {N-2} + a_ {N-1} X ^ {N-1}}\ textbf {a} = a_0 + a_1 X + a_2 X ^ 2 + \ cdots + a_ {N-2} X ^ {N-2} + a_ {N-1} X ^ {N-1}

NTRU на самом деле параметризованное семейство криптосистем; каждая система определяется тремя целочисленными параметрами (N, p, q), которые представляют максимальную степень N - 1 {\ displaystyle \ N-1}\ N-1 для всех многочленов в усеченном кольце R, a малый модуль и большой модуль, соответственно, где предполагается, что N является простым, q всегда больше, чем p, и p и q являются взаимно простыми ; и четыре набора многочленов L f, L g, L m {\ displaystyle \ {\ mathcal {L}} _ {f}, {\ mathcal {L}} _ {g}, {\ mathcal {L} } _ {m}}\ \ mathcal {L} _f, \ mathcal {L} _g, \ mathcal {L} _m и L r {\ displaystyle \ {\ mathcal {L}} _ {r}}\ \ mathcal {L} _r (полиномиальная часть закрытого ключа, многочлен для генерации открытого ключа, сообщения и маскирующего значения соответственно), все степени не более N - 1 {\ displaystyle \ N-1}\ N-1 .

Contents
  • 1 History
  • 2 Генерация открытого ключа
  • 3 Шифрование
  • 4 Расшифровка
  • 5 Атаки
  • 6 Улучшения безопасности и производительности
    • 6.1 Таблица 1: Параметры
  • 7 Ссылки
  • 8 Внешние ссылки
История

Криптосистема с открытым ключом NTRUEncrypt - относительно новая криптосистема. Первая версия системы, которая называлась просто NTRU, была разработана примерно в 1996 году тремя математиками (Джеффри Хоффштейн, Джилл Пайфер и Джозеф Х. Сильверман ). В 1996 году эти математики вместе с основали NTRU Cryptosystems, Inc. и получили патент (срок действия которого истек) на криптосистему.

Последние десять лет люди работали над улучшением криптосистемы. С момента первой презентации криптосистемы были внесены некоторые изменения для улучшения как производительности системы, так и ее безопасности. Большинство улучшений производительности было сосредоточено на ускорении процесса. Вплоть до 2005 года можно найти литературу, описывающую сбои дешифрования NTRUEncrypt. Что касается безопасности, начиная с первой версии NTRUEncrypt, были введены новые параметры, которые кажутся безопасными для всех известных в настоящее время атак и разумного увеличения вычислительной мощности.

Теперь система полностью соответствует стандартам IEEE P1363 в соответствии со спецификациями решетчатой ​​криптографии с открытым ключом (IEEE P1363.1 ). Из-за скорости криптосистемы с открытым ключом NTRUEncrypt (см. http://bench.cr.yp.to для результатов тестирования) и низкого использования памяти (см. ниже), она может использоваться в таких приложениях, как мобильные устройства и смарт-карты. В апреле 2011 года NTRUEncrypt был принят в качестве стандарта X9.98 для использования в индустрии финансовых услуг.

Генерация открытого ключа

Для отправки секретного сообщения от Алисы Бобу требуется генерация открытый и закрытый ключ. Открытый ключ известен как Алисе, так и Бобу, а закрытый ключ известен только Бобу. Чтобы сгенерировать пару ключей, два полинома f и g со степенью не выше N - 1 {\ displaystyle \ N-1}\ N-1 и с коэффициентами в {-1,0,1} обязательны. Их можно рассматривать как представления классов вычетов многочленов по модулю XN - 1 {\ displaystyle \ X ^ {N} -1}\ X ^ N-1 в R. Многочлен f ∈ L f { \ displaystyle {\ textbf {f}} \ in L_ {f}}\ textbf {f} \ в L_f должен удовлетворять дополнительному требованию, согласно которому существуют обратные по модулю q и по модулю p (вычисленные с использованием алгоритма Евклида ), что означает, что f ⋅ fp = 1 (mod p) {\ displaystyle \ {\ textbf {f}} \ cdot {\ textbf {f}} _ {p} = 1 {\ pmod {p}}}\ \ textbf {f} \ cdot \ textbf { f} _p = 1 \ pmod p и f ⋅ fq = 1 (mod q) {\ displaystyle \ {\ textbf {f}} \ cdot {\ textbf {f}} _ {q} = 1 {\ pmod {q} }}\ \ textbf {f} \ cdot \ textbf {f} _q = 1 \ pmod q должен удерживаться. Поэтому, когда выбранный f необратим, Боб должен вернуться и попробовать другой f.

И f, и fp {\ displaystyle \ \ mathbf {f} _ { p}}\ \ mathbf {f} _p g {\ displaystyle g}g ) - закрытый ключ Боба. Открытый ключ h генерируется, вычисляя величину

h = p f q ⋅ g (mod q). {\ displaystyle {\ textbf {h}} = p {\ textbf {f}} _ {q} \ cdot {\ textbf {g}} {\ pmod {q}}.}\ textbf {h} = p \ textbf {f} _q \ cdot \ textbf {g} \ pmod q.

Пример : в в этом примере параметры (N, p, q) будут иметь значения N = 11, p = 3 и q = 32, и поэтому многочлены f и g имеют степень не выше 10. Параметры системы (N, p, q) известны всем. Многочлены выбираются случайным образом, поэтому предположим, что они представлены как

f = - 1 + X + X 2 - X 4 + X 6 + X 9 - X 10 {\ displaystyle {\ textbf {f}} = - 1+ X + X ^ {2} -X ^ {4} + X ^ {6} + X ^ {9} -X ^ {10}}\ textbf {f} = -1 + X + X ^ 2 - X ^ 4 + X ^ 6 + X ^ 9 - X ^ {10}
g = - 1 + X 2 + X 3 + X 5 - X 8 - Икс 10 {\ displaystyle {\ textbf {g}} = - 1 + X ^ {2} + X ^ {3} + X ^ {5} -X ^ {8} -X ^ {10}}\ textbf {g} = -1 + X ^ 2 + X ^ 3 + X ^ 5 -X ^ 8 - X ^ {10}

Используя алгоритм Евклида, вычисляется обратное к f по модулю p и по модулю q, соответственно

fp = 1 + 2 X + 2 X 3 + 2 X 4 + X 5 + 2 X 7 + Икс 8 + 2 Икс 9 (мод. 3) {\ Displaystyle {\ textbf {f}} _ {p} = 1 + 2X + 2X ^ {3} + 2X ^ {4} + X ^ {5} + 2X ^ { 7} + X ^ {8} + 2X ^ {9} {\ pmod {3}}}\ textbf {f} _p = 1 + 2X + 2X ^ 3 + 2X ^ 4 + X ^ 5 + 2X ^ 7 + X ^ 8 + 2X ^ 9 \ pmod 3
fq = 5 + 9 X + 6 X 2 + 16 X 3 + 4 X 4 + 15 X 5 + 16 X 6 + 22 Икс 7 + 20 Икс 8 + 18 Икс 9 + 30 Икс 10 (мод 32) {\ displaystyle {\ textbf {f}} _ {q} = 5 + 9X + 6X ^ {2} + 16X ^ {3 } + 4X ^ {4} + 15X ^ {5} + 16X ^ {6} + 22X ^ {7} + 20X ^ {8} + 18X ^ {9} + 30X ^ {10} {\ pmod {32}} }\ textbf {f} _q = 5 + 9X + 6X ^ 2 + 16X ^ 3 + 4X ^ 4 + 15X ^ 5 + 16X ^ 6 + 22X ^ 7 + 20X ^ 8 + 18X ^ 9 + 30X ^ {10} \ pmod {32}

Которая создает открытый ключ h (известный как Алисе, так и Бобу), вычисляя продукт

h = pfq ⋅ g (mod 32) = 8 - 7 X - 10 X 2 - 12 Х 3 + 12 Х 4 - 8 Х 5 + 15 Х 6 - 13 Х 7 + 12 Х 8 - 13 X 9 + 16 X 10 (мод. 32) {\ displaystyle {\ textbf {h}} = p {\ textbf {f}} _ {q} \ cdot {\ textbf {g}} {\ pmod {32}} = 8-7X-10X ^ {2} -12X ^ {3} + 12X ^ {4} -8X ^ {5} + 15X ^ {6} -13X ^ {7} + 12X ^ {8} -13X ^ { 9} + 16X ^ {10} {\ pmod {32}}}\ textbf {h} = p \ textbf {f} _q \ cdot \ textbf {g} \ pmod {32} = 8 - 7X - 10X ^ 2 - 12X ^ 3 + 12X ^ 4 - 8X ^ 5 + 15X ^ 6 - 13X ^ 7 + 12X ^ 8 - 13X ^ 9 + 16X ^ {10} \ pmod {32}
Шифрование

Алиса, которая хочет отправить секретное сообщение Бобу, помещает свое сообщение в форму многочлена m с коэффициентами {-1,0,1}. В современных приложениях шифрования полином сообщения может быть переведен в двоичное или троичное представление. После создания полинома сообщения Алиса случайным образом выбирает полином r с небольшими коэффициентами (не ограничиваясь набором {-1,0,1}), который предназначен для скрытия сообщения.

С открытым ключом Боба h вычисляется зашифрованное сообщение e :

e = r ⋅ h + m (mod q) {\ displaystyle {\ textbf {e}} = {\ textbf {r}} \ cdot {\ textbf {h}} + {\ textbf {m}} {\ pmod {q}}}\ textbf {e} = \ textbf {r} \ cdot \ textbf {h} + \ textbf {m} \ pmod q

Этот зашифрованный текст скрывает сообщения Алисы и может быть безопасно отправлен Бобу.

Пример : Предположим, что Алиса хочет отправить сообщение, которое может быть записано как полином

m = - 1 + X 3 - X 4 - X 8 + X 9 + X 10 {\ displaystyle {\ textbf {m}} = - 1 + X ^ {3} -X ^ {4} -X ^ {8} + X ^ {9} + X ^ {10}}\ textbf {m} = -1 + X ^ 3 - X ^ 4-X ^ 8 + X ^ 9 + X ^ {10}

и что случайно выбранное «ослепляющее значение» может быть выражено как

r = - 1 + X 2 + X 3 + X 4 - X 5 - X 7 {\ displaystyle {\ textbf {r}} = - 1 + X ^ {2} + X ^ {3 } + X ^ {4} -X ^ {5} -X ^ {7}}\ textbf {r} = -1 + X ^ 2 + X ^ 3 + X ^ 4-X ^ 5-X ^ 7

Зашифрованный текст e, представляющий ее зашифрованное сообщение Бобу, будет иметь вид

e = r ⋅ h + m (mod 32) = 14 + 11 X + 26 X 2 + 24 X 3 + 14 X 4 + 16 X 5 + 30 X 6 + 7 X 7 + 25 X 8 + 6 X 9 + 19 X 10 (mod 32) {\ displaystyle {\ textbf {e}} = {\ textbf {r}} \ cdot {\ textbf {h}} + {\ textbf {m}} {\ pmod {32}} = 14 + 11X + 26X ^ {2} + 24X ^ {3} + 14X ^ {4} + 16X ^ {5} + 30X ^ {6} + 7X ^ {7} + 25X ^ {8} + 6X ^ {9} + 19X ^ {10 } {\ pmod {32}}}\ textbf {e} = \ textbf {r} \ cdot \ textbf {h} + \ textbf {m} \ pmod {32} = 14 + 11X + 26X ^ 2 + 24X ^ 3 + 14X ^ 4 + 16X ^ 5 + 30X ^ 6 + 7X ^ 7 + 25X ^ 8 + 6X ^ 9 + 19X ^ {10} \ pmod {32}
Расшифровка

Любой, кто знает r, может вычислить сообщение m, вычислив e- rh; так что r не должна открываться Алисой. Помимо общедоступной информации, Боб знает свой закрытый ключ. Вот как он может получить m : сначала он умножает зашифрованное сообщение e и часть своего закрытого ключа f

a = f ⋅ e (mod q) {\ displaystyle {\ textbf {a}} = {\ textbf {f}} \ cdot {\ textbf {e}} {\ pmod {q}}}\ textbf {a} = \ textbf {f} \ cdot \ textbf {e} \ pmod q

Переписывая многочлены, это уравнение фактически представляет следующие вычисления:

a = е ⋅ е (мод q) {\ displaystyle {\ textbf {a}} = {\ textbf {f}} \ cdot {\ textbf {e}} {\ pmod {q}}}\ textbf {a} = \ textbf {f} \ cdot \ textbf {e} \ pmod q
a = f ⋅ (р ⋅ час + м) (модуль q) {\ displaystyle {\ textbf {a}} = {\ textbf {f}} \ cdot ({\ textbf {r}} \ cdot {\ textbf {h}} + {\ textbf {m}}) {\ pmod {q}}}\ textbf {a} = \ textbf {f} \ cdot (\ textbf {r} \ cdot \ textbf {h} + \ textbf {m}) \ pmod q
a = f ⋅ (r ⋅ pfq ⋅ g + m) (mod q) {\ displaystyle {\ textbf {a}} = {\ textbf {f}} \ cdot ({\ textbf {r}} \ cdot p {\ textbf {f}} _ {q} \ cdot {\ textbf {g}} + {\ textbf {m}}) {\ pmod { q}}}\ textbf {a} = \ textbf {f} \ cdot (\ textbf {r} \ cdot p \ textbf {f} _q \ cdot \ textbf {g} + \ textbf {m}) \ pmod q
a = пр ⋅ g + f ⋅ m (mod q) {\ displaystyle {\ textbf {a}} = p {\ textbf {r}} \ cdot {\ textbf {g}} + { \ textbf {f}} \ cdot {\ textbf {m}} {\ pmod {q}}}\ textbf {a} = p \ textbf {r} \ cdot \ textbf {g} + \ textbf {f} \ cdot \ textbf {m} \ pmod q

Вместо того, чтобы выбирать коэффициенты a между 0 и q - 1, они выбираются в интервал [-q / 2, q / 2], чтобы предотвратить некорректное восстановление исходного сообщения, поскольку Алиса выбирает координаты своего сообщения m в интервале [-p / 2, p / 2]. Это означает, что все коэффициенты pr ⋅ g + f ⋅ m {\ displaystyle \ p {\ textbf {r}} \ cdot {\ textbf {g}} + {\ textbf {f}} \ cdot {\ textbf {m}}}\ p \ textbf {r} \ cdot \ textbf {g} + \ textbf {f } \ cdot \ textbf {m} уже лежат в интервале [-q / 2, q / 2], потому что многочлены r, g, fи m и простое число p имеют коэффициенты, которые малы по сравнению к q. Это означает, что все коэффициенты остаются неизменными при уменьшении по модулю q и что исходное сообщение может быть восстановлено должным образом.

Следующим шагом будет вычисление a по модулю p:

b = a (mod p) = f ⋅ m (mod p) {\ displaystyle {\ textbf {b} } = {\ textbf {a}} {\ pmod {p}} = {\ textbf {f}} \ cdot {\ textbf {m}} {\ pmod {p}}}\ textbf {b} = \ textbf {a} \ pmod p = \ textbf {f} \ cdot \ textbf {m} \ pmod p

потому что pr ⋅ g (mod p) = 0 {\ displaystyle \ p {\ textbf {r}} \ cdot {\ textbf {g}} {\ pmod {p}} = 0}\ p \ textbf {r} \ cdot \ textbf {g} \ pmod p = 0 .

Зная b Боб может использовать другую часть своего закрытого ключа (fp) {\ displaystyle \ \ left ({\ textbf {f}} _ {p} \ right)}\ \ left (\ textbf {f} _p \ right) , чтобы восстановить сообщение Алисы путем умножения b и fp {\ displaystyle \ {\ textbf {f}} _ {p}}\ \ textbf {f} _p

c = fp ⋅ b = fp ⋅ f ⋅ m (mod p) {\ displaystyle { \ textbf {c}} = {\ textbf {f}} _ {p} \ cdot {\ textbf {b}} = {\ textbf {f}} _ {p} \ cdot {\ textbf {f}} \ cdot {\ textbf {m}} {\ pmod {p}}}\ textbf {c} = \ textbf {f} _p \ cdot \ textbf {b} = \ textbf {f} _p \ cdot \ textbf {f} \ cdot \ textbf {m} \ pmod p
c = m (mod p) {\ displaystyle {\ textbf {c}} = {\ textbf {m}} {\ pmod {p}} }\ textbf {c} = \ textbf {m} \ pmod p

потому что свойство f ⋅ fp = 1 (mod p) {\ displaystyle \ {\ textbf {f}} \ cdot {\ textbf {f}} _ {p} = 1 {\ pmod {p }}}\ \ textbf {f} \ cdot \ textbf {f} _p = 1 \ pmod p требуется для fp {\ displaystyle \ {\ textbf {f}} _ {p} }\ \ textbf {f} _p .

Пример : зашифрованное сообщение e от Алисы Бобу умножается на многочлен f

a = f ⋅ e (mod 32) = 3-7 X-10 X 2-11 Икс 3 + 10 Икс 4 + 7 Икс 5 + 6 Икс 6 + 7 Икс 7 + 5 Икс 8 - 3 Икс 9 - 7 Х 10 (мод 32), {\ displaystyle {\ textbf {a}} = {\ textbf { f}} \ cdot {\ textbf {e}} {\ pmod {32}} = 3-7X-10X ^ {2} -11X ^ {3} + 10X ^ {4} + 7X ^ {5} + 6X ^ {6} + 7X ^ {7} + 5X ^ {8} -3X ^ {9} -7X ^ {10} {\ pmod {32}},}\ textbf {a} = \ textbf {f} \ cdot \ textbf {e} \ pmod {32} = 3-7X-10X ^ 2-11X ^ 3 + 10X ^ 4 + 7X ^ 5 + 6X ^ 6 + 7X ^ 7 + 5X ^ 8-3X ^ 9-7X ^ {10} \ pmod {32},

где Боб использует интервал [-q / 2, q / 2] вместо интервала [0, q - 1] для коэффициентов полинома a, чтобы предотвратить некорректное восстановление исходного сообщения.

Уменьшение коэффициентов a mod p приводит к

b = a (mod 3) = - X - X 2 + X 3 + X 4 + X 5 + X 7 - Икс 8 - Икс 10 (мод. 3) {\ displaystyle {\ textbf {b}} = {\ textbf {a}} {\ pmod {3}} = - XX ^ {2} + X ^ {3} + X ^ {4} + X ^ {5} + X ^ {7} -X ^ {8} -X ^ {10} {\ pmod {3}}}\ textbf {b} = \ textbf {a} \ pmod 3 = -XX ^ 2 + X ^ 3 + X ^ 4 + X ^ 5 + X ^ 7-X ^ 8-X ^ {10} \ pmod 3

, что равно b = f ⋅ m (mod 3) {\ displaystyle \ {\ textbf {b}} = {\ textbf {f}} \ cdot {\ textbf {m}} {\ pmod {3}}}\ \ textbf {b} = \ textbf {f} \ cdot \ textbf {m} \ pmod 3 .

На последнем этапе результат умножается на fp {\ displaystyle \ {\ textbf {f}} _ {p}}\ \ textbf {f} _p из закрытого ключа Боба, чтобы получить исходное сообщение m

c = fp ⋅ b = fp ⋅ f ⋅ m (mod 3) = m (mod 3) {\ displaystyle {\ textbf {c}} = {\ textbf {f}} _ {p} \ cdot {\ textbf {b}} = {\ textbf {f}} _ {p} \ cdot {\ textbf {f}} \ cdot {\ textbf {m}} {\ pmod {3}} = {\ textbf {m}} {\ pmod {3}}}\ textbf {c} = \ textbf {f} _p \ cdot \ textbf {b} = \ textbf {f} _p \ cdot \ textbf {f} \ cdot \ textbf { m} \ pmod 3 = \ textbf {m} \ pmod 3
c = - 1 + Икс 3 - Икс 4 - Икс 8 + Икс 9 + Икс 10 {\ displaystyle {\ textbf {c}} = - 1 + X ^ {3} -X ^ {4} -X ^ {8} + X ^ {9} + X ^ {10}}\ textbf {c} = -1 + X ^ 3-X ^ 4-X ^ 8 + X ^ 9 + X ^ {10}

Это действительно исходное сообщение, которое Алиса отправила Бобу!

Атаки

С момента предложения NTRU было проведено несколько атак на криптосистему с открытым ключом NTRUEncrypt. Большинство атак сосредоточено на полном взломе путем поиска секретного ключа f вместо простого восстановления сообщения m . Если известно, что f имеет очень мало ненулевых коэффициентов, Ева может успешно провести атаку грубой силой , попробовав все значения для f . Когда Ева хочет узнать, является ли f ´ секретным ключом, она просто вычисляет f '⋅ h (mod q) {\ displaystyle \ {\ textbf {f}} ^ {'} \ cdot {\ textbf {h}} {\ pmod {q}}} \ \textbf{f}^{'} \cdot \textbf{h} \pmod q . Если у него небольшие коэффициенты, это может быть секретный ключ f, и Ева может проверить, является ли f ´ секретным ключом, используя его для расшифровки сообщения, которое она зашифровала сама. Ева также может попробовать значения g и проверить, g ′ ⋅ h - 1 (mod q) {\ displaystyle \ {\ textbf {g}} ^ {'} \ cdot {\ textbf { h}} ^ {- 1} {\ pmod {q}}} \ \textbf{g}^{'} \cdot \textbf{h}^{-1} \pmod q имеет малые значения.

Можно организовать атаку встречей посередине, которая будет более мощной. Это может сократить время поиска на квадратный корень. Атака основана на том свойстве, что f ⋅ h = pg (mod q) {\ displaystyle \ {\ textbf {f}} \ cdot {\ textbf {h}} = p {\ textbf {g}} { \ pmod {q}}}{\ displaystyle \ {\ textbf {f}} \ cdot {\ textbf {h}} = p {\ textbf {g}} {\ pmod {q}}} .

Ева хочет найти f 1 {\ displaystyle \ {\ textbf {f}} _ {1}}\ \ textbf {f} _1 и f 2 {\ displaystyle \ {\ textbf {f}} _ {2}}\ \ textbf {f} _2 таким образом, чтобы f = f 1 + f 2 {\ displaystyle \ {\ textbf {f}} = {\ textbf {f}} _ {1} + {\ textbf {f}} _ {2}}\ \ textbf {f} = \ textbf {f} _1 + \ textbf {f} _2 и имеет свойство

(f 1 + f 2) ⋅ h = g (mod q) { \ displaystyle \ left ({\ textbf {f}} _ {1} + {\ textbf {f}} _ {2} \ right) \ cdot {\ textbf {h}} = {\ textbf {g}} {\ pmod {q}}}\ left (\ textbf {f} _1 + \ textbf {f} _2 \ right) \ cdot \ textbf {h} = \ textbf {g} \ pmod q
f 1 ⋅ час = g - f 2 ⋅ час (mod q) {\ displaystyle {\ textbf {f}} _ {1} \ cdot {\ textbf {h}} = {\ textbf {g}} - {\ textbf {f}} _ {2} \ cdot {\ textbf {h}} {\ pmod {q}}}\ textbf {f} _1 \ cdot \ textbf {h} = \ textbf {g } - \ textbf {f} _2 \ cdot \ textbf {h} \ pmod q

Если f имеет d и Nd нулей, тогда Ева создает все возможные f 1 {\ displaystyle \ {\ textbf {f}} _ {1}}\ \ textbf {f} _1 и f 2 {\ displaystyle \ {\ textbf {f} } _ {2}}\ \ textbf {f} _2 , в котором оба они имеют длину 1 2 N {\ displaystyle \ {\ frac {1} {2}} N}\ \ frac {1} {2} N (например, f 1 {\ displaystyle \ {\ textbf {f}} _ {1}}\ \ textbf {f} _1 охватывает 1 2 N {\ displaystyle \ {\ frac {1} {2}} N }\ \ frac {1} {2} N самые низкие коэффициенты f и f 2 {\ displaystyle \ {\ textbf {f}} _ {2}}\ \ textbf {f} _2 наивысшие) с d / 2 шт. Затем она вычисляет f 1 ⋅ h (mod q) {\ displaystyle {\ textbf {f}} _ {1} \ cdot {\ textbf {h}} {\ pmod {q}}}\ textbf {f} _1 \ cdot \ textbf {h} \ pmod q для всех f 1 {\ displaystyle \ {\ textbf {f}} _ {1}}\ \ textbf {f} _1 и упорядочивает их по ячейкам на основе первых k координат. После этого она вычисляет все - f 2 ⋅ h (mod q) {\ displaystyle \ - {\ textbf {f}} _ {2} \ cdot {\ textbf {h}} {\ pmod {q}}}\ - \ textbf {f} _2 \ cdot \ textbf {h} \ pmod q и упорядочивает их в ячейках не только на основе первых k координат, но также на основе того, что произойдет, если вы добавите 1 к первым k координатам. Затем вы проверяете подборки, содержащие как f 1 {\ displaystyle \ {\ textbf {f}} _ {1}}\ \ textbf {f} _1 , так и f 2 {\ displaystyle \ {\ textbf {f }} _ {2}}\ \ textbf {f} _2 и посмотрите, имеет ли свойство f 1 ⋅ h = g - f 2 ⋅ h (mod q) {\ displaystyle \ {\ textbf {f}} _ {1 } \ cdot {\ textbf {h}} = {\ textbf {g}} - {\ textbf {f}} _ {2} \ cdot {\ textbf {h}} {\ pmod {q}}}\ \ textbf {f} _1 \ cdot \ textbf {h} = \ textbf {g} - \ textbf {f} _2 \ cdot \ textbf {h} \ pmod q держится.

Атака сокращения решетки - один из самых известных и наиболее практичных методов взлома NTRUEncrypt. В некотором смысле это можно сравнить с факторизацией модуля в RSA. Наиболее часто используемый алгоритм для атаки сокращения решетки - алгоритм Ленстры-Ленстра-Ловаса. Поскольку открытый ключ h содержит как f, так и g, можно попытаться получить их из h . Однако слишком сложно найти секретный ключ, если параметры NTRUEncrypt выбраны достаточно надежно. Атака редукции решетки становится сложнее, если размер решетки увеличивается, а самый короткий вектор становится длиннее.

Атака с выбранным шифротекстом также является методом, который восстанавливает секретный ключ f и тем самым приводит к полному взлому. В этой атаке Ева пытается получить собственное сообщение из зашифрованного текста и тем самым пытается получить секретный ключ. В этой атаке Ева никак не взаимодействует с Бобом.

Как это работает :

Первая Ева создает зашифрованный текст e = ch + c {\ displaystyle \ {\ textbf {e}} = c {\ textbf {h}} + c}\ \ textbf {e} = c \ textbf {h} + c такое, что c = 0 (mod p), c < q 2 {\displaystyle \ c=0{\pmod {p}},c<{\frac {q}{2}}}\ c = 0 \ pmod p, c <\ frac {q} {2} и 2 c>q 2 {\ displaystyle \ 2c>{\ frac {q} {2}}} \ 2c>\ frac {q} {2} Когда Ева записывает шаги для расшифровки e (без фактического вычисления значений, поскольку она не знает f), она находит a = f ⋅ e (mod q) {\ displaystyle \ {\ textbf {a}} = {\ textbf {f}} \ cdot {\ textbf {e}} {\ pmod {q}}}\ \ textbf {a} = \ textbf {f} \ cdot \ textbf {e} \ pmod q :

a = f (ch + c) (mod q) {\ displaystyle {\ textbf {a}} = {\ textbf {f}} \ left (c {\ textbf {h}} + c \ right) {\ pmod {q}}}\ textbf {a} = \ textbf {f} \ left (c \ textbf {h} + c \ right) \ pmod q
a = cg + cf (mod q) {\ displaystyle {\ textbf {a} } = c {\ textbf {g}} + c {\ textbf {f}} {\ pmod {q}}}\ textbf {a} = c \ textbf {g} + c \ textbf {f} \ pmod q
a = cg + cf - q K {\ displaystyle {\ textbf {a}} = c {\ textbf {g}} + c {\ textbf {f}} - qK}\ textbf {a} = c \ textbf {g} + c \ textbf {f} -qK

В котором K = ∑ kixi {\ displaystyle \ K = \ sum k_ {i} x ^ {i}}\ K = \ sum k_i x ^ i успех h, что

ki = {1, если i-й коэффициент при f и g равен 1 - 1, если i-й коэффициент при f и g равен - 1 0 В противном случае {\ displaystyle k_ {i} = {\ begin {cases} 1 \ \ \ qquad {\ text {если коэффициент}} \ i ^ {th} \ {\ text {}} \ {\ textbf {f}} \ {\ text {and}} \ {\ textbf {g}} \ {\ text {is}} \ 1 \\ - 1 \ qquad {\ text {, если}} \ i ^ {th} \ {\ text {коэффициент}} \ {\ textbf {f}} \ {\ text {and}} \ {\ textbf {g}} \ {\ text {is}} \ -1 \\ 0 \ \ \ qquad {\ text {В противном случае}} \ end {cases}}}k_i = \ begin {cases} 1 \ \ \ qquad \ text {, если коэффициент} \ i ^ {th} \ \ text {} \ \ textbf {f} \ \ text {и} \ \ textbf {g} \ \ text {is} \ 1 \\ -1 \ qquad \ text {, если коэффициент} \ i ^ {th} \ \ text {} \ \ textbf {f} \ \ text {и} \ \ textbf {g} \ \ text {is} \ -1 \ \ 0 \ \ \ qquad \ text {В противном случае} \ end {case}

Пример :

е = - 1 + X + X 2 - X 4 + X 6 + X 9 - X 10 {\ displaystyle {\ textbf {f}} = - 1 + X + X ^ {2} -X ^ {4} + X ^ {6} + X ^ {9} -X ^ {10}}\ textbf {f} = -1 + X + X ^ 2-X ^ 4 + X ^ 6 + X ^ 9-X ^ {10}
g = - 1 + X 2 + X 3 + X 5 - X 8 - X 10 {\ displaystyle {\ textbf {g} } = - 1 + X ^ {2} + X ^ {3} + X ^ {5} -X ^ {8} -X ^ {10}}\ textbf {g} = -1 + X ^ 2 + X ^ 3 + X ^ 5-X ^ 8-X ^ {10}

Тогда K становится K = - 1 + X 2 - X 10 {\ displaystyle \ K = -1 + X ^ {2} -X ^ {10}}\ K = -1 + X ^ 2-X ^ {10} .

Уменьшение коэффициентов многочленов a mod p действительно уменьшает коэффициенты cg + cf - q K (mod p) {\ displaystyle \ c {\ textbf {g}} + c {\ textbf {f}} - qK {\ pmod {p}}}\ c \ textbf {g} + c \ textbf { f} -qK \ pmod p . После умножения на fp {\ displaystyle \ {\ textbf {f}} _ {p}}\ \ textbf {f} _p , Ева находит:

m = cfp ⋅ g + cfp ⋅ f - qfp ⋅ K ( mod p) {\ displaystyle {\ textbf {m}} = c {\ textbf {f}} _ {p} \ cdot {\ textbf {g}} + c {\ textbf {f}} _ {p} \ cdot {\ textbf {f}} - q {\ textbf {f}} _ {p} \ cdot K {\ pmod {p}}}\ textbf {m} = c \ textbf {f} _p \ cdot \ textbf {g} + c \ textbf {f} _p \ cdot \ te xtbf {f} -q \ textbf {f} _p \ cdot K \ pmod p
m = ch + c - qfp ⋅ K (mod p) {\ displaystyle {\ textbf {m}} = c {\ textbf {h}} + cq {\ textbf {f}} _ {p} \ cdot K {\ pmod {p}}}\ textbf {m} = c \ textbf {h} + c -q \ textbf {f} _p \ cdot K \ pmod p

Поскольку c был выбран в качестве кратное p, m можно записать как

m = - qfp ⋅ K (mod p) {\ displaystyle {\ textbf {m}} = - q {\ textbf {f}} _ { p} \ cdot K {\ pmod {p}}}\ textbf {m} = -q \ textbf {f} _p \ cdot K \ pmod p

Это означает, что f = - q K ⋅ m - 1 (mod p) {\ displaystyle \ {\ textbf {f}} = - qK \ cdot {\ textbf {m}} ^ {- 1} {\ pmod {p}}}\ \ textbf {f} = -qK \ cdot \ textbf {m} ^ {- 1} \ pmod p .

Теперь, если f и g имеют несколько коэффициентов, которые одинаковы в тех же факторов, K имеет несколько ненулевых коэффициентов и, следовательно, мал. Пробуя разные значения K, злоумышленник может восстановить f.

. Шифрованием и дешифрованием сообщения согласно NTRUEncrypt злоумышленник может проверить, является ли функция f правильным секретным ключом или нет.

Улучшения безопасности и производительности

Использование последних предложенных параметров (см. ниже) криптосистема с открытым ключом NTRUEncrypt безопасна для большинства атак. Однако продолжается борьба между производительностью и безопасностью. Трудно повысить безопасность без снижения скорости, и наоборот.

Один из способов ускорить процесс без ущерба для эффективности алгоритма - внести некоторые изменения в секретный ключ f . Сначала постройте f так, чтобы f = 1 + p F {\ displaystyle \ {\ textbf {f}} = 1 + p {\ textbf {F}}}\ \ textbf {f} = 1 + p \ textbf {F} , в котором F - небольшой полином (то есть коэффициенты {-1,0, 1}). Построив f таким образом, f обратимо по модулю p. Фактически f - 1 = 1 (mod p) {\ displaystyle \ {\ textbf {f}} ^ {- 1} = 1 {\ pmod {p}}}\ \ textbf {f} ^ {- 1} = 1 \ pmod p , что означает, что Бобу не нужно фактически вычислять обратное, и что Бобу не нужно проводить второй этап дешифрования. Следовательно, построение f таким образом экономит много времени, но не влияет на безопасность NTRUEncrypt, потому что легче найти fp {\ displaystyle \ {\ textbf {f}} _ {p}}\ \ textbf {f} _p , но f по-прежнему трудно восстановить. В этом случае f имеет коэффициенты, отличные от -1, 0 или 1, из-за умножения на p. Но поскольку Боб умножает на p, чтобы сгенерировать открытый ключ h, а затем уменьшает зашифрованный текст по модулю p, это не повлияет на метод шифрования.

Во-вторых, f может быть записано как произведение нескольких полиномов, так что полиномы имеют много нулевых коэффициентов. Таким образом, нужно проводить меньше вычислений.

В большинстве коммерческих приложений NTRUEncrypt используется параметр N = 251. Чтобы избежать решетчатых атак, атак грубой силы и атак типа «встречу посередине», f и g должны иметь около 72 ненулевых коэффициентов.

Согласно последним исследованиям, следующие параметры считаются безопасными:

Таблица 1: Параметры

Nqp
Средняя безопасность1671283
Стандартная безопасность2511283
Высокая безопасность3471283
Высокая безопасность5032563
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-31 07:27:38
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте