Javascript / Браузерное шифрование: используйте Yubikey
Допустим, я хочу зашифровать данные внутри браузера (через JavaScript, используя PGP). Поскольку хранить ключи в браузере (LocalStorage) невозможно, я хочу, чтобы они были на внешнем устройстве, например, YubiKey, которое обеспечивает шифрование / дешифрование PGP.
Таким образом, пользователь пишет некоторый секретный текст, вставляет его в свой YubiKey, нажимает какую-то кнопку, секретный текст отправляется на YubiKey, который его шифрует (в то время как ключ для шифрования остается на YubiKey, а затем возвращает зашифрованный текст. То же самое для расшифровки,
Что-то подобное технически возможно? Если нет, где еще я буду хранить ключи для шифрования?
1 ответ
В настоящее время нет способа получить доступ к такому устройству с помощью браузера. Есть некоторые планы по добавлению такой функции, но она все еще находится в стадии разработки редактора, поэтому может потребоваться некоторое время, пока она выйдет в качестве стандарта. Конечно, не каждый браузер может не поддерживать эту функцию, когда она станет стандартной.
Что касается вашего вопроса, я думаю, вы могли бы попытаться сохранить ключ на сервере, если вам действительно нужна хорошая защита.
При первом генерировании ключа пользователь может создать своего рода учетную запись с паролем и случайным GUID, сгенерированным сервером (чтобы убедиться, что на сервере не будет двойных GUID - я знаю, что шансов почти нет Такая ситуация может возникнуть, но это также хороший уровень дополнительной защиты). Вы можете сохранить GUID на стороне клиента (например, в localStorage), чтобы пользователю не каждый раз предлагался запрос. Однако пользователь должен заметить, что ключ должен быть сохранен где-то на диске на случай, если localStorage очищен. Затем, когда учетная запись будет создана, ключ будет безопасно передан (через https) на сервер, имя ключа будет сгенерированным GUID.
После создания учетной записи и получения ключа от сервера браузер должен будет выполнить запрос ajax - пользователь должен указать свой пароль и идентификатор ключа (GUID), если он не существует в localStorage. Как только сервер сопоставит идентификатор ключа с паролем, он вернет ключ. Вы можете расшифровать свой текст, используя пароль и полученный ключ.