Я зашифровал данные в AES-GCM
с крипто
API. вектор инициализации
затем добавляется к данным, образуя уникальную зашифрованную строку, хранящуюся в локальном хранилище. Наконец, секретный ключ хранится в IndexedDB.
Поскольку секретный ключ нельзя извлечь, я считаю, что он достаточно безопасен для большинства случаев использования. Насколько я понимаю, злоумышленнику придется ограбить как локальное хранилище, так и индексированную базу данных, найти вектор инициализации внутри данных, преобразовать его в буферный массив, а затем напрямую выполнить расшифровку в браузере перед отправкой данных обратно на свой сервер. . Действительно, кажется, что неизвлекаемый характер секретного ключа означает, что он не сможет отправить необработанный секретный ключ на свой сервер и, следовательно, не сможет завершить расшифровку.
Но мне сказали, что я очень ошибался, и что моя стратегия была на самом деле едва ли более безопасной, чем возможность непосредственного чтения всех данных в локальном хранилище.
Итак, как я могу улучшить этот рабочий процесс? Неужели это так небезопасно? Можно ли зашифровать и расшифровать секретный ключ благодаря уникальному паролю, предоставленному пользователем? Пароль будет в .env
файл и, таким образом, никогда не подвергается атаке. Как бы вы это сделали?
Вот как генерируется секретный ключ:
crypto.subtle.generateKey(
{имя: "AES-GCM", длина: 256},
ЛОЖЬ,
["зашифровать", "расшифровать"]
);
Спасибо за вашу помощь!