Боюсь, что вы смешиваете две концепции: аутентификацию / авторизацию и конфиденциальность, пытаетесь охватить оба аспекта за один шаг, и это не сработает.Вы никогда не должны шифровать «реальные данные» с помощью асимметричных алгоритмов.а) они слишком медленные для этого, б) есть тонкие проблемы, которые, если их не сделать правильно, сильно ослабят безопасность вашего решения.
Хорошее эмпирическое правило заключается в том, что единственное, что вы должны в конечном итоге шифровать с помощью закрытых асимметричных ключей, это симметричные ключи, используемые гораздо более быстрым симметричным алгоритмом.Но почти во всех случаях вы даже не должны этого делать, потому что в 90% случаев вам действительно нужен TLS (SSL) - я пытался объяснить, почему здесь некоторое время назад.
В вашем случае, я предполагаю, что требования:
конфиденциальность данных, которые должны храниться в базе данных: широкая публика не должна быть в состояниипрочитать его (или даже получить к нему доступ)
выбранные несколько человек (вероятно, только один человек) должны иметь возможность доступа и чтения этих данных
Первая цель обычно достигается с помощью симметричного шифрования .Вторая цель, хотя и связана, реализуется совершенно иными способами.Вы хотите, чтобы пользователь, получающий доступ к файлу, проходил аутентификацию (т.е. устанавливал личность), и, кроме того, вы также хотите, чтобы они были авторизованы (т.е. проверяли, имеет ли установленная личность право делать то, что он намеревается).Именно здесь асимметричная криптография может выйти на сцену, но не обязательно.Поскольку ваш вопрос помечен Rails, я предполагаю, что речь идет о приложении Rails.Обычно у вас уже есть некоторые средства для аутентификации и авторизации пользователей (скорее всего, с использованием вышеупомянутого TLS), вы можете просто использовать их повторно, чтобы установить симметричный ключ для фактического шифрования / дешифрования файлов. Шифрование на основе пароля подойдет для этой цели, если вы вообще хотите избежать асимметричного шифрования.Все становится еще сложнее, если вы также хотите обеспечить целостность и без того конфиденциальных данных, то есть вы хотите дать своего рода гарантию аутентифицированному и авторизованному пользователю в том смысле, что то, к чему он наконец получает доступ, не было изменено каким-либо образом.в это время.
Разработка решения для этого не будет тривиальной задачей и во многом зависит от ваших требований, поэтому я боюсь, что не существует "золотого пути", который устраивал бы всех.Я хотел бы предложить провести некоторое исследование, получить более четкое представление о том, чего вы пытаетесь достичь и как, а затем попытаться получить дополнительные советы по темам, которые вы все еще чувствуете себя неуверенно / неудобно.