Ing Oktober 1999, sawijining klompok sing dipimpin dening Jon Lech Johansen saka Norwegia sing nalika iku umur 16 taun ngrilis program DeCSS kanggo ngindhari proteksi pamuteran DVD Content Scramble System (CSS). CSS nggunakake enkripsi 40-bit, kuncine disebarake menyang produsen sing dilisensi, kanggo mbatesi pamuteran DVD. Amarga distribusi kode kasebut kalebu ing DMCA AS lan dilarang sacara hukum, para aktivis nggoleki cara kanggo nyamar kode kasebut minangka entitas matematika.
Phil Carmody banjur nggawe angka prima sing, nalika diinterpretasikake ing binar sawise dekompresi gzip, ngemot kode sumber lengkap DeCSS. Inti saka algoritma DeCSS bisa diimplementasikake ing TypeScript kaya ing ngisor iki, ing ngendi operasi bit langsung memetakan logika dekripsi sektor.:
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++;
}
}
Prinsip ing mburi angka prima yaiku napsirake kabeh kode sumber minangka siji bilangan bulat sing padhet. Amarga ora ana file sing dadi angka prima, angka kasebut ditambah kanthi artifisial nganggo byte tambahan (padding). Padding iki ditambah ing sawijining puteran nganti tes primalitas, kayata tes Miller-Rabin, ngonfirmasi angka kasebut minangka prima. Generator ing ngisor iki nggunakake kode DeCSS sing diterangake ing ndhuwur lan nggoleki representasi angka prima sing cocog.:
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));
Trik angka prima ora tau dadi subyek kasus pengadilan sing kapisah, lan uga ora perlu dadi subyek. Sanajan angka prima asli Carmody duwe 1401 digit, angka kasebut cilik banget kanggo dhaptar paling dhuwur angka prima paling gedhe nalika semana. Dheweke banjur nggawe versi 1905 digit, sing diwutahake kanthi byte null, kanggo entuk papan kaping sepuluh ing peringkat ECPP . Kasuksesan iki nduduhake ora mungkin nyensor matematika murni, amarga angka kasebut entuk papan ing dhaptar mung adhedhasar sifat matematikane.