Как можно сделать шифрование материалов пользователя на сайте (тексты, изображения, прочие файлы)?
Как думаю... к группе пользователей привязывается ключ и все материалы автоматически им как-то шифруются... но как организовать данный процесс, чтобы сильно не напрягать сервер?
Хм, а зачем?
Если уж шифровать таки нужно - ну зашифруйте весь диск с пользовательскими данными, благо средств шифрования вагон и маленькая тележка, и современные процессоры поддерживают аппаратное шифрование.
Александр Синицын, Есть подозрение что вы пишите не то что вам нужно, а то что вы думаете что вам нужно. Четко объясните чего вы хотите добиться, (из своего опыта) думаю шифрование там рядом не лежит. Вопросы безопасности и доступа очень мало общего с шифрованием имеют.
ThunderCat, Я пока не пишу... сбор инфы на стадии перехода от идеи к проекту )
Надо сделать, чтобы пользователь, загружая личные файлы на сайт был уверен в том, что их никто не увидит кроме ограниченного круга лиц. Т.е. простое ограничение на просмотр, не подойдет, т.к. лица, имеющие доступ к материалам по ftp смогут скачать и просмотреть всё что угодно.
Александр Синицын, Давайте определимся:
1)контент заливается на сервер
2) К контенту имеют доступ N человек(некая группа)
3) К контенту не могут иметь доступ пользователи не вхоящие в группу.
Доступ пользователей к контенту по фтп использовался в конце 20 века, сейчас уже само понятие фтп используется только в контексте служебных сервисов.
теперь вопрос:
Если пользователь группы распространяет данные доступные ему для просмотра третьим лицам? Как шифрование и прочие защиты будут работать по вашей логике?
Александр Синицын, распространить можно всё, к чему есть доступ.
Возможно, Вы имели ввиду, что хотите шифровать хранилище от возможности открытия хранимых данных?
Т.е., если скопируют базу и код (с хостинга), чтобы не смогли получить хранимые данные (текст, фото, документы, файлы и т.д.)?
ThunderCat,
1) Пользователи заливают контент на сервер - хостинг, действия персонала которого я не могу контролировать и который может ползать куда захочет.
2) А доступ должна иметь только группа
3) Не включая никаких третьих лиц.
Пользователь заливает файл, файл шифруется ключем группы, доступен всей группе. При запросе расшифровывается, отдаётся в поток с генерированным именем, отличным от имени хранения, для снижения нагрузки может кешироваться на компьютере пользователя входящего в группу... это уже его комп и его проблема ))
Александр Синицын, п.3 - невыполним.
Пруфы:
1. Юзер с доступом скопировал файл, имея к нему доступ, и выложил в паблик.
2. Юзер с доступом выложил свой доступ (логин и пароль) в паблик.
Пока Вы это не закроете - шифровать можно только само хранилище.
Чтобы хостер не получил доступ ко ВСЕМ файлам ВСЕХ пользователей и групп.
Понимаете?
Александр Синицын, скачал файл и запостил у себя на сайте. С линком "скачать".
Выложил в паблик - это разместил на другом ресурсе с доступом для всего интернета.
"выложил свой доступ в паблик" - опукбликовал текстом логин и пароль (с линком) или запроксировал свой доступ на паблик на другом ресурсе.
Тогда нужно шифровать само хранилище (как я сказал выше).
Шифровать лучше по-файлово: во время закачивания мы шифруем файл....
ВНИМАНИЕ!
СТРОГО НА СТОРОНЕ КЛИЕНТА, ЧЕРЕЗ JS !!! (НИКАКИХ PHP НА СЕРВЕРЕ!)
... и только после этого отправляем на сервер (из браузера) и уже там - просто сохраняем куда нужно...
Обратно - та же операция в обратном порядке с дешифрацией НА СТОРОНЕ КЛИЕНТА.
PS: готовое решение CryptPad
Александр Синицын, Варианта 2:
1. Ключ на стороне сервера - открытые данные на сервере.
2. Ключ на стороне клиента - открытые данные только на клиенте
Какой вариант выбираем?
xmoonlight, Я думал, что ключ на сервере, может быть привязан к учетке пользователя.
Пользователь входит в группу других пользователей.
При обращении к файлу, проверяется вхождение пользователя к группе, если входит, то файл расшифровывается ключем владельца и отдается.
Если кто-то выложил чужой файл в доступ на другом ресурсе без разрешения, то он может быть исключен из группы самой группой. При этом он теряет все доступы к файлам группы.