Jump to content

Сокращение Барретта

В модульной арифметике сокращение Барретта сокращения, — это алгоритм предложенный в 1986 году П.Д. Барреттом. [1]

Наивный способ вычислений

было бы использовать быстрый алгоритм деления . Сокращение Барретта — это алгоритм, предназначенный для оптимизации этой операции, предполагая, что является постоянным, и , заменяя деление умножением.

Исторически для ценностей , один вычисленный применяя Приведение Барретта к полному произведению . Недавно было показано, что полное произведение не является необходимым, если мы можем выполнить предварительные вычисления для одного из операндов. [2] [3]

Общая идея

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

Мы вызываем функцию целочисленное приближение, если . Для модуля и целочисленное приближение , мы определяем как

.

Распространенный выбор — это функции Floor , потолок и округление .

Обычно умножение Барретта начинается с указания двух целочисленных приближений. и вычисляет достаточно близкое приближение как

,

где — фиксированная константа, обычно степень 2, выбранная так, чтобы умножение и деление на может выполняться эффективно.

Дело был представлен П.Д. Барреттом [1] для случая напольной функции . Общий случай для можно найти в NTL . [2] Представление целочисленной аппроксимации и соответствие между умножением Монтгомери и умножением Барретта были обнаружены Ханно Беккером, Винсентом Хвангом, Матиасом Дж. Каннвишером, Бо-Инь Яном и Шан-И Яном. [3]

Сокращение Барретта одним словом

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

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

При расчете для беззнаковых целых чисел очевидным аналогом было бы использование деления на :

func reduce(a uint) uint {
    q:= a / n  // Division implicitly returns the floor of the result.
    return a - q * n
}

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

Чтобы рассчитать оптимальное значение данный учитывать:

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

Таким образом, мы можем аппроксимировать приведенную выше функцию следующим образом:

func reduce(a uint) uint {
    q := (a * m) >> k // ">> k" denotes bitshift by k.
    return a - q * n
}

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

func reduce(a uint) uint {
    q := (a * m) >> k
    a -= q * n
    if a >= n {
        a -= n
    }
    return a
}

Умножение Барретта одним словом

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

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

Соответствие между умножениями Барретта и Монтгомери

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

Напомним, что беззнаковое умножение Монтгомери вычисляет представителя как

.

Фактически это значение равно .

Докажем это утверждение следующим образом.

Обычно для целочисленных приближений , у нас есть

. [3]

Диапазон умножения Барретта

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

Мы связали вывод с помощью .

Аналогичные оценки справедливы и для других видов функций целочисленной аппроксимации. Например, если мы выберем , функция округления в большую сторону , тогда у нас есть

Сокращение Барретта из нескольких слов

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

Основной мотивацией Барретта рассмотреть возможность сокращения была реализация RSA , где рассматриваемые значения почти наверняка превысят размер машинного слова. В этой ситуации Барретт предложил алгоритм, который аппроксимирует приведенную выше версию с одним словом, но для значений, состоящих из нескольких слов. Подробности см. в разделе 14.3.3 Справочника по прикладной криптографии . [4]

Алгоритм Барретта для полиномов

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

Также можно использовать алгоритм Барретта для деления полиномов, обращая полиномы и используя X-адическую арифметику. [5]

См. также

[ редактировать ]
  1. ^ Jump up to: Перейти обратно: а б Барретт, П. (1986). «Реализация алгоритма шифрования с открытым ключом Ривеста Шамира и Адлемана на стандартном процессоре цифровых сигналов». Достижения криптологии – КРИПТО' 86 . Конспекты лекций по информатике. Том. 263. С. 311–323. дои : 10.1007/3-540-47721-7_24 . ISBN  978-3-540-18047-0 .
  2. ^ Jump up to: Перейти обратно: а б Шуп, Виктор. «Библиотека теории чисел» .
  3. ^ Jump up to: Перейти обратно: а б с Беккер, Ханно; Хван, Винсент; Канвишер, Маттиас Дж.; Ян, Бо-Инь; Ян, Шан-И, «Neon NTT: более быстрый дилитий, Kyber и Sabre на Cortex-A72 и Apple M1» , Транзакции по криптографическому оборудованию и встроенным системам , 2022 (1): 221–244
  4. ^ Менезес, Альфред; Ооршот, Пол; Ванстон, Скотт (1997). Справочник по прикладной криптографии . ISBN  0-8493-8523-7 .
  5. ^ «Редукция Барретта для полиномов» . www.corsix.org . Проверено 7 сентября 2022 г.

Источники

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fecf79e53991237ff8038327563f1d60__1691956740
URL1:https://arc.ask3.ru/arc/aa/fe/60/fecf79e53991237ff8038327563f1d60.html
Заголовок, (Title) документа по адресу, URL1:
Barrett reduction - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)