шифрування / розшифрування декількома ключами


110

Чи можливо зашифрувати дані, щоб їх можна було розшифрувати декількома різними ключами?

Приклад:

Я зашифрував дані за допомогою ключа1, але хочу розшифрувати ключі 2, 3 та 4.

Чи можливо це?

Відповіді:


170

GnuPG робить стандартне шифрування з декількома ключами.

Наступна команда буде шифрувати doc.txtза допомогою відкритого ключа для Аліси та відкритого ключа для Боба. Аліса може розшифрувати її за допомогою приватного ключа. Боб також може розшифрувати, використовуючи свій приватний ключ.

gpg --encrypt --recipient alice@example.com \
    --recipient bob@example.com doc.txt

Ця функція детально описана в розділі керівництва користувача під назвою " Шифрування та розшифрування документів "


Дітто. Класно знати, як це зробити, але я не можу знайти на ній жодної чоловічої сторінки.
MarkusQ

@Mitch, я опублікував відповідь, яка може мати нашу відповідь! (Будь ласка, перевіряйте та вітайте, якщо так / ні
ВЕЛИКО

@MarkusQ, див. Моє посилання на Мітч вище. Тест / дякую, якщо зможете! :-)
pythonlarry

Отже, це призводить до 1 зашифрованого файлу, який можна прочитати, використовуючи приватний ключ, а не 1 файл на ключ?
user8675309

7
@ user8675309, так. Дані шифруються загальним симетричним ключем. Лише симетричний ключ шифрується відкритим ключем кожного одержувача. Це не повторно шифрує всі дані для кожного одержувача.
Вісбукі

55

Так, це можливо

Так, можливе шифрування для кількох одержувачів. Також здається логічним, коли ви думаєте, що, можливо, вам захочеться прочитати те, що ви комусь надіслали, і зробити це, вам потрібно бути у списку одержувачів.

Командний рядок

Ось як це зробити за допомогою gpgкомандного рядка (як описано у відповіді Девіда Сегонда ):

gpg --encrypt \
  --recipient alice@example.com \
  --recipient bob@example.com \
clear-message.txt

GUI-клієнт

Ваш GUI повинен передбачити спосіб шифрування для кількох людей

Механізм

Виникає питання щодо інформаційної безпеки , розміру файлу GPG з кількома одержувачами? , що пояснює механізм шифрування :

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

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


4
особлива подяка за останні два речення: вони все зрозуміли вже зараз!
radistao

31

Клієнти GnuPG та PGP загалом зашифровують фактичні дані симетричним ключем, який називається "сеансовий ключ". Потім ключ сеансу шифрується кожним «ключем одержувача» (тобто тими, які ви вказали з -r / - одержувачем). Це іноді називають гібридним шифром . Зараз я вважаю, що 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 рази більшим, ніж якби ви щойно зашифрували його в Alice.

Дивіться також --show-session-keyпараметр на сторінці gpg man, щоб мати можливість розшифрувати лише сеансовий ключ, наприклад, щоб дозволити третій стороні розшифрувати зашифрований вам документ без необхідності передавати їм ваш приватний ключ або дані простого тексту.


1
Дякуємо за пояснення, що зашифрований документ не буде втричі більшим, де n - кількість підписантів.
theartofbeing

4

Так, це можливо. Google "багатостороннє шифрування" для початку.

AFAIK, однак для них немає скидання і використання пакетів.

- MarkusQ

PS Для ескізу того, як це можна зробити, врахуйте це. Зашифроване повідомлення складається з:

  • корисний вантаж, зашифрований одноразовим майданчиком
  • один часовий майданчик, зашифрований ключем1
  • панель часу, зашифрована ключем2
  • ...
  • панель часу, зашифрована ключемN

Одержувач, який тримає ключ, я просто розшифровує свою копію колодки своїм ключем, а потім розшифровує корисне навантаження.

Однак це лише доказ того, що це могло бути зроблено і було б виправданням як реальна реалізація. Якщо це взагалі можливо, вам слід уникати шифрування власного шифрування. Якщо ви не розумієте чому, вам обов'язково слід уникати прокрутки власного шифрування.

----- Редагувати ------------

Якщо я помиляюся і інструменти Gnu роблять це, використовуйте їх. Але я не можу знайти інформацію про те, як це зробити.


1
Що може змусити це те, що після того, як ви знаєте один проміжок часу, у вас є відомий звичайний текст, а також зашифровані значення для інших клавіш. Користуючись цією інформацією, ви можете полегшити з’ясування інших клавіш.
Kibbee

2
Гуглінг "багатостороннє шифрування" не дуже багато. Вам, швидше за все, пощастить із "шифруванням широкомовної передачі", яке охоплює і цей випадок.
стактрейс

1
@Kibbee: Ключі не секретні, вони відкриті. Тому полегшити з’ясування того, що вони не мають значення. (Ці схеми використовуються лише для ключів, які можна використовувати лише для шифрування, а не для розшифровки.)
David Schwartz

5
Я майже впевнений, що фактичні реалізації не використовують спільний одноразовий майданчик (який повинен бути таким же великим, як звичайний текст та зашифрований текст, таким чином, вдвічі більше розміру повідомлення), але насправді використовують спільний симетричний ключ шифрування (що зазвичай набагато менше, ніж повідомлення).
Йоахім Зауер

-16

Кілька (більше двох) ключових 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 m)

y3 == y2 ^ e3 (mod m)

...

x == yi ^ d (mod m)

Цей алгоритм можна використовувати, наприклад, для збільшення швидкості маршрутизатора Onion.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.