1999年10月,由当时年仅16岁的挪威少年乔恩·莱赫·约翰森(Jon Lech Johansen)领导的一个小组发布了DeCSS程序,旨在绕过DVD播放保护机制——内容加密系统(CSS)。CSS使用40位加密技术,并将密钥分发给授权制造商,以此限制DVD播放。由于该代码的分发受到美国《数字千年版权法案》(DMCA)的约束,属于违法行为,因此活动人士寻求将代码伪装成数学表达式的方法。
Phil Carmody 构造了一个素数,该素数经 gzip 解压缩后以二进制形式解释,包含了 DeCSS 的完整源代码。DeCSS 算法的核心可以用 TypeScript 实现如下,其中位操作直接映射扇区解密逻辑。:
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++;
}
}
素数生成器的原理是将整个源代码解释为一个单一的整数。由于任何给定的文件都不一定是素数,因此需要人为地添加额外的字节(填充)。填充字节会在一个循环中递增,直到通过诸如Miller-Rabin 素数检验之类的素数测试确认该数字为素数为止。以下生成器使用上述 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排名中位列第十。这一成功证明了审查纯数学是不可能的,因为这个数字完全凭借其数学特性赢得了排名。