2013-11-22 2 views
3

В целях защиты конфиденциальных данных веб-приложения возникает вопрос: лучше ли шифровать на уровне приложения с помощью jasypt (для Java) и сохранять зашифрованные данные в базе данных или использовать механизмы шифрования (например) MSSQL 2012?Где должно происходить шифрование - на уровне приложения или базы данных?

Под аспектом

  1. безопасности относится
  2. Performance относится

Что считается лучшей практикой здесь?

EDIT:

Чтобы дать немного более подробную информацию о типе приложения: Это веб-портал, где пользователи загружают senstive данных на портал, где эти данные оцениваемого владельцем портала. Он будет использоваться на сайте-заказчике, поэтому мы имеем ограниченный контроль, который имеет доступ к серверам и ограниченный контроль сервера приложений,

ответ

1

Все это сводится к вопросу о доверии. Полностью ли вы контролируете сервер приложений? Каков уровень угрозы? Как можно скомпрометировать конфиденциальные данные на этом уровне? Затем, как это происходит на уровне дБ? Можете ли вы управлять db? Как насчет того, кто имеет к нему доступ?

Ваш вопрос не может быть ответом в целом. Все зависит от типа угроз, от которых вы хотите защитить.

  • Как правило, при шифровании в приложении становится трудно использовать эффективные методы извлечения базы данных. Часто индексы перестают работать значимым образом. Сортировка становится трудно, и т.д ...

  • При шифровании на уровне БД, вы должны думать о временном шифровании транспорта (думаю, SSL или SSH туннелей)

  • Производительность должна быть незначительной проблемой, если вы действительно хотите защитить данные. Я не эксперт в этом, но я бы подумал, что есть хорошо работающие решения как для шифрования данных приложений, так и для уровня базы данных.

0

В общем случае данные должны быть отправлены по сети с демаршацией на другом конце. Затем, сохраняя данные, вы можете их зашифровать и хранить.

+0

Вы думаете, что это не должно зависеть от типа приложения?Я имею в виду, что если данные, которые должны быть отправлены, более чувствительны, то они должны быть зашифрованы, а также в базе данных. например, некоторые сверхсекретные военные данные. –

+0

Да, и это именно то, что я указал в целом. Даже если мы рассмотрим простую передачу данных через нашу сеть, он зашифрован на уровне представления, который приходит сразу после прикладного уровня в семислойной модели OSI. Таким образом, вы правы, он специфичен для требований к дизайну и архитектуре пользователей. –

0

AFAIK, не будет серьезных проблем с производительностью, поскольку производительность не имеет отношения к шифрованию.

И следующий шаг, в отношении безопасности касается данных следует шифровать на уровне кода, так что это гарантирует, что data безопасен при прохождении через проволоку.

В конце этого же data будет сохранено в базе данных. Это обеспечит безопасность как на месте, так и через сеть , а также на контейнере данных.

+2

@SURESH ATTA «Поскольку производительность не имеет никакого отношения к шифрованию». На самом деле не согласен с этим. Алгоритмы шифрования являются высокопроизводительными, и различные реализации (основанные на Java/SQL) могут иметь разные сложности. –

+0

@SURESH ATTA: Конечно, шифрование имеет какое-то отношение к производительности - по крайней мере, оно потребляет процессорное время. –

+0

Да, будут небольшие сложности времени, но эти преимущества на обоих концах * IMHO * –

Смежные вопросы