Разделение AES Key проблемы?


3

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

Я знаю, что существуют некоторые схемы шифрования, которые используют несколько секретов, но ни один из них не является частью .NET Framework, и я думаю, что было бы лучше использовать классы AES-.NET, чем пытаться реализовать некоторые из этих схемы сами по себе.

4

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


5

Общее решение для обмена секретом - Shamir's algorithm. Это не hard для реализации, но для этого требуется некоторое математическое знание. Я не знаю о готовой к использованию реализации .NET с открытым исходным кодом.

Более простым решением является использование хэш-функции. Если у вас есть n человек, каждый из которых владеет «секретным элементом», а затем просто объединяет все секретные элементы в должной последовательности, хэш-лот с SHA-256 и берет первые 128 бит вывода SHA-256 в качестве ключа для AES-128. Это масштабируется до более чем двух акций и позволяет избежать любой потенциальной проблемы с помощью «частично известного» ключа AES-256; Кроме того, он позволяет использовать гораздо более разумный AES-128.

Нет известной проблемы с полуизвестным 256-битным ключом AES, но AES, как известно, несколько шелушится относительно related-key attacks, который, по общему мнению, несколько выглядит потенциально релевантным. Чтобы быть кратким, представляется несколько рискованным полагаться на то, что AES устойчив к частично выявленным ключам.