Глава 9. Проблемы реализации. Часть I
в процессорах наподобие Pentium, которые страдают от извечного “дефицита”
регистров, вероятность того, что данные продержатся в регистрах на протя-
жении хоть сколько-нибудь долгого времени, крайне мала.
Во время переключения контекста (когда операционная система переклю-
чается с одной работающей программы на другую) значения, находящиеся
в регистрах процессора, перемещаются в оперативную память, где могут
оставаться на протяжении долгого времени. Насколько мы знаем, эта про-
блема не имеет иного решения, кроме внесения исправлений в саму операци-
онную систему, что будет гарантировать конфиденциальность этих данных.
9.3.2
Файл подкачки
Большинство операционных систем (включая все текущие версии Win-
dows и все версии UNIX) используют принцип виртуальной памяти для уве-
личения числа программ, которые могут быть запущены параллельно. В про-
цессе работы программы не все ее данные хранятся в физической оператив-
ной памяти. Некоторые из них переносятся в файл подкачки, находящийся
на жестком диске. Когда программа пытается осуществить доступ к данным,
которых нет в оперативной памяти, ее выполнение прерывается. Система вир-
туальной памяти извлекает необходимые данные из файла подкачки и пере-
носит их обратно в оперативную память, после чего выполнение программы
может быть продолжено. Если же системе виртуальной памяти понадобится
больше свободной памяти, она извлекает из оперативной памяти произволь-
ный сегмент данных и переносит его в файл подкачки.
Разумеется, большинство систем виртуальной памяти не предпринимают
каких-либо серьезных попыток, чтобы сохранить данные в секрете или за-
шифровать их перед перенесением на диск. Практически все программные
продукты ориентированы на коллективную работу единомышленников, а не
на противоборствующее окружение, с которым имеют дело криптографы.
Проблема состоит в том, что система виртуальной памяти может взять ка-
кие-нибудь данные нашей программы и записать их на жесткий диск в файл
подкачки. Программа об этом даже и не узнает. Предположим, что в файл
подкачки были перенесены секретные ключи. Если компьютер даст сбой или
неожиданно будет выключен, данные останутся на диске. Следует отметить,
что большинство операционных систем оставляют данные на диске и при
корректном выключении компьютера. Механизма очищения файла подкач-
ки, как правило, не существует, поэтому данные могут оставаться на диске
до бесконечности. А что, если файл подкачки когда-нибудь попадет в руки
9.3. Как сохранить секреты
161
злоумышленника? Нет, мы определенно не можем допустить, чтобы наши
секреты записывались в файл подкачки
1
.
Как же помешать системе виртуальной памяти записывать наши данные
на диск? В некоторых операционных системах есть специальные системные
вызовы. С их помощью можно уведомить систему виртуальной памяти о том,
что содержимое указанных областей памяти не должно подвергаться переме-
щению в файл подкачки. Иногда (хотя, к сожалению, крайне редко) нам все-
таки попадаются операционные системы, которые поддерживают безопасную
подкачку. В этом случае данные, перемещаемые в файл подкачки, подверга-
ются криптографической защите. Если ваша операционная система не обла-
дает ни одной из этих возможностей, считайте, что вам не повезло. Громко
пожалуйтесь на нее окружающим и сделайте все, что в ваших силах.
Предположим, вы можете заблокировать память и предотвратить пере-
мещение ее содержимого в файл подкачки. Но какую же память следует
блокировать? Разумеется, всю ту память, в которой могут храниться наши
секретные данные. Тут возникает еще одна проблема. Во многих средах про-
граммирования практически невозможно определить, где именно хранятся те
или иные данные. Объекты часто содержатся в “куче”, константы — в стати-
ческой памяти, а большинство локальных переменных оказываются в стеке.
Определить более точное расположение данных при этом может быть затруд-
нительно, да и не исключено появление ошибок. Вероятно, более удачным ре-
шением будет блокирование всей памяти, занятой приложением. Конечно же,
это не так просто, как кажется на первый взгляд, поскольку может привести
к потере целого ряда служб операционной системы, таких, как автоматиче-
ски выделяемый стек. Кроме того, блокирование всей памяти приложения
делает систему виртуальной памяти неэффективной.
Вообще говоря, правильное решение не должно быть таким сложным.
В действительности нам нужна система виртуальной памяти, которая защи-
щает конфиденциальность данных. Это подразумевает серьезное изменение
операционной системы и, разумеется, не составляет прерогативы. Даже если
следующая версия используемой вами операционной системы будет обладать
подобной возможностью, придется тщательно проверить, действительно ли
система виртуальной памяти способна сохранить данные в секрете.
9.3.3
Кэш
Современные компьютеры не ограничены каким-то одним типом памя-
ти. Они обладают целой иерархией типов. В самом низу иерархии находится
1
В действительности никогда не следует записывать секретные данные на какой-либо
постоянный носитель, предварительно не зашифровав их, но об этом мы поговорим позже.
162
Достарыңызбен бөлісу: |