1999 ஆம் ஆண்டு அக்டோபர் மாதம், அப்போதைய 16 வயது நார்வே நாட்டைச் சேர்ந்த ஜான் லெக் ஜோஹன்சென் தலைமையிலான ஒரு குழு, உள்ளடக்கக் குழப்ப அமைப்பின் (CSS) டிவிடி இயக்கப் பாதுகாப்பைத் தவிர்ப்பதற்காக DeCSS என்ற நிரலை வெளியிட்டது. டிவிடி இயக்கத்தைக் கட்டுப்படுத்த, CSS 40-பிட் குறியாக்கத்தைப் பயன்படுத்தியது; அதன் திறவுகோல்கள் உரிமம் பெற்ற உற்பத்தியாளர்களுக்கு விநியோகிக்கப்பட்டன. இந்தக் குறியீட்டின் விநியோகம் அமெரிக்க DMCA சட்டத்தின் கீழ் வந்ததாலும், சட்டப்படி தடைசெய்யப்பட்டிருந்ததாலும், ஆர்வலர்கள் இந்தக் குறியீட்டை ஒரு கணிதக் கூறாக மாறுவேடமிடுவதற்கான வழிகளைத் தேடினர்.
ஃபில் கார்மோடி பின்னர் ஒரு பகா எண்ணை உருவாக்கினார், அது gzip அமுக்கநீக்கத்திற்குப் பிறகு இரும முறையில் விளக்கப்படும்போது, DeCSS-இன் முழுமையான மூலக் குறியீட்டைக் கொண்டுள்ளது. DeCSS நெறிமுறையின் மையப்பகுதியை டைப்ஸ்கிரிப்டில் பின்வருமாறு செயல்படுத்தலாம், இதில் பிட் செயல்பாடுகள் செக்டார் மறைகுறியாக்கத் தர்க்கத்துடன் நேரடியாகப் பொருந்துகின்றன.:
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 இலக்கங்களைக் கொண்டிருந்தாலும், அக்காலத்தில் மிகப்பெரிய பகா எண்களின் முதல் பட்டியல்களில் இடம்பெறுவதற்கு அது மிகவும் சிறியதாக இருந்தது. பின்னர் அவர், ECPP தரவரிசையில் பத்தாவது இடத்தைப் பெறுவதற்காக, பூஜ்ய பைட்டுகளைக் கொண்டு செயற்கையாகப் பெருக்கப்பட்ட 1905 இலக்கப் பதிப்பை உருவாக்கினார். இந்த வெற்றி, தூய கணிதத்தைத் தணிக்கை செய்யவே முடியாது என்பதை நிரூபித்தது, ஏனெனில் அந்த எண் அதன் கணிதப் பண்புகளின் அடிப்படையில் மட்டுமே பட்டியலில் தனக்கான இடத்தைப் பெற்றது.