Атака может быть проведена примерно следующим образом.
Для того, чтобы прочитать бит 0 из защищённой области памяти Ap, атакующий
Очищает кеш для адресов A0u и A1u (из адресного пространства атакующего, доступного для чтения/записи)
Пытается прочитать значение V(Ap) в регистр из защищённой области памяти по адресу Ap
Посредством выполнения побитовой операции над полученным значением V(Ap) получает либо адрес A0u, либо адрес A1u
Читает память по этому адресу
Продолжает исполнение фактическим выполнением операций NOOP
Эта последовательность операций на некоторых архитектурах приводит к ошибке защиты на шаге 2. Однако инструкции 2, 3 и 4 будут выполнены из-за оптимизаций процессора, связанных со спекулятивным выполнением кода. В результате в кеш будет загружено одно из значений: либо значение по адресу A0u, либо значение по адресу A1u. Далее процессор аннулирует все "существенные" результаты выполнения инструкций 2,3,4 (как и должно происходить при ошибке защиты), но состояние кеша остаётся необнулённым. Далее атакующий читает "свои" A0u и A1u, измеряя время доступа к переменным. И на основании этого определяет, какой бит (0 или 1) был прочитан из защищённой области памяти Ap.
Далее, повторяя этот алгоритм для остальных бит значения V(Ap), можно получить всё содержимое защищённой области памяти целиком.