Ответ 1
Вы можете зашифровать закрытый ключ симметричным ключом на основе пароля пользователя. Просто сохраните дополнительную соль и введите пароль "хэш", чтобы получить отдельный ключ. Затем используйте его в качестве ключа для шифрования закрытого ключа. Обратите внимание, что для создания безопасного хэша пароля необходимо использовать функцию получения ключа на основе пароля (PBKDF), такую как PBKDF2, bcrypt или scrypt (учитывая нормальный уровень безопасности пароля).
Если пользователь не подключен к сети в то время, когда необходимо сгенерировать подпись, тогда вы действительно должны защитить пароли в том смысле, что только вы/наш офис может расшифровать ключи. Вы можете использовать некоторый идентификатор пользователя + свой собственный секретный ключ для вычисления ключа шифрования/дешифрования. Возможно, вы даже захотите сгенерировать отдельную пару ключей RSA для выполнения гибридного шифрования.
Хранение закрытых ключей от имени пользователей - очень опасная практика. Существует множество способов раскрытия секретного ключа (например, атаки по побочным каналам). Чтобы сделать это профессионально, вы должны использовать HSM где-то в процессе. Если это для каких-либо серьезных данных, пожалуйста, обратитесь к профессионалу и юристу.