Глава 9. Проблемы реализации. Часть I
нию структуры материала, в частности к перемещению в нем примесей [38].
Как следствие этого, злоумышленник, имеющий физический контроль над
памятью, обладает потенциальной возможностью восстановления секретных
данных.
Можно долго спорить о том, действительно ли описанная ситуация пред-
ставляет сколько-нибудь значительную угрозу секретности данных, однако
нам этот вопрос кажется важным. Если ваш компьютер когда-нибудь под-
вергнется опасности (например, будет украден), вы, конечно же, не захотите,
чтобы злоумышленник добрался и до ваших данных, которые находились
в памяти компьютера и затем были стерты. Для достижения этой цели нуж-
но заставить компьютер забыть информацию.
Пока что нами придумано лишь частичное решение этой проблемы, кото-
рое срабатывает только при наличии определенных (и достаточно разумных)
предположений об оперативной памяти. Это решение, которое мы назвали
Boojum
3
, подходит для сравнительно небольших объемов данных, таких, как
ключи. Пусть
m
— это данные, которые нужно сохранить в оперативной па-
мяти. Вместо того чтобы сохранять
m
, мы генерируем случайную строку
R
и сохраняем значения
R
и
R
⊕
m
. Эти значения сохраняются в различных
областях памяти, по возможности расположенных не слишком близко друг
от друга. Хитрость состоит в том, чтобы регулярно изменять значение
R
. Че-
рез одинаковые промежутки времени (скажем, 100 мс) мы генерируем новое
случайное значение
R
0
и обновляем содержимое памяти, сохраняя значения
R
⊕
R
0
и
R
⊕
R
0
⊕
m
. Это гарантирует, что поверх каждого бита памяти будет
перезаписана случайная последовательность битов. Чтобы очистить память,
мы просто создаем новое
m
, значение которого равно нулю. В результате
этого в обеих областях памяти окажутся два равных случайных значения.
Чтобы считать необходимую информацию из упомянутых областей памя-
ти, нужно считать оба значения и сложить их с помощью операции XOR.
Результатом этого сложения и будет значение
m
. Чтобы перезаписать
m
,
следует прибавить новое значение к
R
и записать полученный результат во
вторую область памяти.
Необходимо тщательно следить за тем, чтобы биты значений
R
и
R
⊕
m
не
оказались смежными на микросхеме памяти. Если не известно, как функци-
онирует микросхема памяти, это может быть непростой задачей. В большин-
стве типов памяти, однако, биты данных хранятся в узлах прямоугольной
решетки, причем одни биты адреса области памяти указывают на строку,
а другие — на столбец. Если адреса двух элементов данных различаются
на 0x5555, тогда с очень высокой долей вероятности эти данные не являются
смежными. (Разумеется, это предполагает, что микросхема памяти не исполь-
зует четные биты адреса в качестве номера строки, а нечетные — в качестве
3
По имени Буджума — героя книги Льюиса Кэрролла “Охота на снарка” [15].
9.3. Как сохранить секреты
165
номера столбца, но подобная архитектура нам никогда не попадалась.) Более
удачным решением является случайный выбор двух адресов в очень большом
адресном пространстве. В этом случае вероятность того, что две выбранные
области памяти окажутся смежными, чрезвычайно мала вне зависимости от
реальной структуры микросхемы памяти.
Как уже отмечалось, данное решение является частичным и к тому же
достаточно громоздким. Оно применимо только к небольшим объемам дан-
ных — в противном случае функция обновления оказалась бы слишком до-
рогостоящей. Тем не менее использование этого решения гарантирует, что на
микросхеме памяти не будет физической точки, которая длительное время
будет находиться под напряжением или без напряжения (в зависимости от
значений секретных данных).
Наше решение все еще не позволяет гарантировать полную очистку памя-
ти. Если вы прочитаете документацию к микросхеме памяти, то не найдете
там спецификаций, описывающих, как предотвратить удержание данных, ко-
гда-либо в ней хранившихся. Разумеется, ни одна микросхема не в состоянии
удержать абсолютно все предыдущие данные, тем не менее это показывает,
что мы можем достичь не более чем эвристической безопасности.
До сих пор, описывая Boojum, мы говорили только о главной памяти.
Это же решение применимо и к кэш-памяти за исключением того, что вы не
сможете контролировать, в каком узле микросхемы будут храниться данные.
К сожалению, Boojum не подходит для регистров процессора, однако они
применяются так часто для хранения огромного количества самой разной
информации, что возникновение эффекта удержания весьма маловероятно.
С другой стороны, регистры расширения, такие, как регистры с плавающей
запятой или дополнительные регистры MMX, используются гораздо реже,
а значит, представляют собой потенциальную проблему.
Если у вас есть большие объемы данных, которые нужно сохранить в сек-
рете, тогда сохранение в оперативной памяти двух значений и регулярное
прибавление к ним новых случайных строк может оказаться слишком дорого-
стоящим решением. В этом случае предпочтительнее зашифровать большой
блок данных и сохранить в памяти шифрованный текст. Избежать “удержа-
ния” должен только ключ, для сохранения которого можно воспользоваться
алгоритмом Boojum. Более подробно это рассматривается в статье [23].
9.3.5
Доступ других программ
Сохранение секретных данных на компьютере сопряжено еще с одной про-
блемой — возможностью доступа к данным других программ, установленных
на том же компьютере. Некоторые операционные системы разрешают сов-
местное использование памяти различными программами. Если другая про-
грамма может считывать ваши секретные ключи, вы в опасности. Зачастую
166
Достарыңызбен бөлісу: |