Рейтинг:0

Схема управления пользовательскими ключами: BYOK, только клиентские ключи и их комбинация

флаг us

Мы разрабатываем веб-приложение, в котором пользователи могут обмениваться документами друг с другом. Конечная цель — добиться нулевого доверия, необходимого пользователям, т. е. шифрование на стороне клиента гарантирует, что серверы (или любые посредники) не смогут увидеть данные в открытом виде. (Я знаю о потенциальных недостатках решения для шифрования на основе браузера. У нас есть идеи, как противостоять некоторым проблемам, я могу задать их здесь позже, но я не хочу загрязнять этот вопрос.)

Базовая схема нулевого доверия будет выглядеть так:

  1. Если пользователь регистрируется (через OAuth2), его браузер генерирует случайную парольную фразу из 32 символов base-62.
  2. Эта парольная фраза используется для получения открытого/закрытого ключа с помощью PBKDF2.
  3. Открытый ключ отправляется на сервер, пользователю предлагается случайная парольная фраза, сгенерированная под 1., чтобы он мог ее записать.
  4. Мы генерируем случайный ключ для каждого документа, шифруем его открытыми ключами всех участников и сохраняем вместе с документом.

Закрытый ключ и начальная случайная фраза-пароль (1.) никогда не покидают клиент, поэтому нет возможности расшифровать данные на стороне сервера.

НО: это не очень удобно для конечного пользователя. Если они потеряют ключ (а они наверняка потеряют), то у них не будет доступа ни к одному из их документов. Если они входят в систему на другом устройстве, они должны ввести парольную фразу. Мы имеем дело с очень разнообразной группой пользователей, и большинство из них совсем не «технически подкованы», да и не должны быть таковыми.

Существуют решения BYOK, подобные тем, которые используют СПП Google Workspace. Но AFAICS пользователь должен будет пройти аутентификацию в другом сервисе, чтобы использовать наш сервис. Это тоже не удобно и, возможно, просто непонятно нашим пользователям.

Учитывая, что мы контролируем аутентификацию — она обеспечивается Auth0 — можем ли мы каким-либо образом хранить закрытый ключ пользователя где угодно (даже у третьих лиц) без необходимости двойной аутентификации пользователя?

Кроме того, мы рассматриваем режим, который мы называем «мягким» режимом, в котором мы храним закрытый ключ от имени пользователя, используя совершенно отдельную инфраструктуру, используя HSM. Это, конечно, нарушит принцип нулевого доверия, но, по крайней мере, защитит от утечки данных при утечке зашифрованных документов. Пользователи всегда могут выбрать «жесткий» режим. (Существует проблема, если документ используется совместно пользователем, использующим «жесткий» режим, и пользователем, использующим «мягкий» режим, в основном нарушая обещание, данное пользователю, использующему «жесткий» режим. опционально разрешите пользователю установить, что все участники должны использовать «жесткий» режим.)

Имеет ли это смысл? Есть ли какие-либо указания для дальнейшего чтения? Пожалуйста, извините меня, если я не смог быть кратким или достаточно ясным.

Ответить или комментировать

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