криптосюжет
Nov. 23rd, 2003 05:01 pmПридумал сюжет для криптофантастического романа или повести. Точнее, не сюжет даже, а завязку.
Сидит хакер, взламывает какую-то программу (игрушку, скажем, но необязательно). В программе есть проверка серийного номера. Он ищет то место внутри программы, где эта проверка происходит, чтобы её отключить. Находит функцию, которая получает строку серийного номера (достаточно длинного) и проверяет, является ли он правильным.
Смотрит внутрь этой функции, видит: там что-то вычисляется, странное и сложное. Разбираться, что именно, чтобы написать генератор номеров, лень, там куча каких-то битовых операций неясных в цикле. С другой стороны, никаких подвохов в виде проверки контрольной суммы вычисляющего кода, или побочных эффектов функции, или других проверок в других местах, вроде бы не видно. Обрадовавшись, что всё оказалось так просто, он быстро забивает код функции, чтобы она всегда возращала истинность проверки, готовит патч, перепроверяет с ним — вроде бы всё работает, программа принимает любой серийный номер без проблем — и отсылает патч по стандартным своим каналам дистрибуции. Работа сделана.
Но что-то продолжает его беспокоить, почему-то он всё время возвращается мысленно к коду этой функции. Что-то там было знакомое, хоть даже и в ассемблере... В конце концов через пару дней он открывает опять пропущенный через дизассемблер код программы, находит эту функцию, читает внимательно, тщательно выписывает, что она делает с серийным номером, мучительно пытается вспомнить, где он это видел. Наконец срывается с места, прыгает к книжной полке, хватает изрядно потрёпанное второе издание Applied Cryptography и быстро находит в нём обсуждение MD5. Да, не может быть никаких сомнений! Загадочная функция проверки серийного номера попросту пропускает его через MD5, и сравнивает после этого с фиксированным 128-битным числом. Более того, числом этим оказывается 0x0123456789ABCDEFFEDCBA9876543210 . Герой откладывает книгу в сторону и надолго задумывается, облокотившись на клавиатуру и уставив невидящий взгляд в горящие на мониторе строки ассемблерных команд, составляющих функцию проверки серийного номера...
Сидит хакер, взламывает какую-то программу (игрушку, скажем, но необязательно). В программе есть проверка серийного номера. Он ищет то место внутри программы, где эта проверка происходит, чтобы её отключить. Находит функцию, которая получает строку серийного номера (достаточно длинного) и проверяет, является ли он правильным.
Смотрит внутрь этой функции, видит: там что-то вычисляется, странное и сложное. Разбираться, что именно, чтобы написать генератор номеров, лень, там куча каких-то битовых операций неясных в цикле. С другой стороны, никаких подвохов в виде проверки контрольной суммы вычисляющего кода, или побочных эффектов функции, или других проверок в других местах, вроде бы не видно. Обрадовавшись, что всё оказалось так просто, он быстро забивает код функции, чтобы она всегда возращала истинность проверки, готовит патч, перепроверяет с ним — вроде бы всё работает, программа принимает любой серийный номер без проблем — и отсылает патч по стандартным своим каналам дистрибуции. Работа сделана.
Но что-то продолжает его беспокоить, почему-то он всё время возвращается мысленно к коду этой функции. Что-то там было знакомое, хоть даже и в ассемблере... В конце концов через пару дней он открывает опять пропущенный через дизассемблер код программы, находит эту функцию, читает внимательно, тщательно выписывает, что она делает с серийным номером, мучительно пытается вспомнить, где он это видел. Наконец срывается с места, прыгает к книжной полке, хватает изрядно потрёпанное второе издание Applied Cryptography и быстро находит в нём обсуждение MD5. Да, не может быть никаких сомнений! Загадочная функция проверки серийного номера попросту пропускает его через MD5, и сравнивает после этого с фиксированным 128-битным числом. Более того, числом этим оказывается 0x0123456789ABCDEFFEDCBA9876543210 . Герой откладывает книгу в сторону и надолго задумывается, облокотившись на клавиатуру и уставив невидящий взгляд в горящие на мониторе строки ассемблерных команд, составляющих функцию проверки серийного номера...
no subject
Date: 2003-11-23 07:10 am (UTC)у этой программы есть подсознание? она знает смысл жизни?
no subject
Date: 2003-11-23 07:18 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2003-11-23 07:12 am (UTC)no subject
Date: 2003-11-23 07:16 am (UTC)no subject
Date: 2003-11-23 08:53 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2003-11-23 11:28 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Ну...
Date: 2003-11-23 07:21 am (UTC)Не вдохновляет как-то, на мой непросвещенный взгляд.
Re: Ну...
Date: 2003-11-23 07:24 am (UTC)Да, действительно, забавно. Но и действительно не вдохновляет.
Re: Ну...
Date: 2003-11-23 08:14 am (UTC)Зря я это
From:Re: Ну...
Date: 2003-11-23 11:25 am (UTC)Но это завязка, она и не должна быть слишком фантастической.
Продолжения сюжета возможны разные.
Re: Ну...
Date: 2003-11-24 02:57 am (UTC)Притом ещё с таким вот изящным номером?
Чуваки могут быть, разумеется, не потусторонние, но, imho, всё равно обладающие некторым нетривиальным знанием.
no subject
Date: 2003-11-23 08:12 am (UTC)no subject
Date: 2003-11-23 08:30 am (UTC)no subject
Date: 2003-11-23 09:06 am (UTC)(no subject)
From:no subject
Date: 2003-11-23 08:58 am (UTC)no subject
Date: 2003-11-23 10:26 am (UTC)ee prosto zovut i vse...
1 raz mne popalas' takaya function, kotoroya uzala kuchu vsego iz programmy. vylechilos' prosto.
moj kraker delal LoadLibrary ("SuperSecret.dll");
GetProcAddress ( "MakeCoolSerialNumber");
call tuda...
MessageBox ( "Serial num for ur name is", to sho ono tam v buffer vernula...);
ready.
no subject
Date: 2003-11-23 10:31 am (UTC)У меня речь идёт о функции проверки серийного номера, а не генерации.
moj kraker delal LoadLibrary ("SuperSecret.dll");
GetProcAddress ( "MakeCoolSerialNumber");
call tuda...
Это работает, только если в самом продукте есть функция генерации серийного номера. Далеко не все производители такие идиоты.
Советую не высказываться по поводу того, что "никогда никогда не делает" или "все всегда делают" в таких делах, это выглядит довольно глупо.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2003-11-24 02:59 am (UTC)Я знаю по крайней мере одного человека, на моих глазах изучившего и взломавшего функцию *генерации* серийного номера, а именно
(no subject)
From:no subject
Date: 2003-11-23 10:55 am (UTC)Лучше пусть будет история про юного хакера, который обратил MD5, потому что не знал что это такое.
no subject
Date: 2003-11-23 11:07 am (UTC)Оказывается, что в фирме, которая написала эту игрушку, сидит юный хакер, который ничтоже сумняшеся обратил MD5, просто увидев имплементацию, которая ему понравилась, в какой-то библиотеке. Или там сидит idiot savant, который умеет в уме обращать MD5, не зная, как он это делает. Он просто думает о результате, напрягается, и ему в голову вскакивает возможная исходная строка. За ним начинают охотиться люди из NSA, итд. итп.
Или оказывается, что в фирме работает астроном-любитель, который уже год подряд получает из окрестностей Альфа Центавра модулированный радиосигнал, который является потоком нулей и единиц, и в попытке его расшифровать он как-то случайно заметил, что поток кодирует одну за другим строки с этим значением MD5. Собственно, как он это заметил: он написал кучу скриптов на Перле для статистического анализа строк из потока. Среди структур данных, к-е используют скрипты, есть хэш, в котором ключом служит строка. Он замечает, что после очередной попытки разделить поток на строки скрипты почему-то начали бежать очень медленно. Долго отлаживает, и обнаруживает, что именно в этом хэше все строки попадают в один bucket (а это какой-то новый Перл, к-й использует MD5 в качестве хэш-функции), и поэтому обращение к хэшу внезапно стало линейным по времени. Ну и так далее.
Про квантовые машины Тьюринга и писать не буду, и так всё очевидно ;) ну и ещё есть 2-3 других возможных продолжения, из которых можно выстроить собственно сюжет.
(no subject)
From:(no subject)
From:(no subject)
From:Bzz
From: (Anonymous) - Date: 2003-11-24 12:24 am (UTC) - Expand(no subject)
From:(no subject)
From: (Anonymous) - Date: 2003-11-23 12:58 pm (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2003-11-23 11:29 am (UTC)ровно за одну минуту, под дулом пистолетом у виска и с барышней, делающей ему минет.
в Голливуде уже всё придумали, да. там, правда, был вроде бы DES, но мы им считать не будем. :)
no subject
Date: 2003-11-23 11:28 am (UTC)no subject
Date: 2003-11-23 01:33 pm (UTC)no subject
Date: 2003-11-23 02:02 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2003-11-23 01:34 pm (UTC)А может проще?
Date: 2003-11-23 07:07 pm (UTC)P.S.
кстати, а обязательно в md5 у каждого значения Y есть такое X что Y=md5(X)? а то может некоторые значения хэша в принципе не обращаются? тогда можно открывать охоту на открытие данных, генерирующих красивый md5 и первый приз - красивое значение X, которое после MD5 дает красивое значение Y.
P.P.S.
RFC 1321 - The MD5 Message-Digest Algorithm: "3.3 Step 3. Initialize MD Buffer"
буфер заполняется какими-то числами? почему именно этими? скорее всего при разработке алгоритма можно было любые на их место поставить (главное - чтобы они были в стандарте), но почему авторы решили именно их использовать? Может быть как раз пошутили так, что при этих вот значениях, которыми весь мир пользуется, "что-то веселое" (X) шифровалось в "что-то не менее веселое" (Y).
:)
Re: А может проще?
Date: 2003-11-23 08:18 pm (UTC)no subject
Date: 2003-11-24 02:04 pm (UTC)no subject
Date: 2003-11-24 04:24 pm (UTC)(no subject)
From:(no subject)
From: