Разбег Пандоры - Дмитриев Павел В.. Страница 42
Как бы не так! Картина в окуляре прибора была очень мало похожа на записанный файл. Конечно, я предполагал трудности в виде служебных данных, заголовков, оглавлений. Но чтоб такой ужас-ужас-ужас! Во-первых, количество «питов» не поддавалось подсчету! Их были миллионы в самом прямом смысле этого слова! Во-вторых, эти самые «питы» имели неодинаковую протяженность, и различить их на глаз было весьма проблематично [255]. В-третьих, мне не удалось найти никаких служебных меток и признаков форматирования, по которым можно было бы ориентироваться [256].
Облом получился оглушительный. Сперва собирался задвинуть CD в самый дальний ящик, и не доставать его оттуда по меньшей мере лет пять. Да что там, я бы именно так и сделал, тем более, глаза от рассматривания «питов» болели так, что пришлось идти к врачу за каплями. Но неожиданно вмешалась Катя, которую я по неосмотрительности привлек к задаче. В порыве комсомольского энтузиазма жена сначала просто взывала к моей совести, а затем перешла на серьезные угрозы типа «тогда я сама во всем разберусь!»
Пришлось думать. Первым делом напряг память, и вспомнил, что перед пользовательскими данными должен быть не просто заголовок, а отдельный раздел. Проверка показала, что на экспериментальном CD-RW его можно обнаружить только в микроскоп, а вот на старых аудио-дисках он виден невооруженным взглядом. Более того, всего областей три, условно я их назвал стартовая (ближе к центру), основная и финишная (вдоль края). Причем объем первой и последней огромен, по прикидкам – не менее десяти мегабайт [257]. Не знаю, зачем создателям потребовалось столько места, но одной проблемой стало меньше.
Неделю мы с Катей изучали «область данных» в затребованный мощный микроскоп с пристроенным фотоаппаратом. Записывали, стирали, снова записывали разные куски всякими замысловатыми способами. Определенный прогресс был, в пакетном режиме количество появляющихся за сессию данных уменьшалось почти на порядок. Но при этом все равно оставалось невообразимо большим для ручной обработки [258]. Дошло до того, что мне вместо успокаивающей эротики начали сниться черточки, точки, и целые поля, заполненные этими проклятыми символами прогресса! И это притом, что последнее время секс у нас в семье был исключительно с диском и микроскопом!
Наконец терпение супруги подошло к концу, я уже предвкушал заслуженные выходные. Но удача явно была на стороне Кати, когда она добралась до режима «Format CD». Ранее я уже пробовал этот вариант, и отбросил его как непригодный, когда после нескольких минут работы «Nero» диск практический весь покрылся записанными кусками. Моя жена пошла немного дальше – она выяснила, что с обработанным таким образом CD-RW можно работать как с обычным жестким диском, то есть записывать на него файлы быстро и без всяких сессий. Очевидное на первый взгляд знание – но в будущем мне ни разу не приходилось использовать CD подобным образом [259].
Дальше было мое самобичевание собственной тупости, снисходительно-победная улыбка супруги, и отупляющие поиски куска, который изменился в результате записи. Нельзя сказать, что найти его было просто, скорее, нам наконец-то повезло… Если, конечно, это можно так назвать, ведь файл в несколько сотен байт при записи каким-то загадочным образом умудрился превратиться в много десятков тысяч «питов»! [260]
Отступать было поздно, пришлось вспомнить времена «Аватара». По моему техзаданию на базе микроскопа и кинокамеры был собран специальный «комбайн», обеспечивающий покадровую съемку. Отдельной задачей был плавный механизм поворота диска на несколько десятых миллиметра за раз, если смотреть на край. Так, чтоб в захват объектива влезала каждый раз новая порция из двух-трех десятков «питов». С помощью этой техники за пару недель удалось превратить физические дорожки в слое пластика во вполне разборчивые кадры.
Впрочем, на все терпения не хватило. Справедливо рассудив, что чудес не бывает, я предположил, что нужное для расшифровки хранится в начале или конце найденного куска, поэтому мы ограничились пятьюстами кадрами или десятком тысяч бит с обоих сторон. Результатом работы стала здоровенная катушка пленки, которая поехала к шифровальщикам КГБ вместе с распечаткой эталонного файла и моими смутными догадками о способах и особенностях записи.
Последние за какие-то полтора месяца блестяще справились с предложенным квестом. Более того, комитетчики были в восторге от продуманной сложности метода записи данных на неизвестный носитель. Хорошо хоть, лишние вопросы не задавали, наверняка считали, что остальные части секретного устройства исследуют их же коллеги.
В общем, корректирующий код оказался новейшим, но уже вполне известным, носил имя Рида-Соломона и имел в основании число 256 [261]. Однако в технике не использовался, и мне быстро объяснили причину. Сам по себе процесс кодирования очень прост. Порцию данных в 2 килобайта нужно всего-то «пропустить» через полином, порожденный правилами арифметики Галуа. Тут лучше не вдумываться в непонятные термины, а верить специалистам на слово. Плохо другое, алгоритм исправления ошибок минимум на порядок сложнее, следовательно на скорости в 300 бод с ним не справится даже целая БЭСМ-4.
Стала понятной и наша с Катей неспособность что-то понять в записи. Оказывается, каждый байт из потока уже закодированных данных подвергался преобразованию в четырнадцать бит [262], а между этими словами вставлялись как разделители 3-битные куски так, чтобы на носителе было не более 10 нулей или единиц подряд. Дополнительно к этому добавлялись синхробайты, контрольная сумма и байт служебной информация непонятного назначения.
Уж не знаю, сколько седых волос нажили специалисты-криптографы, разбираясь в этом «взрыве мозга». А применить корректирующее кодирование на практике все равно нельзя, невообразимо сложно для 1966 года. Причем не только алгоритм Рида-Соломона, а любые известные науке варианты. Их, кстати, хватает – у капиталистов отличился Хемминг, в СССР зав. кафедрой Ленинградской академии связи, товарищ Финк предлагал комитетчикам сверточный код еще в конце 50-х…
Разумеется, никто не запрещает сперва создавать образ диска на ЭВМ, а уже потом «кидать» его на резец. Но для этого надо сперва подготовить блок данных в ОЗУ или на магнитном барабане, а лишь потом перенести его на «виниловую дискету». В теории вполне реально, но практика 60-х сразу ставит крест на затее. Нет тут подходящих объемов памяти, и процессорное время стоит совсем не копейки [263]. Потратить несколько часов ЭВМ ради удобства хранения данных? Спецы только пальцем у виска покрутят, да вежливо пошлют… В сад, ага.
Пришлось откатиться на позорный примитив. Федор с расстройства задействовал триады, например вместо «1» – «111». Безусловно, надежность резко выросла, зато емкость упала катастрофически. Двадцать килобайт на мой взгляд попросту не стоили возни, так как влезали на полсотни метров широко распространенной перфоленты.
Поэтому опробовали более экономный вариант – навесили на блоки записываемых данных биты четности для проверки контрольной суммы, и начал записывать на пластинку сразу две копии, разнеся их на пару килогерц. Соответственно, при считывании использовался только «целый» блок. Но ничего хорошего из этого не получилось. Надежность обнаружения дефекта по одному биту оказалась недостаточной, требовалось серьезное усложнение. Вроде бы ничего страшного, задача вполне посильная технике 66-го года… Но уж слишком часто при механическом повреждении дорожки погибали сразу обе копии. В принципе, решение было и тут, достаточно один из каналов «резать» с задержкой по времени…
255
Как правило, минимальной сессией записи является «дорожка» (track), минимальный размер которой 300 секторов. Итого чуть менее мегабайта не считая заголовков.
256
Служебные данные записаны на ATIP (Absolute Time in Pregroove), которая является заполненной красителем канавкой (groove), выдавленной на основе CD. Причем не чисто спиральной, а с вобуляцией, т. е. колеблющейся с частотой от 21,05 до 23,05 кГц и амплитудой 0,03 мкм. С помощью ATIP осуществляется отслеживание положения при записи, синхронизация времени, а также записана служебная информация. Но ГГ всего этого в оптический микроскоп видеть не может.
257
Стартовая область, она же в реальности Lead-in Area – кольцо шириной 4 мм, до 4500 секторов, 1 минута, 9 MB. Финишная область, она же Lead-out Area – кольцо шириной в 1 мм, 6750 секторов, 1.5 минуты, 13.5 MB. В самом начале есть еще Power Calibration Area и Program Memory Area, но их ГГ пока не нашел.
258
В этом случае перед пакетом должен идти один связующий (link) сектор и 4 вводных (run-in). После должны быть записаны 2 выводных сектора (run-out). Всего на сессию получится чуть менее полумиллиона «питов».
259
Предварительным форматированием можно организовать CD-RW как устройство прямого доступа. При этом вспомогательные сектора занимают около 120MB. Nero – популярная программа для записи CD.
260
Длина «сырой» емкости сектора CD – ровно 2352 байта, не больше и не меньше. Однако в силу раскрытых ниже по тексту особенностей он «вырастает» после записи почти в три раза.
261
Код Рида-Соломона был изобретён в 1960 году Ирвином Ридом и Густавом Соломоном. Для записи CD-дисков он был применен в 1982 году. В данном случае алгоритм позволяет исправлять до 392 байт на блок данных из 2048 байт.
262
Для физической «читабельности» применяется 14-битное EFM-слово (от английского Eight to Fourteen Modulation – модуляция восемь в четырнадцать).
263
Первое применение в серийном изделии код Рида-Соломона получил в контроллере жесткого диска IBM 3370 емкостью 571 Мбайт в 1979 году.