अक्टूबर 1999 में, तत्कालीन 16 वर्षीय नॉर्वेजियन जॉन लेच जोहानसेन के नेतृत्व में एक समूह ने कंटेंट स्क्रैम्बल सिस्टम (सीएसएस) डीवीडी प्लेबैक सुरक्षा को दरकिनार करने के लिए डीसीएसएस प्रोग्राम जारी किया। सीएसएस डीवीडी प्लेबैक को प्रतिबंधित करने के लिए 40-बिट एन्क्रिप्शन का उपयोग करता था, जिसकी कुंजी लाइसेंस प्राप्त निर्माताओं को वितरित की जाती थी। चूंकि कोड का वितरण अमेरिकी डीएमसीए के अंतर्गत आता था और कानूनी रूप से प्रतिबंधित था, इसलिए कार्यकर्ताओं ने कोड को एक गणितीय इकाई के रूप में छिपाने के तरीके खोजे।
फिल कारमोडी ने एक अभाज्य संख्या का निर्माण किया, जिसे जीज़िप डीकंप्रेसन के बाद बाइनरी में व्याख्या करने पर, डीसीएसएस का संपूर्ण स्रोत कोड प्राप्त होता है। डीसीएसएस एल्गोरिदम के मूल को टाइपस्क्रिप्ट में निम्नानुसार कार्यान्वित किया जा सकता है, जहां बिट ऑपरेशन सीधे सेक्टर डिक्रिप्शन लॉजिक से संबंधित होते हैं।:
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++;
}
}
अभाज्य संख्या का सिद्धांत संपूर्ण स्रोत कोड को एक ठोस पूर्णांक के रूप में व्याख्यायित करना है। चूंकि कोई भी फ़ाइल अभाज्य संख्या नहीं होती, इसलिए इसमें कृत्रिम रूप से अतिरिक्त बाइट्स (पैडिंग) जोड़ी जाती हैं। यह पैडिंग एक लूप में तब तक बढ़ाई जाती है जब तक कि मिलर-राबिन परीक्षण जैसे अभाज्यता परीक्षण से यह पुष्टि न हो जाए कि संख्या अभाज्य है। निम्नलिखित जनरेटर ऊपर वर्णित DeCSS कोड का उपयोग करता है और उससे संबंधित अभाज्य संख्या निरूपण की खोज करता है।:
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));
अभाज्य संख्या का यह छल कभी भी अलग से अदालती मुकदमे का विषय नहीं बना, और न ही इसकी आवश्यकता थी। हालांकि कारमोडी की मूल अभाज्य संख्या में 1401 अंक थे, लेकिन उस समय की सबसे बड़ी अभाज्य संख्याओं की सूची में शामिल होने के लिए यह बहुत छोटी थी। बाद में उन्होंने 1905 अंकों वाली एक अभाज्य संख्या बनाई, जिसमें कृत्रिम रूप से शून्य बाइट्स जोड़कर उसे बड़ा किया गया, ताकि ECPP रैंकिंग में दसवां स्थान प्राप्त किया जा सके। इस सफलता ने शुद्ध गणित को सेंसर करना असंभव साबित कर दिया, क्योंकि इस संख्या ने सूची में अपना स्थान केवल अपने गणितीय गुणों के आधार पर ही प्राप्त किया था।