CSS
,
Content Scramble System
— система защиты цифрового медиаконтента на
DVD
-носителях. Система крайне неустойчива к взлому. Из-за ограничений на экспорт криптографических технологий из США длина ключа шифрования ограничена 40 битами, что крайне мало. Более того, из-за найденной уязвимости эффективная длина ключа примерно равна 16 битам — то есть все возможные варианты могут быть
перебраны
на современном компьютере всего за несколько секунд, что обуславливается примитивным методом защиты.
В 2005 на смену CSS пришла более надёжная
AACS
.
Содержание
История создания
Спецификация
DVD
была готова в декабре
1995 года
. Производителям DVD-плееров и DVD-приводов было необходимо наличие значительного количества фильмов и музыки на DVD. Однако киностудии заметили, что DVD-диски были бы идеальным источником для копирования фильмов: цифровая информация не будет терять своего качества при перезаписи (видеокассеты не позволяли этого из-за защиты аналогового выхода
). От
потребовали предоставления соответствующей защиты от копирования. В результате DVD Consortium создал Техническую Рабочую Группу по Защите от Копирования (
англ.
Copy Protection Technical Working Group, CPTWG
). 29 октября
1996 году
CPTWG объявила о создании CSS, которую в основном разработали компании
Toshiba
и
Matsushita Electric Industrial
. Для лицензирования использования CSS была создана некоммерческая организация Ассоциация по Контролю Копирования DVD (
англ.
Copy Control Association, DVD CCA
).
История взломов
Первая программа для обхода CSS появилась в Интернете в ноябре
1997 года
под названием softDVDcrack. Эта программа фактически ломала не CSS, а проигрыватель Zoran. Zoran вскоре исправил ошибки во взломанной версии проигрывателя, но в сети оставались копии старой версии. Процесс взлома был довольно сложный, поэтому массового распространения программа не получила. После этого было ещё множество подобных приложений. Однако крах CSS ассоциируется с появлением в ноябре
1999 года
программы
DeCSS
. Её написал норвежский школьник Йон Йохансен (Jon Johansen) на основе
обратной разработки кода
проигрывателя
, проведённой командой немецких программистов MoRE (Masters of Reverse Engineering). Компания Xing, как оказалось, не закодировала ключ для разблокирования защищённых DVD.
DeCSS
отличается от всех предшествующих программ тем, что она дешифрует CSS, а не перехватывает поток видео из лицензированного проигрывателя. Более того, любой компьютер, который в состоянии воспроизвести фильм с DVD, сможет достаточно легко взломать CSS с помощью
DeCSS
. Поэтому
DeCSS
быстро распространилась по миру, даже несмотря на незаконность в некоторых государствах размещения кода DeCSS на веб-сайтах.
Алгоритм CSS
В действие алгоритма CSS вовлечены несколько компонентов: DVD-диск, DVD-привод, проигрыватель и хост. При этом все они должны быть лицензированы DVD Copy Control Association (DVD CCA) для использования CSS. Алгоритм CSS состоит из двух частей: аутентификация и шифрование.
Аутентификация
DVD-привод запрашивает у хоста 2-битовый идентификатор аутентификации (
англ.
Authentication Grant ID
).
Это значение используется для названия аутентификационной сессии.
Происходит взаимная аутентификация между DVD-приводом и хостом.
Хост генерирует случайную последовательность из 40 бит и посылает её DVD-приводу. DVD-привод шифрует эту последовательность с помощью CSS хеш-функции (
англ.
CSS hash
), получает 80-битное значение, так называемый ключ вызова (
англ.
Challenge Key
), и отправляет его хосту. Хост сам расшифровывает ответ и сравнивает его со сгенерированной последовательностью. При совпадении значений хост доверяет DVD-приводу, так как считается что только лицензированные устройства и программы могут знать секретную хеш функцию CSS. Производится обратная операция (хост и DVD-привод меняются ролями) после чего DVD-привод доверяет или не доверяет хосту в зависимости от результата сравнения.
Генерируется ключ шины (
англ.
Bus Key
).
Хост и DVD-привод комбинируют использовавшиеся при аутентификации случайные последовательности, и при помощи хеш функции CSS каждый получает ключ шины. С помощью этого ключа шифруется дальнейшая передача ключей между хостом и DVD-приводом. Этот ключ никогда не передаётся по шине.
Происходит аутентификация проигрывателя и DVD-диска.
Каждый лицензированный проигрыватель имеет один или несколько ключей проигрывателя (
англ.
Player Key
) из списка из 409 ключей. На защищённом диске в невидимой области хранится ключ диска (
англ.
Disk Key
), зашифрованный каждым из 409 ключей, и ключ аутентификации (
англ.
Authentication Key
), то есть ключ диска, зашифрованный самим собой. Эти ключи составляют 2048-байтовый блок. Блок отправляется проигрывателю. Проигрыватель знает в какой области находится ключ диска, зашифрованный его ключом, и расшифровывает значение в этой области. Затем, чтобы проверить подлинность ключа, он расшифровывает ключ аутентификации с помощью найденного ключа диска и сравнивает результат с ключом диска. При совпадения ключей аутентификация считается успешной. В обратном случае проигрыватель проделывает все операции со следующим известным ему ключом проигрывателя и так далее. Ключ диска используется в дальнейшем.
Дешифрование
Данные DVD-диска зашифрованы по секторам. Информация о том, зашифрован сектор или нет, хранится в заголовке сектора. Зашифрованы только секторы, несущие потоковую информацию (видео, изображение, звук), остальные, например отвечающие за навигацию, не зашифрованы. Шифрование данных основано на побитовом сложении с псевдослучайной последовательностью битов и взаимнооднозначной табличной подстановке байтов. Для реализации псевдослучайной последовательности используются
линейные регистры сдвига с обратной связью
(
англ.
Linear Feedback Shift Register, LFSR
)
Проигрыватель запрашивает у DVD-привода ключ наименования (
англ.
Title Key
).
Затем, чтобы получить ключ наименования, он расшифровывает полученные данные с помощью ключа диска.
Регистры сдвига CSS заполняются байтами ключа наименования.
В алгоритме CSS участвуют два линейных регистра сдвига с обратной связью: 17-битовый и 25-битовый. Перед заполнением ключ наименования побитово складывается с ключом сектора (
англ.
Sector Key
). Ключ сектора содержится в байтах с 80 по 84 сектора. После сложения, первый и второй байт ключа наименования заполняют 17-битовый регистр, а остальные заполняют 25-битный. В четвёртый бит каждого регистра сдвига вставляется логическая единица, чтобы предотвратить нулевое зацикливание.
Регистры сдвига проходят восемь тактов и каждый выдаёт выходной байт
. В качестве обратной связи в регистрах сдвига используется функция «Исключающее Или». В случае 17-битного регистра на вход её подаются биты 1 и 15, а выход подаётся на бит 17 и является выходом регистра сдвига. В случае 25-битного регистра на вход функции подаются биты 1, 4, 5 и 15, а выход подаётся на бит 25 и на выход регистра.
Выходы регистров складываются между собой определённым образом.
Перед сложением выход 17-битового регистра побитово инвертируется. Байты выхода регистров складываются обычным восьми битовым сложением, и к ним прибавляется бит переполнения от предыдущего сложения, а полученный бит переполнения (девятый бит суммы) идёт на вход следующего сложения. Результат образует общий выход регистров сдвига. В общем случае выход каждого регистра сдвига может быть либо инвертированным либо нет. Отсюда следует что регистры сдвига могут работать в четырёх режимах. Для шифрования данных используется режим шифрования данных.
Байт зашифрованных данных проходит табличную взаимно однозначную подстановку и складывается с общим выходом регистров сдвига.
Результат может быть воспроизведён.
Регистры сдвига CSS
В CSS используются два
линейных регистра сдвига с обратной связью
(
англ.
Linear Feedback Shift Register
). Сдвиг в регистрах происходит слева направо. Выходным битом является значение функции обратной связи. В четвертый бит каждого регистра при начальном заполнении регистра сдвига выставляется логическая единица.
Режимы шифрования
CSS имеет четыре режима шифрования. Режим выбирается в зависимости от того, какая информация шифруется. Режим влияет на то, происходит инверсия выхода определённого регистра сдвига или нет.
Режим шифрования
LSFR-17
LSFR-25
Аутентификация
инвертирован
неинвертирован
Шифрование ключа шины
неинвертирован
неинвертирован
Шифрование ключа наименования
неинвертирован
инвертирован
Шифрование данных
инвертирован
неинвертирован
Функция искажения CSS
При шифровании ключа диска и ключа наименования помимо регистров сдвига используется функция искажения (
англ.
Mangling Function
).
Байты
A1—A5
являются входом функции искажения, в них подставляются байты ключа который шифруется. Байты
С1—С5
это выход функции. Байты
B1—B5
— промежуточные значения. Байты
k1—k5
это байты общего выхода регистров сдвига в соответствующем режиме. Регистры сдвига изначально заполняются ключом, с помощью которого происходит шифрование. Символом
F
обозначена взаимнооднозначная замена байта по таблице.
Плюс
обозначает побитовое сложение байтов. Выход функции искажения является шифрованным ключом.
Виды ключей
Система обладала следующими видами ключей
:
Ключи DVD-проигрывателя
(
англ.
Player Keys
). Каждый производитель лицензировал свой ключ (один из 409 имеющихся) для использования в своих DVD-проигрывателях у
DVD Copy Control Association
— организации, основанной
DVD Forum
.
Ключи диска
(
англ.
Disk Keys
), зашифрованные с помощью
ключей DVD-проигрывателей
. Каждый DVD-проигрыватель расшифровывал ключ диска с помощью
своего
ключа проигрывателя.
Ключи наименования
(
англ.
Title Keys
) — ключи, зашифрованные с помощью ключа диска и требующиеся для расшифрования отдельных фрагментов данных.
Ключи диска и наименований записывались в
-области диска, чтобы сделать невозможным их непосредственное копирование
.
Уязвимости системы и возможные атаки
Секретность алгоритма
. В криптографии принято считать шифры с секретным алгоритмом шифрования более слабыми, чем шифры с открытым алгоритмом. В открытом шифре более вероятно обнаружение уязвимостей на этапе разработки и их исправление. При огласке же секретного алгоритма система теряет криптостойкость, обеспечивавшуюся секретностью алгоритма, и исправить алгоритм после начала широкого его использования проблематично. Соглашение о неразглашении внутреннего устройства CSS, заключаемое при получении лицензии, не исключает возможности разглашения. Использование же CSS в большом количестве программ и устройств повышало риск рассекречивания алгоритма при помощи
обратной разработки
.
Длина ключа
. Ключи диска в CSS имеют длину 40 бит. Ключ такой длины можно подобрать на современном персональном компьютере за время порядка суток. Однако разработчики CSS исходили из предположения, что такая атака будет достаточно затратной, чтобы использоваться в массовом копировании дисков; единичные случаи взломов они не исключали.
Атака (сложность 2
40
):
Полный перебор.
Выход линейных регистров сдвига
. При известных нескольких байтах общего выхода регистров сдвига можно узнать начальное состояние регистров сдвига, а значит, и ключ, которым заполнялись регистры.
Атака 1 (сложность 2
16
):
Для осуществления атаки надо знать 6 байт общего выхода регистров сдвига.
Предположить начальное состояния регистра LFSR-17
Получить 4 байта выхода из LSFR-17
Зная выход LSFR-17, при помощи побитового сложения с 4 байтами общего выхода (которые известны) получить выход LSFR-25
На основе выхода выяснить начальное состояние LSFR-25, "прокрутив" его на 4 байта назад
Выдать ещё 2 байта и сравнить с оставшимися 2 известными байтами общего выхода
При несовпадении начать заново
Атака 2 (сложность 2
17
):
Для осуществления атаки надо знать 5 байт общего выхода регистров сдвига. Данная атака практичнее предыдущей, так как узнать 5 байт выхода регистров сдвига можно из атаки на функцию искажения.
Предположить начальное состояния регистра LFSR-17
Получить 3 байта выхода из LSFR-17
Получить 3 байта выхода LSFR-25 (тем же способом что и в Атаке 1). Для выяснения начального состояния LSFR-25 требуется знание ещё одного бита
Предположить значение недостающего бита
Выбрать значение бита, которому соответствует начальное состояние с логической единицей в четвёртом бите (признак начального состояния)
Если в оба значения подходят, то проверить и то, и другое
Выдать ещё два байта и сравнить их с известными байтами выхода
При несовпадении начать заново
Функция искажения
Из известного входа и выхода функции искажения (
A
и
C
) можно узнать 5 байт выхода регистров сдвига (
k
)
Атака (сложность 2
8
):
Для осуществления необходимо знать вход
A
и выход
C
функции искажения. Предполагается также, что правило взаимно однозначной подстановки
F
тоже известно
Предположить значение
k5
Поочередно выяснить все неизвестные значения
k
и
B
Сравнить известное значение
C1
и полученное из найденных
k1
и
B1
Повторить все действия при несовпадении
Ключ аутентификации
Ключ аутентификации — это ключ диска, зашифированный с помощью ключа диска. Эта информация облегчает нахождение ключа диска из ключа аутентификации
Атака (сложность 2
25
)
Ключ аутентификации, то есть вход функции искажения
A
, считается известным. Найденные значения
C
будут являться ключом диска. Данная атака
словарная
, поэтому необходимо построить несколько таблиц:
1) Сопоставление каждой паре
B1
и
k2
(при известных
A1
и
A2
) соответствующего
C2
2) Сопоставление каждому начальному состоянию LSFR-25 первого, второго и пятого из 5 байтов его выхода
Предположить значение
B2
и начальное состояние регистра LSFR-17
Найти
k1
и
k5
(
C1
и
C2
известны, ими заполняется LSFR-17)
Найти возможные для выбранного
B1
и
C2
все возможные
k2
(найдётся не больше восьми)
Найти первый, второй и пятый байт выхода регистра LSFR-25 (выход LSFR-17 можем получить, общий выход равен
k
и известен)
Восстановить по второй таблице начальное состояние регистра LSFR-25 и тем самым получить значение
C3
,
C4
и
C5
.
По аналогии с атакой функции искажения найти
B2
и проверить, возможно ли такое значение при данных
A1
,
A2
и
k2