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