Рейтинг:6

Безопасно ли разделить ключ Шамира на ключ в блоках и рекомбинировать?

флаг cn
mkl

Вчера я сделал пиар в криптобиблиотеку Python для поддержки ключей размером более 16 байт для схемы обмена секретами Shamir.

В настоящее время он поддерживает 16 байтов следующим образом:

$$ К = \{ 0, 1 \}^{128} $$ $$ S_{128}(m, n, K) = s_1, ..., s_n $$

Чтобы не менять базовую функцию и поддерживать большие ключи, я решил разделить ключ и запустить функцию столько раз, сколько нужно, и объединить общие ресурсы. Ниже приведен пример 32-байтового ключа с использованием ограниченной 16-байтовой функции разделения шамира.

$$ K = \{ 0, 1 \}^{256} = \{ 0, 1 \}^{128} | \{ 0, 1 \}^{128} = К_А | К_Б $$ $$ S_{128}(m, n, K_A) = s_{A1}, ..., s_{An} $$ $$ S_{128}(m, n, K_B) = s_{B1}, ..., s_{Bn} $$ $$ s_1 = s_{A1} | с_{B1} $$

Пара человек в PR заявили, что это небезопасно, так как вы можете атаковать каждую сторону в случае 32 байтов, каждая сторона 16 байтов, что означает, что сила ключа идет от 32 байта (2**256) к 2 * (2 ** 128) = 2**129.

Я не верю, что это правда, так как нет атаки с одной стороны, которая дала бы вам знать, что вы преуспели, и позволила бы вам перейти на другую сторону.

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

Дайте мне знать, что вы думаете.

kelalaka avatar
флаг in
Есть ли способ проверить 32-байтовый секрет по принципу «разделяй и властвуй»? Это ключ к этому. Каково целевое использование секрета?
флаг cn
mkl
Ключ предназначен для симметричного enc (например, AES256) или для асимметричного (например, закрытый ключ ed25519).
kelalaka avatar
флаг in
Общие секретные стороны могут быть вредоносными? т.е. могут ли они построить свою долю и переборщить с другой?
флаг cn
mkl
Допустим, порог восстановления ключа составляет 3 доли. Если мы предположим, что у противника есть 2 доли, то ему придется попытаться восстановить последнюю долю. Я не думаю, что у противника будет какое-то преимущество в том, чтобы вычислять один блок за раз. т.е. нет контрольной суммы или хэша, который говорит об успехе блока 1 (насколько я знаю...).
kelalaka avatar
флаг in
SSS обладает полной секретностью, поэтому наличие одной доли или n-1 не помогает, все имеют одинаковую вероятность быть секретом. Я думаю, что они учитывают это, вместо 256-битной совершенной секретности у вас есть две 128-битных совершенной секретности, поэтому они не равны. В конце концов, неопределенность всех битов одинакова для злоумышленника, так что это неверно.
Рейтинг:6
флаг my

Я не верю, что это правда, так как нет атаки с одной стороны, которая дала бы вам знать, что вы преуспели, и позволила бы вам перейти на другую сторону.

Причина, по которой вы не верите в это, заключается в том, что на самом деле это неправда.

С секретной схемой Шамира, $t-1$ share не дает абсолютно никакой информации об общем секрете. То есть единственная доступная противнику атака — игнорировать значения долей (что ему ничего не говорит) и напрямую угадывать полный ключ AES-256 (что, как мы все знаем, совершенно неосуществимо).

Пара человек в PR заявила, что это небезопасно, так как вы можете атаковать каждую сторону в случае 32 байт, каждую сторону 16 байт.

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

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

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

С другой стороны; есть одна предосторожность, которую вам нужно принять — вам нужно предположить, что случайный полином, который вы генерируете для защиты каждой 128-битной половины, выбирается независимо. Если (например) они одинаковы, за исключением этого постоянного члена, приведенное выше рассуждение не применяется.

флаг cn
mkl
Спасибо за ответ, и да, каждый блок получает новые полиномиальные коэффициенты. Однако все они используют одно поле: https://github.com/Legrandin/pycryptodome/blob/master/lib/Crypto/Protocol/SecretSharing.py#L81.
poncho avatar
флаг my
@mkl: можно использовать одно и то же поле...
флаг ar
Возможно, стоит отметить, что, хотя использование схемы Шамира для совместного использования отдельных битов действительно совершенно безопасно, при этом тратится некоторое пространство, поскольку вам все равно нужно использовать поле с как минимум $n+1$ элементами для создания $n$ долей. Хотя отдельные биты идеально соответствуют элементам GF(2), это поле бесполезно для обмена секретами Шамира, поскольку вы можете сгенерировать не более одного (!) общего доступа.
poncho avatar
флаг my
@IlmariKaronen: ну да, я сказал, что это будет безопасно - я никогда не говорил, что это будет практично...

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

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