Техника защиты компакт-дисков от копирования


F2-фрейм.


Недавно [n2k49]Свежесформированные F1-фреймы поступают на вход специального кодера (Cross Interleaved Reed-Solomon Coder, по своим первым буквам так же называемый CIRС- кодером), где к их 24-байтам добавляют еще 8 байт контрольной суммы Рида-Соломона, в результате чего на выходе кодера образуются F2-фрйемы в 32 -байта длинной.

Содержимое байт, слагающих F1-фрейм на битовом уровне остается неизменным ("The bit pattern of each of the 24 8-bit bytes of an F1-Frame remains unchanged"), но сами эти байты перераспределяются по 106 F2-фреймам, в результате чего F1-фреймы как бы "размазываются" вдоль спиральной дорожки, становясь менее чувствительными к радиальным царапинам диска (и вообще всяким локальным дефектам).

Перемешивание достигается за счет так называемых линий задержки (delay line) и осуществляется по следующей схеме (см. рис. 1.200х049). Первая линия задержки (first delay section) "заглатывает" поступающие на ее вход F1-фреймы уже разбитые на 12 двухбайтовых слов, младший и старший байты которых условно обозначены литерами А и B соответственно, а сами слова последовательно пронумерованы от W12n до W12n+11. Таким образом, первый байт фрейма имеет номер "W12n,A", а последний —– "W12n+11,B".

Рис. 1.20.унок 20 0х049 Процесс кодирования байт

Первая линия задержки расщепляет содержимое фрейма на две группы слов, одна из которых (W12n+2, W12n+3, W12n+6, W12n+7, W12n+10, W12n+11) беспрепятственно проходит на выход, а другая (W12n+0, W12n+1, W12n+4, W12n+5, W12n+8, W12n+9) принудительно удерживается на время обработки двух последующих F1-фрймов. Слова с номера W12n+1…W12n+10 тщательно перемешивается по строго определенной схеме, которую легче изобразить графически (см. рис. 1.20 0x049), чем описать словесно описать.

Перемешенные слова поступают на вход C21--кодера

(encoder С21 encoder[Y50] [n2k51] ), где к ним добавляют четыре байта четности, рассчитанные по кодам Рида-Соломона и последовательно пронумерованные от Q12n+0 до Q12n+3.


Затем, слова, обогащенные Q- байтами четности, попадают на вторую линию задержки (second delay lines), где они задерживаются на промежуток от 1D до 27D времени обработки F1-фрймов, где D равно 4.

ВышедшиеОткинувшиеся "на свободу" слова направляются в очередной кодер Рида-Соломона, условно обозначаемый "C2", где к ним добавляют четыре байта четности, последовательно пронумерованных от Pn+0 до Pn+3. Подобная двухуровневая схема избыточного кодирования значительно уменьшает вероятность возникновения неустранимых ошибок, ведь между C1 и C2 кодерами, обрабатываемые данные хорошенько перемешиваются!

Наконец, последняя, третья линия задержки, задерживает все четные байты потока данных на время обработки одного F1-фрейма. Все! С выхода третьей линии задержки сходит новехонький F2-фрейм, состоящий из 32  байт, последовательно пронумерованных от 0 до 32: 24 байт полезных данных, 4 Q-байт четности и 4 P-байта четности. Причем, в 24 байта полезных данных F2-фрейма входят данные множества различных F1-фрймеов! Другими словами говоря, F2-фрейм нельзя рассматривать как F1-фрем с контрольной суммой.

При считывании данных с лазерного диска происходит обратный процесс (см. рис. 1.21 0x050). Сначала считываемые байты проходят через линию задержки, "захватывающую" четные байты на один фрейм, затем они поступают в C1 декодер (С1 decoder), проверяющий истинность контрольной суммы и пытающийся восстановить сбойные байты при необходимости. Далее следует еще одна линия задержки (1D-27D Delay lines) и еще один декодер (C2 decoder), восстанавливающий то, что не удалось восстановить еще предшественнику. Наконец, с выхода последней линии задержки сходят вполне готовые к употреблению F1-фреймы, которые впоследствии собираются в сектора, но о секторах мы уже говорили ранеевыше, так что не будем повторяться.





Рис. 1.21.унок 21 0x050 Процесс декодирования байт

При данной избыточности корректирующие коды в состоянии исправлять до двух сбойных байт на каждый 24/28-байтовый "ломтик" исходных данных.


При искажении трех и более байт, декодер способен лишь констатировать сам факт искажения, но бессилен восстановить оригинальное содержимое разрушенных байт. Правда, установить какие именно байты были разрушены все-таки возможно, а, значит, их приблизительное значение может быть определено путем интерполяции. Конечно, для дисков с данными такой способ "восстановления" не пригоден, но для Audio-CD он дает вполне удовлетворительный результат. Собственно, Количество неисправимых ошибок даже на качественных носителях достаточно велико и CD-приводам приходится активно заниматься их интерполяцией, о присутствии которой подавляющее большинство меломанов даже и не подозревают.

Компьютерные приводы CD-ROM'ы первого поколения формально поддерживали аудиодиски и даже ухитрялись качественно проигрывать их, но… при попытке цифрового "грабежа" диска в динамиках стоял сплошной треск, подобный тому, что издается поцарапанным винилом. Что ж, ностальгия —– это прекрасно, но, черт возьми, время пластинок давно прошло и причина их стремительного вытеснения компакт-дисками не в последнюю очередь объясняется тем, что качество их звучания компакт-дисков не падает с течением времени, в то время как пластинки неизбежно уродуются со временем. Теперь же оказывается, что приобретаемые нами компакт- диски уже изуродованные и уже "шипят".

Так происходит потому, что приводыранние CD-ROM'ы первого поколения читали аудиодиски "как есть" и при возникновении неисправимых ошибок не осуществляли никаких попыток самостоятельного исправления сбойных байт. Более того, они не сообщали и номера этих байт, в результате чего прикладное программное обеспечение просто не знало что и с чем следует интерполировать! Если искажение затрагивало младшие биты разряда, то – для человеческого уха оно оставалось практически незаметным (даже для уха меломана), но если сбойный бит угодил в старший разряд, —– такое искажение воспринималось человеком как резкий щелочек, даже если по его ушам потоптался китайский медведь панда.


Вообще-то, сбойный сектор можно было попробовать перечитать несколько раз (вдруг с одной из попыток он прочтетсяпочитается нормально?) или проанализировать считанные данные на предмет поиска и "сглаживания" всех крутых "пиков" и "спадов", но это же все полумера, вы понимаете! Качественный "грабеж" аудио на таких приоводах в принципе невозможен. К тому же некоторые производители дисков, озабоченные проблемой их несанкционированного копирования, стали умышленно вносить на них большое количество неисправимых ошибок, в результате чего в аудио-режиме диск читался нормально (даже на компьютерном приводе), но попытка его "грабежа", равно как и попытка копирования на болванку CD-R болванку терпели неудачу, ибо качество звучания было на редкость удручающим и едва ли могло соперничать с дедушкой граммофоном.

Сейчас, однако, ситуация понемногу начала исправляться и некоторые из современных приводов CD-ROM приводов уже способны возвращать в потоке данных указатели на искаженные биты. На программном уровне это достигается передачей приводу команды BEh (READ CD) c ненулевым значением поля "Error Flags" (оно расположено в 1—-2 битах 9-го байта ATAPI/SCSI-пакета, см. так же демонстрационный пример [/etc/RAW.CD.READ/aspi32.C2.c]). Подробнее об этом можно прочитать в Стандарте на DVD/CD-ROM приводы (http://www.stanford.edu/~csapuntz/specs/INF-8020.PDF

page  143), здесь же мы сосредоточимся не сколько на описании формата полей команды READ CD, сколько на самих C2-указателях (C2- pointers), которые строго говоря, никакими указателями не являются, а представляют собой обычную битовую карту, помещаемую в самый конец возвращаемых приводом данных. Каждому байту исходных данных соответствует "свой" бит C2-pointers бит, анализ значения которого и позволяет однозначно установить: является ли данный байт сбойным или нет. Учитывая, что длина сектора составляет 2352 байта, становится нетрудно рассчитать совокупный размер всех битов C2-pointers битов вместе взятых, который равен 2352/8 = 294 байтам, причем первый байт сектора соответствует первому биту C2-pointers биту (см.


рис. 1.22 0x051).



Рис. 1.22.унок 22 0х051 Последовательность фреймов, образующая блок

Узнать поддерживает ли данный конкретный привод такую возможность или нет можно посылкой команды MODE SENSE 10 (5Ah) c кодом страницы (Page Code) равным 2Ah (C/DVD Capabilities and Mechanical Status Page Format) тогда единичное значение 4-го  бита 13-го  байта возращенных данных укажет на то, что C2 Pointers is Supported и, соответственно, наоборот (см. так же демонстрационный пример ["/etc/RAW.CD.READ/aspi32.cfg.c]"). В частности, мой PHILIPS CDRW 2400 ничего подобного, увы, не поддерживает.

Но довольно о грустном. Лучше вернемся к нашим C1- и C2-декодерам, а точнее,  – к методике подсчета количества ошибок. Существует как минимум шесть типов ошибок, по три для каждой из двух стадий исправления: а) одно-символьные (исправимые) ошибки, соответствующие первой стадии восстановления (т. е. исправляемые декодером C1); б) двухх символьные (исправимые) ошибки, соответствующие первой стадии исправления и в) трехсимвольные (уже, увы, неисправимые) ошибки, соответствующие все той же стадии. Аналогичная картина наблюдается и на втором уровне восстановления, относящемуся к декодеру C2. Ошибки принято обозначать заглавной буквой "E" (лат. — от слова Error) с непосредственно примыкающим к ней двухзначным числом, первая цифра которого обозначает число ошибок (1, 2 или 3), а вторая —– стадию исправления (1 или 2). Для большей наглядности все возможные комбинации этих цифр сведены в таблицу (табл.лице 1.2), приведенной ниже.

Таблица 1.2. Условное обозначение различных типов ошибок

Обозначение

Пояснение

E11

Количест-во одно-символьных (исправимых ошибок)   на стадии C1

E21

Количест-во двух символьных (исправимых ошибок)   на стадии C1

E31

Количест-во трехсимвольных  (неисправимых

ошибок) на стадии C1

E12

Количест-во одно-символьных (исправимых ошибок)   на стадии C2

E22

Количест-во двух символьных (исправимых ошибок)   на стадии C2

E32

Количест-во трехсимвольных  (неисправимых

ошибок) на стадии C2

<


Таблица 2 условное обозначение различных типов ошибок

Трехсимвольные ошибки, неустранимые на стадии C1 (т. е. ошибки E31 ошибки) в большинстве случаев могут быть успешно восстановлены на следующей стадии исправления, однако, одна-единственная ошибка E31  ошибка может вызвать до 30 ошибок E12, ведь между C1- и C2 декодерамдекодерамии данные 160 F1-фреймов тщательно перемешиваются!

Трехсимвольные ошибки, неустранимые на стадии C2 (т. е. ошибки E32 ошибки), свидетельствует о серьезном физическом дефекте поверхности диска, которые (в силу несовершенства технологических процессов) даже на "свежих" дисках отнюдь не так редки, как это может показаться на первый взгляд. Именно поэтому и приходится использовать дополнительные корректирующие коды на дисках с данными (для аудиодисков в этом случае используется интерполяция, но для данных интерполяция бессмысленна). Подробнее об этом можно прочесть в разд.главе "«"Сырые» и «сухие» сектора"Сырые" и "сухие" сектора::ECC/EDC этой главы, здесь же мы не будет возвращаться к уже рассмотренным вопросам.


Содержание раздела