Как уничтожить ключи с помощью криптографического API Subtle?
В WebCrypto / Subtle crypto API вы можете генерировать ключи и многое другое. Однако, похоже, явно не хватает
.destroyKey()
или что-то в этом роде.
Очищаются ли ключи, когда их счетчик ссылок достигает нуля или что-то в этом роде? Нет возможности явно уничтожить / удалить ключ из памяти?
Обратите внимание, что меня беспокоит не безопасность, поскольку я знаю, что это не принесет большого преимущества безопасности, хотя меня беспокоят утечки ресурсов и тому подобное. Странно не иметь возможности убрать за собой явным образом.
1 ответ
Спецификация веб-криптографии пишет:
Авторы должны знать, что эта спецификация не налагает нормативных требований к реализациям в отношении того, как хранится базовый материал криптографического ключа. Единственное требование состоит в том, что ключевой материал не предоставляется скрипту, за исключением использования операций exportKey и wrapKey.
Эта спецификация не предъявляет нормативных требований к тому, как реализации обрабатывают ключевой материал после того, как все ссылки на него исчезнут. То есть соответствующие пользовательские агенты не обязаны обнулять ключевой материал, и он все еще может быть доступен в хранилище устройства или в памяти устройства, даже после того, как исчезнут все ссылки на CryptoKey.
То есть пользовательский агент может выбрать отбросить ключевые данные, как только он станет подходящим для сборки мусора, но может также выбрать, чтобы данные оставались дольше, например, пока весь контекст просмотра не будет отброшен при переходе на другую страницу или закрытие вкладки браузера.
На практике разница вряд ли будет иметь значение: вы можете разместить тысячи, если не миллионы ключей в памяти любого устройства с возможностью подключения к Интернету, поэтому исчерпание памяти из-за отложенного сбора ключевого материала крайне маловероятно. А поскольку разработчики браузеров заинтересованы в низком уровне использования памяти, большинство из них решат освободить ключевой материал после сбора
CryptoKey
.