Можно ли зашифровать данные так, чтобы их можно было расшифровать с помощью нескольких разных ключей?
Пример:
Я зашифровал данные с помощью ключа 1, но хочу иметь возможность дешифровать с помощью ключей 2, 3 и 4.
Это возможно?
Можно ли зашифровать данные так, чтобы их можно было расшифровать с помощью нескольких разных ключей?
Пример:
Я зашифровал данные с помощью ключа 1, но хочу иметь возможность дешифровать с помощью ключей 2, 3 и 4.
Это возможно?
GnuPG выполняет стандартное шифрование с несколькими ключами.
Следующая команда зашифрует doc.txt
, используя открытый ключ для Алисы и открытый ключ для Боба. Алиса может расшифровать, используя свой закрытый ключ. Боб также может расшифровать, используя свой закрытый ключ.
gpg --encrypt --recipient [email protected] \
--recipient [email protected] doc.txt
Эта функция подробно описана в разделе руководства пользователя, озаглавленном «Шифрование и дешифрование документов. "
Да, возможно шифрование для нескольких получателей. Также это кажется логичным, когда вы думаете, что вы, возможно, захотите прочитать то, что вы кому-то отправили, и для этого вы должны быть в списке получателей.
Вот как это сделать с помощью gpg
командной строки (как описано в ответе Дэвида Сегондса):
gpg --encrypt \
--recipient [email protected] \
--recipient [email protected] \
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
P.S. Для наброска того, как это можно сделать, подумайте об этом. Зашифрованное сообщение состоит из:
Получатель, который держит ключ i, просто расшифровывает свою копию блокнота своим ключом, а затем расшифровывает полезную нагрузку.
Однако это всего лишь доказательство того, что это можно сделать и что его реализация отстой. По возможности избегайте использования собственного шифрования. Если вы не понимаете почему, вам следует определенно избегать использования собственного шифрования.
-----Редактировать ------------
Если я ошибаюсь и инструменты Gnu это делают, используйте их. Но я не могу найти никакой информации о том, как это сделать.
RSA с несколькими (более чем двумя) ключами возможно похож на этот - ну, я не математик, поэтому этот алгоритм не обязательно безопасен, я просто хочу дать ему представление.
m = p * q * r; 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)
Этот алгоритм можно использовать, например, для увеличения скорости лукового маршрутизатора.