Я не совсем уверен, как мне справиться с этим вообще.
Вот ситуация:
Я планирую услугу, где можно делиться контентом с другими людьми.
- В настоящее время я назову Лицо, которое делится контентом Алиса , и двух лиц, которым этот контент доступен Боб и Carol .Алиса является акционером ;а Боб и Кэрол наблюдатели
- Алиса делится некоторыми документами…:
- Документ A не передается никому
- Документ B предоставляется Бобу
- Документ C предоставляется Кэрол
- Документ D предоставлен Бобу и Кэрол
- Документ E предоставлен Бобу и планируетсядля совместного использования с Кэрол в будущем
- Документ F не передается никому, и в будущем планируется передать его Бобу
- Документ G предоставлено Бобу, но в будущем должно быть предоставлено Кэрол вместо Боба
- ...
Конечно, Боб и Кэрол также могут быть участниками, а Алиса также может быть наблюдателем.
Давайте предположим, что Боб и Кэрол могут не быть экспертами в области ИТ, поэтому они не будут знать, что делатьс открытым / закрытым ключом paiр.Алиса как участник является активным подписчиком системы, а Боб и Кэрол приглашены в систему, поэтому они не будут знать слишком много.Поэтому шифрование / дешифрование должно осуществляться в фоновом режиме автоматически.Это будет означать, что закрытый ключ будет храниться где-то на сервере, или нет?
Видите ли, в этих сценариях достаточно много вариантов использования, и я не уверен вхороший способ организовать это.
- Где я должен хранить открытые / закрытые ключи, чтобы только Алиса, Боб или Кэрол могли использовать их и только, если им позволено?
- Должен ли я создать пару открытых / закрытых ключей для каждого пользователя, каждой пары «разделяющий / наблюдающий» или для каждого документа?
- Должен ли я расшифровывать документыв браузере (Angular) или уже на стороне сервера (express / NodeJS)?
- Должны ли ключи (хотя бы частные) быть зашифрованы сами по себе?
- Документы должны храниться на Amazon S3.Должен ли я создать корзину для каждого пользователя?
- Как я могу убедиться, что могу отказать в любом доступе, который я предоставил до
Технический стек не имеет большого значения, но это MEAN (MongoDB, Express, Angular2, NodeJS).Также используется магазин NgRx.
Мне не нужна полноценная программа, а только несколько толчков в правильном направлении.Если у вас есть один под рукой, я не откажусь от него:)
Редактировать: Сводка
Вот краткая сводка сценария:
Алиса должна бытьвозможность обмениваться документами с Бобом.Документы должны быть зашифрованы, чтобы их могли прочитать только Алиса и Боб.Обмен осуществляется через веб-приложение в браузере.
Редактировать 2:
О, и кстати, Алиса и Боб или Алиса и Кэрол не должны быть в сети в одно и то же время,или в тот момент, когда Алиса поделится документами.На самом деле они доступны для использования через несколько лет.