Я провёл своё детство во Франции, много играл в футбол и слишком долго смотрел телевизор. В 80-х во Франции было три телеканала. Два из них, Antenne 2 и FR3, финансировались государством и были скучными, а TF1 был частным и показывал много японских мультиков. Моё поколение выросло на «Капитане Цубасе», «Святом Сейя», «Капитане Харлоке» и «Грендайзере».
У нас не было ни кабельного, ни Интернета, телесигнал транслировался по воздуху и на крыше каждого дома стояла ловившая волны антенна.
Всё изменилось в 1984 году с появлением четвёртого канала. Canal Plus (Channel Plus) должен был совершить революцию на рынке телеканалов, показывая современные фильмы, спортивные трансляции со всего мира и не имея при этом рекламы. Для удовлетворения амбиций владельцев «Canal» должен был финансироваться ежемесячной абонентской платой подписчиков.
Техническая трудность такой схемы была совершенно понятна. Как гарантировать, что канал смогут смотреть только заплатившие абоненты, если его сигнал транслируется всем? Легко — достаточно закодировать его технологией под названием «Discret 11».
Сигнал SECAM
Телесистема Франции использовала не NTSC, а SECAM, который во многом был похож на PAL. Видеочасть сигнала состояла из потока кадров, передаваемых с частотой 25 Гц. Каждый кадр состоял из 625 блоков (то есть каждому блоку выделялось 64 мс). Аудиопоток передавался в конце блоков.
Каждый блок содержал данные, которые электронно-лучевая трубка телевизора использовала для отрисовки одной строки развёртки. Она выполняла проход из левого верхнего в нижний правый угол экрана. Так как трубке нужно было изменять своё положение по вертикали (VSYNC), а сигналу требовались метаданные, в видимые строки превращались только 576 из 625 блоков.
Разрешение по вертикали полностью дискретно, а разрешение по горизонтали является аналоговым[1]. Из-за горизонтального сброса (HSYNC) в строке из 64 мс были доступны только 52 мс, что позволяло обеспечить разрешение 704 точек.
Полезно было то, что не все телевизоры имели наилучшее качество. Некоторые модели урезали картинку и не отображали 704x576 полностью. Существует понятие невидимой области (▮), которая никогда не отображается, области действия (▮), которая может отображаться, и области титров (▮), которая гарантированно отображается на всех телевизорах.
Шифрование
Discret 11 выполняет шифрование не на уровне кадров, а на уровне строк. На самом деле, он даже не шифрует сигнал, а осуществляет задержку строки, сдвигая её вправо и заполняя левую часть чёрным цветом. Это реализуется благодаря аналоговой природе сигнала: данные строки откладываются и заменяются пустыми. Красота таких процессов заключается в том, что их можно обеспечить при помощи дешёвого аналогового оборудования, без необходимости дорогостоящих цифровых систем.
Чтобы выбрать величину сдвига строки, Discret 11 использует секретный 11-битный ключ (отсюда и его название). Ключ используется как seed (порождающее значение) в сдвиговом регистре с линейной обратной связью (Linear Feedback Shift Register, LFSR) (та же техника применяется в Wolfenstein 3D при попиксельной заливке экрана[2]) для генерации псевдослучайных последовательностей чисел.
Для каждой из 576 строк из LFSR берётся число. Деление на 3 с остатком преобразует значение из интервала 0-2047 в интервал 0-2. Оно сообщает, насколько нужно отложить (сдвинуть) вправо строку (на 0, 13 или 26 «пикселей»).
Вот и всё. Как можно увидеть из примера ниже, это простая, но высокоэффективная схема.
Если строки откладываются, сдвигаясь вправо, и слева заполняются чёрным, то часть данных пропадает. Как же идеально воссоздать изображение при расшифровке? Для этого применяются описанные выше области. Телесигнал не использует полное разрешение 576x704, он заполняется чёрными границами, чтобы оставаться в области титров. Поэтому столько же, сколько вставляется слева, теряется справа.
Разработчик Cryptimage[3] по имени Mannix предоставил мне более подробную информацию о внутренней работе Discret 11.
Выбор задержки (0, 902 нс и 1804 нс) зависит от назначенного строке значения LFSR и текущего кадра внутри последовательности из шести кадров 6 (через каждые 6 кадров LFSR сбрасывается на исходное значение seed).
Также декодер отслеживает значение яркости двух телевизионных строк: 310 и 622. Эти строки могут мерцать, становясь «полностью чёрными» или «полностью белыми», что позволяет декодеру синхронизировать процесс расшифровки, выбирать нужный уровень аудитории (передаваемый через строку 622) и инициализировать seed LFSR; кроме того, для вычисления правильного значения seed декодер использует 16-битный код, хранящийся в его чипе EEPROM.
Внутри декодера используется 8-битный микроконтроллер семейства Intel MCS48 (Intel 8048), содержащий основную программу.
— Mannix
Постойте-ка, строка 310 для синхронизации будет постоянно мерцать чёрным и белым? Но она ведь посередине экрана? Нет. На самом деле, каждый кадр состоит из двух полей, содержащих сначала все чётные, а затем все нечётные строки. Электронная трубка сначала обновляет чётные строки, а затем нечётные. Так достигается частота обновления 50 Гц при сигнале в 25 Гц. Строка 310 находится внизу экрана и невидима.
А что насчёт аудиосигнала?
Вероятно, потому, что в случае взлома аудиосигнал будет гораздо меньшей проблемой, он получил намного меньше внимания, чем видео. Для его шифрования использовался принцип «безопасность через неясность» (security via obscurity).
Обычный сигнал SECAM использует частотную модуляцию (FM) на несущей частоте 6 МГц. Discret 11 модулирует сигнал при помощи амплитудной модуляции (AM), использующей несущий сигнал 12,8 кГц (с фильтром низких частот для устранения искажений[4]). Принцип заключается в разделении звука на два диапазона примерно в районе 12,8 кГц и переносе высокого диапазона вниз, а низкого — вверх.
Это полностью обратимый «жёсткий» процесс, не требующий ключа; для его взлома достаточно анализа и знаний.
Расшифровка
Разобравшись с передачей зашифрованного сигнала SECAM с трансляторов, инженеры Canal+ должны были найти простой способ его использования на стороне абонентов.
Решение заключалось в передаче пользователям устройства под названием «decodeur». Получая на входе зашифрованный сигнал с антенны, он через выход SCART[5] передавал его на подключенный телевизор. Для просмотра Canal+ абоненты переключались не на четвёртый канал, а на вход SCART.
Система защиты от жульничества и ключ LEET
Отправлявшиеся по почте коды, изображение взято у Mannix
Далее идёт проблема защиты от обмана системы. Основной проблемой была система «секретного ключа». Рано или поздно он бы утёк, поэтому его каждый месяц меняли. Пользователи должны были вводить новый ключ с клавиатуры на верхней части «decodeur». Замена ключей производилась каждые четыре месяца и они заранее отправлялись по почте.
При 11-битном ключе было бы логично вводить ключ из четырёх цифр. Но у такой схемы есть две слабости: она не была бы защищена от атак перебором и позволяла бы абоненту отменить подписку и использовать ключ другого человека.
Поэтому решили использовать коды, состоящие не из четырёх, а из восьми цифр. Это число вводилось в чип и хешировалось с серийным номером декодера, что позволяло защититься и от перебора, и от передачи ключа другим лицам. Mannix сообщает, что у такой системы были и другие преимущества.
Вводимые пользователем восемь цифр создавали не один, а шесть ключей, потому что система имела функцию разных уровней аудитории (так никогда и не применявшуюся). Она должна была позволить разделить абонентскую подписку на категории «Фильмы», «Спорт», «Документалки» и так далее.
Восемь цифр и прошитый в EEPROM серийный номер становятся 16-битным ключом, который, в свою очередь, используется для генерации шести 11-битных ключей для каждого из уровней. Для идентификации уровня, к которому принадлежит программа, он кодировался мерцанием строки 622.
Также существовал седьмой уровень аудитории, использовавшийся в конце месяца (в течение двух или трёх дней для перехода к следующему месяцу). Это своего рода «бесплатный режим», который все декодеры могли расшифровать даже без абонентской платы. Седьмой уровень аудитории всегда использовал такой 11-битный ключ: 1337.
— Mannix
Эпилог
Несмотря на свою простоту и эффективность, Discret 11 действовал не так долго. «Canal» вышел в эфир 4 ноября 1984 года. Два часа спустя, во время трансляции последнего фильма с Бельмондо, выяснилось, что 2% телевизоров были несовместимы с системой[6]. А это 180 тысяч очень недовольных пользователей.
В декабре 1984 года журнал Radio Plans едва не опубликовал схему Discret 11, но решением суда публикация была запрещена. Чертежи всё равно утекли и их активно фотокопировали. Позже, под сомнительным предлогом необходимости предоставления доступа к контенту жителям Бельгии, Люксембурга и Монако, журнал «Le quotidien de Paris» всё-таки опубликовал схемы[7].
Пиратство стало повсеместным. Из-за спроса на чипы задержки «TBA 970» в магазинах электроники их сотрудники начали предлагать полный набор деталей, необходимых для сборки «decodeur pirate». В 1992 году систему шифрования сменили на шифрование Nagravision, а к 1995 году использование Discret 11 прекратилось.
Эти проблемы не помешали огромному успеху четвёртого канала. В 1996 году он запустил CanalSatellite и стал крупнейшим поставщиком спутникового вещания в Европе[8].
Ссылки
[1] Does PAL has any resolution?
[2] Fizzlefade [перевод на Хабре]
[3] Cryptimage
[5] SCART
[6] Книга «In the Baba» Пьера Лескюра
[7] Схема Discret 11 из Radio Plans
Автор: PatientZero