Xpoint
   [напомнить пароль]

Возможно ли защитить от просмотра программный код в веб-страницы - в принципе и на практике?

Метки: [без меток]
2006-05-16 11:36:58 [обр] Даниэль Алиевский(9/125)[досье]

Случайно наткнулся на давно забытую тему: Запрет просмотра страницы в HTML
Обсуждение там само собой "затихло", а поставленный вопрос мне кажется интересным. Может быть, продолжим обсуждение здесь?

Вопрос, конечно, более широкий, чем защита от просмотра HTML-кода - поэтому и создаю тему в "Теории". В общем случае, речь идет о возможности защиты от просмотра любого программного кода, представляющего ценность именно как алгоритм решения задачи. Это может быть ассемблер, Java или скриптовые языки вроде JavaScript/Perl. Скриптовые языки, как и ассемблер, защищать удобнее всего - они могут самомодифицироваться. Для конкретности можно сосредоточиться о защите "умного" JavaScript-алгоритма. Например, для случая, когда я написал на JavaScript полиномиальный алгоритм разложения на множители, применяю его для "мгновенного" взлома RSA и по каким-то причинам очень не хочу, чтобы кто-нибудь, заглянувший на веб-страницу с таким JavaScript, понял, как я это делаю :)

Точнее, формулирую два вопроса.

  1. Можно ли создать коммерчески оправданную систему защиты, стоимость взлома которой, допустим, будет гарантированно не ниже некоторого порога - условно говоря, 100 тысяч долларов?
  2. Можно ли, используя подключение к Internet, хотя бы в принципе, создать абсолютно не взламываемую систему защиты? (Абсолютно - если исходить из "разумного упрощения", что число серверов в Internet бесконечно, а число серверов, которые может в принципе задействовать система защиты, не ограничено никакой константой.)

Подробности возможных подходов см. в Запрет просмотра страницы в HTML

спустя 1 час 2 минуты [обр] Александр aka Efreeti(3/111)[досье]
Стоимость злома StarForce сильно меньше $100K. Вот и делайте выводы.
спустя 39 минут [обр] Даниэль Алиевский(9/125)[досье]

Для этого надо, как минимум, знать, что такое StarForce, а также каким именно образом его сломали дешевле :)

Я пока ставлю вопрос чисто теоретически, не задумываясь пока, сколько может стоить разработка требуемой системы защиты. Тем более интересен вопрос #2.

спустя 53 минуты [обр] Владимир Палант(80/4445)[досье]
Я этим когда-то занимался, даже статью написал (Как защитить программу на Perl, чтобы никто не смог её прочитать?). Моё ИМХО:
  1. Зависит от количества кода. Если вы хотите защитить 50 строк кода, то можете об этом забыть. Даже после самой великолепной обфускации эти 50 строк восстановят после максимум двух дней работы. Если же кода много, то в принципе можно сделать так, чтобы взломщик не мог выделить нужный ему кусок кода заранее. Тогда ему придется разбираться во всем коде, что займет значительно больше времени. При этом неиспользуемый код выделяется сравнительно просто, то есть весь этот код должен быть важен для работоспособности приложения.
  2. Нет. Браузер ведь ваш код все равно как-то выполнять должен. Если разберется он, то в конце концов разберется и человек.
спустя 23 минуты [обр] Даниэль Алиевский(9/125)[досье]

Владимир Палант[досье]
1.

Если вы хотите защитить 50 строк кода, то можете об этом забыть.

Почему? Не вижу аргументов. Почему 50 строк, разбросанных по мегабайту "безумного кода", легче обнаружить, чем 5000 строк?

Кстати, 50 строк вполне могут содержать совершенно гениальный алгоритм.

  1. Это тоже не доказательство. Может оказаться, что броузер выполняет код не сам по себе, а лишь с привлечением неопределенного количества серверов во всем окружающем Internet. При этом сам код, конечно, целиком находится на компьютере клиента - иначе нельзя говорить об универсальной системе защиты. Но вот части защитной системы отнюдь не обязаны целиком находиться у клиента. Начиная с простейших мыслей, который я уже озвучивал в предыдущей теме: может быть, можно узнавать "извне" точное неподделываемое время, пользуясь каким-либо протоколом с шифрованием, и использовать эту информацию для блокировки поэтапной трассировки.

У броузера есть фундаментальные отличия от человека - быстродействие и память. Броузер ни в чем не "разбирается", а просто тупо исполняет инструкции, по миллиарду в секунду. И ему нисколько не мешает, что объем исполняемого кода исчисляется миллионами строк: ему же не надо ничего понимать.

Я готов признать, что задача защиты от взлома станет невыполнимой, если появится искусственный разум, не уступающий человеку в способности "понять идею" (и затем воплотить ее в собственном продукте) и способный при этом анализировать - именно анализировать с целью разобраться в принципах, а не тупо выполнять - по миллиарду инструкций в секунду. Но, с другой стороны, придется предположить, что в этой фантастической ситуации броузер сможет исполнять тот же код со скоростью, скажем, 10^20 операций в секунду, и мы придем к исходной ситуации.

спустя 1 час 19 минут [обр] Thirteensmay(3/157)[досье]
Даниэль Алиевский[досье] Чето я не пойму в чем проблема, зачем такие дебри ? На оба ваших вопроса и на тему топика - положительные ответы. Только нужно четко осознавать наличие открытых и закрытых решений/технологий, а также недостижимость полных абсолютов. Если Вы хотите чтото скрыть в открытой технологии, то это не реально, но не потому что невозможно, а потому что в этом случае она (технология) автоматически превращается в закрытую ;) А самих то путей хоть пруд пруди - начиная от простейшего скрытия меню, через вынос функционала в ActiveX, рассредоточивания/шифрования, и вплоть до оригинального браузера, клиентский код которого выполняется в USB-ключе - залоченном военном микроконтроллере и пр. Естественно ломается, но при комплексном подходе (и то не обязательно) стоимость такого подлома спокойно можно довести до 100к$, сохранив при этом коммерческую оправданность. Или мы защищаем номер домашнего той общительной девушки ? ;) Оно то можно, но нужно ли ? Нужно - вперед ;)
спустя 1 час 46 минут [обр] Владимир Палант(80/4445)[досье]
Даниил, я уже по предыдущим темам понял — если вы во что-то не хотите верить, то вы и не поверите. Поэтому убеждать я вас не собираюсь. Тем более, что ваши возражения лишь указывают на то, что "взламывать" чужие системы вы никогда не пробовали. Рекомендую, хотя бы ради эксперимента.
спустя 5 часов [обр] Александр aka Efreeti(3/111)[досье]

Даниэль Алиевский[досье]
StarForce

Ломали пара человек, хорошо знающих асемблер (не буду их называть пошлым словом хакер).
Насколько я знаю, сломали за несколько дней (сумма часов в районе 10).
Я не знаю, сколько им заплатили, но думаю что врядли больше 10К. А скорее меньше.

Владимир Палант[досье]

Даниил, я уже по предыдущим темам понял — если вы во что-то не хотите верить, то вы и не поверите.

Как говориться, +1.

спустя 12 часов [обр] Александр Самойлов(5/342)[досье]
По приведенным данным взлом StarForce не аргумент.
Не приведена ни версия StarForce (а их десятки), ни редакция версии StarForce (а они сильно отличаются по цене и обеспечиваемой защите).
Не сказано, наконец, что, собственно, понимается под взломом StarForce (а пониматься может как взлом конкретного продукта, так и взлом некоторой версии StarForce и таким образом всех защищенных этой версией продуктов).
спустя 1 час 41 минуту [обр] Алексей Севрюков(13/1280)[досье]

Александр aka Efreeti[досье]

не буду их называть пошлым словом хакер

Что же в нем пошлого? хакер.

спустя 4 часа 1 минуту [обр] Даниэль Алиевский(9/125)[досье]

Thirteensmay[досье]

На оба ваших вопроса и на тему топика - положительные ответы.

Даже на второй? Почему Вы так решили? У меня это пока лишь предположение. Чтобы ответить положительно, нужно, по идее, придумать некий основанный на Internet алгоритм защиты, а затем математически доказать, что всякий способ его взлома требует не менее N "ручных операций", где N можно сколь угодно увеличить.

Только нужно четко осознавать наличие открытых и закрытых решений/технологий, а также недостижимость полных абсолютов. Если Вы хотите чтото скрыть в открытой технологии, то это не реально, но не потому что невозможно, а потому что в этом случае она (технология) автоматически превращается в закрытую

Что-то я не очень понял. Что есть открытая и закрытая технология?

А самих то путей хоть пруд пруди - начиная от простейшего скрытия меню, через вынос функционала в ActiveX, рассредоточивания/шифрования, и вплоть до оригинального браузера, клиентский код которого выполняется в USB-ключе - залоченном военном микроконтроллере и пр.

А точно ли мы об одном и том же говорим? Так, ActiveX от JavaScript принципиально ничем не отличается.

Тема, разумеется, появилась как противовес бесчисленным заявлениям на этом форуме, что "защитить HTML-код невозможно". А если задуматься: так это или не так на самом деле?

"Общительные девушки" тут ни при чем :) Практического интереса у меня в этом нет никакого. Просто интересно.

Рискну предположить, что ответ на оба пункта отрицательный. Иначе кто-нибудь уже придумал бы такую защиту, и многие сайты и приложения этим пользовались бы. Что для сайтов, что для программ, как правило, возможность анализа кода посторонними абсолютно не нужна - почему бы не защитить, если бы была возможность.

Владимир Палант[досье]
Ну вот, вспомнили предыдущие темы... Если уж говорить об этом, то я вообще не люблю во что-либо "верить", а целью любых обсуждений считаю обмен информацией и идеями, а никак не переубеждение оппонента. Да, иногда действительно после разговоров люди меняют точку зрения, но это, по-моему, побочный эффект :)

Ломать чужие системы, и правда, не пробовал. Только читал про это.

спустя 22 минуты [обр] Александр Самойлов(5/342)[досье]

Вот аналогичная тема, в которой я принимал посильное участие

Как скрыть реальный html код от посетителя?

Странно только, что вместо моего имени там мой email в текстовом виде.

спустя 5 минут [обр] Александр aka Efreeti(3/111)[досье]

Александр Самойлов[досье]
Чтобы не быть голословным, я уточню, кто и что ломал, и напишу.

Алексей Севрюков[досье]

В настоящее время слово "хакер" используется почти исключительно как обозначение человека злонамеренного, асоциального и безусловно опасного, то есть является синонимом слова "взломщик" в применении к компьютерам и сетям.

Вот именно поэтому.

спустя 27 минут [обр] Алексей Севрюков(13/1280)[досье]
Александр aka Efreeti[досье] Ну это необразованные люди так считают. Но мы то с Вами понимаем истинное значение этого слова :-)
спустя 5 часов [обр] Александр aka Efreeti(3/111)[досье]
Алексей Севрюков[досье]
Понимания не достаточно.
Всякие фильмы, типа "Хакеров" и доблестные СМИ делают своё черное дело - подсознательно мы воспринимаем хакеров как нехороших людей. Но это уже офф и психология.
спустя 8 часов [обр] Даниэль Алиевский(9/125)[досье]

Александр Самойлов[досье] Спасибо, почитаю. Хотя по первому впечатлению, вроде бы, эта тема может рассматриваться как продолжение той.

Александр aka Efreeti[досье] А вот в фильме "Земное ядро" хакер хороший :)

спустя 3 часа 53 минуты [обр] Thirteensmay(3/157)[досье]

Даниэль Алиевский[досье] Да на все три вопроса ! Только на сколько далеко Вы желаете/можете зайти ? Если хотите решения "в один клик" то вряд ли конечно...

Для начала учтем что открытая технология - это технология каждый компонент которой открыт, т.е. доступен его исходный код, принципы функционирования, протоколы и пр., т.е. пользователь имеет полный контроль. Web изначально именно такой, благодаря чему и получил распространение.

Теперь попытаемся пролезть поперек паровоза, т.е. скрыть некоторые компоненты. Итак, поставлено 3 вопроса:

  1. Можно ли создать коммерчески оправданную систему защиты, стоимость взлома которой, будет гарантированно не ниже например 100 тысяч долларов ?
  2. Можно ли, используя подключение к Internet, хотя бы в принципе, создать абсолютно не взламываемую систему защиты ? (Абсолютно - если исходить из "разумного упрощения", что число серверов в Internet бесконечно, а число серверов, которые может в принципе задействовать система защиты, не ограничено никакой константой.)
  3. Возможно ли защитить от просмотра программный код веб-страницы - в принципе и на практике ?

По первому: Возможно, при условии относительного баланса между стоимостью разработки и стоимостью защищаемого контента. При этом защита скорее всего будет комплексной, т.е. защищается не только контент/код но и его среда, идея, и персонал.

По второму: У нас получилось разночтение, я рассматриваю только сам вопрос, Вы - еще и его решение в рамках приведенного в скобках. Я считаю что можно создать систему работающую в Internet и при этом обеспечить приемлемый уровень ее защиты. Если Вы про абсолюты - то нет конечно ;) Что касается использования серверов Inet, то как часть защитного комплекса, при условии рассредотачивания взаимодействия, думаю при необходимости может использоваться.

По теме: Конечно можно, всего то и надо вынести его вне, например оформить как отдельный двоичный COM компонент и юзать c помощью ActiveX, или даже засунуть в микроконтроллер и залочить.

Вы не правы, ActiveX и JavaScript принципиально разные вещи: ActiveX - технология расширения функциональности браузера, технология его взаимодействия со внешними компонентами, а JavaScript это всего лишь ограниченный язык программирования, в т.ч. средство этого взаимодействия.

Ну и немного оф. на последок, ко Всем: Народ а почему метода взаимодействия браузеров со внешними компонентами досихпор не открытый поддерживаемый стандарт ? Ну или ткните плс. Оружие в браузерных войнах ?, так их сяк... Не пойму. Про безопасность тут может только идиот плакаться.

Даниэль Алиевский[досье]
P.S. Таким образом, когда Вам говорят "невозможно", то имеют ввиду: "невозможно в условиях нормального открытого Web", на самом деле как рассмотрено выше - возможно, только это уже не совсем нормальный Web ;)

спустя 22 минуты [обр] Thirteensmay(3/157)[досье]
"Не совсем нормальный Web" - имеется ввиду корпоративный уровень (intranet), либо метода для заинтересованных рабочих групп, что очень удобно. Ведь защита делается именно для них. Не вижу смысла защищать что либо выкладывая в публичный доступ (обычный открытый Web). Это только хитрожопые маркетологи пытаются зарабатывать так себе геморрой, вон даже слово какое придумали - "домашние носители" ;) уроды блин...
спустя 1 час 40 минут [обр] Даниэль Алиевский(9/125)[досье]

Что-то вы меня не понимаете, похоже :) Начать с того, что вопроса два, а не три. HTML-код веб страниц (в комбинации с JavaScript) - это лишь пример некоторого алгоритмического кода, который, в предположении, содержит достаточно нетривиальное ноу-хау, которое хочется защитить. То, что он базируется на скриптовом языке, а не на машинном, не имеет никакого принципиального значения. Разбираться в машинном коде процессора просто несколько сложнее, чем в коде C++ или JavaScript - скажем, в 10 раз. Реально это может означать, всего-навсего, некоторое удорожание взлома, причем отнюдь не десятикратное.

Поэтому же ActiveX и JavaScript - одно и то же. Мне абсолютно все равно, какие технологии будет использовать хакер - пошаговую отладку и дизассемблирование всего активного машинного кода в компьютере или ограничится анализом веб-страницы в рамках броузера. Если задача защиты решаема в принципе, то решаема она и при ограничении, что разрешается использовать только JavaScript - ибо ничего принципиально нового машинный язык не привносит. Поэтому я и начал обсуждение с рассмотрения JavaScript (наиболее "сложного" случая), чтобы не засорять идею посторонними вещами.

Так что разрешите переформулировать.

  1. Возможно ли создать коммерчески оправданную утилиту, которой можно передать на вход некоторый произвольный JavaScript-файл (подключаемый к HTML через <script src=...>), содержащий некоторый нетривиальный алгоритм, и которая на выходе выдаст другой JavaScript-файл, функционально эквивалентный первому, но такой, что даже располагая этим файлом (выложенным в открытом доступе в веб), невозможно восстановить и понять принципы работы первоначального алгоритма? "Коммерчески оправданная" - это означает, что, меняя параметры утилиты, стоимость взлома системы (восстановления первоначального JavaScript-кода или его полного эквивалента, понятного для изучения), выраженная в часах работы профессионала любого уровня, может быть сделана сколь угодно высокой? Например, доведена до триллиона часов, допустим, ценой увеличения объема файла до гигабайта и миллионократного замедления работы. На самом деле, конечно, достаточно довести стоимость взлома до стоимости разработки эквивалентного алгоритма - хотя для нетривиальных алгоритмов, являющихся серьезными научными достижениями, подобную стоимость оценить малореально.

Во времена DOS создавались профессиональные защитные программы, которые должны бы соответствовать этому критерию (только защищался машинный код вместо JavaScript). Но, насколько мне известно, в указанной постановке задача не была решена. К каждой защитной программе рано или поздно создавались универсальные методы взлома, после чего стоимость взлома каждого конкретного алгоритма падала почти до нуля.

  1. Возможно ли создать аналогичную утилиту, которую взломать невозможно теоретически ни за какое время, если использовать 3 дополнительных условия: a) взломщик имеет доступ лишь к ограниченному числу компьютеров, например, не более M; b) защитная система в процессе исполнения защищенного JavaScript-кода имеет право обращаться через Internet к N серверам, где N>M и, более того, N может оказаться сколь угодно велико; c) взломщик не знает, что происходит на недоступных ему серверах (в частности, нигде не опубликован алгоритм, который задействует эти сервера).

При отсутствии Internet ответ на второй вопрос, очевидно, был бы отрицателен. Если защитная система задействует лишь один компьютер, то в принципе можно создать программу-отладчик, которая будет полностью и точно моделировать весь этот компьютер со всеми его устройствами, от часов до процессора. В этой программе-отладчике мы будем иметь возможность наблюдать за процессом исполнения защитного кода шаг за шагом, все время видя полную карту памяти и наблюдая, что происходит - при этом система защиты, находясь в полностью виртуальном пространстве, не сможет обнаружить, что за ней наблюдают. А в этой ситуации программа любой сложности - пусть даже содержащая миллиарды перепутанных инструкций и требующая для исполнения триллионов тактов - в принципе, может быть прослежена и понята человеком (или группой людей), пусть даже это потребует миллиона лет. (Если, конечно, не говорить о принципиальной ограниченности возможностей человеческого мозга - эту тему обсуждать я не хочу.)

А вот при наличии Internet и условии N>>M хакер уже лишен возможности промоделировать поведение всех N компьютеров - он ведь не имеет к ним доступа, не знает, что там происходит, и даже не подозревает об их существовании. Конечно, в этом случае есть смысл говорить только о "закрытой" технологии (хакер не знает полностью, как устроена защитная система) - иначе можно будет промоделировать все N компьютеров, даже не имея к ним доступа.

Повторяю - интерес теоретический, как к математической проблеме. Примерно из того же разряда, что и принадлежность задачи разложения на множители к классу P или NP :)

спустя 56 минут [обр] Thirteensmay(3/157)[досье]
Даниэль Алиевский[досье] Я Вам предложил реальное практическое решение. Если же Вам нужна теория в духе P=NP? то увольте...
спустя 1 час 53 минуты [обр] Даниэль Алиевский(9/125)[досье]

Так все практические подходы, о которых Вы писали, я более или менее представляю. И действительно серьезным является только шифрование-запутывание - только здесь, как мне кажется, есть перспектива решить хотя бы вопрос #1. (Если не говорить, конечно, о всяких внешних устройствах, доступ к которым закрыт на физическом уровне - это просто другая задача, не особенно интересная для обсуждения, IMHO.)

Вы, наверно, подумали, что мне нужно что-то там защитить :) Ничего такого. Меня, действительно, интересует теория. В духе той теории - области криптографии, которая давно и с переменным успехом занимается оценкой временной сложности различных алгоритмов шифрования-дешифрования. И правда, несколько удивляет, что я давно не слышал о готовых решениях на этом "фронте", а уж тем более о решениях, надежность которых хоть как-то обоснована математически. (Может быть, такое есть, просто мне не попалось?) И это несмотря на то, что вопрос о защите, по крайней мере, HTML/JavaScript-кода всплывает с завидной регулярностью.

Powered by POEM™ Engine Copyright © 2002-2005