Чи можливо зашифрувати дані, щоб їх можна було розшифрувати декількома різними ключами?
Приклад:
Я зашифрував дані за допомогою ключа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
Ваш GUI повинен передбачити спосіб шифрування для кількох людей
Виникає питання щодо інформаційної безпеки , розміру файлу GPG з кількома одержувачами? , що пояснює механізм шифрування :
GPG зашифровує файл один раз симетричним ключем, після чого розміщує заголовок, що ідентифікує цільове ключове слово, та зашифровану версію симетричного ключа.
[...] Коли зашифровано декілька одержувачів, цей заголовок розміщується кілька разів, забезпечуючи унікально зашифровану версію одного і того ж симетричного ключа для кожного одержувача .
Клієнти 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, щоб мати можливість розшифрувати лише сеансовий ключ, наприклад, щоб дозволити третій стороні розшифрувати зашифрований вам документ без необхідності передавати їм ваш приватний ключ або дані простого тексту.
Так, це можливо. Google "багатостороннє шифрування" для початку.
AFAIK, однак для них немає скидання і використання пакетів.
- MarkusQ
PS Для ескізу того, як це можна зробити, врахуйте це. Зашифроване повідомлення складається з:
Одержувач, який тримає ключ, я просто розшифровує свою копію колодки своїм ключем, а потім розшифровує корисне навантаження.
Однак це лише доказ того, що це могло бути зроблено і було б виправданням як реальна реалізація. Якщо це взагалі можливо, вам слід уникати шифрування власного шифрування. Якщо ви не розумієте чому, вам обов'язково слід уникати прокрутки власного шифрування.
----- Редагувати ------------
Якщо я помиляюся і інструменти 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 m)
y3 == y2 ^ e3 (mod m)
...
x == yi ^ d (mod m)
Цей алгоритм можна використовувати, наприклад, для збільшення швидкості маршрутизатора Onion.