шифрование / дешифрование с несколькими ключами

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

Пример:

Я зашифровал данные с помощью ключа 1, но хочу иметь возможность дешифровать с помощью ключей 2, 3 и 4.

Это возможно?


person Glen Solsberry    schedule 28.02.2009    source источник


Ответы (5)


GnuPG выполняет стандартное шифрование с несколькими ключами.

Следующая команда зашифрует doc.txt, используя открытый ключ для Алисы и открытый ключ для Боба. Алиса может расшифровать, используя свой закрытый ключ. Боб также может расшифровать, используя свой закрытый ключ.

gpg --encrypt --recipient [email protected] \
    --recipient [email protected] doc.txt

Эта функция подробно описана в разделе руководства пользователя, озаглавленном «Шифрование и дешифрование документов. "

person David Segonds    schedule 28.02.2009
comment
То же. Было бы здорово знать, как это сделать, но я не могу найти на нем страницу hide no man. - person MarkusQ; 28.02.2009
comment
@Mitch, я опубликовал ответ, на который может наш ответ! (Пожалуйста, проверьте и похвалите, если да / нет - БОЛЬШОЙ признателен!) - person pythonlarry; 14.12.2013
comment
@MarkusQ, см. Мою ссылку на Митча выше. Протестируйте / спасибо, если можете! :-) - person pythonlarry; 14.12.2013
comment
Таким образом, получается 1 зашифрованный файл, который можно прочитать с использованием любого закрытого ключа, а не 1 файла на ключ? - person user8675309; 01.12.2017
comment
@ user8675309, да. Данные зашифрованы общим симметричным ключом. Только симметричный ключ шифруется открытым ключом каждого получателя. Это не повторное шифрование всех данных для каждого получателя. - person wisbucky; 03.12.2019

Да это возможно

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

Командная строка

Вот как это сделать с помощью gpg командной строки (как описано в ответе Дэвида Сегондса):

gpg --encrypt \
  --recipient [email protected] \
  --recipient [email protected] \
clear-message.txt

Клиент с графическим интерфейсом

Ваш графический интерфейс должен обеспечивать возможность шифрования для нескольких человек.

Механизм

Есть вопрос по информационной безопасности, Размер файла GPG с несколькими получателями?, объясняющие механизм шифрования:

GPG шифрует файл один раз симметричным ключом, затем помещает заголовок, идентифицирующий целевую пару ключей, и зашифрованную версию симметричного ключа.

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

person Édouard Lopez    schedule 18.05.2014
comment
отдельное спасибо за последние два предложения: теперь они все четко прояснили! - person radistao; 11.10.2016

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, чтобы иметь возможность расшифровать только ключ сеанса, например, чтобы разрешить третья сторона для расшифровки зашифрованного для вас документа без необходимости передавать им ваш закрытый ключ или данные в виде открытого текста.

person ido    schedule 29.01.2015
comment
Спасибо за пояснение к зашифрованному документу, который не в n раз больше, где n - количество подписавших. - person theartofbeing; 06.04.2019

Да, это возможно. Google для начала "многостороннее шифрование".

AFAIK, нет никаких пакетов drop 'em in and use' em для этого.

- MarkusQ

P.S. Для наброска того, как это можно сделать, подумайте об этом. Зашифрованное сообщение состоит из:

  • полезная нагрузка, зашифрованная одноразовым блокнотом
  • одноразовый блокнот, зашифрованный ключом key1
  • одноразовый блокнот, зашифрованный ключом 2
  • ...
  • одноразовый блокнот, зашифрованный ключом N

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

Однако это всего лишь доказательство того, что это можно сделать и что его реализация отстой. По возможности избегайте использования собственного шифрования. Если вы не понимаете почему, вам следует определенно избегать использования собственного шифрования.

-----Редактировать ------------

Если я ошибаюсь и инструменты Gnu это делают, используйте их. Но я не могу найти никакой информации о том, как это сделать.

person MarkusQ    schedule 28.02.2009
comment
Что может показаться отстойным в этом, так это то, что как только вы знаете одноразовый блокнот, у вас есть известный простой текст вместе с зашифрованными значениями для других ключей. Используя эту информацию, вы можете упростить поиск других ключей. - person Kibbee; 28.02.2009
comment
Многостороннее шифрование в Google не дает особого успеха. Скорее всего, вам больше повезет с широковещательным шифрованием, которое также относится к этому случаю. - person staktrace; 17.10.2010
comment
@Kibbee: Ключи не секретные, они общедоступные. Так что облегчение выяснения того, что они из себя представляют, не имеет значения. (Эти схемы используются только с ключами, которые могут использоваться только для шифрования, но не для дешифрования.) - person David Schwartz; 02.10.2011
comment
Я почти уверен, что фактические реализации не используют общий одноразовый блокнот (который должен быть такого же размера, как обычный текст и зашифрованный текст, что удваивает размер сообщения), а на самом деле используют общий ключ симметричного шифрования (который обычно намного меньше сообщения). - person Joachim Sauer; 27.10.2011

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)

Этот алгоритм можно использовать, например, для увеличения скорости лукового маршрутизатора.

person IQfighter    schedule 13.07.2011