Паразитные вычисления
Паразитные вычисления — это метод, при котором одна компьютерная программа в ходе обычных разрешённых взаимодействий с другой программой заставляет её выполнять вычисления сложного характера, не используя для этого уязвимости и не осуществляя выполнение кода злоумышленника на стороне жертвы. В определённом смысле это представляет собой эксплуатацию, поскольку программа, реализующая паразитные вычисления, не имеет права использовать вычислительные ресурсы другой программы.
История и концепция
Термин впервые был предложен Альбертом-Ласло Барабаши, Винсентом В. Фри, Хавуном Чжоном и Джеем Б. Брокманом из Университета Нотр-Дам, США, в 2001 году. В качестве примера в исходной работе рассматривалась ситуация, когда два компьютера обмениваются данными через Интернет, имитируя стандартную коммуникационную сессию. Первый компьютер решает большую и крайне сложную задачу 3-SAT, разбивая её на множество меньших подзадач. Каждая такая подзадача кодируется в виде зависимости между контрольной суммой и сетевым пакетом, так что корректность контрольной суммы становится ответом на малую подзадачу. Этот пакет с контрольной суммой посылается второму компьютеру. Второй компьютер, получая пакет и определяя, является ли он корректным и правильно сформированным, вычисляет свою контрольную сумму и сверяет с предоставленной. Если контрольная сумма некорректна, он запрашивает новый пакет у отправителя. Таким образом, первый компьютер получает ответ на малую задачу по реакции второго компьютера и может посылать следующий пакет с другой подзадачей. В итоге, получив ответы на все подзадачи, можно вычислить итоговое решение всей задачи.
Этот пример базируется на эксплуатации протокола TCP, используемого для подключений к Интернету, поэтому итоговая система и не подозревает, что выполняла вычисления на благо другой стороны или делала что-то, кроме обычной TCP/IP-сессии.
Доказательство концепции крайне неэффективно, поскольку ресурсы, затраченные на передачу пакетов, значительно превосходят объём вычислений, осуществлённых на стороне другого компьютера; задачу 3-SAT было бы намного проще решить локально. Кроме того, на практике пакеты иногда придётся пересылать повторно из-за реальных ошибок контрольных сумм или проблем с сетью. Однако паразитные вычисления на уровне контрольных сумм служат демонстрацией метода. Авторы отмечают, что при продвижении вверх по стеку приложений может наступить момент, когда станет возможным получить чистый вычислительный выигрыш — например, декомпозировать важные задачи до запросов к сложным криптографическим протоколам с использованием открытых ключей. При наличии чистого выигрыша можно, теоретически, использовать управляющие узлы, для которых множество машин в Интернете образуют распределённую вычислительную сеть, не подозревая об этом.
Дальнейшие исследования
Студенты Университета прикладных наук города Берн, Швейцария, в 2002 году реализовали расширение этой концепции в виде программируемой виртуальной машины[1]. В 2019 году была предложена теоретическая модель решения задачи 3-SAT, в которой ответы вычисляются через проверку правильности контрольных сумм TCP-пакетов целевыми узлами[2]. В 2025 году была представлена симуляция логических операций (AND, OR), кодируемых в поле контрольной суммы TCP-пакетов[2]. В 2026 году опубликована практическая реализация концепции через протокол ICMP — программа `hopsum` на языке Go, использующая сообщения `ICMP Time Exceeded` для выполнения арифметических операций[3].
Примечания
Литература
- Barabási, Albert-László; Freeh, Vincent W.; Jeong, Hawoong; Brockman, Jay B. (август 2001). “Parasitic computing”. Nature [англ.]. 412 (6850): 894—897. DOI:10.1038/35091039. ISSN 0028-0836. PMID 11528474. Дата обращения 2024-06-16. Проверьте дату в
|date=(справка на английском)