Я разрабатываю приложение Qt, которое требует от пользователя входа в систему для использования приложения. Я хочу использовать двухфакторную аутентификацию, пароль и USB-накопитель, являющиеся двумя формами аутентификации.
Существуют ли какие-либо библиотеки Qt, которые поддерживают шифрование, и что является самым безопасным способом хэширования/шифрования и хранения пароля и частных/открытых ключей?
Qt предлагает встроенное криптографическое хеширование через класс QCryptographicHash. Он поддерживает MD5, SHA-1 и SHA-512, по крайней мере. MD5 ужасен, а SHA-1 - старый. Я бы сказал, что использую SHA-256 или SHA-512... оба они очень трудны для перебора с использованием современных технологий.
Независимо от того, где вы храните пароль, вы хотите сохранить его с помощью (длинной) соли. Любая случайная строка будет выполнена.
Одним из возможных способов проведения двухфакторной аутентификации может быть сохранение соли на USB-накопителе, так что ваша программа не знает, как расшифровать пароль, если не имеется файл соли. Это более или менее то, что pam_usb делает в Linux. (pam_usb использует одноразовый блокнот, вы можете прочитать источник.)