Обфускация черного ящика
В криптографии обфускация черного ящика была предложенным криптографическим примитивом , который позволял компьютерную программу запутывать . таким образом, чтобы о ней было невозможно определить что-либо, кроме ее поведения на входе и выходе [1] Доказано, что запутывание «черного ящика» невозможно даже в принципе. [2]
невозможность
[ редактировать ]Незапутываемые программы
[ редактировать ]Барак и др. создал семейство необфускируемых программ, для которых эффективный злоумышленник всегда может узнать больше из любого запутанного кода, чем из доступа к черному ящику. [2] [3]
В общих чертах они начинают с разработки специальной пары программ, которые невозможно запутать вместе. Для некоторых случайно выбранных строк фиксированной, заранее определенной длины , определите одну программу как программу, которая вычисляет
а другая программа - к той, которая вычисляет
(Здесь, интерпретирует вводимые данные как код машины Тьюринга . Второе условие в определении состоит в том, чтобы функция не была невычислимой .)
Если эффективный злоумышленник имеет доступ только к «черному ящику», Барак и др. утверждается, то у злоумышленника есть только экспоненциально малый шанс угадать пароль. , и поэтому не может отличить пару программ от пары, где заменяется какой-то программой который всегда выводит «0». Однако, если злоумышленник имеет доступ к каким-либо запутанным реализациям из , то злоумышленник найдет с вероятностью 1, тогда как злоумышленник всегда найдет пока не (что должно произойти с ничтожной вероятностью). Это значит, что злоумышленник всегда сможет отличить пару из пары с доступом к запутанному коду, но не с доступом к «черному ящику». Поскольку ни один обфускатор не может предотвратить эту атаку, Барак и др. пришли к выводу, что не существует обфускатора «черного ящика» для пар программ. [2] [3]
В заключение аргумента Barak et al. определим третью программу для реализации функциональности двух предыдущих:
Поскольку эквивалентно эффективные реализации можно восстановить с одного из путем жесткого определения значения , Барак и др. сделать вывод, что также не могут быть запутаны, что и завершает их аргументацию. [2]
Невозможные варианты обфускации черного ящика и другие типы незапутываемых программ.
[ редактировать ]В своей статье Барак и др. также докажите следующее (при условии соответствующих криптографических предположений ): [2]
- Есть незапутанные схемы .
- Не существует приблизительного обфускатора черного ящика.
- Существуют незапутанные, безопасные, вероятностные криптосистемы с закрытым ключом .
- Существуют незапутанные, безопасные и детерминированные схемы цифровой подписи .
- Существуют незапутанные, безопасные и детерминированные схемы аутентификации сообщений .
- Существуют необфускабельные, безопасные псевдослучайные функции .
- Для многих протоколов, которые безопасны в модели случайного оракула , протокол становится небезопасным, если случайный оракул заменяется искусственной криптографической хэш-функцией ; в частности, схемы Фиата-Шамира . могут быть атакованы
- есть необфускируемые схемы В TC0 (то есть пороговые схемы постоянной глубины).
- Существуют необфусцируемые алгоритмы выборки (фактически их невозможно запутать приблизительно).
- Не существует безопасной схемы нанесения водяных знаков в программном обеспечении .
Более слабые варианты
[ редактировать ]В своей оригинальной статье, посвященной обфускации черного ящика, Барак и др. определили два более слабых понятия криптографической обфускации, которые они не исключили: обфускацию неотличимости и обфускацию извлекаемости (которую они назвали «обфускацией различающихся входных данных»). Неформально, обфускатор неотличимости должен преобразовывать входные программы с одинаковой функциональностью в выходные программы так, чтобы ограниченный злоумышленник не может эффективно связать выходные данные с входными данными, а обфускатор извлекаемости должен быть таким обфускатором, что, если эффективный злоумышленник может связать выходные данные с входными данными для любых двух программ, тогда злоумышленник также может создать входные данные, такие, что две запутываемые программы дают разные результаты. (Обратите внимание, что обфускатор извлекаемости обязательно является обфускатором неотличимости.) [2] [4]
По состоянию на 2020 год [update], кандидатская реализация запутывания неотличимости находится в стадии изучения. [5] В 2013 году Бойл и др. исследовал несколько возможных реализаций запутывания извлекаемости. [4]
Ссылки
[ редактировать ]- ^ Гольдвассер, Шафи; Ротблюм, Гай Н. (1 июля 2014 г.). «О наилучшем возможном запутывании» (PDF) . Журнал криптологии . 27 (3): 480–505. дои : 10.1007/s00145-013-9151-z . hdl : 1721.1/129413 . ISSN 1432-1378 . S2CID 1186014 .
- ^ Перейти обратно: а б с д и ж Барак, Вооз; Гольдрейх, Одед; Импальяццо, Рассел; Рудич, Стивен; Сахай, Амит; Вадхан, Салил; Ян, Кэ (3 мая 2012 г.). «О (не)возможности запутывания программ» (PDF) . Журнал АКМ . 59 (2): 6:1–6:48. дои : 10.1145/2160158.2160159 . ISSN 0004-5411 . S2CID 2409597 .
- ^ Перейти обратно: а б «Криптографическая обфускация и «невзламываемое» программное обеспечение» . Несколько мыслей о криптографической инженерии . 21 февраля 2014 г. Проверено 14 марта 2021 г.
- ^ Перейти обратно: а б Бойл, Элетт; Чунг, Кай-Мин; Пасс, Рафаэль (2013). «Об обфускации извлекаемости (также известной как разные входы)» . Архив электронной печати по криптологии .
- ^ Кларрайх, Эрика (10 ноября 2020 г.). «Учёные-компьютерщики достигли «жемчужины» криптографии» . Журнал Кванта . Проверено 10 ноября 2020 г.