Ранцевая криптосистема Шора-Ривеста

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Шифрование Шор-Ривеста»)
Перейти к навигации Перейти к поиску

Ранцевая криптосистема Шора-Ривеста была предложена в 1985 году (Chor, 1985; Chor and Rivest, 1988)[1]. В настоящее время она является единственной известной схемой шифрования, основанной на задаче о ранце, которая не использует модульного умножения для маскировки простой задачи о ранце[2] На данный момент создано множество рюкзачных криптосистем, например ранцевая криптосистема Меркла — Хеллмана. Однако практически все существующие на сегодняшний день взломаны или признаны потенциально небезопасными, примечательным исключением является схема Шор-Ривеста. Криптосистема Шора-Ривеста является одной из немногих не взломанных систем[3].

Описание алгоритма[править | править код]

Пусть пользователь B хочет отправить зашифрованное сообщение A. Для этого:

Для генерации открытого и закрытого ключей нужно[4]:

  1. Выбрать конечное поле характеристики , где , , и для которого возможно эффективно решать задачу дискретного логарифмирования (см. Особенности криптосистемы 3)
  2. Выбрать случайный монотонный неприводимый многочлен степени над . Элементы будут представлены как многочлены от степени меньше , причем умножение можно выполняться по модулю .
  3. Выбрать случайный примитивный многочлен поля .
  4. Вычислить дискретный логарифм элемента поля .
  5. Выбрать случайную перестановку на множестве целых чисел
  6. Выбрать случайное целое число ,
  7. Вычислить ,

Открытым ключом является ; закрытым ключом является

Для генерации случайного мононического неприводимого многочлена можно использовать следующий алгоритм:[5]

ВХОД: простое и положительное целое число .

ВЫХОД: монотонный неприводимый многочлен степени в .

Полученный многочлен будет неприводимым, ввиду следующей теоремы:

  • Случайно выбрать целые числа между и с . Представить многочлен в виде"
  • Выбрать
  • Для от до сделать следующие действия:
  1. Вычислить . (Заметить, что является многочленом от степени меньше )
  2. Вычислить
  3. Если вернуть «приводимый».
  • Если приводимый — повторить шаги алгоритма. Иначе вернуть

    Неприводимый многочлен степени является примитивным многочленом тогда и только тогда, когда делит для и для не меньшего положительного целого .[6]

Для генерации случайного мононического примитивного многочлена можно использовать следующий алгоритм:[7]

ВХОД: простое , целое число ≥ 1 и различные простые множители из .

ВЫХОД: монотонный примитивный многочлен степени в .

  • Генерировать случайный монотонный неприводимый многочлен над .
  • Для от до сделать следующие действия:
  1. Вычислить
  2. Если вернуть «не примитивный».
  • Если примитивный — повторить шаги алгоритма. Иначе вернуть

Шифрование[править | править код]

Для шифрования с открытым ключом нужно сделать следующее[4]:

  • Получить открытый ключ
  • Представить сообщение как двоичную строку длины , где  является биномиальным коэффициентом
  • Рассмотреть как двоичное представление целого числа. Преобразовать это целое число в двоичный вектор длины , имеющий ровно единиц следующим образом:
  1. Выбрать
  2. Для от до выполнить следующие действия: Если то выбрать , , . В противном случае выбрать . (Примечание: для  ; для )
  • Вычислить 
  • Отправить зашифрованный текст в

Дешифрование[править | править код]

Для дешифрования с открытым ключом нужно сделать следующее[4]:

  • Вычислить
  • Вычислить
  • Вычислить , монотонный многочлен степени над
  • Разложить на произведение линейных множителей над : , где (см. Особенности криптосистемы 5)
  • Вычислить двоичный вектор следующим образом. Компоненты , которые равны , имеют индексы . Остальные компоненты равны .
  • Сообщение восстанавливается из следующим образом:
  1. Выбрать ,
  2. Для от до выполнить следующие действия: Если , то выбрать  и 

Доказательство[править | править код]

Для доказательства работы схемы можно заметить, что[8]

Так как  и  — монические многочлены степени и конгруэнтны по модулю , то:

Следовательно, корней все лежат в , и применение к этим корням дает координаты , которые равны .

Пример[править | править код]

В качестве примера можно рассмотреть работу схемы в случае, когда параметры относительно малы[9]

Генерация ключей[править | править код]

Для генерации ключей A выполняет следующее:

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

Шифрование[править | править код]

Чтобы зашифровать сообщение для , делает следующее:

  • Получает открытый ключ открытого ключа
  • Представляет как двоичную строку длиной : . (так как )
  • Использует метод, описанный на шаге 3 " алгоритма Шифрования ", для преобразования в бинарный вектор длины .
  • Вычисляет 
  • Отправляет в

Дешифрование[править | править код]

Чтобы расшифровать зашифрованный текст , делает следующие действия:

  • Вычисляет
  • Вычисляет
  • Вычисляет
  • Факторизует (так , , , )
  • Компоненты , которые равны , имеют индексы , , и . Следовательно,
  • Использует метод, описанный на шаге 6 " алгоритма дешифрования ", чтобы преобразовать в целое число , тем самым восстанавливая исходный текст.

Особенности криптосистемы[править | править код]

  • Известно, что система небезопасна, если раскрыты части секретного ключа, например, если известны и в некотором представлении или если известно, или если известен[10]
  • Хотя схема Шор-Ривеста была описана только для случая простой, она распространяется на случай, когда базовое поле заменяется полем первичного степенного порядка[11]
  • Чтобы сделать задачу дискретного логарифма выполнимой на шаге 1 алгоритма " Генерация ключей ", параметры и могут быть выбраны так, что имеет только малые множители. В этом случае для эффективного вычисления дискретных логарифмов можно использовать алгоритм Полига — Хеллмана в конечном поле [12]
  • На практике рекомендуемый размер параметров: и . Один конкретный выбор первоначально предложенных параметров: и ; в этом случае наибольший простой коэффициент составляет , а плотность набора ранца составляет около . Другие первоначально заданные параметры: , (базовое поле ) и (базовое поле )[13]
  • Шифрование — очень быстрая операция. Расшифровка выполняется намного медленнее, узким местом является вычисление на шаге 2 " алгоритма дешифрования ". Корни на шаге 4 можно найти, просто попробовав все возможности в [14]
  • Основным недостатком схемы Шор-Ривеста является то, что открытый ключ довольно велик, а именно бит . Для параметров и это около 36000 бит[15]
  • Расширение сообщения происходит в . Для и , это [16]

Атаки с раскрытием частичного ключа[править | править код]

В этом разделе Serge Vaudenay[англ.] показывает, что он может монтировать атаку, когда раскрывается какая-либо часть секретного ключа. Несколько таких атак уже опубликованы в документе[17] и некоторые из них были улучшены ниже.[18]

Секретные ключи состоят из:

  1. элемент с степенью
  2. генератор
  3. целое число
  4. перестановка на множестве целых чисел

Атака с раскрытием части

Если предположим, что и (из-за симметрии в секретном ключе мы знаем, что будет выполняться произвольный выбор ), мы можем вычислить и , то решим систему уравнения:

с неизвестными и [17]

Атака с раскрытием части

Если предположим, что и (из-за симметрии в секретном ключе мы знаем, что будет выполняться произвольный выбор ), мы можем вычислить:

затем разрешить

Атака с раскрытием части

Найдем линейную комбинацию с формой с относительно небольшими интегральными коэффициентами . Это можно выполнить с помощью алгоритма Lenstra-Lenstra-Lovász[19]. Мы можем ожидать, что с . Обозначая это, получаем некоторое уравнение:

с неотрицательными малыми степенями, который является полиномиальным уравнением с малой степенью, которое может быть эффективно разрешено.[17]

Атака с раскрытием части и

Мы можем интерполировать полином с парами . Таким образом, мы получаем многочлен  — степени, корни которого являются сопряженными . Потом мы можем решить его, чтобы получить и выполнить атаку с раскрытием части

См. также[править | править код]

Примечания[править | править код]

  1. A. Queiruga Dios, L. Hernández Encinas, and J. Espinosa García. a case study of chor-rivest cryptosystem in maple. — С. 2.
  2. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — С. 302. Архивировано 15 декабря 2017 года.
  3. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — С. 300. Архивировано 15 декабря 2017 года.
  4. 1 2 3 Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — С. 303. Архивировано 15 декабря 2017 года.
  5. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — С. 156. Архивировано 15 декабря 2017 года.
  6. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — 2.229 Fact. — С. 84. Архивировано 15 декабря 2017 года.
  7. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — С. 163. Архивировано 15 декабря 2017 года.
  8. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — С. 304. Архивировано 15 декабря 2017 года.
  9. Dr. Nguyen Binh, Dr. Ngo Duc Thien. giáo trình cơ sở mật mã học. — С. 118—120. Архивировано 23 ноября 2015 года. Архивная копия от 23 ноября 2015 на Wayback Machine
  10. Dr. Nguyen Binh, Dr. Ngo Duc Thien. giáo trình cơ sở mật mã học. — Note 1. — С. 120. Архивировано 23 ноября 2015 года. Архивная копия от 23 ноября 2015 на Wayback Machine
  11. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — 8.45 Note (i). — С. 305. Архивировано 15 декабря 2017 года.
  12. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — 8.45 Note (ii). — С. 305. Архивировано 15 декабря 2017 года.
  13. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — 8.45 Note (iii). — С. 305. Архивировано 15 декабря 2017 года.
  14. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — 8.45 Note (iv). — С. 305. Архивировано 15 декабря 2017 года.
  15. Dr. Nguyen Binh, Dr. Ngo Duc Thien. giáo trình cơ sở mật mã học. — Note 5. — С. 120. Архивировано 23 ноября 2015 года. Архивная копия от 23 ноября 2015 на Wayback Machine
  16. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. handbool of applied cryptography. — 8.45 Note (vi). — С. 306. Архивировано 15 декабря 2017 года.
  17. 1 2 3 B. Chor, R.L. Rivest. A knapsack-type public key cryptosystem based on arithmetic in finite fields. IEEE Transactions on Information Theory. — С. 901—909. Архивировано 21 декабря 2016 года.
  18. Serge Vaudenay. Cryptanalysis of the Chor-Rivest Cryptosystem. Архивировано 23 декабря 2017 года.
  19. A.K. Lenstra, H.W. Lenstra Jr., L. Lov´asz. Factoring polynomials with rational coefficients. — С. 515—534.