Герои исходного кода и магии
В отличие от аналоговых, цифровые методы хранения данных подразумевают возможность копирования информации неограниченное количество раз без искажений (этого удалось достичь с помощью корректирующих кодов, которые помогают отслеживать и исправлять ошибки при передаче или считывании информации). Если первые пираты сражались с антипиратами в море радиоволн, то их следующим поколениям пришлось столкнуться уже в другом, цифровом океане.
На ранних этапах развития компьютеров проблемы пиратского распространения программного обеспечения не стояло — ЭВМ были доступны только в крупных организациях, а программы либо лицензировались за большие деньги, либо разрабатывались для конкретного компьютера, либо распространялись свободно в соответствии с академической этикой, по правилам которой научные разработки должны быть открытыми. Интернет на тот момент находился в зачаточном состоянии, а обмен программным обеспечением происходил в основном с использованием магнитных лент или бумажных перфолент (на них двоичная информация записывалась с помощью отверстий).
Все изменилось с появлением персональных компьютеров в 1970-х годах. Но тогда стало очевидно, что копирование информации — большая проблема для разработчиков, желающих продавать свое программное обеспечение. В 1976 году Билл Гейтс, на тот момент вчерашний студент Гарварда и разработчик интерпретатора BASIC для компьютера Altair 8800, выпустил «Открытое письмо любителям» (An Open Letter to Hobbyists), в котором пытался донести до первых пользователей персональных компьютеров мысль о том, что копирование программного обеспечения является воровством. В том же году была выпущена 5¼ дискета, ставшая первым действительно массовым компактным форматом передачи информации для персональных компьютеров. В конце 1970-х годов разработчики программного обеспечения стали тратить большие силы на разработку методов защиты своего софта от копирования.
Первой областью интереса пиратов стали компьютерные игры, для них же создавались и самые остроумные методы защиты.
Именно в Microsoft был разработан один из первых примеров защиты от копирования. В 1979 году Microsoft портировала легендарную текстовую игру Colossal Cave Adventure для персональных компьютеров. Игра помещалась на одну дискету, стоила целых $29 и… не поддавалась копированию!
Способ, который разработали в Microsoft, — искажение расположения дорожек на дискете. В норме сигнал записывается на расположенные концентрическими кругами намагниченные дорожки, разбитые на сектора. На нулевой дорожке содержатся сведения о том, на какой дорожке и в каком секторе находится та или иная информация. На дискете с Microsoft Adventure использовалась неправильная нумерация дорожек, а в самой первой содержалась таблица замены этих номеров (дорожка 1 становилась 127, дорожка 2 получала номер 125, и так далее). При попытке записать файлы с игрой, популярные программы для копирования дискет использовали дорожки стандартной нумерации, и при воспроизведении система считала дискету испорченной. Меньше чем через год систему взломал австралиец Ник Эндрюз — он написал небольшую программу, которая позволяла при записи игры на дискету исправлять номер дорожек на корректный. Это был первый пример «кряка» (crack), как сегодня в пиратском мире называют специальную программу для взлома платного программного обеспечения. Другой «первой взломанной игрой» стал порт аркадной игры Galaxian для компьютеров ATARI (она была разработана в 1979-м, а портирована в 1982-м), которую взломал хакер Koyote Kid.
Помимо физической защиты от копирования тогда же стали использовать и лицензионные ключи — уникальные коды, которые поставлялись вместе с программным обеспечением (и зачастую позволяли отследить, кто «слил» программу в сеть). Долгое время алгоритмы проверки лицензионных ключей были очень простыми. Например, для Windows 95 подходили ключи 111-1111111 и 000-0000000 и даже KRYP7077777. Первые три символа могли быть любыми (кроме 333, 444, 555, 666, 777, 888 и 999), четвертый символ вообще не учитывался (по умолчанию — дефис), а сумма последних семи чисел должна была делиться на 7 — поэтому ключ можно было легко подобрать.
Другой проблемой лицензионных ключей было то, что их достаточно было ввести один раз и больше не проверять, — а как быть, если ключ скопировали вместе с программным обеспечением? Выходом стали проверки, которые нужно было проходить при каждом запуске ПО. И здесь опять самыми креативными оказались разработчики компьютерных игр.
Шифровальные диски и дискеты
В то же время вторую жизнь получил шифровальный диск — инструмент для шифрования, который еще в 1466 году описал итальянский ученый Леон Баттиста Альберти в «Трактате о шифрах». Другим источником вдохновения для этого метода защиты ПО стали вольвеллы средневекового богослова Раймунда Луллия — похожий на шифровальный диск инструмент для комбинаторных расчетов из скрепленных на одной оси бумажных дисков.
Диск Альберти состоит из двух частей — подвижной и неподвижной. По периметру неподвижной части расположен алфавит открытого (незашифрованного текста), а по периметру внутренней — зашифрованного. Для того, чтобы зашифровать букву, нужно найти ее на неподвижном круге и посмотреть, какая буква внутреннего круга ей соответствует. Вращая внутренний диск можно менять способ замены букв.
Иллюстрация: «Логическая машина» — вольвелла из трактата «Великое искусство» (Ars Magna) Раймунда Луллия (1290-е годы)
Ярким примером использования шифровальных дисков для защиты от копирования можно назвать Pool of Radiance (1988 год), Curse of the Azure Bonds (1989 год) и игры во вселенной Dungeons & Dragons. На шифровальных дисках вместо букв латиницы наносились руны эльфийского алфавита (Эспруара) и дварфского (Детека). Увидеть, как выглядели эти диски, можно здесь http://www.oldgames.sk/codewheel/pool-of-radiance и здесь https://www.oldgames.sk/codewheel/curse-of-the-azure-bonds. Сквозь окошки во внешнем диске открывался нанесенный на внутренний диск «перевод» рун — кодовые слова на английском. После загрузки игры на экране появлялись три символа: эльфийская и дварфийская руны и «символ пути», который определял, из какого из трех секторов нужно было взять кодовое слово. Если игрок трижды вводил неправильный «перевод», игра выключалась. Таким образом, человек, скачавший игру из сети, не мог ее запустить, поскольку у него не было оригинальной упаковки (и если он не разобрал оригинальный шифровальный диск и не сделал себе ксерокопию обеих его частей). Для того, чтобы усложнить ксерокопирование, в некоторых играх использовались цветные символы или темно-красная полупрозрачная пленка, которые не мог скопировать черно-белый ксерокс.
Иногда шифровальные диски становились частью геймплея: например, в игре Neuromancer (1988 год) такой диск использовался не для входа в игру, а для взлома внутриигровых компьютерных терминалов, без которого игрок попадал в сюжетный тупик. Таким образом, обладатель пиратской копии мог пройти только часть игры. А в Rocket Ranger (1988 год) с помощью такого устройства производился расчет количества топлива, нужного для того, чтобы добраться из точки А в точку Б — без него игра была очень неудобной. Коллекция таких дисков собрана на сайте Oldgames.sk. http://www.oldgames.sk/codewheel/
Еще одним примером доцифровой криптографии, напоминающим книжные шифры, могут служить бумажные инструкции, которые поставлялись в комплекте с игрой. Для запуска некоторых игр игроку нужно было найти в инструкции случайное слово по номеру страницы, номеру строки и номеру слова в строке.
Для защиты от копирования использовались и более экзотичные приспособления, например специальные призмы. После загрузки игры на экране появлялись искаженные символы, и чтобы их прочитать, нужно было поднести к ним преломляющую свет призму. Впрочем, отнести их к миру криптографии можно только с большой натяжкой.
«Здесь покоится пират, который никогда не плавал»
(Цитата из пиратского манифеста «Анатомия пирата», написанного анонимным автором не раньше 1983 года)
Более серьезные алгоритмы, в том числе с использованием не бумажной, а полноценной цифровой криптографии появились для защиты профессионального и дорогого программного обеспечения — например, QuarkXPress, Windows NT и AutoCAD. Легкомысленные методы и спрятанные посередине игры ловушки не подходили для такого серьезного софта.
В 1993 году был разработан первый алгоритм активации лицензии через сеть, для которого программное обеспечение генерировало на компьютере пользователя уникальный идентификатор его оборудования. Он отправлялся производителю, который проверял, не зарегистрирован ли уже этот серийный номер программного обеспечения и не привязан ли он к другому оборудованию. Производитель записывал соответствие уникального идентификатора и серийного номера программы и отправлял пользователю файл для ее активации. Такая схема до сих пор используется для многих программ.
В программы начали встраивать специальный код, который проверял перед запуском, активирована ли лицензия. Для того, чтобы усложнить поиск и удаление пиратами этого кода, исполняемый код программы может шифроваться. Впрочем, как бы программа ни была зашифрована, для того, чтобы компьютер мог ее выполнить, она все равно должна быть расшифрована — в этот-то момент, добыв исполняемый машинный код из оперативной памяти, взломщик и может его проанализировать.
Чтобы проверить, не был ли отредактирован код программы, в него встраивается проверка хэш-суммы программы — шестнадцатеричного числа, которое получают из исходного файла с помощью криптографического алгоритма хэширования. Вне зависимости от размера файла, его хэш-сумма будет фиксированной длины (например, 32 цифры) и, если хотя бы один бит в файле меняется, меняются и все цифры суммы. В криптографии алгоритмы хэширования используются для проверки целостности и подлинности сообщения, а также для хранения конфиденциальной информации, например, паролей.
Сотрудник IBM Дон Эстридж сформулировал следующий принцип: «какую схему вы бы ни выдумали, на ее взлом потребуется меньше времени, чем вы потратили на ее разработку». Еще в восьмидесятых годах в IRC-чатах, Usenet-группах, на BBS-форумах и в FIDO (ранние сервисы для обмена сообщениями и файлами) началось формирование субкультуры компьютерных пиратов и связанная с ней терминология. Именно тогда появляются понятия варез (warez, взломанное программное обеспечение) и кряк (crack). Для обмена опытом взломщики объединяются в команды с различными специализациями, а для того, чтобы подписывать релизы взломанных ими программ, команды стали использовать файлы с расширением .NFO. Такие файлы представляют собой текстовые документы с информацией о взломанной программе, участниках взлома, использованной защите. Традиционно они оформляются замысловатым ASCII-артом (изображениями, которые создаются внутри текстового файла с помощью букв и других символов кодировки ASCII).
Иллюстрация: .NFO-файл группы Tristar & Red Sector (1992)
Группы взломщиков придумывают себе яркие названия — Доминаторы, Национальная элита, Враги народа, Международная сеть взломщиков, Скучные ребята, Красный сектор, ЦРУ, Картель. Некоторые названия, появившиеся в конце 1980-х, используются до сих пор (хотя сомнительно, имеется ли прямая связь между современными хакерами и взломщиками двадцатипятилетней давности). После того, как члены группы взламывали очередную программу, ее передавали курьерам — людям со стабильным подключением к интернету (или другим сетям, например Usenet или Fido), которые могли круглосуточно раздавать файлы. По расчетам сетевой компании OpNet, в 1997 году от 30 до 40 процентов трафика в сети Usenet составляли пиратские программы (в среднем — 500 мегабайт в день, колоссальное по тем временам число).
К появлению алгоритмов активации лицензии у групп взломщиков уже были наработанные инструменты для анализа и редактирования кода для взлома систем защиты от копирования.
Авторитетные пираты подчеркивали, что большинство из них взламывает программы не ради денег: среди мотиваций, которые называли разные участники этих сообществ, можно перечислить исследовательский интерес, тщеславие, альтруизм, стремление насолить «большому бизнесу». Многие распространяли условно-бесплатные и бесплатные программы под видом «взломанного» софта (чтобы заработать престиж), или даже встраивали вредоносный код во взломанные программы, что осуждалось пиратским сообществом.
Падает ли точность стрельбы, если у тебя на глазу повязка?
Многие игры остроумно водили пиратов за нос — прятали проверки хэш-функций в нескольких местах исходного кода или делали хэш-функцию одной из важных констант для физики игры. Игра «понимала», что взломана, но не сразу давала об этом знать пользователю.
Например, во взломанной игре Сида Мейера «Пираты» сложность многократно возрастала, а при попытке повторно пройти нелегально скопированную игру Alan Wake у заглавного персонажа появлялась повязка на глазу. В игре Operation Flashpoint: Cold War Crisis впервые был использован метод под названием FADE, который позднее применялся и в других играх. Если программа замечала, что была взломана, то по мере игры различные аспекты геймплея портились: снижалась точность стрельбы, повышалось число врагов, уменьшалось количество бонусов, искажалось изображение. В конце концов, прохождение игры становилось невозможным. Таким образом, у игрока появлялась возможность попробовать геймплей, но при этом полноценно насладиться игрой не получалось.
Благодаря тому, что игра продолжала работать, но геймплей становился сложнее, или перед игроком могли возникнуть неожиданные препятствия, у взломщиков не было возможности быстро проверить, насколько удачно они обошли все системы защиты. В некоторых играх последняя проверка хэш-суммы происходила прямо перед финальной битвой с боссом и приводила к удалению всех игровых сохранений.
Всегда онлайн
Методы защиты авторских прав могут усложнять жизнь не только пиратам, но и легитимным пользователям игры или программного обеспечения. Например, они не могут сделать резервную копию купленных программ, или вынуждены проходить громоздкую процедуру подтверждения лицензии. А в случае программных ошибок пользователь и вовсе может остаться без доступа к программе. Поэтому иногда было проще установить пиратскую копию.
С развитием техники многие методы защиты авторских прав не просто устаревают, а могут полностью заблокировать возможность использования программного обеспечения. Так произошло с одним из базовых методов защиты — проверкой наличия оригинального диска с игрой в дисководе. Поскольку сейчас большинство компьютеров, особенно ноутбуков, не имеют дисководов, для запуска таких игр приходится использовать эмулятор. С более изощренными системами защиты дело обстоит еще сложнее — в некоторые исторические компьютерные игры теперь можно сыграть, только используя их пиратские версии. Даже сервис Good Old Games, специализирующийся на лицензировании старых компьютерных игр, вынужден иногда обращаться к пиратским релизам для реконструкции игр, в которых система защиты несовместима с современными компьютерами.
Особенно опасной в этом плане является модель «всегда онлайн», когда игру можно запустить только в том случае, если устройство пользователя подключено к сети и прошло проверку на сервере. Если сервер оказывается недоступным, игру запустить невозможно, то есть пользователь может потерять доступ к уже купленному продукту. Это опять же возвращает нас к проблеме сохранения игр как культурного наследия — сервера не вечны, игровые компании не вечны, из-за чего в некоторые игры сыграть уже невозможно.
Что же в это время происходило в менее «динамичных» медиа — музыке и кино? Системы DRM (digital rights management, цифровые средства защиты авторских прав) продолжали развиваться. На смену физическим методам (например, штрихкодам с ключом дешифрования на CD и DVD-дисках, которые считывались приводом, но не поддавались копированию обычными средствами), пришли более сложные программные средства, однако стало понятно, что полностью заблокировать копирование с технической точки зрения невозможно. Ведь всегда есть «аналоговый барьер» — если что-то может быть увидено или услышано, оно может быть снято или записано, например видеокамерой и аудиорекордером. Поэтому цифровые версии фильмов чаще всего записывают на специальные устройства хранения данных, которые в кинотеатры доставляют курьеры, а не передают их через интернет. И данные эти могут быть зашифрованы таким образом, что ключ расшифрования будет работать только в заданные периоды времени, блокируя доступ между согласованными датами показов (чтобы в промежутках между показами нельзя было снять чистую копию фильма).
С распространением интернета и повышением его скорости эпидемия пиратства казалась неостановимой. А все более сложные методы защиты контента вызывали раздражение у покупателей. Частичным решением обеих проблем стали стриминги и централизованные магазины программного обеспечения, которые начали активно развиваться в 2010-х годах. Пользователей они подкупали безопасностью и большим удобством по сравнению с поиском, скачиванием и установкой пиратского программного обеспечения (что порой превращалось в настоящий шаманский ритуал со множеством этапов), а в случае с медиа — их моментальной доступностью. Зачем скачивать фильм, если его можно просто включить и сразу смотреть?
Сильно повлияло на пиратскую индустрию и развитие облачных технологий и модели распространения ПО по подписке. В ситуации, когда пользователь не владеет программным обеспечением и не хранит у себя его копию, возникают совершенно другие области применения криптографии и совершенно другие вызовы для информационной безопасности…