Есть ли способ зашифровать отдельные файлы с помощью 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 подписать случайное число
- использовать подпись для получения того же симметричного ключа, который использовался для шифрования данных
- расшифруйте данные!