Можно ли зашифровать данные так, чтобы их можно было расшифровать с помощью нескольких разных ключей?
Пример:
Я зашифровал данные с помощью ключа 1, но хочу иметь возможность дешифровать с помощью ключей 2, 3 и 4.
Это возможно?
Можно ли зашифровать данные так, чтобы их можно было расшифровать с помощью нескольких разных ключей?
Пример:
Я зашифровал данные с помощью ключа 1, но хочу иметь возможность дешифровать с помощью ключей 2, 3 и 4.
Это возможно?
Ответы:
GnuPG выполняет стандартное шифрование с несколькими ключами.
Следующая команда выполнит шифрование doc.txt
с использованием открытого ключа для Алисы и открытого ключа для Боба. Алиса может расшифровать, используя свой закрытый ключ. Боб также может расшифровать, используя свой закрытый ключ.
gpg --encrypt --recipient alice@example.com \
--recipient bob@example.com doc.txt
Эта функция подробно описана в разделе руководства пользователя « Шифрование и дешифрование документов ».
Да, возможно шифрование для нескольких получателей. Также это кажется логичным, когда вы думаете, что, возможно, захотите прочитать то, что вы кому-то отправили, и для этого вам нужно быть в списке получателей.
Вот как это сделать через gpg
командную строку (как описано в ответе Дэвида Сегондса ):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
Ваш графический интерфейс должен обеспечивать возможность шифрования для нескольких человек.
Есть вопрос по информационной безопасности , размеру файла GPG с несколькими получателями? , объясняющие механизм шифрования :
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)
Этот алгоритм может использоваться, например, для увеличения скорости лукового маршрутизатора.