
- •Защита программ и забывающее моделирование на ram-машинах
- •Основные положения
- •Вводные замечания
- •Центральный процессор, имитирующий взаимодействие
- •Сокрытие модели доступа
- •Моделирование на забывающих ram-машинах
- •Модели и определения
- •Ram-машина как пара интерактивных машин
- •Дополнения к базовой модели и вероятностные ram-машины
- •Повторные выполнения ram-машины
- •Эксперименты с ram-машиной
- •Преобразования, защищающие программное обеспечение
- •Определения забывающей ram-машины и забывающего моделирования
- •Модели доступа
- •Моделирование с метками времени
- •Сведение защиты программ к забывающему моделированию на ram-машине
- •Нетривиальное решение задачи забывающего моделирования
- •Вводные замечания
- •Общее описание алгоритма «Квадратного корня»
- •Алгоритм кк
- •Реализация алгоритма «Квадратного корня»
- •Анализ алгоритма «Квадратного корня»
- •Заключительные замечания
Нетривиальное решение задачи забывающего моделирования
Вводные замечания
Отметим, что тривиальное решение для забывающего моделирования RAM-машины заключается в полном сканировании фактической памятиRAMk-машины для каждой операции доступа к виртуальной памяти (которая должна быть выполнена для оригинальнойRAM-машины). Далее описывается первое нетривиальное решение [GO,O] задачи забывающего моделированияRAMk-машины посредством вероятностнойRAM'k'. Это решение еще называется решением задачи «Квадратного корня» [GO].
Пусть заранее
известен объем памяти, обозначаемый m,
требуемый для соответствующей программы.
Ниже мы показываем, как моделировать
такуюRAM-машину посредством забывающейRAM-машиной с объемом памятиm+2таким образом, чтоtшагов оригинальнойRAM-машины моделируются заO(t
)
шагов на забывающейRAM-машине.
Всякий раз, когда мы говорим о доступе к виртуальномпамяти, мы подразумеваем доступ к памяти, требуемый для оригинальнойRAM-машины, которая моделируется. Доступ к памяти при забывающем моделированииRAM-машины рассматривается как фактический доступ к памяти. Кроме того, без потери общности, будем понимать, что виртуальная операция доступа состоит из обработки содержимого единственной ячейки памяти (т.е.,выборка(i), сопровождаемая командамисохранить(i,) для некоторогоi).
Общее описание алгоритма «Квадратного корня»
Интуитивно, чтобы полностью скрыть виртуальную модель доступа, мы должны скрыть следующее:
к каким виртуальным ячейкам осуществляется доступ и в каком порядке?
сколько раз к конкретной виртуальной ячейке осуществляется доступ (в случае, если к ней обращались)?
В первом случае достаточно каким-либо образом «перемешать» память так, чтобы противник не знал, какой фактический адрес памяти соответствует данному виртуальному адресу. Во втором случае, мы должны убедиться, что к любой («перемешанной») локальной памяти осуществляется доступ более одного раза. Высокоуровневые шаги моделирования следующие.
Алгоритм кк
1. Инициализация:Первыеm+слов при моделированииRAM-машины
расположены так, чтобы содержатьmвиртуальных адресов (к которым оригинальнаяRAM-машина обращается в процессе
выполнения) и
«фиктивных» слов (см. рис.5.1). Оставшиеся
слов распределены так, чтобы обслужить
дополнительную («краткосрочную») память.
Здесь и далее эта память обозначаетсязщт. (см. рис. 5.1).
2. Моделирование
шагов RAM-машины:До тех пор пока
моделированиеRAM-машины не остановится,
выполнить. (Моделирование выполняется
запериоды, каждый из которых состоит
изшагов оригинальной/моделируемой машины).
В каждом таком периоде выполняются
следующие шаги.
2.1. Случайно
переставить содержимое ячеек от 1
доm+.
То есть необходимо равномерно выбрать
перестановкунад целыми числами от 1 доm+
и забывающим образом переместить
содержимое виртуального словаiв
фактическое словоi.
Необходимо подчеркнуть, что памятьзщт(т.е., ячейки от (m+
+1)
до (m+2
))
не участвует в этом случайном перемешивании.
Таким образом, фактические адреса от 1
доm+
называютсяперемешанной памятью.
2.2. Моделировать
виртуальных операций доступа к памяти
оригинальной RAM-машины.В процессе
моделирования мы сохраняем значения
виртуальных операций доступа,
восстановленных и модифицированных в
течение текущего периода в памятизщт.
Так как размер памятизщтравняется
числу возможных операций доступа в
одном периоде, можно хранить все значения,
восстановленные в течение текущего
периода в памятизщт. Доступ к памяти
оригинальнойRAM-машины, скажем доступ
к виртуальному словуi, моделируется
следующим образом:
сканируется вся память зщти проверяется, находится ли содержимое виртуального словаiв одном из слов памятизщт. Подчеркнем, что здесь мы обращаемся к каждой ячейке памятизщтв предопределенном порядке независимо от того, находится ли там виртуальное слово, которое нам надо;
в случае, если i-тое виртуальное слово не найдено в памятизщт, мы восстанавливаем его из фактического слова(i), которое является текущей ячейкойi-того виртуального слова в течение этого периода;
в противном случае (т.е., в случае, если i-тое виртуальное слово найдено в памятизщт), мы получаем доступ к следующему «фиктивному слову» в перемешанной памяти (например, мы обращаемся к фактическому адресу(m+j), гдеj- число шагов, моделируемых в текущем периоде);
в любом случае модифицируемое значение для i-той виртуальной ячейки записано (забывающим образом) в памятьзщтпосредством сканирования заново всех слов памятизщт.
3. Модифицировать перемешанную память.В конце периода, используются значения, сохраненные в памятизщтдля модификации забывающим образом содержимого перемешанной памяти.
Перед тем как приступить к деталям реализации вышеупомянутых шагов, сделаем несколько замечаний относительно того, почему они составляют забывающее моделирование. Далее покажем, как осуществить доступ к памяти на шаге 1 фиксированным образом а, следовательно, независимо от входа и виртуальной модели доступа оригинальной RAM-машины. Различают два типа операций доступ к памяти, выполненных на шаге 2: полное сканирование памятизщт(т.е., осуществление доступа к каждому из слов дважды на каждую виртуальную операцию доступа) и
осуществление
доступа к
ячейкам перемешанной памяти во время
каждого периода. Для каждых возможных
виртуальных операций доступа, последние
фактических операций доступа равномерно
распределены среди всех
подмножеств {1,...,m+
},
где распределение вероятностей
индуцировано выбором перестановки.
Таким образом, фактический доступ,
выполняемый на шаге 2, не открывает
никакой информации относительно
виртуальных операций доступа, выполняемых
в этом шаге. Легко увидеть, что шаг 3
не создает никаких новых трудностей,
поскольку он может быть сделан при
выполнении операций фактического
доступа на шагах 1 и 2 в обратном порядке.