Content Scramble System

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Работа с оптическими дисками
Типы оптических дисков
Форматы
Технологии защиты

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. Её написал норвежский школьник Джон Йохансен (John Johansen) на основе обратной разработки кода проигрывателя Xing немецкой командой программистов MoRE (Masters of Reverse Engineering). Компания Xing, как оказалось, не закодировала ключ для разблокирования защищённых DVD. DeCSS отличается от всех предшествующих программ, тем что она дешифрует CSS, а не перехватывает поток видео из лицензированного проигрывателя. Более того, любой компьютер, который в состоянии воспроизвести фильм с DVD, сможет достаточно легко взломать CSS с помощью DeCSS. Поэтому DeCSS быстро распространилась по миру, даже несмотря на незаконность, в некоторых государствах, размещения кода DeCSS на Web сайтах.[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-битовое значение, т. н. ключ вызова (англ. Chalange Key), и отправляет его хосту. Хост сам расшифровывает ответ и сравнивает его со сгенерированной последовательностью. При совпадении значений хост доверяет DVD-приводу, так как считается что только лицензированные устройства и программы могут знать секретную хеш функцию CSS. Производится обратная операция (хост и DVD-привод меняются ролями) после чего DVD-привод доверяет или не доверяет хосту в зависимости от результата сравнения.
  3. Генерируется ключ шины (англ. Bus Key). Хост и DVD-привод комбинируют использовавшиеся при аутентификации случайные последовательности, и при помощи хеш функции CSS каждый получает ключ шины. С помощью этого ключа шифруется дальнейшая передача ключей между хостом и DVD-приводом. Этот ключ никогда не передаётся по шине.
  4. Происходит аутентификация проигрывателя и DVD-диска. Каждый лицензированный проигрыватель имеет один или несколько ключей проигрывателя (англ. Player Key) из списка из 409 ключей. На защищённом диске в невидимой области хранится ключ диска (англ. Disk Key), зашифрованный каждым из 409 ключей, и ключ аутентификации (англ. Autentication 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[править | править исходный текст]

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

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

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

Виды ключей[править | править исходный текст]

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

  • Ключи DVD-проигрывателя (англ. Player Keys). Каждый производитель лицензировал свой ключ (один из 409 имеющихся) для использования в своих DVD-проигрывателях у DVD Copy Control Association — организации, основанной DVD Forum.
  • Ключи диска (англ. Disk Keys), зашифрованные с помощью ключей DVD-проигрывателей. Каждый DVD-проигрыватель расшифровывал ключ диска с помощью своего ключа проигрывателя.
  • Ключи наименования (англ. Title Keys) — ключи, зашифрованные с помощью ключа диска и требующиеся для расшифрования отдельных фрагментов данных.

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

Уязвимости системы и возможные атаки[править | править исходный текст]

  • Секретность алгоритма
    В криптографии принято считать шифры с секретным алгоритмом шифрования более слабыми, чем шифры с открытым алгоритмом. В открытом шифре более вероятно обнаружение уязвимостей на этапе разработки и их исправление. При огласке же секретного алгоритма, система теряет криптостойкость, обеспечивавшуюся секретностью алгоритма, и исправить алгоритм после начала широкого его использования проблематично. Соглашение о не разглашении внутреннего устройства CSS, заключаемое при получении лицензии, не исключает возможность разглашения. Использование же CSS в большом количестве программ и устройств повышало риск рассекречивания алгоритма при помощи обратной разработки.
  • Длина ключа
    Ключи диска в CSS имеют длину 40 бит. Ключ такой длины можно подобрать на современном персональном компьютере за время порядка суток. Однако разработчики CSS исходили из предположения, что такая атака будет достаточно затратной чтобы использоваться в массовом копировании дисков; единичные случаи взломов они не исключали.
    • Атака (сложность 240): Полный перебор.
  • Выход линейных регистров сдвига
    При известных нескольких байтах общего выхода регистров сдвига можно узнать начальное состояние регистров сдвига, а значит и ключ, которым заполнялись регистры.
    • Атака 1 (сложность 216): Для осуществления атаки надо знать 6 байт общего выхода регистров сдвига.
      1. Предположить начальное состояния регистра LFSR-17
      2. Получить 4 байта выхода из LSFR-17
      3. Зная выход LSFR-17 при помощи побитового сложения с 4-мя байтами общего выхода (которые известны) получить выход LSFR-25
      4. На основе выхода выяснить начальное состояние LSFR-25, прокрутив его на 4 байта назад
      5. Выдать ещё 2 байта и сравнить с оставшимися 2-умя известными байтами общего выхода
      6. При несовпадении начать заново
    • Атака 2 (сложность 217): Для осуществления атаки надо знать 5 байт общего выхода регистров сдвига. Данная атака практичнее предыдущей, так как узнать 5 байт выхода регистров сдвига можно из атаки на функцию искажения.
      1. Предположить начальное состояния регистра LFSR-17
      2. Получить 3 байта выхода из LSFR-17
      3. Получить 3 байта выхода LSFR-25 (тем же способом что и в Атаке 1). Для выяснения начального состояния LSFR-25 требуется знание ещё одного бита
      4. Предположить значение недостающего бита
      5. Выбрать значение бита, которому соответствует начальное состояние с логической единицей в четвёртом бите (признак начального состояния)
      6. Если в оба значения подходят, то проверить и то и другое
      7. Выдать ещё два байта и сравнить их с известными байтами выхода
      8. При несовпадении начать заново
  • Функция искажения
    Из известного входа и выхода функции искажения (A и C) можно узнать 5 байт выхода регистров сдвига (k)
    • Атака (сложность 28): Для осуществления необходимо знать вход A и выход C функции искажения. Предполагается также что правило взаимно однозначной подстановки F тоже известно
      1. Предположить значение k5
      2. Поочередно выяснить все неизвестные значения k и B
      3. Сравнить известное значение C1 и полученное из найденных k1 и B1
      4. Повторить все действия при несовпадении[4]
  • Ключ аутентификации
    Ключ аутентификации — это ключ диска, зашифированный с помощью ключа диска. Эта информация облегчает нахождение ключа диска из ключа аутентификации
    • Атака (сложность 225) Ключ аутентификации, то есть вход функции искажения A, считается известным. Найденные значения C будут являться ключом диска. Данная атака словарная поэтому необходимо построить несколько таблиц:
      1) Сопоставление каждой паре B1 и k2 (при известных A1 и A2) соответствующего C2
      2) Сопоставление каждому начальному состоянию LSFR-25 первого, второго и пятого из 5-ти байтов его выхода
      1. Предположить значение B2 и начальное состояние регистра LSFR-17
      2. Найти k1 и k5 (C1 и C2 известны, ими заполняется LSFR-17)
      3. Найти возможные для выбранного B1 и C2 все возможные k2 (найдётся не больше восьми)
      4. Найти первый, второй и пятый байт выхода регистра LSFR-25 (выход LSFR-17 можем получить, общий выход равен k и известен)
      5. Восстановить по второй таблице начальное состояние регистра LSFR-25 и тем самым получить значение C3, C4 и C5.
      6. По аналогии с атакой функции искажения найти B2 и проверить, возможно ли такое значение при данных A1,A2 и k2
      7. При несовпадении начать алгоритм заново[1]

См. также[править | править исходный текст]

Примечания[править | править исходный текст]