Как защитить файловую систему? - PullRequest
0 голосов
/ 13 февраля 2010

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

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

Как мне это сделать?

P.S см. вопрос Какую базу данных выбрать, чтобы не беспокоиться об ограничении размера?

P.P.S Под защитой я имею в виду шифрование видеофайла / звукового файла с использованием алгоритма шифрования. Когда приложение должно их прочитать, оно должно расшифровать файлы ... Таким образом, украденные файлы бесполезны, если не присутствует соответствующий алгоритм расшифровки. Я думал использовать RAR с паролем. Насколько я знаю, это очень трудно взломать, когда пароль достаточно длинный. (Возможно я ошибаюсь). Я не знаком с MD5 ....
Я не могу защитить файлы от кражи, но я хочу запретить читать их свободно.

Ответы [ 7 ]

3 голосов
/ 13 февраля 2010

Один из подходов заключается в создании фонового процесса с маркером повышенной безопасности, который будет обращаться к разделу файловой системы, доступному только администраторам и этому процессу. В Windows вы бы создали «сервис». Я думаю, они называют это "демон" в * nix.

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

Нет способа полностью запретить системным администраторам доступ к файлу напрямую, поэтому, если это необходимо, вам не повезло. В Windows администраторы имеют особую привилегию, которая позволяет им вступать во владение любым защищаемым элементом, таким как файл или каталог. Как только они становятся владельцами, они могут делать с защищаемым предметом все, что захотят. Обойти это просто невозможно.

2 голосов
/ 13 февраля 2010

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

Я рекомендую DB2 . DB2 начиная с версии 9 поддерживает очень большие таблицы. Максимум чудовищно велик. 512000 петабайт, половина зетабайта .

1 голос
/ 14 февраля 2010

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

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

0 голосов
/ 15 февраля 2010

Я думаю, что все зависит от нескольких вещей:

  1. Откуда изначально берутся файлы
  2. Как будут доступны файлы (по сети или локально)
  3. От кого вы хотите защитить файлы

Если исходные файлы исходят от «вас» (разработчика), то, вероятно, лучшим вариантом будут зашифрованные двоичные объекты базы данных, так как большинство dbs'ов поставляются с некоторой формой шифрования.

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

Всего несколько мыслей.

0 голосов
/ 14 февраля 2010

Следующее предлагается без знания специфики вашего приложения.

Поскольку вы упоминаете, что вы не можете защитить от кражи, это единственный способ убедиться, что мультимедийные файлы безопасны (непригодны для использования) кем-либо, кроме «владельца», вам необходимо зашифровать их с помощью шифра, такого как AES или BlowFish и безопасный секретный ключ. Эти алгоритмы отличаются от MD5, который вы упоминаете. MD5 - это алгоритм HASH .

Для Delphi довольно хорошей библиотекой шифрования является DCPcrypt forund со значением http://www.cityinthesky.co.uk/cryptography.html. If, в котором есть оба алгоритма: HASH и Cipher.

Ваша проблема будет с Cipher KEY Management, а именно «Какой пароль использовать для шифрования?». Самым простым решением, не задумываясь об этом, будет использование собственного пароля пользователя, пока вы не поймете, что пользователь может изменить пароль . Если пользователь делает это, вам необходимо расшифровать и повторно зашифровать каждый мультимедийный файл, связанный с пользователем.

Чтобы ответить на реальный вопрос об управлении ключами, я бы предложил почитать об управлении ключами. Поскольку я не специалист по криптографии, я надеюсь, что кто-то более искушенный в мире криптографии может помочь здесь ... Ссылка: http://en.wikipedia.org/wiki/Key_management.

0 голосов
/ 14 февраля 2010

В обоих подходах есть свои достоинства.

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

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

0 голосов
/ 13 февраля 2010

Используйте БД (firebird или-embedded) и храните в ней большой контент.

Если вас беспокоит шифрование, делайте это на уровне файловой системы, а не на уровне базы данных.

Все современные ОС имеют поддержку зашифрованных файловых систем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...