Текущие версии PGP и все GnuPG (GPG) реализуют стандарт OpenPGP. Я буду использовать только термин OpenPGP ниже.
OpenPGP использует шифрование с открытым и симметричным ключами. При шифровании документа генерируется и шифруется некоторый случайный симметричный ключ с использованием открытого ключа. Получатель зашифрует ключ симметричного шифрования (блочный шифр), используя свой закрытый ключ. Поскольку только симметричный ключ шифруется с использованием открытого ключа, накладные расходы остаются небольшими (это то, что предложил Дэвид Шварц и уже внедрен в OpenPGP).
Конечно, есть два случая, в которых эти издержки могут стать большими по сравнению с зашифрованными данными:
- Очень небольшое количество данных; если это проблема, вам придется выбрать какой-либо метод шифрования с помощью общих ключей (симметричных ключей)
- Много получателей; так как блочный шифр должен быть зашифрован для каждого из них. Если это проблема, вам придется делиться секретом (секретным ключом) между всеми получателями.
Вам не удастся использовать симметричное шифрование и передать секрет каждому получателю (или сделать то же самое с закрытым ключом OpenPGP). Если вы хотите, чтобы у каждого был свой секрет, никто другой не сможет расшифровать его версию данных; так что вам придется отправить всем другую версию этих данных.