Контекст
Недавно у меня была лекция по криптографии, и мы обсуждали сохранение критических элементов в памяти.Как правило, библиотека C / C ++ Libsodium предлагает очистить любой буфер, содержащий конфиденциальную информацию, например секрет ( ref ).Я знаю, что GuardedString
поддерживается массивом байтов, и документы рекомендуют вызывать метод dispose
, если сохраненный секрет больше не используется, который заполняет массив байтов, используя Arrays.fill
.
Вопрос
Гарантирует ли JVM, что значения байтового массива исчезли при перезаписи или исходные значения могут остаться в памяти при определенных условиях?Например, неиспользуемые / не имеющие ссылки String
сохраняются в пуле строк Java до тех пор, пока не будет запущена сборка мусора.Существуют ли подобные кэширование или механизмы для других типов, такие как байтовый массив, которые могут скомпрометировать секрет, который должен быть удален из GuardedString
?Любая ссылка в спецификации JVM?
Большое спасибо!