130
Эту с виду иррелевантную информацию можно использовать для подделки лю-
бого желаемого сообщения m. Основная идея такова: предположим, что атакую-
щий знает первые i байтов правильного тэга для m. (В начале i = 0.)
Атакующий
узнает следующий байт правильного тэга, послав получателю (m, t0), . . . , (m, t255),
где tj — это последовательность первых i правильных байтов, (i + 1)-ый байт равен
j (в шестнадцатеричной системе исчисления), а остальные байты заданы как 0x00.
Все эти тэги, скорее всего, получат отказ (если нет, то атакующий все равно будет
иметь успех). Однако, для ровно одного из этих тэгов первые (i + 1) байтов совпадут
с правильным тэгом, и отказ займет немного больше времени, чем для других. Если
тэг tj имел самое долгое вреся отказа, атакующий узнает, что (i + 1)-ый байт пра-
вильного тэга равен j. Таким образом, атакующий узнает каждый байт правильного
тэга, испольщуя максимум 256 запросов к оракулу верификации. Для 16-байтного
тэга такая атака потребует только 4096 запросов в худшем случае.
Можно засомневаться в том, что такая атака реалистична, так как она требует доступ
к оракулу верификации, а также способность измерять разницу между во времени, за-
траченном на сравнение i и i + 1 байтов. В действительности, именно такие атаки были
произведены на реальные системы! Один только пример: КАСы были использованы
для проверки обновлений кода в Xbox 360, и использованная там имплементация ве-
рификации КАСов имела разницу во времени отказа 2,2 миллисекунды. Атакующие
смогли воспользоваться этим и загрузить в оборудование пиратированные игры.
На основе вышеупомянутого, мы делаем вывод, что верификация КАСов должна
использовать сравнение последовательностей,
не зависимое от времени, кото-
рое всегда сравнивает все байты.
Достарыңызбен бөлісу: