Я пытаюсь понять, как создать оптимальное решение для моего проекта. Я сделал эту простую картинку в Photoshop, чтобы попытаться проиллюстрировать проблему и то, как я хочу ее (если это возможно).
Иллюстративное изображение
Я также попытаюсь объяснить это на основе рисунка.
Прежде всего, у нас есть пара объектов слева, все эти объекты шифруются с помощью собственного ключа шифрования (EKey на рисунке), а затем сохраняются в базе данных. С другой стороны, у нас есть разные пользователи, помещенные в роли (у одного пользователя может быть много ролей), и роли связаны с разными объектами. Таким образом, один человек имеет доступ только к объектам, которые предоставляет роль. Так, например, роль A может иметь доступ к объектам A и B. Роль B имеет доступ только к объекту C, а роль C имеет доступ ко всем объектам.
Ничего странного в этом нет? У разных ролей есть разные объекты, к которым они могут получить доступ.
Теперь к проблемной части.
Каждый пользователь должен войти в систему со своим именем пользователя / паролем, а затем он / она получает доступ к объектам, которые предоставляют его / ее роли. Все объекты зашифрованы, поэтому ей нужно как-то получить ключ расшифровки. Я не хочу хранить ключ шифрования в виде текстовой строки на сервере. Он должен быть, если возможно, расшифрован с использованием пароля пользователя (вместе с ролью) или аналогичным. Таким образом, вы должны быть пользователем на сервере, чтобы расшифровать объект и работать с ним.
Я думал о создании системы шифрования с открытым / закрытым ключом, но я как бы застрял в том, как дать различным пользователям ключ дешифрования для объектов. Поскольку мне нужно иметь возможность перемещать пользователей в роли и из ролей, добавлять новых пользователей, добавлять новые роли и создавать / удалять объекты.
Будет один администратор, который затем добавит некоторые данные, чтобы позволить пользователям в этой роли получить ключ дешифрования для дешифрования объекта.
Ничто не является статичным, и я пытаюсь получить представление о том, как это можно построить, или если есть гораздо лучшее решение.
Единственными критериями являются:
- зашифрованные объекты.
-Декодер не должен храниться в виде текста.
- Разные пользователи имеют доступ к различным объектам.
-Не нужно иметь роли.