Рейтинг:2

Тайно вычислить умножение двух чисел, принадлежащих двум людям

флаг br
Leo

Например, у Алисы и Боба два числа. $а$ и $b$, соответственно. Они хотят вычислить умножение $а\cточка б$ без ведома Алисы $b$ или Боб знает $а$ и отправить это умножение $а\cточка б$ к Кэрол. Кэрол будет использовать это $а\cточка б$ сделать дальнейшее приложение. Кэрол не пойдет на сговор с Алисой или Бобом. Существуют ли какие-либо способы и библиотеки/инструменты в Golang для достижения этого? Спасибо!

Рейтинг:1
флаг es

Я предполагаю, что ваши числа являются целыми числами больше нуля и меньше $n$.

Алиса выбирает равномерно случайный ослепляющий фактор $к$ куда $0<k<n$, и отправляет $к\cточка$ Бобу и $к$ к Кэрол. Боб отправляет $к\cточка а\cточка б$ к Кэрол. Кэрол вычисляет $a\cdot b=k^{-1}\cdot k\cdot a\cdot b$.

Все операции должны быть выполнены $mod\n$. Продукт $а\cточка б$ должно быть меньше, чем $n$, если вы не имеете дело со скалярами/закрытыми ключами, где не имеет значения, получает ли Кэрол продукт $mod\n$.

$к^{-1}$ означает модульный мультипликативный обратный из $к$. Поэтому вы должны убедиться, что ваш выбор $n$ является простым.

В зависимости от вашего приложения вы можете использовать эти числа в качестве закрытых ключей, и в этом случае вам следует выбрать $n$ таким образом, чтобы это был порядок основной группы вашего генератора. Например. для Curve25519 или Ed25519 используйте порядок, указанный в RFC 7748, или используйте $q$ значение, указанное для группы MODP в РФЦ 5114.

Рейтинг:1
флаг cn

Решение без предположения, что $а$ и $b$ отличны от нуля и не требуют вычисления мультипликативных инверсий, что также не предполагает связи между Алисой и Бобом, за исключением предварительного соглашения об общей случайной строке (это известно как модель «частного одновременного сообщения»):

Алиса и Боб соглашаются $ г, с, т $ (три случайных числа). Алиса отправляет $c = a+r, c' = c\cdot s + t$ Кэрол, и Боб посылает $d = b+s, d' = b\cdot r - t$ к Кэрол. Кэрол вычисляет $c\cdot d - (c' + d')$.

Здесь сумму можно вычислить по модулю $n$, куда $n$ является общедоступной верхней границей $а$ и $b$, а «случайный» означает равномерно случайный элемент $\mathbb{Z}/n\mathbb{Z}$.

Примечание: ключевым моментом в вашем вопросе является предположение, что Кэрол не будет вступать в сговор с Алисой и Бобом. Классический результат заключается в том, что безопасные вычисления не требуют никаких криптографических или вычислительных предположений, поскольку количество сторон, которые могут вступить в сговор, строго меньше половины от общего числа, что и имеет место здесь. Следовательно, вам не понадобятся специальные библиотеки/инструменты в Golang, кроме базовой арифметики.

Geoffroy Couteau avatar
флаг cn
Вы правы, я должен был проверить написанное перед отправкой. Я удалил первое решение и заменил его вторым. Спасибо!
knaccc avatar
флаг es
Кстати, вы говорите, что одно и то же трио $(r,s,t)$ можно использовать повторно без ущерба для безопасности схемы? Это похоже на действительно полезный метод — используются ли его варианты в каких-либо практических приложениях, о которых вы знаете?
Geoffroy Couteau avatar
флаг cn
Нет, $r,s,t$ нельзя использовать повторно: например, если $r$ повторно использовать с новым $a'$, Кэрол выучит $a-a'$.Однако общий подход здесь заключается в использовании псевдослучайности: Алиса и Боб согласовывают только короткое начальное число и расширяют его до произвольного количества троек $(r_i,s_i,t_i)$ по мере необходимости, на лету, без дальнейшего использования взаимодействие (например, с использованием псевдослучайной функции)
Geoffroy Couteau avatar
флаг cn
Описанная мной схема, по сути, представляет собой рандомизированное кодирование функции произведения. Рандомизированные кодировки имеют множество мощных приложений в криптографии (см. [эту статью] (https://ieeexplore.ieee.org/document/892118) и ее многочисленные дополнения). Этот метод довольно практичен и может быть легко использован в реальных приложениях, хотя я не знаю ни одного конкретного практического применения, использующего их (если бы мне пришлось держать пари, я бы все равно поспорил, что некоторые практические приложения используют этот метод).

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

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