Когда говорим о безопасности приложений, обычно вспоминаем TLS, шифрование данных и OAuth.

Но что происходит с секретами - паролями, токенами или приватными ключами - когда они уже находятся в оперативной памяти?

Освобождение памяти или выход переменной из области видимости ещё не означает, что её содержимое мгновенно исчезло. Байты могут оставаться в памяти до тех пор, пока эта область не будет перезаписана. Для чувствительных данных это создаёт лишний риск - например, при анализе дампа памяти.

В Rust для таких случаев мне нравится использовать zeroize.

Идея простая: когда секрет больше не нужен, его содержимое явно перезаписывается нулями.

Чем мне нравится этот подход:

Предсказуемость. Можно явно гарантировать очистку чувствительных данных, в том числе при Drop.

Защита от оптимизаций компилятора. Обычное зануление памяти компилятор теоретически может посчитать ненужным и удалить. zeroize использует volatile-записи и барьеры компилятора, чтобы этого не произошло.

Хорошо сочетается с моделью владения Rust. Жизненный цикл значения и момент его уничтожения уже хорошо контролируются языком, а zeroize позволяет добавить к этому очистку самих данных.

Безопасность заканчивается не на TLS и авторизации. Иногда важно подумать и о том, что остаётся после ваших данных в RAM.

Использовали zeroize или похожие механизмы в своих проектах?

#rust #backend #security

Когда говорим о безопасности приложений, обычно вспоминаем TLS, шифрование данных и OAuth | Сетка — социальная сеть от hh.ru