Веб-сервер на лету расшифровывает? - PullRequest
4 голосов
/ 11 декабря 2010

Я имею дело с концепцией проекта, которая включает в себя абсолютно критические данные.

Самая важная часть заключается в том, что они должны храниться в зашифрованном виде.

Зашифрованная файловая система, которая монтируетсяс которого веб-сервер обслуживает файлы, недостаточно.

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

Хешна основе метки времени ключ и имя файла проверяют URI и сохраняют его в списке, поэтому к нему можно получить доступ только один раз.

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

Он также должен быть эффективным и быстрым.Это также требует метода шифрования, который не требует сканирования всего файла.так что файл может быть постепенно расшифрован.Я думаю, что AES может сделать это с указанными размерами блоков, которые зашифрованы в атомарном виде.

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

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

Однако это будет очень неэффективно.

Знаете ли вы какой-либо модуль apache / lighttpd / nginx или какой-нибудь более эффективный метод?

Ответы [ 4 ]

3 голосов
/ 19 декабря 2010

Вы должны открыть файл с помощью nmap (), а затем зашифровать данные «на лету» по мере необходимости.

Я не вижу ничего более подходящего для этого, чем G-Wan (200 КБ),который предлагает собственные скрипты C и шифрование AES (внешние библиотеки не требуются, даже если скрипты C могут связываться с любой существующей библиотекой).

Если вам нужно добиться наилучших результатов, то этопуть.

1 голос
/ 19 декабря 2010

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

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

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

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

Как это обеспечивает доступ к нему только один раз? Конечно, его можно использовать для сокращения окна возможностей для CSRF, но это не устраняет его.

Затем сценарий забывает предыдущие данные и продолжает работу со следующим фрагментом до eof.

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

Гораздо более безопасный подход - использовать CBC и выполнять шифрование / дешифрование на клиенте.

Существуют реализации javascript нескольких алгоритмов шифрования (включая AES) на этой странице есть хороший инструментарий. А с помощью HTML5 / localstorage вы можете создать полноценное клиентское приложение на HTML / javascript.

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

1 голос
/ 12 декабря 2010

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

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

1 голос
/ 12 декабря 2010

Возможно, вы захотите посмотреть потоковые фильтры PHP (http://php.net/stream.filters);с небольшим количеством склеенного кода вы можете заставить его читать зашифрованный файл с помощью обычных функций доступа к файлам PHP, и он будет в основном прозрачен для существующего кода.

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