9.3. Как сохранить секреты
161
злоумышленника? Нет, мы определенно не можем допустить, чтобы наши
секреты записывались в файл подкачки
1
.
Как же помешать системе виртуальной памяти записывать наши данные
на диск? В некоторых операционных системах есть специальные системные
вызовы. С их помощью можно уведомить систему виртуальной памяти о том,
что содержимое указанных областей памяти не должно подвергаться переме-
щению в файл подкачки. Иногда (хотя, к сожалению, крайне редко) нам все-
таки попадаются операционные системы, которые поддерживают безопасную
подкачку. В этом случае данные, перемещаемые в файл подкачки, подверга-
ются криптографической защите. Если ваша операционная система не обла-
дает ни одной из этих возможностей, считайте, что вам не повезло. Громко
пожалуйтесь на нее окружающим и сделайте все, что в ваших силах.
Предположим, вы можете заблокировать память и предотвратить пере-
мещение ее содержимого в файл подкачки. Но какую же память следует
блокировать? Разумеется, всю ту память, в которой могут храниться наши
секретные данные. Тут возникает еще одна проблема. Во многих средах про-
граммирования практически невозможно определить, где именно хранятся те
или иные данные. Объекты часто содержатся в “куче”, константы — в стати-
ческой памяти, а большинство локальных переменных оказываются в стеке.
Определить более точное расположение данных при этом может быть затруд-
нительно, да и не исключено появление ошибок. Вероятно, более удачным ре-
шением будет блокирование всей памяти, занятой приложением. Конечно же,
это не так просто, как кажется на первый взгляд, поскольку может привести
к потере целого ряда служб операционной системы, таких, как автоматиче-
ски выделяемый стек. Кроме того, блокирование всей памяти приложения
делает систему виртуальной памяти неэффективной.
Вообще говоря, правильное решение не должно быть таким сложным.
В действительности нам нужна система виртуальной памяти, которая защи-
щает конфиденциальность данных. Это подразумевает серьезное изменение
операционной системы и, разумеется, не составляет прерогативы. Даже если
следующая версия используемой вами операционной системы будет обладать
подобной возможностью, придется тщательно проверить, действительно ли
система виртуальной памяти
способна сохранить данные в секрете.
9.3.3
Кэш
Современные компьютеры не ограничены каким-то одним типом памя-
ти. Они обладают целой иерархией типов. В самом низу иерархии находится
1
В действительности никогда не следует записывать секретные данные на какой-либо
постоянный носитель, предварительно не зашифровав их, но об этом мы поговорим позже.