CSS, Content Scramble System — система защиты цифрового медиаконтента на DVD-носителях. Система крайне неустойчива к взлому. Из-за ограничений на экспорт криптографических технологий из США длина ключа шифрования ограничена 40 битами, что крайне мало. Более того, из-за найденной уязвимости эффективная длина ключа примерно равна 16 битам — то есть все возможные варианты могут быть перебраны на современном компьютере всего за несколько секунд, что обуславливается примитивным методом защиты.[1] В 2005 на смену CSS пришла более надёжная AACS.

История создания

Спецификация DVD была готова в декабре 1995 года. Производителям DVD-плееров и DVD-приводов было необходимо наличие значительного количества фильмов и музыки на DVD. Однако киностудии заметили, что DVD-диски были бы идеальным источником для копирования фильмов: цифровая информация не будет терять своего качества при перезаписи (видеокассеты не позволяли этого из-за защиты аналогового выхода APS). От DVD Consortium потребовали предоставления соответствующей защиты от копирования. В результате DVD Consortium создал Техническую Рабочую Группу по Защите от Копирования (англ. Copy Protection Technical Working Group, CPTWG). 29 октября 1996 году CPTWG объявила о создании CSS, которую в основном разработали компании Toshiba и Matsushita Electric Industrial. Для лицензирования использования CSS была создана некоммерческая организация Ассоциация по Контролю Копирования DVD (англ. Copy Control Association, DVD CCA).[2]

История взломов

Первая программа для обхода CSS появилась в Интернете в ноябре 1997 года под названием softDVDcrack. Эта программа фактически ломала не CSS, а проигрыватель Zoran. Zoran вскоре исправил ошибки во взломанной версии проигрывателя, но в сети оставались копии старой версии. Процесс взлома был довольно сложный, поэтому массового распространения программа не получила. После этого было ещё множество подобных приложений. Однако крах CSS ассоциируется с появлением в ноябре 1999 года программы DeCSS. Её написал норвежский школьник Йон Йохансен (Jon Johansen) на основе обратной разработки кода проигрывателя Xing, проведённой командой немецких программистов MoRE (Masters of Reverse Engineering). Компания Xing, как оказалось, не закодировала ключ для разблокирования защищённых DVD. DeCSS отличается от всех предшествующих программ тем, что она дешифрует CSS, а не перехватывает поток видео из лицензированного проигрывателя. Более того, любой компьютер, который в состоянии воспроизвести фильм с DVD, сможет достаточно легко взломать CSS с помощью DeCSS. Поэтому DeCSS быстро распространилась по миру, даже несмотря на незаконность в некоторых государствах размещения кода DeCSS на веб-сайтах.[3]

Алгоритм CSS

В действие алгоритма CSS вовлечены несколько компонентов: DVD-диск, DVD-привод, проигрыватель и хост. При этом все они должны быть лицензированы DVD Copy Control Association (DVD CCA) для использования CSS. Алгоритм CSS состоит из двух частей: аутентификация и шифрование.

Аутентификация

  1. DVD-привод запрашивает у хоста 2-битовый идентификатор аутентификации (англ. Authentication Grant ID). Это значение используется для названия аутентификационной сессии.
  2. Происходит взаимная аутентификация между DVD-приводом и хостом. Хост генерирует случайную последовательность из 40 бит и посылает её DVD-приводу. DVD-привод шифрует эту последовательность с помощью CSS хеш-функции (англ. CSS hash), получает 80-битное значение, так называемый ключ вызова (англ. Challenge Key), и отправляет его хосту. Хост сам расшифровывает ответ и сравнивает его со сгенерированной последовательностью. При совпадении значений хост доверяет DVD-приводу, так как считается что только лицензированные устройства и программы могут знать секретную хеш функцию CSS. Производится обратная операция (хост и DVD-привод меняются ролями) после чего DVD-привод доверяет или не доверяет хосту в зависимости от результата сравнения.
  3. Генерируется ключ шины (англ. Bus Key). Хост и DVD-привод комбинируют использовавшиеся при аутентификации случайные последовательности, и при помощи хеш функции CSS каждый получает ключ шины. С помощью этого ключа шифруется дальнейшая передача ключей между хостом и DVD-приводом. Этот ключ никогда не передаётся по шине.
  4. Происходит аутентификация проигрывателя и DVD-диска. Каждый лицензированный проигрыватель имеет один или несколько ключей проигрывателя (англ. Player Key) из списка из 409 ключей. На защищённом диске в невидимой области хранится ключ диска (англ. Disk Key), зашифрованный каждым из 409 ключей, и ключ аутентификации (англ. Authentication Key), то есть ключ диска, зашифрованный самим собой. Эти ключи составляют 2048-байтовый блок. Блок отправляется проигрывателю. Проигрыватель знает в какой области находится ключ диска, зашифрованный его ключом, и расшифровывает значение в этой области. Затем, чтобы проверить подлинность ключа, он расшифровывает ключ аутентификации с помощью найденного ключа диска и сравнивает результат с ключом диска. При совпадения ключей аутентификация считается успешной. В обратном случае проигрыватель проделывает все операции со следующим известным ему ключом проигрывателя и так далее. Ключ диска используется в дальнейшем.[3]

Дешифрование

Данные DVD-диска зашифрованы по секторам. Информация о том, зашифрован сектор или нет, хранится в заголовке сектора. Зашифрованы только секторы, несущие потоковую информацию (видео, изображение, звук), остальные, например отвечающие за навигацию, не зашифрованы. Шифрование данных основано на побитовом сложении с псевдослучайной последовательностью битов и взаимнооднозначной табличной подстановке байтов. Для реализации псевдослучайной последовательности используются линейные регистры сдвига с обратной связью (англ. Linear Feedback Shift Register, LFSR)

  1. Проигрыватель запрашивает у DVD-привода ключ наименования (англ. Title Key). Затем, чтобы получить ключ наименования, он расшифровывает полученные данные с помощью ключа диска.
  2. Регистры сдвига CSS заполняются байтами ключа наименования. В алгоритме CSS участвуют два линейных регистра сдвига с обратной связью: 17-битовый и 25-битовый. Перед заполнением ключ наименования побитово складывается с ключом сектора (англ. Sector Key). Ключ сектора содержится в байтах с 80 по 84 сектора. После сложения, первый и второй байт ключа наименования заполняют 17-битовый регистр, а остальные заполняют 25-битный. В четвёртый бит каждого регистра сдвига вставляется логическая единица, чтобы предотвратить нулевое зацикливание.
  3. Регистры сдвига проходят восемь тактов и каждый выдаёт выходной байт. В качестве обратной связи в регистрах сдвига используется функция «Исключающее Или». В случае 17-битного регистра на вход её подаются биты 1 и 15, а выход подаётся на бит 17 и является выходом регистра сдвига. В случае 25-битного регистра на вход функции подаются биты 1, 4, 5 и 15, а выход подаётся на бит 25 и на выход регистра.[4]
  4. Выходы регистров складываются между собой определённым образом. Перед сложением выход 17-битового регистра побитово инвертируется. Байты выхода регистров складываются обычным восьми битовым сложением, и к ним прибавляется бит переполнения от предыдущего сложения, а полученный бит переполнения (девятый бит суммы) идёт на вход следующего сложения. Результат образует общий выход регистров сдвига. В общем случае выход каждого регистра сдвига может быть либо инвертированным либо нет. Отсюда следует что регистры сдвига могут работать в четырёх режимах. Для шифрования данных используется режим шифрования данных.
  5. Байт зашифрованных данных проходит табличную взаимно однозначную подстановку и складывается с общим выходом регистров сдвига. Результат может быть воспроизведён.[4]

Регистры сдвига CSS

Регистры сдвига CSS

В CSS используются два линейных регистра сдвига с обратной связью (англ. Linear Feedback Shift Register). Сдвиг в регистрах происходит слева направо. Выходным битом является значение функции обратной связи. В четвертый бит каждого регистра при начальном заполнении регистра сдвига выставляется логическая единица.[4]

Режимы шифрования

CSS имеет четыре режима шифрования. Режим выбирается в зависимости от того, какая информация шифруется. Режим влияет на то, происходит инверсия выхода определённого регистра сдвига или нет.

Режим шифрования LSFR-17 LSFR-25
Аутентификация инвертирован неинвертирован
Шифрование ключа шины неинвертирован неинвертирован
Шифрование ключа наименования неинвертирован инвертирован
Шифрование данных инвертирован неинвертирован

[4]

Функция искажения CSS

Функция искажения CSS

При шифровании ключа диска и ключа наименования помимо регистров сдвига используется функция искажения (англ. Mangling Function).

Байты A1—A5 являются входом функции искажения, в них подставляются байты ключа который шифруется. Байты С1—С5 это выход функции. Байты B1—B5 — промежуточные значения. Байты k1—k5 это байты общего выхода регистров сдвига в соответствующем режиме. Регистры сдвига изначально заполняются ключом, с помощью которого происходит шифрование. Символом F обозначена взаимнооднозначная замена байта по таблице. Плюс обозначает побитовое сложение байтов. Выход функции искажения является шифрованным ключом.[1]

Виды ключей

Система обладала следующими видами ключей[5]:

Ключи диска и наименований записывались в lead-in-области диска, чтобы сделать невозможным их непосредственное копирование[6].

Уязвимости системы и возможные атаки

См. также

Примечания

  1. 1 2 3 Frank A. Stevenson. Cryptanalysis of Contents Scrambling System. Дата обращения: 16 ноября 2009. Архивировано 2 июня 2012 года.
  2. Архивированная копия. Дата обращения: 26 ноября 2009. Архивировано 1 июля 2013 года. Technical Opinion regarding CSS
  3. 1 2 Taylor J. DVD Demystified. Дата обращения: 2 октября 2017. Архивировано 25 апреля 2018 года.
  4. 1 2 3 4 5 Operating Systems: Design and Implementation. Lecturer: Gregory Kesden. Дата обращения: 19 ноября 2009. Архивировано 8 января 2019 года.
  5. Cryptography in Home Entertainment — A look at content scrambling in DVDs. Дата обращения: 16 ноября 2009. Архивировано 2 июня 2012 года.
  6. Scott Mueller. Upgrading and repairing PCs, с. 744 Архивная копия от 14 апреля 2018 на Wayback Machine.