Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Паразиттік есептеу – бұл бір бағдарламаның екінші бағдарламамен қалыпты, рұқсат етілген өзара әрекеттесу кезінде, екінші бағдарламаға күрделі есептеулерді орындауға мүмкіндік беруі, бірақ соңғысында шабуылдаушы ұсынған кодты орындау үшін осалдықтарды пайдаланбайтын техника. Бұл белгілі бір мағынада қауіпсіздікке қарсы әрекет, себебі паразиттік есептеуді іске асыратын бағдарламаның екінші бағдарламаға қолжетімді ресурстарды пайдалануға құқығы жоқ. Оны алғаш рет 2001 жылы АҚШ-тың Индиана штатындағы Нотр-Дам университетінің Альберт Ласло Барабаши, Винсент В. Фри, Хавунг Жонг және Джей Б. Брокман ұсынды. Бастапқы мақалада келтірілген мысал – екі компьютердің интернет арқылы стандартты байланыс сессиясы сияқты қарым-қатынас жасауы. Бірінші компьютер үлкен және өте қиын 3 SAT мәселесін шешуге тырысады; ол бастапқы 3 SAT мәселесін көптеген кіші мәселелерге бөлді. Осы кіші мәселелердің әрқайсысы тексеру сомасы мен пакет арасындағы байланыс ретінде кодталған, сондықтан тексеру сомасының дұрыс немесе бұрыс болуы сол кіші мәселенің жауабын да көрсетеді. Пакет/тексеру сомасы екінші компьютерге жіберіледі. Бұл компьютер пакетті қабылдау және оның жарамдылығын, дұрыс құрылғандығын тексеру кезінде пакеттің тексеру сомасын есептеп, ол ұсынылған тексеру сомасына сәйкес келе ме екенін тексереді. Егер тексеру сомасы жарамсыз болса, бастапқы компьютерден жаңа пакет сұралады. Бастапқы компьютер енді екінші компьютердің жауабына сүйене отырып, сол кіші мәселенің жауабын біледі және басқа кіші мәселені қамтитын жаңа пакет жібере алады. Соңында барлық кіші мәселелерге жауап беріледі және соңғы жауап оңай есептеледі. Мысал интернет-қосылымдар үшін қолданылатын Трансмиссиялық басқару протоколының (TCP) әрекетін пайдалануға негізделген, сондықтан мақсатты компьютерлердің екінші компьютердің пайдасына есептеулер орындағанын немесе қарапайым TCP/IP сессиясынан басқа ештеңе жасамағанын білмейді. Концепцияның дәлелдемесі өте тиімсіз, себебі бастапқыда пакеттерді жіберу үшін қажетті есептеулердің көлемі басқа бағдарламадан алынған есептеулерден әлдеқайда көп; 3 SAT мәселесі жергілікті түрде талданса, әлдеқайда жылдам шешіледі. Сонымен қатар, практикада нақты тексеру сомасының қателері мен желілік проблемалар туындағанда пакеттерді кейде қайта жіберуге тура келеді. Дегенмен, тексеру сомасы деңгейіндегі паразиттік есептеу – бұл концепцияның демонстрациясы. Авторлар қосымшалар қабатына көтерілген сайын, паразит үшін есептік пайда әкелетін нүкте болуы мүмкін екенін ұсынады – мысалы, қызықты мәселелерді ашық кілттерді пайдалана отырып, күрделі криптографиялық протоколдарға сұраныстарға бөлуге болады. Егер пайдалы нәтиже болса, теориялық тұрғыдан интернеттегі көптеген хосттар білмейтін бөлінген есептеу желісін құрайтын бірнеше басқару түйіндерін пайдалануға болады. 2002 жылы Швейцарияның Берн қаласындағы қолданбалы ғылымдар университетінің студенттері бұл концепцияны бағдарламаланатын виртуалды машинаға дейін кеңейтті.
Parasitic computing is a technique where a program in normal authorized interactions with another program manages to get the other program to perform computations of a complex nature without exploiting vulnerabilities to execute attacker supplied code on the latter. It is, in a sense, a security exploit in that the program implementing the parasitic computing has no authority to consume resources made available to the other program. It was first proposed by Albert Laszlo Barabasi, Vincent W. Freeh, Hawoong Jeong & Jay B. Brockman from University of Notre Dame, Indiana, USA, in 2001. The example given by the original paper was two computers communicating over the Internet, under disguise of a standard communications session. The first computer is attempting to solve a large and extremely difficult 3 SAT problem; it has decomposed the original 3 SAT problem in a considerable number of smaller problems. Each of these smaller problems is then encoded as a relation between a checksum and a packet such that whether the checksum is accurate or not is also the answer to that smaller problem. The packet/checksum is then sent to another computer. This computer will, as part of receiving the packet and deciding whether it is valid and well formed, create a checksum of the packet and see whether it is identical to the provided checksum. If the checksum is invalid, it will then request a new packet from the original computer. The original computer now knows the answer to that smaller problem based on the second computer's response, and can transmit a fresh packet embodying a different sub problem. Eventually, all the sub problems will be answered and the final answer easily calculated. The example is based on an exploit of the Transmission Control Protocol (TCP), used for internet connections, so in the end, the target computer(s) is unaware that it has performed computation for the benefit of the other computer, or even done anything besides have a normal TCP/IP session. The proof of concept is obviously extremely inefficient as the amount of computation necessary to merely send the packets in the first place easily exceeds the computations leeched from the other program; the 3 SAT problem would be solved much more quickly if just analyzed locally. In addition, in practice packets would probably have to be retransmitted occasionally when real checksum errors and network problems occur. However, parasitic computing on the level of checksums is a demonstration of the concept. The authors suggest that as one moves up the application stack, there might come a point where there is a net computational gain to the parasite perhaps one could break down interesting problems into queries of complex cryptographic protocols using public keys. If there was a net gain, one could in theory use a number of control nodes for which many hosts on the Internet form a distributed computing network completely unawares. Students of the University of Applied Sciences, Bern, Switzerland, extended this concept into a programmable virtual machine in 2002.