Как зашифровать что-то, чтобы можно было расшифровать с помощью любых двух из трех ключей?

Так сказать, я хочу зашифровать файл, и единственный способ, которым я хочу, чтобы его читали, - это два разных человека, которые вводят свои ключи. Так, например, есть четыре клавиши:

key1, key2, key3, key4.

Если я зашифрую его с помощью ключа1, следующие комбинации будут дешифровать его:

  • key2, ключ3
  • ключ3, Key4
  • key2, Key4

Возможно ли это, используя стандартный метод?

Ответ 1

Создайте уникальный контентный ключ для шифрования сообщения (это распространено для многих стандартов шифрования сообщений), затем примените erasure code, например кодирование Рида-Соломона против этого ключа содержимого, объединенного с достаточными дополнительными случайными данными, чтобы гарантировать, что любое m из n "осколков" ключа может быть собрано вместе для создания финального ключа. Осколки выдаются только из части случайных данных, так что ни один из выведенных осколков не содержит фактических бит из ключа содержимого. Таким образом, любое количество собранных осколков, не содержащих m, не дает никакой полезной информации о самом ключе.

РЕДАКТИРОВАТЬ: Рид-Соломон для генерации ключевых осколков, похоже, идентичен Shamir secret-sharing, впервые опубликованному в 1979 году; благодаря @caf для указания статьи.

Ответ 2

Произвольно генерируйте симметричную ключевую клавишу1 и используйте ее для шифрования данных, затем сгенерируйте key2, key3 и key4 из key1, используя Протокол Shamir Secret Sharing.

Чтобы безопасно распространять key2, key3 и key4, вы можете использовать алгоритм открытого ключа для шифрования с использованием открытых ключей получателей.

Ответ 3

Предположим, что вы назначаете ключи x1, x2,.. xN

Зашифруйте файл с помощью главного симметричного ключа M. Затем сохраните несколько зашифрованных копий M:

  • Зашифровано с помощью x1 и x2
  • Зашифровано с помощью x2 и x3
  • Зашифровано с помощью x1 и x3
  • ...

Любые две клавиши разблокируют одну из зашифрованных копий мастера, которая расшифрует файл.

Ответ 4

Не так, как вы заявляете, я не думаю. Но вы можете получить такой же эффект: использовать криптографию с открытым ключом; теперь есть 4 открытых и 4 секретных ключа. Как человек № 1, зашифровывайте свое сообщение с каждой попарной комбинацией другой 3. Например. зашифруйте сообщение с помощью ключа 2, затем зашифруйте его с помощью ключа 3. Теперь зашифруйте сообщение с помощью ключа 2, затем зашифруйте его с помощью ключа 4. Наконец, 3 затем 4. Теперь, если какие-либо из двух других собираются вместе, они могут восстановить исходное сообщение.

Ответ 5

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

  • ключ 4 бит 1 был контрольной суммой бит 1 в ключах 1-3 и
  • ключ 1 бит 2 был контрольной суммой бит 2 в ключах 2-4 и
  • ключ 2 бит 3 был контрольной суммой бит 3 в ключах 1,3,4 и
  • ключ 3 бит 4 был контрольной суммой бит 4 в ключах 1,2,4 и
  • ключ 4 бит 5 был контрольной суммой бит 5 в ключах 1,2,3, и т.д....

вроде как полосатый рейд 5 делает...

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