Можно ли зашифровать данные так, чтобы их можно было расшифровать с помощью нескольких разных ключей?
Пример:
Я зашифровал данные с помощью ключа 1, но хочу иметь возможность дешифровать с помощью ключей 2, 3 и 4.
Это возможно?
encryption
gnupg
encryption-asymmetric
Глен Солсберри
источник
источник
Да это возможно
Да, возможно шифрование для нескольких получателей. Также это кажется логичным, когда вы думаете, что, возможно, захотите прочитать то, что вы кому-то отправили, и для этого вам нужно быть в списке получателей.
Командная строка
Вот как это сделать через
gpg
командную строку (как описано в ответе Дэвида Сегондса ):Клиент GUI
Ваш графический интерфейс должен обеспечивать возможность шифрования для нескольких человек.
Механизм
Есть вопрос по информационной безопасности , размеру файла GPG с несколькими получателями? , объясняющие механизм шифрования :
источник
Клиенты GnuPG и PGP обычно обычно шифруют фактические данные с помощью симметричного ключа, называемого «сеансовым ключом». Затем сеансовый ключ шифруется каждым «ключом получателя» (то есть теми, которые вы указываете с помощью -r / - recipient). Иногда это называют гибридным шифром . Сейчас я считаю, что GnuPG по умолчанию использует 256-битные ключи сеанса и AES для шифрования данных открытого текста с этим ключом сеанса AES-256, а вашими ключами получателя являются ваши RSA / DSA / ECDSA / и т. Д. ассиметричный ключ в этом случае.
Одна из причин этого заключается в том, что симметричные криптографические алгоритмы, такие как AES, обычно намного быстрее асимметричных, таких как RSA. Таким образом, GnuPG должен зашифровать только ~ 256 бит (ключ сеанса) с помощью RSA и может использовать AES для шифрования данных (любого размера, который вы хотите!) С этим ключом сеанса. В машинах Intel даже есть встроенная инструкция AES-NI для аппаратного выполнения некоторых шагов алгоритма, что делает GnuPG более быстрым при шифровании / дешифровании данных.
Еще одна причина для этого заключается в том, что он позволяет зашифровывать документы, зашифрованные с помощью PGP, для нескольких сторон без необходимости удваивать размер документа. Обратите внимание, что когда вы указываете нескольких получателей для зашифрованного документа (например
gpg -ea -r Alice -r Bob -o ciphertext.asc
), зашифрованный документ, который сохраняется (ciphertext.asc), не в 2 раза больше, чем если бы вы только что зашифровали его для Алисы.См. Также
--show-session-key
параметр на странице руководства gpg, чтобы иметь возможность расшифровать только ключ сеанса, например, чтобы позволить третьей стороне расшифровать документ, который зашифрован для вас, без необходимости передавать им свой закрытый ключ или данные в виде открытого текста.источник
Да, это возможно. Для начала Google "многостороннее шифрование".
AFAIK, нет никаких пакетов drop 'em in and use' em для этого.
- MarkusQ
PS Набросок того, как это можно сделать, рассмотрим вот здесь. Зашифрованное сообщение состоит из:
Получатель, который держит ключ i, просто расшифровывает свою копию блокнота своим ключом, а затем расшифровывает полезную нагрузку.
Однако это всего лишь доказательство того, что это можно сделать и что реальная реализация - отстой . По возможности избегайте использования собственного шифрования. Если вы не понимаете почему, вам определенно следует избегать использования собственного шифрования.
-----Редактировать ------------
Если я ошибаюсь и инструменты Gnu это делают, используйте их. Но я не могу найти никакой информации о том, как это сделать.
источник
RSA с несколькими (более двух) ключами может быть таким - ну, я не математик, поэтому этот алгоритм не обязательно безопасен, я просто хочу дать ему представление.
т = р * д * г; p, q, r - большие простые числа
fi (m) = (p-1) (q-1) (r-1)
d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei - произвольные числа, d вычисляется для выполнения уравнения
y1 == x ^ e1 (модуль m)
y2 == y1 ^ e2 (модуль m)
y3 == y2 ^ e3 (модуль m)
...
x == yi ^ d (модуль m)
Этот алгоритм может использоваться, например, для увеличения скорости лукового маршрутизатора.
источник