Скажем, у меня есть схема, которая выводит ключ от N
различных входов. Каждый из входов может быть не полностью защищен (f.x. плохие пароли), но в совокупности они безопасны. Простой способ сделать это - объединить все входы в порядок и использовать хэш в результате.Ошибка при исправлении ключа шифрования
Теперь я хочу разрешить ключ-деривацию (или, скорее, дешифрование ключа), только N-1
из входов N
. Простой способ сделать это - создать случайный ключ K
, сгенерировать N
временных ключей из разных N
подмножеств ввода, каждый с одним отсутствующим входом (т.е. Hash(input_{1}, ..., input_{N-1}), Hash(input_{0}, input_{2}, ..., input_{N-1}), Hash(input_{0}, input_{1}, input_{3},..., input_{N-1}), ..., Hash(input_{0}, ..., input_{N-2})
), затем зашифровать K
с каждым из ключей N
и сохранить все Результаты.
Теперь я хочу обобщенное решение, где я могу расшифровать ключ, используя K
из N
входов. Наивный способ расширения вышеприведенной схемы требует сохранения (N
) значений, которые быстро становятся неосуществимыми.
Есть ли хороший алгоритм для этого, что не влечет за собой столько хранения?
Я подумал о том, как использовать что-то вроде Секретного совместного использования Шамира, но не может придумать хороший способ, поскольку входы исправлены.
Я рассмотрел что-то вроде этого. Но рассмотрим крайний случай: N = 256, причем каждый вход содержит только один бит. Тогда схема concatenate-and-hash имеет 256-битную защиту, и я ожидаю, что схема 254/256 treshold будет иметь 254-разрядную защиту. Но я могу разбить эту схему по принципу «разделяй и властвуй»: сначала попробуй два возможных значения для первого ввода, затем два возможных значения для второго входа и т. Д. И, таким образом, сломать систему, используя не более 2 * 254 * 100000 итерации PBKDF2. –
(Но, возможно, система может быть спасена, не включая MAC-адреса? Это потребует, чтобы компоненты сплит-ключа были неотличимы от случайных данных, но это должно быть правдой AFAIK). –
Эта возможность, безусловно, делает проблему более интересной. Я предполагаю, что для каждого входа вы можете его атрибутировать или каким-то образом упорядочить их, и узнать, какие у вас есть, а какие отсутствуют? Это подразумевается в вашем хеш-решении, но хотелось бы подтвердить, что это возможно в вашем дизайне. –