ФорумПрограммированиеОбщие вопросы программирования → Шифрование файликов

Шифрование файликов

  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 14:58

    Тема такая.
    Есть сайт, на нём юзеры (мало).
    У каждого юзера есть связанный с ним список неких записей.
    Каждая запись - просто текст.
    Количество записей - до нескольких сотен на каждого юзера.

    Записи могут добавляться/удаляться/изменяться.
    Нужно сделать версионирование.

    Каждый юзер работает только со своим списком.
    Конкурентного доступа не будет.

    Самое простое - свалить просто все эти записи в папку в виде файлов и сделать git-репу.
    И коммитить при изменении.
    История, откаты, диффы всё готово.

    Следующий момент - эти данные нужно шифровать.
    Требуемый уровень защиты - средний.
    Чтобы шарящийся на сервере перец или излишне любопытный админ не мог просто так читать эти тексты.
    От АНБ защищаться не обязательно.

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

    Собственно вопросы профессионалам, а то я новичок:

    1. Как лучше шифровать?

    2. Как лучше таскать пароль со страницы на страницу?

    3. Как сделать так, чтобы для гита эти файлы не были бинарными. То есть если в большом тексте изменилась одна строчка, то можно было вычислить небольшой дифф между ними.
      Можно, конечно, просто построчно шифровать, но не убьёт ли это всю криптографию на корню?

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:02, спустя 3 минуты 27 секунд

    1. rsa ключом конечно который "открывается" паролем юзера при авторизации.
    2. обычная авторизация через сессию очевидно, самое безопасное
    3. ты думаешь что если буква поменялась то в зашифрованом документе поменяется только в условой "середине" текст?)))))))) поменяется весь файл целиком. получается и правда сродни бинарному формату
    Сапожник без сапог
  • Ivan.

    Сообщения: 495 Репутация: N Группа: Адекваты

    Spritz 3 февраля 2016 г. 15:22, спустя 20 минут 18 секунд

    Честно сказать идея с git так себе.
    Я бы использовал MongoDB. Хранил бы оригинал и историю изменений (отсылка к RFC 6902 - JavaScript Object Notation (JSON) Patch [tools.ietf.org] )
    Передавать пароль, если ты о безопасности соединения - https/wss всю грязную работу за тебя сделает в принципе
    Если же соединение не защищенное - блочное шифрование, или защита от дураков
    Защита от дураков может быть даже очень дебильной, например rot13 на пароль. (но лучше так конечно не делать)
    Базу данных помести на отдельном сервере, если ссышь засунь её на Amazon RDS.
    Пароль для базы храни в окружении и сделай чтобы читать файлы окружения мог только владелец.
    Запускай приложения под разными пользователями.
    В базе данные можно держать в зашифрованном виде, как и саму базу ( Configure Encryption — MongoDB Manual 3.2 [docs.mongodb.org] )
    Я бы не парился и использовал бы Blowfish для текста.
    Ключ - в принципе если дело идет через https, можно использовать и пароль пользователя.

  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:24, спустя 1 минуту 50 секунд

    1. ок
    2. ну, то есть в сессии придётся таскать пароль в открытом виде
    3. ну вот, я ищу какие-то обходные пути.
      как вариант шифровать фиксированными блоками или отдельными строками (идеально с точки зрения гита).
      только не сведёт ли это всю криптостойкость к нулю?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:25, спустя 1 минуту 41 секунду

    @Ivan., пароль нельзя - сменил пароль и пизда данным )) да и блоуфиш так себе

    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:26, спустя 20 секунд

    Честно сказать идея с git так себе.

    Почему?

    Я бы использовал MongoDB.

    Она нативно хранит историю изменений?

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:27, спустя 57 секунд

    @vasa_c, ну потому что гит не для этого ))

    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:29, спустя 2 минуты 1 секунду

    @phpdude, мне нужно хранение истории версий текстовых данных, с возможностью отката. Почему монга более для этого, чем гит?

  • Ivan.

    Сообщения: 495 Репутация: N Группа: Адекваты

    Spritz 3 февраля 2016 г. 15:30, спустя 1 минуту 13 секунд

    Честно сказать идея с git так себе.

    Почему?

    Я бы использовал MongoDB.

    Она нативно хранит историю изменений?

    @vasa_c, храни просто оригинальный текст, и историю патчей к нему

    Спустя 143 сек.

    @Ivan., пароль нельзя - сменил пароль и пизда данным )) да и блоуфиш так себе

    @phpdude, топикстартер сам же указал на пароль. Я бы конечно не стал бы использовать пароль пользователя как ключ. Я бы скорее исключил возможность проникновения на сервер и если потребовался бы сис.админ, я бы выбрал доверенное лицо, или ограничил бы ему набор команд/дал бы определенного юзера

  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:51, спустя 21 минуту 17 секунд

    Я бы конечно не стал бы использовать пароль пользователя как ключ.

    Окей, а что бы ты стал использовать, как ключ?

    Спустя 89 сек.

    @vasa_c, храни просто оригинальный текст, и историю патчей к нему

    ну, гит это сделаем сам. и патчи вычислит и результаты пожмёт.

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:56, спустя 5 минут 16 секунд

    Олег, мне кажется ты подгоняешь задачу под то решение, которое уже выбрал. Сайты обычно хранят пользовательский контент в БД. Почему бы реально не сливать потерявшие актуальность данные в таблицу ревизий?! И хуй забить на шифрование ибо не надо подменять авторизацию шифрованием. Не придется творить что-то кардинально новое.

    Чтобы всё завертелось достаточно повесить "хуки" в Модели на update и delete. Можно и тригерами.

    ιιlllιlllι унц-унц
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 15:57, спустя 35 секунд

    Ну и основная задача не меняется.

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

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 февраля 2016 г. 16:07, спустя 10 минут 10 секунд

    Место дёшево. Труд дорог.

    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 3 февраля 2016 г. 17:16, спустя 1 час 9 минут 10 секунд

    Как хранить изменения шифрованного файла? Каждый раз полный текст?

    @vasa_c, полный текст надёжнее всего

    не всё полезно, что в swap полезло
  • Ivan.

    Сообщения: 495 Репутация: N Группа: Адекваты

    Spritz 3 февраля 2016 г. 18:17, спустя 1 час 52 секунды

    Ну и основная задача не меняется.

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

    @vasa_c, дак ты храни не изменения шифрованного файла, а шифрованные изменения дешифрованного файла

Пожалуйста, авторизуйтесь, чтобы написать комментарий!