9.3. Как сохранить секреты
165
номера столбца, но подобная архитектура нам никогда не попадалась.) Более
удачным решением является случайный выбор двух адресов в очень большом
адресном пространстве. В этом случае вероятность того, что две выбранные
области памяти окажутся смежными, чрезвычайно мала вне зависимости от
реальной структуры микросхемы памяти.
Как уже отмечалось, данное решение является частичным и к тому же
достаточно громоздким. Оно применимо только к небольшим объемам дан-
ных — в противном случае
функция обновления оказалась бы слишком до-
рогостоящей. Тем не менее использование этого решения гарантирует, что на
микросхеме памяти не будет физической точки, которая длительное время
будет находиться под напряжением или без напряжения (в зависимости от
значений секретных данных).
Наше решение все еще не позволяет гарантировать полную очистку памя-
ти. Если вы прочитаете документацию к микросхеме памяти, то не найдете
там спецификаций, описывающих, как предотвратить удержание данных, ко-
гда-либо в ней хранившихся. Разумеется, ни одна микросхема не в состоянии
удержать абсолютно все предыдущие данные, тем не менее это показывает,
что мы можем достичь не более чем эвристической безопасности.
До сих пор, описывая Boojum, мы говорили только о главной памяти.
Это же решение применимо и к кэш-памяти за исключением того, что вы не
сможете контролировать, в каком узле микросхемы будут храниться данные.
К сожалению, Boojum не подходит для регистров процессора, однако они
применяются так часто для хранения огромного количества самой разной
информации, что возникновение эффекта удержания весьма маловероятно.
С другой стороны, регистры расширения, такие, как регистры с плавающей
запятой или дополнительные регистры MMX, используются гораздо реже,
а значит, представляют собой потенциальную проблему.
Если у вас есть большие объемы данных, которые нужно сохранить в сек-
рете, тогда сохранение в оперативной памяти двух значений и регулярное
прибавление к ним новых случайных строк может оказаться слишком дорого-
стоящим решением. В этом случае предпочтительнее зашифровать большой
блок данных и сохранить в памяти шифрованный текст. Избежать “удержа-
ния” должен только ключ, для сохранения которого можно воспользоваться
алгоритмом Boojum. Более подробно это рассматривается в статье [23].
9.3.5
Доступ других программ
Сохранение секретных данных на компьютере сопряжено еще с одной про-
блемой — возможностью доступа к данным других программ, установленных
на том же компьютере. Некоторые операционные системы разрешают сов-
местное использование памяти различными программами. Если другая про-
грамма может считывать ваши секретные ключи, вы в опасности. Зачастую