Скачиваний:
168
Добавлен:
02.05.2014
Размер:
300.54 Кб
Скачать
      1. Реализация алгоритма «Квадратного корня»

Сначала, мы покажем, как выбирать и сохранять в ЦПслучайную перестановку над {1,2,...,n}, используяO(log n) памяти и случайный оракул. Идея состоит в том, чтобы использовать оракул для проставления меток случайно выбранных элементов и различные целые числа из множества меток, обозначаемогоTn. Перестановка получается посредством сортировки элементов в соответствии с их метками. Если же необходимо получить вероятность коллизии(т.е., для нашего приложения=2-2k), достаточно иметь метки, выбранные случайно из множестваTn={1,2,...,n2/},. Пусть : {1,2,...,n}Tn- случайная функция, тривиально созданная случайным оракулом. В этом случае(i)=k, тогда и только тогда, когда(i) - наименьший элемент в {(j):1jn}. В нашем случаеn=m+, а именноnэлементов состоят изmвиртуальных адресов, связанных с целыми числами 1,...,mимакетов, связанных с (m+1,..., m+}.

Теперь мы имеем дело с задачей забывающей сортировки nэлементов посредством меток. Определяющее условие состоит в том, чтоRAM-машина, которая выполняет сортировку, может хранить только фиксированное число значений одновременно. Идея состоит в том, чтобы «выполнить» сортирующую сеть Батчера [GO], который позволяет сортироватьnэлементов, выполняяnlog2n2сравнений. Каждое сравнение «выполняется» посредством осуществления доступа к двум соответствующим словам, чтением их содержания и записью этих значений обратно в необходимом порядке. Последовательность операций доступа к памяти, сгенерированной для этой цели фиксирована и не зависит от входа. Отметим, что забывающаяRAM-машина может легко вычислять в каждой точке, какое сравнение требуется для реализации следующего. Это следует из простой структуры сети Батчера, которая является однородной относительно логарифмического пространства. Этот алгоритм будет работать, если мы сохраняем метку каждого элемента вместе с самим элементом (виртуальное слово или макет).

Далее мы точно определим, как осуществить доступ к виртуальной ячейке или к макету i. Отметим, что после шага 1 виртуальные ячейки от 1 доm(также как и макеты отm+1 доm+) сортируются согласно их меток (т.е.,()). Таким образом, фактический доступ в перемешанную память на шаге 2 выполняется двоичным поиском необходимой метки. А именно, предположим, что мы хотим получить доступ к элементуi{1,...,m+}. Затем, вместо того, чтобы непосредственно достичь фактической ячейки(i), как предлагается выше, мы выполняем двоичный поиск метки(i). Этот двоичный поиск заканчивается на фактической ячейке(i). Помимо этого другие фактические операции доступа, выполняемые во время поиска, полностью определены(i). Таким образом, эти дополнительные фактические операции доступа не открывают никакой информации противнику.

Далее описываются две альтернативных реализации шага 3. Первый вариант - реверсия модели доступа на шаге 2. Второй вариант – полная сортировка фактической памяти (то есть, все m+2слов, включая памятьзщт) дважды, как описано в алгоритме. Первая сортировка выполняется в соответствии с ключом (v,), гдеv- виртуальный адрес (- для макетов) и{0,1} указывает, исходит ли это слово из памятизщтили из перемешанной памяти. Таким образом, сортируемый список имеет виртуальные адреса, появляющиеся так, чтобы некоторые из них появляются в двойном экземпляре один за другим (одна версия из памятизщт, а другая из перемешанной памяти). Затем, мы сканируем этот список и для каждого виртуального адреса, появляющегося в дубликате, маркируется второе местонахождение (возникающее из перемешанной памяти) также как и макет (т.е.,). В заключение, мы снова полностью сортируем память, но на сей раз виртуальными адресами. Фактически, эта дополнительная сортировка не нужна, поскольку память будет подвергнута пересортировке когда-либо при следующем выполнении шага 1.

Далее следует детальное описание шага 2. Главная идея при этом моделировании состоит в том, чтобы осуществить доступ к каждой виртуальной ячейке в «перемешанной памяти» только в течение каждого шага периода. Как только осуществится доступ к некоторой виртуальной ячейке, необходимо сохранить версию этой виртуальной ячейки в памяти зщт. В течение шага 2,счтсодержит число виртуальных операций доступа, моделируемых в текущем периоде. Переменнаясчт- первоначально содержит 0 и увеличивается, пока достигнет значения. Булева переменнаяfoundбудет инициироваться, если требуемое значение найдено в памятизщт. Когда оригинальнаяRAM-машина осуществляет доступ кi-тому виртуальному слову, забывающаяRAM-машина работает следующим образом:

  • (2a) сканирует полностью память зщти ищет виртуальный адрес i. А именно, дляj, пробегающему значения отm++1 доm+2, доступ к фактической ячейке памятиjпеременнаяfoundустанавливается вtrueи сохраняется в ЦП, если виртуальный адресiсовпадает с фактической ячейкойj. (Переменнаяfoundинициализирована в значениеfalseдо этого сканирования и остается такой же, если виртуальный адресiне был найден);

  • (2b) еслиfound=false, тогда забывающаяRAM-машина осуществляет доступ к слову с меткой(i) и сохраняет содержимое в ЦП. Как показано выше, это реализуется посредством двоичного поиска метки(i);

  • (2c) если found=true, тогда забывающаяRAM-машина осуществляет доступ к слову с меткой(m+счт), которое является макетом. Это также реализуется посредством двоичного поиска метки(m+счт);

  • (2d) просматривает полностью памятьзщтснова и записывает модифицируемое значениеi-того виртуального слова в памятизщт. А именно, дляm++1 доm+2доступ к фактической ячейке памятиjзапоминается в ее модифицированном значении виртуального адресаi, если адресjсодержит старое значение виртуального адресаi(т.е.,found=true), либоfound=falseиj- первое пустое слово в памятизщт.

  • Значение счтувеличивается на 1.

Подчеркнем, что невмешивающийся противник не может видеть, сохранил ли ЦП значения или нет и, таким образом, не может различать выполнение шага 2b от выполнения шага 2c. Ясно, что шаги 2a и 2dимеют фиксированную модель доступа и, таким образом, не никакая информация, полезная для такого противника, не вскрывается.

Соседние файлы в папке Казарин О.В. Теория и практика защиты программ