# Common Scrambling Algorithm

Het Common Scrambling Algoritme (CSA) is een symmetrisch encryptiealgoritme dat gebruikt wordt om digitale televisie-uitzendingen via Digital Video Broadcast (DVB) te versleutelen. Het is gestandaardiseerd in 1994 door ETSI en overgenomen door het DVB-consortium. Belangrijke details van het CSA, zoals de topologie van de S-boxen, werden geheimgehouden tot 2002, waardoor openbronimplementaties ondenkbaar waren.
Oorspronkelijk was CSA ontworpen als een algoritme bedoeld om te worden geïmplementeerd op chip, zoals een FPGA of een ASIC. Deze aanpak zorgde ervoor dat het moeilijk was om CSA te kraken. Uiteindelijk is men toch overgestapt naar een softwareoplossing vanwege de flexibiliteit ervan. Een implementatie hiervan is FreeDec, dat uitkwam in 2002. De broncode van dit programma werd niet vrijgegeven, maar door deassemblage werden de ontbrekende details blootgelegd. Snel volgden implementaties van CSA in een hogere programmeertaal.

## Betrouwbaarheid van CSA

Toen de werking van CSA volledig bekend raakte werd door cryptoanalisten een zoektocht opgestart naar eventuele fouten in het algoritme. Zoals in elk encryptiealgoritme is de grootste zwakte de encryptie van eenvoudig te voorspellen stukken data, zoals de headers van een MPEG-2-pakket. Dit verkort substantieel de tijd die nodig is om de sleutels te kraken.
De sleutellengte die wordt gebruikt is 64 bits. Dit resulteert in theorie tot 2$^{64}$ sleutelmogelijkheden. Van deze sleutels worden echter slechts 48 bits gebruikt. Byte 3 en byte 7 zijn checksumbytes die snel kunnen worden berekend.
Gebruik makend van de twee vorige feiten kan men de zoektocht naar de juiste sleutel verkorten. Ten eerste kan men 16 bits (2 bytes) berekenen uit de gekozen sleutel, aangezien zij checksumbits zijn. Ten tweede kan men door gebruik te maken van stukken voorspelbare tekst een schatting maken van nog eens 16 bits. Hierdoor moeten nog slechts 32 bits met brute kracht worden berekend, wat door een goede implementatie op FPGA snel kan worden gedaan.
Het eventuele kraken van CSA zou grote problemen betekenen voor de tv-industrie, omdat te betalen uitzendingen dan ontcijferd kunnen worden. Tot op heden is er echter nog geen succesvolle ontcijfering van het algoritme gepubliceerd.

## Gebruik

Het CSA-algoritme wordt voornamelijk gebruikt om te zorgen voor Conditional Access (CA), ofwel toegang onder voorwaarden. Door de encryptie kunnen leveranciers van digitale tv ervoor zorgen dat bepaalde programma's restricties hebben. Zo kan ervoor gezorgd worden dat enkel betalende klanten een bepaald programma kunnen decoderen.
De sleutels voor het decryptiealgoritme worden meestal opgeslagen op een chipkaart. Deze kaart wordt in de settopbox gestoken waarop deze dan de decryptie kan uitvoeren.

## Werking

CSA is gebaseerd op het principe van symmetrische encryptie. Dit houdt in dat zender en ontvanger dezelfde sleutel gebruiken om de boodschap te vercijferen en vervolgens te ontcijferen. Het voordeel van de symmetrische encryptie is dat ze sneller werkt dan asymmetrische. Maar het nadeel hiervan is dat de sleutel moet worden uitgewisseld. Deze uitwisseling gebeurt met een asymmetrische encryptie.
Het versleutelingsalgoritme kan worden gezien als een ketting van eerst een blokvercijfering en een stroomvercijfering. Beide vercijferingen gebruiken dezelfde sleutel van 64 bits. Om de boodschap te vercijferen wordt de data in blokken verdeeld van acht bytes. Vervolgens wordt de data door de blokvercijfering versleuteld in CBC-mode. De laatste uitgang van deze vercijfering wordt gebruikt als nonce voor de stroomvercijfering.
* CSA PDF