Рейтинг:0

Маскированная арифметика RSA/BigInt?

флаг ng

Маскировка это процесс замены операций (внутри некоторого криптографического алгоритма) над промежуточными значениями операциями над общий секрет ценности. Затем, даже если произойдет утечка некоторого количества этих значений с общим секретом (скажем, из-за различных атак по побочным каналам), можно будет поддерживать безопасность (благодаря теоретико-информационной безопасности схемы с совместным использованием секрета).

Меня интересует возможность замаскированной арифметики bigint. А именно, один представляет $x\in\mathbb{Z}_{2^{2048}}$ (например) как

$$x = \sum_{i = 0}^{63} x_i 2^{32i}$$

где каждый $x_i \in\mathbb{Z}_{2^{32}}$, и мы по-прежнему будем маскировать каждый $x_i$ индивидуально. Стандартное сложение и умножение замаскированных долей довольно просты --- мне особенно любопытно, как обстоят дела с несущий.

Это похоже на то, что кто-то должен был проработать в литературе, особенно для маскировки реализаций RSA. Но мне ничего не удалось найти (я видел обсуждение замаскированных реализаций RSA RNS, что концептуально более просто). Известно ли, как маскировать арифметику BigInt?

kelalaka avatar
флаг in
Разве в OpenSSL нет реализации для маскировки? Насколько я знаю, в этом нет ничего особенного, так как у него есть несколько портированных GNU/GMP.
Mark avatar
флаг ng
@kelalaka кто-нибудь писал где-нибудь, что они делают? Благодаря вашему указателю я нашел [это] (https://github.com/openssl/openssl/blob/1c0eede9827b0962f1d752fa4ab5d436fa039da4/crypto/bn/bn_blind.c), но для меня определенно было бы предпочтительнее взглянуть на псевдокод.
kelalaka avatar
флаг in
Требуется время, чтобы прочитать код, я сейчас, Что вы ищете [здесь] (https://github.com/openssl/openssl/blob/1c0eede9827b0962f1d752fa4ab5d436fa039da4/crypto/bn/bn_blind.c#L134) и увидеть строку 155 там.
kelalaka avatar
флаг in
_и мы по-прежнему будем маскировать каждый $x_i$ индивидуально._ Это невозможно, так как маски искажаются, верно?
Mark avatar
флаг ng
@kelalaka Это не кажется простым, но и маскированное умножение (которое iirc в общем случае маскирования $n$-го порядка сводится к протоколу умножения протокола GMW MPC). Здесь мне в основном интересно, есть ли другой неочевидный способ вычисления замаскированного «переносящего» шага --- если нет, то для моего конкретного приложения я могу обратиться к арифметике типа RNS, но это несколько более неудобно.
флаг cn
Каких атак вы опасаетесь? Сроки, DPA или белый ящик? OpenSSL будет заботиться только о времени, поэтому им не нужно использовать дорогостоящие контрмеры, необходимые для более сильных атак. Для защиты RSA от атаки серого ящика необходимо защитить в основном показатель степени, что можно сделать с помощью аддитивного совместного использования модуля фи (модуль). Кроме того, можно маскировать базу мультипликативно по модулю. Если вам нужны более сильные контрмеры для реализации белого ящика, вы можете взглянуть на [последнее соревнование белого ящика] (https://whibox.io/contests/2021/rules) с эллиптическими кривыми.
kelalaka avatar
флаг in
@Mark, не могли бы вы дать ссылку на документ GMW MPC?
kelalaka avatar
флаг in
GNU/GMP имеет [безопасное модульное умножение](https://gmplib.org/manual/Integer-Exponentiation) против побочного канала. Может быть это то, что вам нужно?

Ответить или комментировать

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