Comments 2
а каков может иметь практический смысл применение rng.random() ? в умозрительной задаче это понятно, но по сути мы делаем сервер в работе которого запрограммирован регулярный сбой. можно же просто выдавать рандомные строки в ответ :)
Конечно, никому не нужен сервер, который случайным образом неправильно отвечает :) Важно помнить, что задача - это упрощённая модель потенциально очень сложной системы. Серверов, которые просто проверяют паддинг на сообщениях, тоже по сути не делают. Но эти вещи могут быть скрыты в сложном поведении.
В голову приходит пример с немного противоположной разобранной задаче логикой. Пусть сервер выдаёт ошибку, если не может расшифровать сообщение. Это может возникать как из-за неправильного паддинга, так и из-за битых данных в первом блоке (напомню, что когда мы меняем один байт в первом блоке, весь этот блок расшифруется неправильно). В любом случае ошибка одна и та же. Но с некоторой вероятностью данные в первом блоке ломаются так, что сервер их примет и ошибку не пришлёт. То есть, если паддинг неправильный, то мы точно получаем ошибку. Но если паддинг правильный, то мы получаем ошибку с некоторой вероятностью. Получается, что сервер может работать вполне детерменированно, но со стороны атакующего его ответы будут иметь случайный характер и это необходимо учитывать при атаке.
Cryptohack. Решение Pad Thai