Кіріспе
DVB теледидар стандартында қолданылатын шифрлау алгоритмі. Common Scrambling Algorithm (CSA) – DVB цифрлық теледидар хабарларын шифрлеуге арналған шифрлау алгоритмі. CSA ETSI ұйымымен анықталды және 1994 жылдың мамырында DVB консорциумы қабылдады. Оны 128 биттік AES және құпия блок шифрі XRC негізінде құрылған CSA3 алгоритмі алмастыруда. Дегенмен, CSA3 әлі кеңінен қолданылмағандықтан, CSA DVB хабарларын қорғау үшін басым шифр болып қала береді.
The Common Scrambling Algorithm (CSA) is the encryption algorithm used in the DVB digital television broadcasting for encrypting video streams. CSA was specified by ETSI and adopted by the DVB consortium in May 1994. It is being succeeded by CSA3, based on a combination of 128 bit AES and a confidential block cipher, XRC. However, CSA3 is not yet in any significant use, so CSA continues to be the dominant cipher for protecting DVB broadcasts.
Тарих
2002 жылға дейін CSA көбінесе құпия сақталды. Патенттік құжаттарда белгілі бір меңзеулер болды, бірақ S қораптары деп аталатын құрылымның орналасуы сияқты маңызды егжей-тегжейлер құпия күйде қалды. Бұл ақпаратсыз алгоритмді еркін іске асыру мүмкін емес еді. Алғашқыда CSA тек аппараттық құралдарда іске асырылатын болды, бұл қолданыстағы нұсқаларды кері инженериялауды қиындатты. 2002 жылы FreeDec бағдарламалық қамтамасызда CSA-ны іске асыру арқылы жарияланды. Тек бинарлық форматта шығарылса да, оны талдау арқылы жоғалған егжей-тегжейлер анықталды және алгоритмді жоғары деңгейлі бағдарламалау тілдерінде қайта іске асыруға мүмкіндік берді. CSA толығымен жарияланғаннан кейін криптографтар оның осал тұстарын іздеуге кірісті.
Шифрдың сипаттамасы
CSA алгоритмі екі бөлек шифрден тұрады: блок шифрі және ағын шифрі. Шифрлау режимінде қолданылғанда, деректер алдымен CBC режимінде 64 биттік блок шифрі арқылы шифрланады, пакеттердің соңынан бастап. Содан кейін ағын шифрі пакеттердің басынан қолданылады.
Блок шифрлау
Блок шифрілеу процесі 64 биттік блоктарды 56 раундта өңдейді. Әр раундта 8 бит кеңейтілген кілттен қолданылады.
Ағын шифрлау
Ағымдық шифрдің алғашқы 32 раунды инициализация үшін қолданылады және ешқандай нәтиже шығармайды. Осы кезеңде алғашқы 64 бит дерек инициализация векторы ретінде пайдаланылады және өзгеріссіз қалады. Содан кейін ағымдық шифр әр раундта 2 биттік псевдорандомдық ағынды генерациялайды, ол пакеттің 64-ші битінен бастап XOR операциясына түсіріледі.
Кемшіліктері
Егер CSA бұзылса, шифрланған DVB хабарларын түсіндіруге болады, бұл ақылы цифрлық теледидар қызметтерін қауіпке тікеді, себебі DVB Еуропа және басқа аймақтардағы цифрлық эфирлік теледидар стандарты ретінде қабылданған және көптеген спутниктік теледидар провайдерлері қолданады. Ақылы теледидар жүйесіне жасалған шабуылдардың көпшілігі CSA-ның өзіне емес, CSA кілттерін жасауға жауапты түрлі кілт алмасу жүйелеріне (Conax, Irdeto, Nagravision, VideoGuard және т.б.) бағытталған. Бұл шабуылдар алгоритмдерді кері инженериялау арқылы толығымен бұзуға немесе кілттерді заңды декодерде жасалған кезде нақты уақытта ұстап алуға және оларды басқалармен бөлісуге (әдетте «карта бөлісу» деп аталады) қатысты.
Бағдарламалық жасақтамаларды іске асыру және бит кесу
CSA-ның ағын шифрі бөлігі біт тіліміне (bit slicing) бейім, бұл көптеген блоктарды немесе бір блокты әртүрлі кілттермен бір уақытта шифрлауға мүмкіндік беретін бағдарламалық іске асыру тәсілі. Бұл бағдарламалық қамтамасыз етуде жүзеге асырылған күшпен іздеуді едәуір жылдамдатады, бірақ нақты уақыт шабуылы үшін бұл көрсеткіш тым төмен. Блок шифрі бөлігін біт тіліміне түсіру қиын, себебі S-қораптары тым үлкен (8x8) және логикалық операцияларды пайдаланып тиімді іске асыруға болмайды, ал бұл біт тілімінің стандартты іске асырудан артық тиімді болуы үшін қажетті шарт. Дегенмен, барлық операциялар 8 биттік кіші блоктарда орындалғандықтан, алгоритмді әдеттегі SIMD немесе "байт тілімі" (byteslicing) арқылы іске асыруға болады. Көптеген SIMD командалық жиынтықтары (AVX2-ден басқа) параллель іздеу кестелерін қолдамайды, сондықтан S-қораптарына іздеу байт тілімі қолданбастан жасалады, бірақ олардың алгоритмнің қалған бөлігімен интеграциясына байт тілімі айтарлықтай кедергі келтірмейді. Екі техника да CSA-ның ашық бастапқы кодты іске асырылуы – libdvbcsa-да қолданылады.
Криптоанализ
Криптоанализ деректердің көп бөлігі блок және ағын шифрлеуімен қорғалғандықтан қиындатылады. Адаптациялық кодтар деректердің бір бөлігін тек блок шифрлеуімен немесе тек ағын шифрлеуімен қорғалған пакеттерге алып келуі мүмкін.
Қиын күшпен жақындау
CSA алгоритмі 64 биттік кілттерді пайдаланғанымен, көбінесе кілттің 48 биті ғана белгісіз болады, себебі 3-ші және 7-ші байттар CA жүйелерінде теңдік байттары ретінде қолданылады және оларды оңай қайта есептеуге болады. Бұл, жай мәтіннің негізгі құрылымы туралы біліммен қосылғанда, белгілі ашық мәтіндік шабуылдарға әкелуі мүмкін. PES қабылдағышының алғашқы үш байты әрқашан 0x000001 болғандықтан, күшпен іздеу шабуылына мүмкіндік туады. Мұндай шабуыл миллиондаған мүмкін кілттерді ашады, бірақ олардың саны осы кілттің көмегімен деректердің басқа бөліктерін екінші рет шифрлауға тырысуды практикалық етеді, соның арқасында нақты кілтті анықтауға болады.
Белгілі ашық мәтіндік шабуыл
2011 жылы неміс зерттеушілерінің тобы DVB жүйесінде қолданылатын CSA-ға шабуыл жасады. MPEG 2 толтыруы көбінесе ұзақ нөлдер тізбесін қажет ететінін, соның салдарынан 184 байттық жасушалардың барлығы тек нөлдермен шифрланатынын ескерсек, мұндай белгілі нөлдік блоктан кілтті қалпына келтіретін «көкжиек кестесін» құру мүмкін. (Егер бірдей шифрмәтінге ие екі блок табылса, онда блок нөлдік деп есептеледі, себебі екеуі де нөлдік блоктар болар еді.) Сипатталған шабуылға шамамен 7,9 ТБ сақтау кеңістігі қажет, және шабуылшы GPU көмегімен кілтті 96,8% дәлдікпен жеті секунд ішінде қалпына келтіре алады. Дегенмен, бұл шабуыл тек мұндай толық нөлдік толтыру блоктары болған жағдайда ғана тиімді (яғни, қозғалысы өте аз немесе шулы көріністерде), ал оны, мысалы, барлық нөлдік жасушаларды шифрланбаған күйде жіберу арқылы оңай болдыруға болады. Бұл бұрын айтылған күшпен сынау (brute force) мысалынан өзгеше, себебі шабуылға дейін жасушаның толық ашық мәтіндік мазмұны белгілі болады, блоктың тек бір бөлігі емес, бұл «көкжиек кестесін» алдын ала есептеуге мүмкіндік береді.
Қателік шабуыл
2004 жылы блок шифріне қателік шабуылы жарияланды. Негізгі идея – аралық есептеулерде бірнеше мақсатты қателерді енгізу арқылы соңғы сегіз раунд кілттерін анықтау мүмкіндігін алу. Осыдан кейін соңғы кілтті есептеуге болады. Раунд кілттерін алу үшін өте аз қателіктер ғана қажет болса да (орташа есеппен әрбір раунд кілті үшін екі-үш қателік), қателік шабуылдары көбінесе іс жүзінде қолдану қиын, себебі бұл сұрақ бойынша кілттің өзі бар декодердің аппараттық құралындағы биттерді қалауынша өзгерту қабілетін талап етеді.