Требуется подсказка: шифрование общего содержимого.Как организовать? - PullRequest
0 голосов
/ 11 февраля 2019

Я не совсем уверен, как мне справиться с этим вообще.

Вот ситуация:
Я планирую услугу, где можно делиться контентом с другими людьми.

  • В настоящее время я назову Лицо, которое делится контентом Алиса , и двух лиц, которым этот контент доступен Боб и Carol .Алиса является акционером ;а Боб и Кэрол наблюдатели
  • Алиса делится некоторыми документами…:
    • Документ A не передается никому
    • Документ B предоставляется Бобу
    • Документ C предоставляется Кэрол
    • Документ D предоставлен Бобу и Кэрол
    • Документ E предоставлен Бобу и планируетсядля совместного использования с Кэрол в будущем
    • Документ F не передается никому, и в будущем планируется передать его Бобу
    • Документ G предоставлено Бобу, но в будущем должно быть предоставлено Кэрол вместо Боба
    • ...

Конечно, Боб и Кэрол также могут быть участниками, а Алиса также может быть наблюдателем.

Давайте предположим, что Боб и Кэрол могут не быть экспертами в области ИТ, поэтому они не будут знать, что делатьс открытым / закрытым ключом paiр.Алиса как участник является активным подписчиком системы, а Боб и Кэрол приглашены в систему, поэтому они не будут знать слишком много.Поэтому шифрование / дешифрование должно осуществляться в фоновом режиме автоматически.Это будет означать, что закрытый ключ будет храниться где-то на сервере, или нет?

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

  • Где я должен хранить открытые / закрытые ключи, чтобы только Алиса, Боб или Кэрол могли использовать их и только, если им позволено?
  • Должен ли я создать пару открытых / закрытых ключей для каждого пользователя, каждой пары «разделяющий / наблюдающий» или для каждого документа?
  • Должен ли я расшифровывать документыв браузере (Angular) или уже на стороне сервера (express / NodeJS)?
  • Должны ли ключи (хотя бы частные) быть зашифрованы сами по себе?
  • Документы должны храниться на Amazon S3.Должен ли я создать корзину для каждого пользователя?
  • Как я могу убедиться, что могу отказать в любом доступе, который я предоставил до

Технический стек не имеет большого значения, но это MEAN (MongoDB, Express, Angular2, NodeJS).Также используется магазин NgRx.

Мне не нужна полноценная программа, а только несколько толчков в правильном направлении.Если у вас есть один под рукой, я не откажусь от него:)

Редактировать: Сводка

Вот краткая сводка сценария:

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

Редактировать 2:

О, и кстати, Алиса и Боб или Алиса и Кэрол не должны быть в сети в одно и то же время,или в тот момент, когда Алиса поделится документами.На самом деле они доступны для использования через несколько лет.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

вы не думаете, что я могу добавить дополнительную безопасность, сделав этот процесс более сложным?

При усложнении процесса обычно возникают более сложные ошибки.

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

уже на стороне сервера (экспресс / NodeJS)

Хорошо, у вас естьприложение на стороне сервера, чтобы упростить задачу.

Учитывая ваши требования, вам может не потребоваться управлять доступом непосредственно на S3.Чтобы упростить вещи - вы можете создать приложение, которое решает, какой пользователь может или не может получить доступ к контенту.Затем приложение может предоставить контент либо напрямую (например, проксирование контента S3), либо предоставить подписанный URL для доступа к контенту.Это предполагает, что вы храните учетные данные приложения в безопасности.

Документы должны быть зашифрованы, чтобы их могли прочитать только Алиса и Боб....Поэтому шифрование / дешифрование должно осуществляться в фоновом режиме автоматически.

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

Если у вас есть такой под рукой, я не откажусь от него:)

Возможно, вам придется проверить любые решения по управлению контентом или порталу, они предоставляют доступ иобмен контентом по умолчанию (Aflresco, Liferay, ...) или с помощью любой возможной системы CMS

0 голосов
/ 11 февраля 2019

Вы должны:

  • Шифровать данные в состоянии покоя
  • Убедитесь, что ваше приложение предоставляет доступ к файлам только авторизованным пользователям

Обычно такие системы, как Amazon S3создайте ключ шифрования для каждого объекта для шифрования файлов.Затем этот ключ шифруется главным ключом.Главный ключ хранится в системе управления ключами и никогда не может быть экспортирован.

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

Amazon S3 может управлять всем вышеперечисленным для вас автоматически, используя шифрование на стороне сервера и AWS.Служба управления ключами.

...