Un numero primo illegale è un numero primo che codifica un'informazione la cui diffusione o il possesso non autorizzato sono proibiti dalla legge,[1] ad esempio un file protetto da copyright o un crack. Il termine, privo di un effettivo significato matematico o giuridico,[2] è stato coniato negli USA per criticare le leggi che rendono illegale la detenzione di alcune informazioni. La ricerca dei numeri primi illegali è infatti una sorta di divertissement volto ad evidenziare le possibili situazioni paradossali derivanti da interpretazioni estreme del Digital Millennium Copyright Act (DMCA), ed è stata iniziata dal matematico e programmatore statunitense Phil Carmody. L'obiettivo è quello di individuare un numero primo molto grande, degno quindi di interesse nelle pubblicazioni scientifiche, che allo stesso tempo codifichi delle informazioni la cui diffusione è soggetta a restrizioni.
Introduzione
Ogni informazione può essere rappresentata da un numero tramite regole arbitrarie prestabilite, in modo tale da poter essere salvata e scambiata fra computer in formato digitale. Ad esempio, si può associare ad ogni carattere di un testo un numero intero (come nel caso della codifica ASCII) o si può assegnare ad ogni pixel di una immagine un valore che ne rappresenti il colore (come nella grafica raster). Mettendo assieme in sequenza tutti i numeri ottenuti dai caratteri si ottiene un unico numero intero che rappresenta un testo, oppure a seconda dei casi un brano musicale, una immagine, un film. In informatica infatti ogni informazione presente su un computer è archiviata in formato binario e la successione di bit che costituiscono il file corrispondente determina il numero intero associato, visualizzabile in base dieci attraverso un semplice cambiamento di base.
Una stessa singola informazione può essere rappresentata da numeri differenti semplicemente scegliendo diversamente la codifica e le regole arbitrarie per la sua rappresentazione. Ad esempio, una stessa immagine può essere memorizzata in diversi numerosi formati grafici, come jpg, png, bmp, raw, tiff, che si differenziano fra loro per l'utilizzo di vari algoritmi di compressione, per la diversa rappresentazione dei colori e per l'eventuale supporto di informazioni aggiuntive come note o commenti. Si può quindi far corrispondere facilmente più numeri a uno stesso contenuto ed è possibile provare a sfruttare questa opportunità per generare un numero che sia interessante non solo per il contenuto che esso in una certa codifica rappresenta, ma che sia interessante in sé per scopi accademici.
Benché la legislazione sulla tutela dei diritti d'autore protegga le opere dell'ingegno, dal punto di vista giuridico è difficile bloccare la diffusione e la condivisione di un numero (soprattutto se di particolare interesse, come un numero primo) anche se in qualche modo codifica dei contenuti protetti da copyright, perché esso può ammettere numerosi utilizzi differenti. È anche possibile che qualche numero primo in qualche modo "illegale" sia, inconsapevolmente, già noto e pubblicato. Un numero non è inoltre brevettabile o assoggettabile a copyright in quanto tale; può al più esserne limitato l'uso commerciale quando sia riconosciuto come marchio registrato (come ad esempio il 500 della Fiat 500).[3]
Storia
I numeri primi illegali nascono in seguito alle vicende giudiziarie di Jon Lech Johansen, noto come DVD Jon, legate al suo software DeCSS, un programma scritto in C che permetteva di aggirare le protezioni DRM sui DVD.[4] Johansen è stato processato ed infine assolto[5], ma la vicenda è stata spunto per analizzare sotto vari aspetti[6] l'illegalità di programmi e dati su computer o sull'interpretazione del Digital Millennium Copyright Act.
Un ipotetico metodo per cercare di aggirare la restrizione ed evidenziare i limiti della legislazione era quello di codificare in qualche modo il programma sotto una forma alternativa che avesse altri utilizzi legittimi o addirittura proprietà notevoli tali da renderla pubblicabile. Essendo il codice del programma, eventualmente in un archivio compresso, esprimibile sotto forma di un numero, nel 2001 il matematico e programmatore Phil Carmody[7] ha cercato qualche numero primo che potesse codificare DeCSS. Essendo la primalità una proprietà fondamentale ed indiscutibile della teoria dei numeri, tale numero sarebbe stato degno di interesse scientifico e quindi pubblicabile. Sfruttando alcune caratteristiche della codifica gzip e basandosi sul teorema di Dirichlet, Carmody è riuscito prima a dimostrare l'esistenza almeno teorica di numeri primi che soddisfacessero tali requisiti, e successivamente ne ha individuato concretamente alcuni. Il primo numero primo illegale ad essere scoperto era relativamente piccolo, in quanto aveva solo 1041 cifre, così Carmody ha proseguito la ricerca, individuando in seguito un numero di 1905 cifre, all'epoca il decimo più grande primo individuato con l'algoritmo ECPP e quindi inserito in alcune pubblicazioni di settore.[8]
Dopo aver trovato un primo che codificasse il sorgente di DeCSS, Carmody ha proseguito la sua ricerca con un ulteriore obiettivo, ovvero trovare dei numeri primi che codificassero direttamente il programma in codice macchina. Con un ulteriore lavoro ha quindi individuato un numero primo che rappresenta, in linguaggio macchina, un file eseguibileELFLinuxi386 dalle funzionalità analoghe a DeCSS. Si tratta del primo programma eseguibile per il quale è stata individuata una simile rappresentazione sotto forma di numero primo.[9][10]
Successivamente Charles M. Hannum, su suggerimento di Carmody, ha scoperto un primo che rappresenta il sorgente C di una variante di DeCSS, direttamente in ASCII e quindi facendo a meno dell'algoritmo di compressione. La variabilità della rappresentazione numerica del sorgente, non essendo più fornita dalla codifica gzip, è stata ottenuta tramite la manipolazione dei nomi delle variabili del programma. È stato scoperto anche un ulteriore numero più breve, sfruttando la codifica ASCII a 7-bit (che è sufficiente a coprire tutti i caratteri usati nel linguaggio C).[4]
Algoritmo
Carmody ha compresso con gzip il codice del programma DeCSS, ottenendo un file che può essere espresso in formato binario tramite un numero n. Poiché il contenuto di un file gzip è terminato da un byte nullo (e la parte seguente è ignorata), i file nella forma n·256k+b con k>log256b sono decompressi con lo stesso output di n.[11] È quindi possibile associare infiniti numeri ad uno stesso file tramite l'algoritmo di decompressione. Per il teorema di Dirichlet, una successione nella forma a·n+b (con anaturale e bcoprimo con n) contiene infiniti numeri primi. Ponendo a=256k e b intero coprimo con n, il teorema assicura l'esistenza di infiniti primi capaci, almeno teoricamente, di codificare il file. Con il software open source OpenPFGW sono stati individuati una serie di candidati, sottoposti poi al test di primalitàECPP, individuando un primo nella forma n·2562+2083. Tale numero, formato da 1041 cifre, era troppo piccolo per essere degno di nota in qualche pubblicazione, per cui Carmody ha proseguito la ricerca individuando un altro primo: n·256211+99. Quest'ultimo era sufficientemente grande (1905 cifre) da rientrare all'epoca al decimo posto nella lista dei venti più grandi numeri primi scoperti con ECPP, pubblicata da The Prime Pages.[8]
Primi illegali
Il primo numero primo illegale scoperto da Carmody è:[12]
^(EN) Mark R. Leeper, Illegal Prime Numbers, su sfcrowsnest.com, 1º maggio 2006. URL consultato il 19 febbraio 2013 (archiviato dall'url originale il 19 febbraio 2014).
^Da un punto di vista matematico, nessuna proprietà caratterizza un numero primo illegale. Dal punto di vista giuridico, non ci sono riferimenti legislativi sufficientemente precisi in merito e nessun tribunale si è finora espresso riguardo alla "legalità" di tali numeri.
^Ricordando che l'intero maggiore o uguale al logaritmo in base t di un numero equivale al numero di cifre di quello stesso numero espresso in base t (in base 256=28 si ha quindi il numero di byte occupati). Moltiplicare per 256k in base 2 equivale ad aggiungere k·8 zeri alla fine del file; sommandovi poi il numero b, se k>log256b rimane almeno un byte nullo tra le cifre "utili" di n (escluse le ultime otto, ovvero il byte nullo di terminazione inserito da gzip) e quelle di b, e queste ultime vengono quindi ignorate in fase di decompressione.