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 на вебсайтах.
Алгоритм 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 ключів, і ключ аутентифікації (англ.Autentication Key), тобто ключ диска, зашифрований самим собою. Ці ключі складають 2048-байтовий блок. Блок відправляється програвача. Програвач знає в якій області знаходиться ключ диска, зашифрований його ключем, і розшифровує значення в цій області. Потім, щоб перевірити справжність ключа, він розшифровує ключ аутентифікації за допомогою знайденого ключа диска і порівнює результат з ключем диска. При збігу ключів аутентифікація вважається успішною. У зворотному випадку програвач проробляє всі операції з наступним відомим йому ключем програвача і так далі. Ключ диска використовується в подальшому.[3]
Дешифрування
Дані 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 і на вихід регістра.[4]
Виходи регістрів складаються між собою певним чином. Перед складанням вихід 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) — ключі, зашифровані з допомогою ключа диска і потрібні для розшифрування окремих фрагментів даних.
Ключі диска і найменувань записувалися в lead-in-області диска, щоб унеможливити їх безпосереднє копіювання[6].
Вразливості системи і можливі атаки
Безпека алгоритму. У криптографії прийнято вважати шифри з секретним алгоритмом шифрування більш слабкими, ніж шифри з відкритим алгоритмом. У відкритому шифрі більш ймовірно виявлення вразливостей на етапі розробки та їх виправлення. При розголосу ж секретного алгоритму, система втрачає криптостійкість, обеспечивавшуюся секретністю алгоритму, і виправити алгоритм після початку широкого його використання проблематично. Угода про нерозголошення внутрішнього устрою CSS, що укладається при отриманні ліцензії, не виключає можливість розголошення. Використання CSS у великій кількості програм і пристроїв підвищувало ризик розсекречення алгоритму за допомогою зворотної розробки.
Довжина ключа. Ключі диска в CSS мають довжину 40 біт. Ключ такої довжини можна підібрати на сучасному персональному комп'ютері за час близько доби. Однак розробники CSS виходили з припущення, що така атака буде досить витратною щоб використовуватися в масовому копіювання дисків; поодинокі випадки зломів вони не виключали.
Атака (складність 240): Повний перебір.
Вихід лінійних регістрів зсуву. При відомих декількох байтах загального виходу регістрів зсуву можна дізнатися початковий стан регістрів зсуву, а значить і ключ, яким заповнювалися регістри.
Атака 1 (складність 216): Для здійснення атаки треба знати 6 байт загального виходу регістрів зсуву.
Припустити початкового стану регістра LFSR-17
Отримати 4 байта виходу з LSFR-17
Знаючи вихід LSFR-17 за допомогою побітового складання з 4 байтами загального виходу (які відомі) отримати вихід LSFR-25
На основі виходу з'ясувати початковий стан LSFR-25, прокрутивши його на 4 байта тому
Видати ще 2 байта і порівняти з рештою 2 відомими байтами загального виходу
При розбіжності почати заново
Атака 2 (складність 217): Для здійснення атаки треба знати 5 байт загального виходу регістрів зсуву. Дана атака практичніше попередньої, так як дізнатися 5 байт виходу регістрів зсуву можна з атаки на функцію спотворення.
Припустити початкового стану регістра LFSR-17
Отримати 3 байти виходу з LSFR-17
Отримати 3 байти виходу LSFR-25 (тим же способом, що і в Атаці 1). Для з'ясування початкового стану LSFR-25 потрібне знання ще одного біта
Припустити значення відсутнього біта
Вибрати значення біта, якому відповідає початковий стан з логічною одиницею в четвертому біті (ознака початкового стану)
Якщо обидва значення підходять, то перевірити і те й інше
Видати ще два байти і порівняти їх з відомими байтами виходу
При розбіжності почати заново
Функція спотворення З відомого входу і виходу функції спотворення (A і C) можна дізнатися 5 байт виходу регістрів зсуву (k)
Атака (складність 28): Для здійснення необхідно знати вхід A і вихід C функції спотворення. Передбачається також, що правило взаємно однозначною підстановки F теж відомо
Припустити значення k5
По черзі з'ясувати всі невідомі значення k і B
Порівняти відоме значення C1 і отримане із знайдених k1 і B1
Повторити всі дії при розбіжності
Ключ автентифікації Ключ аутентифікації — це ключ диска, зашифированный з допомогою ключа диска. Ця інформація полегшує знаходження ключа диска з ключа аутентифікації
Атака (складність 225) Ключ аутентифікації, тобто вхід функції спотворення 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