1999 októberében egy, az akkor 16 éves norvég Jon Lech Johansen vezette csoport kiadta a DeCSS programot, hogy megkerülje a Content Scramble System (CSS) DVD-lejátszás-védelmét. A CSS 40 bites titkosítást használt, amelynek kulcsait engedéllyel rendelkező gyártóknak osztották ki, hogy korlátozzák a DVD-lejátszást. Mivel a kód terjesztése az amerikai DMCA hatálya alá tartozott, és jogilag tiltott volt, az aktivisták módszereket kerestek arra, hogy a kódot matematikai entitásként álcázzák.
Phil Carmody ezután konstruált egy prímszámot, amely a gzip kicsomagolása után binárisan értelmezve tartalmazza a DeCSS teljes forráskódját. A DeCSS algoritmus magja a következőképpen implementálható TypeScriptben, ahol a bitműveletek közvetlenül leképezik a szektor dekódolási logikáját.:
function CSSdescramble(sec: Uint8Array, key: Uint8Array): void {
let t1: number, t2: number, t3: number, t4: number, t5: number, t6: number;
const end = 0x800;
t1 = (key[0] ^ sec[0x54]) | 0x100;
t2 = key[1] ^ sec[0x55];
const keyView = new DataView(key.buffer, key.byteOffset);
const secView = new DataView(sec.buffer, sec.byteOffset);
t3 = (keyView.getUint32(2, true) ^ secView.getUint32(0x56, true)) >>> 0;
t4 = t3 & 7;
t3 = (t3 * 2 + 8 - t4) >>> 0;
let offset = 0x80;
t5 = 0;
while (offset < end) {
t4 = CSStab2[t2] ^ CSStab3[t1];
t2 = t1 >>> 1;
t1 = ((t1 & 1) << 8) ^ t4;
t4 = CSStab5[t4];
t6 = (((((((t3 >>> 3) ^ t3) >>> 1) ^ t3) >>> 8) ^ t3) >>> 5) & 0xff;
t3 = (((t3 << 8) >>> 0) | t6) >>> 0;
t6 = CSStab4[t6];
t5 += t6 + t4;
sec[offset] = CSStab1[sec[offset]] ^ (t5 & 0xff);
t5 >>>= 8;
offset++;
}
}
A prímszám mögött az az elv áll, hogy a teljes forráskódot egyetlen, tömör egész számként értelmezzük. Mivel egyetlen adott fájl sem prímszám, a számot mesterségesen kiegészítjük további bájtokkal (kitöltés). Ezt a kitöltést egy ciklusban növeljük, amíg egy prímszámteszt, például a Miller-Rabin teszt, meg nem erősíti, hogy a szám prím. A következő generátor a fent leírt DeCSS kódot használja, és a megfelelő prímszám-reprezentációt keresi.:
import { isPrime } from 'crypto-utils-lib'; // Hypothetical library for primality testing
async function generateIllegalPrime(code: string): Promise<bigint | null> {
const encoder = new TextEncoder();
const bytes = encoder.encode(code);
let hexBase = Array.from(bytes)
.map(b => b.toString(16).padStart(2, '0'))
.join('');
// Start bei 1, da 0x00 immer gerade und damit keine Primzahl ist
for (let i = 1; i < 256; i++) {
const candidateHex = hexBase + i.toString(16).padStart(2, '0');
const candidateInt = BigInt('0x' + candidateHex);
if (await isPrime(candidateInt)) {
return candidateInt;
}
}
return null;
}
const source = `void CSSdescramble(unsigned char *sec, unsigned char *key) { ... }`;
generateIllegalPrime(source).then(p => console.log(p));
A prímszám-trükk soha nem volt külön bírósági ügy tárgya, és nem is volt rá szükség. Bár Carmody eredeti prímszáma 1401 jegyű volt, túl kicsi volt az akkori legnagyobb prímszámok toplistáihoz. Később létrehozott egy 1905 jegyű változatot, mesterségesen null bájtokkal felfújva, így a tizedik helyet érte el az ECPP rangsorban . Ez a siker megmutatta, hogy a tiszta matematika cenzúrázása lehetetlen, mivel a szám kizárólag matematikai tulajdonságai alapján érdemelte ki a helyét a listán.