9.3. Как сохранить секреты
163
9.3.4
Удерживание данных в памяти
Очень многих удивляет тот факт, что простое перезаписывание данных
не обязательно приводит к их удалению. Детали этого процесса в некоторой
степени зависят от типа используемой памяти, однако в общем случае, если
данные помещаются в какую-либо область памяти, эта область начинает по-
тихоньку “заучивать” или “удерживать” данные. Когда вы перезаписываете
данные или выключаете компьютер, старые данные теряются не полностью.
В зависимости от обстоятельств, простое выключение и включение питания
может восстановить некоторые или все старые данные. Другие типы памяти
могут “вспомнить” старые данные, если доступ к ним осуществляется в те-
стовых режимах (часто незадокументированных) [38].
Причина этого феномена кроется в принципах работы нескольких меха-
низмов. Если одни и те же данные на протяжении достаточно долгого вре-
мени хранятся в одной и той же области статической оперативной памяти
(Static RAM — SRAM), они будут рассматриваться как предпочтительное со-
стояние загрузки этой памяти. Наш друг столкнулся с этой
проблемой мно-
го лет назад при сборке компьютера в домашних условиях [9]. Он написал
BIOS, которая использовала магическое число (magic value), расположенное
в конкретной области памяти, чтобы определить, какая выполняется переза-
грузка: “холодная” (cold reboot) или “горячая” (warm reboot)
2
. Через некото-
рое время машина отказалась загружаться после выключения и повторного
включения компьютера, потому что оперативная память “выучила” магиче-
ское число, в результате чего каждая перезагрузка воспринималась системой
как горячая. Поскольку в процессе горячей перезагрузки не инициализиро-
вались некоторые нужные переменные, система не могла загрузиться. Для
устранения этой
проблемы пришлось поменять местами некоторые модули
памяти, чтобы SRAM не могла “вспомнить” магическое число, которое она
“выучила”. Для нас это послужило уроком: оперативная память сохраняет
больше данных, чем мы думаем.
Аналогичные, хотя и несколько более сложные процессы происходят с ди-
намической оперативной памятью (Dynamic RAM — DRAM). Кодирование
битов в памяти DRAM выполняется путем помещения небольшого электри-
ческого заряда в крошечный конденсатор. Изоляционный материал вокруг
пластин конденсатора подвергается напряжению, что приводит к измене-
2
В те времена компьютеры, собранные в домашних условиях, программировались путем
непосредственного введения двоичной формы машинного языка, что, конечно же, приводи-
ло к появлению массы ошибок. Один из гарантированных
способов восстановить машину
после “падения” программы заключался в перезагрузке компьютера. Холодная перезагруз-
ка — это выключение и повторное включение компьютера. Горячая перезагрузка — это пе-
резагрузка наподобие той, что выполняется при нажатии кнопки Reset. В процессе горячей
перезагрузки система не выполняет повторную инициализацию всего состояния, а значит,
не уничтожает настройки, сделанные пользователем.