Метод запутывания программной реализации схемы HMAC для недоверенной среды | Прикладная дискретная математика. Приложение. 2016. № 9.

Метод запутывания программной реализации схемы HMAC для недоверенной среды

Предлагается метод обфускации схемы аутентификации сообщений HMAC для реализации в недоверенных средах.

HMAC obfuscation method for implementation in untrusted systems.pdf При разработке защищённых веб-приложений часто необходимо реализовывать алгоритмы выработки кодов аутентификации сообщений (MAC) на языке JavaScript в браузере пользователя. При этом нарушитель имеет не только доступ к исходному коду криптографических алгоритмов и ключевой информации, но и возможность отладки и изменения программы, что позволяет рассматривать браузер как недоверенную среду. В данном контексте возможность вычисления кодов аутентификации, в отличие от обладания ключевой информацией, может не представлять существенного интереса для нарушителя. В качестве примера рассмотрим веб-приложение, в котором для уменьшения поверхности атаки используется аутентификация HTTP-запросов на стороне клиента. Для осуществления подобной аутентификации возникает необходимость использования MAC для контролируемых параметров HTTP-запроса. В данном случае возможность вычислять MAC представляет для нарушителя существенно меньший интерес, чем сама ключевая информация. Зная ключ и алгоритм выработки MAC, нарушитель способен использовать эффективные автоматизированные средства для анализа веб-приложения. Обладая же лишь возможностью вычисления MAC при помощи исходного алгоритма, нарушитель вынужден генерировать все запросы через веб-браузер, используя стандартную функциональность веб-приложения, что существенно затрудняет и замедляет анализ приложения. С целью затруднения извлечения нарушителем ключевой информации из приложения принято использовать положения модели «White-boх Cryptography» [1]. В настоящее время для недоверенных сред известны лишь примеры реализации симметричных алгоритмов шифрования [2, 3] и неизвестно ни одного метода для схемы HMAC. Одним из способов выработки MAC являются ключевые хэш-функции. Известны два основных способа построения ключевых хэш-функций. Первый - использование блочных шифров в режиме генерации имитовставки. Однако полученные таким образом MAC, как правило, имеют недостаточную длину, а алгоритм их вычисления может быть неэффективен. Кроме того, проблема получения реализации блочных шифров для недоверенных сред частично изучена, и на данный момент существует ряд таких реализаций шифров DES [2] и AES [3]. Второй способ - получение ключевых хэш-функций на основе бесключевых. Данный подход позволяет строить эффективно вычислимые ключевые хэш-функции и более гибко выбирать длину получаемого MAC. Для описания этого алгоритма рассмотрим классическую схему вычисления хэш-функций на основе одношагового сжимающего отображения. В качестве сжимающего отображения выбирается функция двух переменных /(x,y), где x и y - двоичные слова длины m и n соответственно. Важно отметить, что отображение / в данном построении полностью определяет свойства получаемой хэш-функции, а потому / должна быть односторонней и устойчивой к коллизиям. Далее для вычисления h(M) сообщение M разбивается на блоки M1,..., Mn длины m, которые последовательно передаются на вход сжимающему отображению следующим образом: bo = v, bi = /(Mi,bi-1), i =1,...,N, h(M) = bN, (1) где v - некоторое фиксированное начальное значение. В случае, если длина сообщения M не кратна m, последний блок сообщения дополняется некоторым специальным образом до полного. Обозначим операцию дополнения pad(x,p), результат её вычисления - сообщение x, дополненное до длины m при помощи p. Помимо непосредственно дописывания дополнения, для операции pad(x,p) допустима также модификация сообщения x, например сложение x и p по модулю 2m, как это происходит в алгоритме [4]. Очевидно, для построения ключевой хэш-функции на основе бесключевой ключ MAC должен быть некоторым образом добавлен к исходному сообщению. Ввиду того, что непосредственно приписывание ключа к началу или концу сообщения может существенно ослабить получаемую ключевую хэш-функцию, в [5] предлагается следующая схема построения: H (k,x) = h(k,pi,h(k,p2,x)), где pi и p2 -дополнения ключа k до длины, кратной m, используемые при выполнении операций pad(k,pi) и pad(k,p2), а h - бесключевая хэш-функция, вычисляемая по схеме (1) . Обратим внимание, что значение k, в соответствии с требованиями схемы, целиком попадает в первые блоки вычисления обоих хеш-значений. Данное наблюдение позволяет предвычислить значение h на данных блоках и тем самым избежать использования k в реализации алгоритма в открытом (или легко вычислимом) виде. Разобьём ключ k на блоки Ki, K2,... ,Ki длины m. Положим epad(k,p) = Ki||K2|| ... llpad(Kl,p), где «||» - конкатенация строк. Обозначим hi и h2 хэш-функции, в которых b0 равно h(epad(k,pi)) и h(epad(k,p2)) соответственно, а дальнейшее вычисление производится по схеме (1). Тогда нетрудно заметить, что H (k,x) = h(k,pi,h(k,p2,x)) = hi(h2(x)). То есть ключ k не используется в алгоритме в открытом виде, а только в составе свёрток h(epad(k,pi)) и h(epad(k,p2)). Извлечение ключа из данных свёрток является вычислительно трудной задачей ввиду требований к сжимающим отображениям, указанным выше. Полученный алгоритм вычисления H удовлетворяет всем условиям модели «White-box Cryptography» [1]. Предложенный метод реализован для общепринятого алгоритма HMAC [4] на языке JavaScript в рамках экспериментального проекта jCrypto [6].

Ключевые слова

white-box cryptography, коды аутентификации сообщений, HMAC, обфускация, защита приложений, white-box cryptography, message authentication codes, HMAC, obfuscation, web application security

Авторы

ФИООрганизацияДополнительноE-mail
Колегов Денис НиколаевичТомский государственный университет; ЗАО «Позитив Текнолоджис»кандидат технических наук, доцент кафедры защиты информации и криптографии; старший специалист отдела защиты приложенийd.n.kolegov@gmail.com
Брославский Олег ВикторовичТомский государственный университетстудент кафедры защиты информации и криптографииo.v.broslavsky@gmail.com
Олексов Никита ЕвгеньевичТомский государственный университетстудент кафедры защиты информации и криптографииn.e.oleksov@gmail.com
Всего: 3

Ссылки

White-Box Cryptography: Protecting Cryptographic Keys in Software Applications. http: //www.whiteboxcrypto.com/
Chow W. S., Eisen P., Johnson H., and Van Oorschot P. C. A White-box DES Implementation for DRM Applications // LNCS. 2003. V.2696. P. 1-15.
Chow W. S., Eisen P., Johnson H., and Van Oorschot P. C. White-Box Cryptography and an AES Implementation // LNCS. 2003. V.2595. P. 250-270.
RFC 2104. HMAC: Keyed-Hashing for Message Authentication. https://tools.ietf.org/ html/rfc2104
Menezes A. J., Van Oorschot P. C., and Vanstone S. A. Handbook of Applied Cryptography. N.Y.: CRC Press, 1997.
jCrypto: White-Box Cryptography Tools for ECMAScript Language. https://github.com/ tsu-iscd/jcrypto
 Метод запутывания программной реализации схемы HMAC для недоверенной среды | Прикладная дискретная математика. Приложение. 2016. № 9.

Метод запутывания программной реализации схемы HMAC для недоверенной среды | Прикладная дискретная математика. Приложение. 2016. № 9.