Введение

Паразитарные вычисления – это техника, при которой программа в ходе нормального авторизованного взаимодействия с другой программой заставляет её выполнять сложные вычисления, не используя уязвимости для исполнения кода, предоставленного злоумышленником. В некотором смысле, это эксплуатация безопасности, поскольку программа, реализующая паразитарные вычисления, не имеет права потреблять ресурсы, доступные другой программе. Впервые её предложили Альберт Ласло Барабаши, Винсент В. Фри, Хавунг Чжон и Джей Б. Брокман из Университета Нотр-Дам, Индиана, США, в 2001 году. В качестве примера в оригинальной статье рассматривались два компьютера, взаимодействующие через Интернет под видом стандартной сессии связи. Первый компьютер пытается решить большую и чрезвычайно сложную задачу 3-SAT; он разложил исходную задачу 3-SAT на значительное количество меньших подзадач. Каждая из этих меньших подзадач затем кодируется как связь между контрольной суммой и пакетом данных, таким образом, что соответствие или несоответствие контрольной суммы является ответом на эту подзадачу. Пакет/контрольная сумма отправляется на другой компьютер. Этот компьютер, в процессе приема пакета и проверки его валидности и корректности, вычисляет контрольную сумму пакета и сравнивает её с предоставленной. Если контрольная сумма недействительна, он запрашивает новый пакет с исходного компьютера. Исходный компьютер, основываясь на ответе второго компьютера, узнает решение этой подзадачи и может передать новый пакет, содержащий другую подзадачу. В конечном итоге, все подзадачи будут решены, и окончательный ответ будет легко вычислен. Пример основан на эксплуатации протокола управления передачей (TCP), используемого для интернет-соединений, поэтому целевой компьютер(ы) в итоге не осознают, что он выполнил вычисления в пользу другого компьютера, или даже сделал что-либо, кроме обычной TCP/IP-сессии. Доказательство концепции, очевидно, крайне неэффективно, поскольку объем вычислений, необходимый для отправки пакетов, значительно превышает объем вычислений, полученных от другой программы; задача 3-SAT была бы решена гораздо быстрее, если бы её анализировали локально. Кроме того, на практике пакеты, вероятно, придется пересылать время от времени из-за реальных ошибок контрольной суммы и сетевых проблем. Однако паразитарные вычисления на уровне контрольных сумм демонстрируют саму концепцию. Авторы предполагают, что при переходе на более высокие уровни стека приложений может наступить момент, когда паразит получит чистый вычислительный выигрыш – например, можно разбить сложные задачи на запросы к сложным криптографическим протоколам с использованием открытых ключей. В случае чистого выигрыша, теоретически можно использовать ряд управляющих узлов, для которых множество хостов в Интернете сформируют распределенную вычислительную сеть, даже не подозревая об этом. Студенты Университета прикладных наук в Берне, Швейцария, в 2002 году расширили эту концепцию до программируемой виртуальной машины.