Как лучше хранить "секретную" инфу в базе
наполовину
А так?
Действующие лица: пользователь А Па, пользователь Б Пб. Ресурс Р1. Хранилище зашифрованных ресурсов ХР, хранилище зашифрованных ключей ХК.
Публичный ключ Па: ПубКПа, приватный: ПривКПа. (аналогично для Б)
Ключ Р1: КР1 (а тут пусть будет пока синхронное)
Па: хочу создать жутко секретную запись с телефоном любовницы Р1. Жмакает кнопку на клиенте.
Клиент: бляааа... Эй, ХР, у тебя ресурс Р1 есть?
ХР: не-а
Клиент: да что б ему... Делает новый КР1, шифрует КР1 в ЗКР1_a. Эй, ХК сохрани новый ключ для ресурса Р1, для пользователя Па.
ХК: да пажалста (Па известен системе). Сохраняет ЗКР1_а
Клиент: Так, юзер, вводи свои данные.
Па: вот
Клиент: шифрует Р1 ключом КР1, эй, ХР, сохрани-ка ресурс. Владелец: Па. Передаёт ЗР1 на ХР.
ХР: ок, сохранил.
Клиент: забывает КР1, ЗКР1_а, ЗР1 и Р1. Э, юзер, всё сохранил!
Па: надо дружбану показать, по приколу. Слышь, клиент, расшарь телефон Р1 с Пб.
Клиент: ХК, ты Пб знаешь? Дай его публичный ключ.
ХК: на. Возвращает ПубКПб
Клиент. Ага. И ЗКР1_а тоже дай.
ХК: на
Клиент: юзер, вводи свой сверхсекретный ПривКПа. Смотри, не ошибись.
Па: 1234
Клиент: угу. Расшифровывает ЗКР1_а, получает КР1. Берёт ПубКПб и делает ЗКР1_б. ХК, получи ключ.
ХК: ЗКР1_б сохранён
Всё. Теперь Пб сможет тоже прочитать или записать Р1. Аутентификацию и авторизацию пока не рассматриваем.