Шифрование файлов Yubikey без использования OpenPGP?

Шифрование файлов Yubikey без использования OpenPGP?

Есть ли способ зашифровать отдельные файлы с помощью Yubikey, который не использует OpenPGP?

Я использую свой Yubikey для входа по SSH и шифрования отдельных файлов (хранилищ паролей). Yubikey работает только в режиме CCID (в настоящее время я не использую OTP или U2F). Все операции требуют проверки физического присутствия.

До сих пор я использовал свой Yubikey в качестве смарт-карты OpenPGP вместе с:

  • gpg-agent --enable-ssh-supportдля поддержки ssh; и
  • плагин gnupg.vimдля шифрования файлов.

GnuPG неуклюж, ненадежен и сложен для скриптования. Я бы хотел прекратить использовать Yubikey в этом режиме.

У меня есть еще один Yubikey, настроенный как смарт-карта NIST PIV. Я использую поддержку OpenSSH PKCS11 и обычный ssh-agent. Это намного надежнее, чем инструменты gpg, но этоне обеспечивает поддержку шифрования отдельных файлов.

На мой взгляд, существует несколько возможных вариантов использования смарт-карты PIV для шифрования отдельных файлов:

  • какой-то ssh-agent+ vimхак?
  • может быть, существует простой инструмент шифрования файлов на основе PKCS11?
  • использовать один из других слотов на YubiKey для шифрования файлов, может быть, с помощью OpenSC или чего-то из libccid?
  • менеджер паролей с открытым исходным кодом, который напрямую взаимодействует с Yubikey?

решение1

Вот скрипт на Python, который я написал для автоматизации следующего процесса:

Для шифрования используется сетевой протокол ssh-agent (см.проект RFCдля получения подробной информации) позволяет подписывать произвольные данные с помощью закрытого ключа, поэтому:

  • выберите случайное число
  • попросите ssh-agent подписать его
  • использовать подпись для получения симметричного ключа
  • зашифруйте ваши данные с помощью симметричного ключа
  • сохранить случайное число и зашифрованные данные (но не симметричный ключ) на диск

и расшифровать:

  • считать случайное число и зашифрованные данные обратно с диска
  • попросите ssh-agent подписать случайное число
  • использовать подпись для получения того же симметричного ключа, который использовался для шифрования данных
  • расшифруйте данные!

Связанный контент