Вчера я сделал пиар в криптобиблиотеку 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 бит)
размер ключа, вы по-прежнему будете поддерживать безопасность, выполняя функцию в блоках и объединяя полученные общие ресурсы.
Дайте мне знать, что вы думаете.