Шифрование с различными ключами?


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

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

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

5 90

5 ответов:

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

GUI client

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

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

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

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

GnuPG и клиенты PGP в целом обычно шифруют фактические данные с помощью симметричного ключа, называемого "сеансовым ключом". Ключ сеанса затем шифруется с каждым "ключом получателя" (т. е. те, которые вы указываете с-r/--recipient). Это иногда называют гибридный шифр. Прямо сейчас я считаю, что GnuPG по умолчанию использует 256-битные сеансовые ключи и AES для шифрования данных открытого текста в этом сеансовом ключе AES-256, а ваши ключи получателей-это ваши RSA/DSA/ECDSA / etc. ассиметрический ключ в данном случае.

AES-NI, чтобы сделать некоторые шаги алгоритма в аппаратных средствах, которые делает GnuPG особенно быстрым при шифровании / расшифровке данных.

еще одна причина для этого заключается в том, что он позволяет шифровать PGP-зашифрованные документы для нескольких сторон без необходимости удваивать размер документа. Обратите внимание, что при указании нескольких получателей зашифрованного документа (например,gpg -ea -r Alice -r Bob -o ciphertext.asc), зашифрованный документ, который хранится (зашифрованный текст.asc) не так велик, как если бы вы только что зашифровали его для Алисы.

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

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

AFAIK, там нет Падение 'em в и использовать 'em пакеты для него, хотя.

-- MarkusQ

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

  • полезная нагрузка, зашифрованная с помощью одноразовой панели
  • одноразовая панель, зашифрованная с помощью key1
  • одноразовая панель, зашифрованная с помощью ключ2
  • ...
  • одноразовая панель, зашифрованная с помощью keyN

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

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

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

Если я ошибаюсь и инструменты 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 (mod m)

y2==y1^e2 (mod м)

y3==y2^e3 (mod m)

...

x= = yi^d (mod m)

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