CSS, Content Scramble System — система захисту цифрового медіаконтенту на DVD-носіях. Система вкрай нестійка до злому. Через обмеження на експорт криптографічних технологій із США довжина ключа шифрування обмежена 40 бітами, що вкрай мало. Більше того, через знайдену уразливість ефективна довжина ключа приблизно дорівнює 16 біт — тобто всі можливі варіанти можуть бути перебрані на сучасному комп'ютері всього за кілька секунд, що обумовлюється примітивним методом захисту. У 2005 на зміну CSS прийшла більш надійна AACS.

Історія створення Специфікація DVD була готова у грудні 1995 року. Виробникам DVD-плеєрів та DVD-приводів було необхідна наявність значної кількості фільмів і музики на DVD. Однак кіностудії помітили, що DVD-диски були б ідеальним джерелом для копіювання фільмів: цифрова інформація не буде втрачати своєї якості при перезаписі (відеокасети не мали цього захисту аналогового виходу APS). Від DVD Consortium зажадали надання відповідного захисту від копіювання. В результаті DVD Consortium створив Технічну Робочу Групу по Захисту від Копіювання (). 29 жовтня 1996 році CPTWG оголосила про створення CSS, яку в основному розробили компанії Toshiba і Matsushita Electric Industrial. Для ліцензування використання CSS була створена некомерційна організація Асоціація з Контролю Копіювання DVD ().http://www.valimaki.com/org/docs/css/css_opinion_holman.pdf Technical Opinion regarding CSS

Історія зломів Перша програма для обходу 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-бітовий ідентифікатор аутентифікації (). Це значення використовується для назви аутентифікаційної сесії. Відбувається взаємна автентифікація між DVD-приводом і хостом. Хост генерує випадкову послідовність з 40 біт і посилає її DVD-приводу. DVD-привід шифрує цю послідовність за допомогою CSS хеш-функції (), отримує 80-бітове значення, так званий ключ виклику (), і відправляє його хосту. Хост сам розшифровує відповідь і порівнює його зі згенерованою послідовністю. При збігу значень хост довіряє DVD-приводу, так як вважається, що тільки ліцензовані пристрої можуть знати секретну хеш-функцію CSS. Проводиться зворотна операція (хост і DVD-привід міняються ролями) після чого DVD-привід довіряє або не довіряє хосту в залежності від результату порівняння. Генерується ключ шини (). Хост і DVD-привід комбінують використовувалися при аутентифікації випадкові послідовності, і за допомогою хеш-функції CSS кожен отримує ключ шини. За допомогою цього ключа шифрується подальша передача ключів між хостом і DVD-приводом. Цей ключ ніколи не передається по шині. Відбувається автентифікація програвача DVD-диска. Кожен ліцензований програвач має один або кілька ключів програвача () з списку із 409 ключів. На захищеному диску в невидимій області зберігається ключ диска (), зашифрований кожним з 409 ключів, і ключ аутентифікації (), тобто ключ диска, зашифрований самим собою. Ці ключі складають 2048-байтовий блок. Блок відправляється програвача. Програвач знає в якій області знаходиться ключ диска, зашифрований його ключем, і розшифровує значення в цій області. Потім, щоб перевірити справжність ключа, він розшифровує ключ аутентифікації за допомогою знайденого ключа диска і порівнює результат з ключем диска. При збігу ключів аутентифікація вважається успішною. У зворотному випадку програвач проробляє всі операції з наступним відомим йому ключем програвача і так далі. Ключ диска використовується в подальшому.

Дешифрування Дані DVD-диска зашифровані за секторами. Інформація про те, зашифрований сектор чи ні, зберігається в заголовку сектора. Зашифровані тільки сектори, несучі потокове інформацію (відео, зображення, звук), інші, наприклад відповідають за навігацію, не зашифровані. Шифрування даних засноване на побитовом складання з псевдовипадковою послідовністю бітів і взаимнооднозначной табличній підстановці байтів. Для реалізації псевдовипадковою послідовності використовуються лінійні регістри зсуву зі зворотнім зв'язком ()

Програвач запитує у DVD-приводу ключ найменування (). Потім, щоб отримати ключ найменування, він розшифровує отримані дані за допомогою ключа диска. Регістри зсуву CSS заповнюються байтами ключа найменування. В алгоритмі CSS беруть участь два лінійних регістра зсуву зі зворотнім зв'язком: 17-бітовий і 25-бітовий. Перед заповненням ключ найменування побитово складається з ключем сектора (). Ключ сектора міститься в байтах з 80 з 84 сектора. Після складання, перший та другий байт ключа найменування заповнюють 17-бітовий регістр, а решта заповнюють 25-бітний. В четвертий біт кожного регістра зсуву вставляється логічна одиниця, щоб запобігти нульове зациклення. Регістри зсуву проходять вісім тактів і кожен видає вихідний байт. Зворотнимо зв'язком у регістрах зсуву використовується функція «Виключаюче Або». У разі 17-бітного регістра на її вхід подаються біти 1 і 15, а вихід подається на біт 17 і є виходом регістра зсуву. У випадку 25-бітного регістра на вхід функції подаються біти 1, 4, 5 та 15, а вихід подається на біт 25 і на вихід регістра. Виходи регістрів складаються між собою певним чином. Перед складанням вихід 17-бітового регістра побітово інвертується. Байти виходу регістрів складаються звичайним восьми бітовим складанням, і до них додається біт переповнення від попереднього складання, а отриманий біт переповнення (дев'ятий біт суми) йде на вхід наступного складання. Результат утворює загальний вихід регістрів зсуву. У загальному випадку вихід кожного регістра зсуву може бути або інвертованим або ні. Звідси випливає що регістри зсуву можуть працювати в чотирьох режимах. Для шифрування даних використовується режим шифрування даних. Байт зашифрованих даних проходить табличну взаємно однозначну підстановку і складається із загальним виходом регістрів зсуву. Результат може бути відтворений.

Регістри зсуву CSS

В CSS використовуються два лінійних регістра зсуву зі зворотнім зв'язком (). Зрушення в регістрах відбувається зліва направо. Вихідним бітом є значення функції зворотного зв'язку. В четвертий біт кожного регістра при початковому заповненні регістра зсуву виставляється логічна одиниця.

Режими шифрування CSS має чотири режими шифрування. Режим вибирається в залежності від того, яка інформація шифрується. Режим впливає на те, що відбувається інверсія виходу певного регістра зсуву чи ні. Режим шифрування LSFR-17 LSFR-25 Аутентифікація інвертований неинвертирован Шифрування ключа шини неинвертирован неинвертирован Шифрування ключа найменування неинвертирован інвертований Шифрування даних інвертований неинвертирован

Функція спотворення CSS

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

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

Види ключів Система володіла наступними видами ключів:

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

Ключі диска і найменувань записувалися в lead-in-області диска, щоб унеможливити їх безпосереднє копіюванняScott Mueller. Upgrading and repairing PCs, с. 744 ..

Вразливості системи і можливі атаки

Безпека алгоритму. У криптографії прийнято вважати шифри з секретним алгоритмом шифрування більш слабкими, ніж шифри з відкритим алгоритмом. У відкритому шифрі більш ймовірно виявлення вразливостей на етапі розробки та їх виправлення. При розголосу ж секретного алгоритму, система втрачає криптостійкість, обеспечивавшуюся секретністю алгоритму, і виправити алгоритм після початку широкого його використання проблематично. Угода про нерозголошення внутрішнього устрою 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)