Фон:
Некоторые существующие программы, такие как git-annex (шифрование git-annex) и pass, делегируют криптографию GPG, «полную и бесплатную реализацию стандарта OpenPGP ». В частности, эти программы используют идентификаторы ключей GPG как способ взаимодействия с GPG:
GPG используется для создания и управления парами открытых / закрытых ключей GPG.
Программа получает указание использовать определенную пару открытых / закрытых ключей GPG через идентификатор ключа.
Хотя полагаться на GPG хорошо и похвально, конкретный способ, которым это делается (через идентификаторы ключей GPG), приводит к возможно ненужному использованию криптографии с открытым ключом под капотом.
Открытый ключ / асимметричная криптография обращается к некоторым конкретным случаям использования, которые, в широком смысле, включают в себя безопасный обмен информацией между одной доверенной и несколькими ненадежными сторонами. Если кто-то решит использовать
pass
для хранения своих паролей в общедоступном git-репозитории, в этой схеме нет недоверенной стороны, оправдывающей использование асимметричной криптографии.Традиционная / симметричная криптография потенциально более безопасна, чем асимметричная криптография. Например, существуют квантовые алгоритмы, которые нарушают асимметричную криптографию, но еще не существует квантовых компьютеров для их запуска. Хотя такие разработки не гарантированы, аналогичные (потенциальные) недостатки не известны для симметричной криптографии.
Асимметричная криптография имеет два уровня безопасности:
(а) закрытый ключ симметрично шифруется парольной фразой
(б) (зашифрованный) закрытый ключ хранится в безопасном месте
Таким образом, например, (a) ничего не добавляет к безопасности асимметричной криптографии, пока выполняется (b). Совершенно верно (хотя и нежелательно) выполнять асимметричную криптографию с пустой парольной фразой.
Обычная симметричная криптография с одним закрытым ключом обеспечивает безопасность только типа (а). Если заменить симметричную криптографию асимметричной, было бы неплохо сохранить оба уровня безопасности (a) и (b). Один из способов сделать это - 2 симметричных уровня:
генерировать частную случайную строку
симметрично зашифровать частную случайную строку, используя фразу-пароль, хранить в частном порядке
симметрично зашифровать сообщение с частной случайной строкой, хранить публично
Далее описывается, что происходит под капотом, когда такая программа, как
pass
использует GPG через идентификатор ключа GPG. (Предположим, что криптография с открытым ключом - это RSA, а симметричная криптография - это AES.) Во-первых, GPG используется для:(i) создать пару открытых / закрытых ключей RSA
(ii) Открытый ключ RSA не зашифрован, хранится в частном порядке (жесткий диск) или публично (сервер ключей)
(iii) AES-шифрованный закрытый ключ RSA с парольной фразой, хранится в частном порядке
Далее, после шифрования OpenPGP, вот как работает шифрование:
(iv) генерировать случайный ключ сеанса
(v) AES-шифрованное сообщение с сеансовым ключом, хранится публично
(vi) RSA-шифрованный сеансовый ключ с открытым ключом RSA, хранится публично
Заметим , что сообщение скомпрометирован разбив либо (v) или (VI).
Ненужная потенциальная уязвимость:
Предположим, что в будущем квантовые компьютеры будут разработаны, а RSA сломана. (Для параноика, предположим, что RSA уже сломан.) Хотя это внесет изменения в то, как мы делаем такие вещи, как онлайн-банкинг, это также окажет совершенно ненужное негативное влияние на безопасность данных, создаваемых pass
/git-annex
.
Насколько это плохо, зависит от того, хранится ли открытый ключ RSA из (ii) выше публично или конфиденциально. Если они хранятся публично, данные уже скомпрометированы: злоумышленник может расшифровать (vi) получение ключа сеанса, а затем расшифровать (v) с помощью ключа сеанса, чтобы получить сообщение. Если открытый ключ RSA из (ii) фактически остается закрытым, безопасность данных снижается до (b) безопасности носителя, содержащего открытый ключ RSA, что эквивалентно выполнению асимметричного шифрования без ключевой фразы.
Эта уязвимость, вне зависимости от того, извлечена она или нет, совершенно не нужна, поскольку она вызвана ненужным использованием криптографии с открытым ключом, присущей существующему интерфейсу между такими программами, как pass
/git-annex
и GPG (через идентификаторы ключей GPG).
Вопрос:
Есть ли "относительно простой" способ:
убрать использование асимметричного шифрования, когда GPG используется под капотом через идентификаторы ключей GPG
продолжать использовать GPG для управления ключами, как и раньше
поддерживать двухуровневую безопасность, упомянутую в 4 как (а) и (б)
Полная схема, которую я ищу:
(я) генерировать частную случайную строку
(ii ') AES-шифрует частную случайную строку с парольной фразой, хранит конфиденциально
(iii ') AES-шифрованное сообщение с частной случайной строкой, хранится публично
Я понимаю, как выполнить каждый из этих шагов отдельно, но то, о чем я спрашиваю, - это лучший способ включить такое "исправление" в способ, которым программы могут использовать GPG через идентификаторы ключей GPG. В частности, я ожидаю, что такие программы будут выполнять внешние вызовы в форме gpg --encrypt --recipient <keyid>
и gpg --decrypt
.
Вывод: кажется, что волшебной пули не существует, и перехват этих вызовов с помощью сценария-оболочки gpg
- единственный путь. Возможно, GPG следует рассмотреть эту проблему в будущем.