Рейтинг:0

Как я могу использовать схему обмена секретами, если секрет — это не число, а оператор?

флаг ua

Я хочу использовать схему обмена секретами, при которой каждый игрок $i\in N$ должен поделиться парой секретов $(l_i,\nu_{l_i})$, куда $l_i$ уникальный код (целое положительное число) для каждого игрока, но $\nu_{l_i}$ это секрет, как заявление. Например, когда игрок $я$ отчитывается перед другими игроками $\nu_{l_i}$ равносильно утверждению в форме «Меня зовут $я$ и я знаю информацию $\nu_i$."

Сначала я подумал, что мне нужна одна полиномиальная функция степени $к-1$ для каждого игрока $я$ поделиться кодом $l_i$ с каждым другим игроком $j=-i$, но знание l_i должно подразумевать, что другой игрок также узнает $\nu_{l_i}$ после реконструкции кода $l_i$. Как я могу заставить это работать с секретным обменом?

Hunger Learn avatar
флаг ua
Ну, одна идея, хотя я не знаю, как это можно применить, состоит в том, чтобы определить математический шифр, который может перевести каждое слово вашего утверждения в число. Так что тогда у вас будет код расщепления и кодифицированное сообщение, я думаю.
флаг ar
Тесно связано: [Обмен секретами Шамира для векторов] (https://crypto.stackexchange.com/questions/70024/shamirs-secret-sharing-for-vectors)
Рейтинг:1
флаг ar

Самое простое решение:

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

На самом деле, если ваша секретная фраза хранится на компьютере, то о первой части уже позаботились: компьютеры обычно хранят данные, включая текст, в виде последовательностей 8-битных байтов, то есть чисел от 0 до 255.

Пока вам не нужно генерировать более 255 долей любого секрета, вы можете просто рассматривать эти байты как элементы GF(28) и поделиться ими с помощью Схема обмена секретами Шамира (или любую другую подобную схему обмена секретами, которую вы предпочитаете).

Вы можете даже безопасно использовать тот же идентификатор общего ресурса (т.е. $х$ координата) для каждого байта общей фразы, так что ваши общие ресурсы будут только на один байт длиннее, чем секретная фраза. (Однако это будут случайные двоичные данные, поэтому вам может понадобиться, например, Base64 кодировать их для передачи в виде текста.) И обмен секретами Шамира через GF(28) можно сделать очень быстро, так как вся математика выполняется с использованием всего одного байта. По этим причинам довольно много реализаций обмена секретами Шамира делают именно это.

Описанный выше метод побайтового обмена имеет несколько недостатков:

  1. Он показывает длину секретной фразы в байтах. Если это проблема, фраза должна быть каким-то образом обратимо дополнена до фиксированной длины, прежде чем поделиться.

  2. По математическим причинам (т. е. потому, что для каждой доли требуется отдельный ненулевой элемент поля в качестве ее $х$ координата) это нельзя использовать для создания более 255 отдельных акций за каждый секрет. Если этого недостаточно, вы можете, например. разделить долю на пары байтов и поделиться ими, используя схему Шамира через GF(216) до 65535 акций, или разделить его на группы по четыре байт и делиться ими через GF(232) примерно на 4 миллиона акций.

(Конечно, вы могли бы использовать даже большие размеры поля или даже размеры, которые не являются степенью двойки, если хотите. Но, как правило, мало причин для этого, по крайней мере, при совместном использовании двоичных данных, которыми в конечном счете являются все данные, хранящиеся на двоичном компьютере.)


Конечно, если вы не настаиваете на идеальной теоретико-информационной безопасности, другим практическим вариантом является создание случайного ключа (например, 128 или 256 бит) для схемы симметричного шифрования, такой как АЕС,* зашифруйте свой секрет с помощью ключа, а затем поделитесь ключом.

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


*) Использование безопасного режим работы, конечно. Я обычно рекомендую аутентифицированное шифрование например, SIV, но даже классического режима без аутентификации, такого как CBC или CTR, может быть достаточно для ваших нужд. Только не используйте ЭЦБ.

Hunger Learn avatar
флаг ua
то есть вы имеете в виду, что в этом утверждении, которое состоит из 10 слов, мы могли бы иметь 10 пробелов для каждого секрета, скажем, $S=\times_{i=1}S_i^{10}$ и использовать 10 полиномиальных функций для каждого из них?
Hunger Learn avatar
флаг ua
ну, я понятия не имею, как смоделировать это математически... схему аутентификации и как определить режим работы.... Мне нужна математическая структура....
флаг ar
Было бы полезно узнать, с каким из двух шагов в моем ответе выше у вас возникли проблемы. Это совершенно разные шаги: шаг 1 не предполагает совместного использования секрета (и, следовательно, полиномов и т. д.), а шаг 2 включает только одно секретное число (или, скорее, вы применяете его отдельно к каждому из чисел, полученных на шаге 1). . Вероятно, это проще, чем вы думаете.
Рейтинг:0
флаг ua

Решение $1$: Каждое слово переводится в число с помощью шифра. Скажи это $С$ такое отображение, которое берет слово и переводит его в число, а именно $C:A\to\mathbb{N}$, куда $А$ является алфавитом. В вашем утверждении «Меня зовут $я$ и я знаю информацию $\nu_i$." У тебя есть $10$ слов а именно 10 кодов $x_1,..,x_{10}$. Тогда каждый игрок мог отправить 10 разных акций. $(a_{j,k},b_{j,k})_{k=1}^{10}$ каждому другому игроку $j$ где каждая пара является одной точкой определенной полиномиальной функции степени $t-1$, $(f_{i,k})_{k=1}^{10}$. Если игроки будут сотрудничать и делиться своими частями каждой полиномиальной функции, они реконструируют $10$ функции $я$. Тогда будет учиться $10$ числа, по которым можно восстановить высказывание. Используйте схему дешифрования для каждого из $10$ номера и вы возьмете то, что вы хотите.

Решение $2$: Еще одна идея, имеющая значение с математической точки зрения. Скажи это $E_i(k_i,\nu_{l_i})=l_i$ функция шифрования такая, что

$$E_i:K_i\раз N_{L_i}\до L_i$$

и каждая пара $(k_i,l_i)$ ассоциируется только с одним $\nu_{l_i}$, а именно биективный $E_i$. Кроме того, функция расшифровки $$D_i:K_i\раз L_i\до N_{L_i}$$

и, следовательно $D(k_i,l_i)=D(k_i,E_i(k_i,\nu_{l_i}))=\nu_{l_i}$

Для кода вы можете использовать простое приложение схемы Шамира, как вы сказали. Сначала игроки узнают $(x_i,y_i)$ которые являются точками полиномиальной функции степени $t-1$ и код $k_i$, это также ключ, и, следовательно, после того, как они совместно вычислят секрет $l_i$ это $l_i$ полезно для расшифровки $\nu_{l_i}$. Вот так можно вычислить одно из другого. В той части, что вы говорите, что $l_i$ это код и $\nu_{l_i}$ оператор, обратите внимание, что каждое слово оператора переводится в этот код. Следовательно, изучая $l_i$, это означает, что вся инструкция расшифрована.

Hunger Learn avatar
флаг ua
Я не знаю, имеет ли что-нибудь из того, что я говорю, смысл. Но, думаю, в моих мыслях есть логическое объяснение. Пожалуйста, любая критика очень приветствуется. Это также поможет мне понять, прав я или нет.

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

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