# Numero primo illegale

Un numero primo illegale è un numero primo che codifica un'informazione la cui diffusione o il possesso non autorizzato sono proibiti dalla legge, ad esempio un file protetto da copyright o un crack. Il termine, privo di un effettivo significato matematico o giuridico, è 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).

## 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. Johansen è stato processato ed infine assolto, ma la vicenda è stata spunto per analizzare sotto vari aspetti 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 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.
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 eseguibile ELF Linux i386 dalle funzionalità analoghe a DeCSS. Si tratta del primo programma eseguibile per il quale è stata individuata una simile rappresentazione sotto forma di numero primo.
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).

## 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·256$^k$+b con k>log$_{256}$ b sono decompressi con lo stesso output di n. È 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 a naturale e b coprimo con n) contiene infiniti numeri primi. Ponendo a=256$^k$ 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·256$^2$+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·256$^{211}$+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.

## Primi illegali

Il primo numero primo illegale scoperto da Carmody è:
4 85650 78965 73978 29309 84189 46942 86137 70744 20873 51357 92401 96520 73668 69851 34010 47237 44696 87974 39926 11751 09737 77701 02744 75280 49058 83138 40375 49709 98790 96539 55227 01171 21570 25974 66699 32402 26834 59661 96060 34851 74249 77358 46851 88556 74570 25712 54749 99648 21941 84655 71008 41190 86259 71694 79707 99152 00486 67099 75923 59606 13207 25973 79799 36188 60631 69144 73588 30024 53369 72781 81391 47979 55513 39994 93948 82899 84691 78361 00182 59789 01031 60196 18350 34344 89568 70538 45208 53804 58424 15654 82488 93338 04747 58711 28339 59896 85223 25446 08408 97111 97712 76941 20795 86244 05471 61321 00500 64598 20176 96177 18094 78113 62200 27234 48272 24932 32595 47234 68800 29277 76497 90614 81298 40428 34572 01463 48968 54716 90823 54737 83566 19721 86224 96943 16227 16663 93905 54302 41564 73292 48552 48991 22573 94665 48627 14048 21171 38124 38821 77176 02984 12552 44647 44505 58346 28144 88335 63190 27253 19590 43928 38737 64073 91689 12579 24055 01562 08897 87163 37599 91078 87084 90815 90975 48019 28576 84519 88596 30532 38234 90558 09203 29996 03234 47114 07760 19847 16353 11617 13078 57608 48622 36370 28357 01049 61259 56818 46785 96533 31007 70179 91614 67447 25492 72833 48691 60006 47585 91746 27812 12690 07351 83092 41530 10630 28932 95665 84366 20008 00476 77896 79843 82090 79761 98594 93646 30938 05863 36721 46969 59750 27968 77120 57249 96666 98056 14533 82074 12031 59337 70309 94915 27469 18356 59376 21022 20068 12679 82734 45760 93802 03044 79122 77498 09179 55938 38712 10005 88766 68925 84487 00470 77255 24970 60444 65212 71304 04321 18261 01035 91186 47666 29638 58495 08744 84973 73476 86142 08805 29443.
Contiene il codice compresso di DeCSS ed è nella forma n·256$^2$+2083 con n:
7 41044 29574 18790 12008 42574 26365 45009 92956 86147 32906 98855 53773 09675 13811 24893 90926 28016 47910 15512 26426 84536 40290 87440 11353 28764 08597 41783 90060 40635 62835 01017 77910 18021 02622 47771 18533 73465 87618 95844 03765 47622 33518 17095 77265 54214 86988 14010 61474 94418 10082 56543 59727 26836 72630 00042 71166 99961 35100 95098 26059 16148 77279 35484 86615 91540 05652 97833 71009 11513 86691 00023 62029 35048 52287 20014 69268 56524 32801 82163 38789 38341 67779 82101 96449 12061 62320 63611 66083 65515 37559 24207 96719 43279 39928 10576 78065 26524 74130 37733 41540 49244 33809 21624 54596 03075 58168 03742 44076 84596 19410 98167 08547 39685 47415 89770 88824 96025 80619 33594 19674 32400 36948 87235 11395 79119 89537 79554 05757 00109 17263 54318 53823 64234 87767 27641 55065 82497 47165 55121 96796 39514 90770 30294 71840 64677 64355 79179 96405 62167 01013 22912 78919 13829 71962 86539 12574 59008 22739 06331 17050 84119 24343 32388 17885 01860 41343 71280 04299 73088 64745 95762 43720 86816 26854 67558 72462 22717 11114 96784 03068 39840 83867 34002 73490 09878 65845 02940 61818 10939 22544 21399 66769 96414 61726 39541 03484 44852 39846 74886 03222 20123 16306 57115 56232 80080 39385 37607 53762 69144 10113 71902 57800 03497 94815 22568 19050 53201 05539 24572 76118 13197 01910 12711 78836 03813 07443 70938 19981 94460 25039 05868 95704 30176 65481 51652 49719 46004 97549 62206 41079 25887 98393 66865 81965 01733 71921 08258 25011 94357 99806 11880 53962 38895 83584 73479 55228 25183 25814 64792 92184 21153 26646 07628 24967 35297 62592 64074 77296 72639 48113 87918 81815 02744 42283 76380 69112 75446 87106 45760.
Il primo numero primo eseguibile (ELF Linux i386) scoperto da Carmody è:
4 93108 35970 28501 90027 57776 72390 76495 72849 07772 15020 86320 80750 18409 79262 78850 97658 86455 78020 13660 07328 67954 47341 12831 73536 78312 01557 53598 19785 45054 81157 19393 45877 33003 80099 32619 50587 64525 02382 04081 10189 88504 26151 76579 94170 42508 89037 02911 90158 70030 47943 28260 73821 46954 15703 30227 98755 76818 95601 62403 00641 11516 90087 28798 38194 25827 16745 64774 81668 43479 28464 58092 91315 31860 07001 00433 53189 36319 34391 29486 04450 37099 19800 47709 46292 15581 80711 16915 30318 76288 47787 83541 57593 28910 93295 44735 08818 82465 49506 00050 19006 27470 53053 81164 27829 42674 74853 49652 57453 68151 17065 50281 90555 26562 21353 14631 04210 08662 86797 11444 67063 66921 98258 61581 11251 55565 04813 42076 86732 34076 55054 85910 82695 62666 93066 23679 97021 04812 39656 25180 06818 32365 39593 48395 67535 75575 32461 90234 81064 70098 77530 27956 18689 29253 80693 30520 42381 49969 94545 69457 74138 33568 99060 05870 83218 12704 86113 36820 26515 90516 63518 74029 01819 76939 37677 85292 87221 09550 41292 57925 73818 66058 45015 05525 02749 94771 88312 93104 57698 09091 53046 13359 41903 02588 13205 93227 74443 85255 04667 79024 51869 70626 27788 89197 95804 23065 75061 56698 34695 61779 78796 59201 64405 19399 60716 98111 26151 95610 27628 32339 82579 14233 21726 96144 37443 81056 48552 93488 76349 21030 98870 28787 45323 31325 32122 67863 32837 02792 50997 49969 48877 59369 15917 64458 80327 18384 74023 59330 20374 88850 67557 06587 91946 11341 93230 78148 54436 45437 51132 07098 60639 07464 17564 12163 50423 88002 96780 85586 70370 38750 94107 69821 18376 54992 05204 36825 58546 42288 50242 99633 22685 36912 46485 50007 55916 64024 72924 07164 50725 31967 44999 52944 84347 41902 10772 96068 20558 13092 36268 37987 95196 61997 98285 52588 71610 96136 56178 07456 61592 48866 08898 16456 85417 21362 92084 66562 79131 47846 67915 50965 15431 01135 38586 20819 68758 36883 59557 78939 14545 39356 81996 09880 85404 76590 73589 72898 98342 50471 28918 41626 58789 68218 53808 79562 79039 97862 94493 97605 46753 48212 56750 12151 70827 37107 64627 07124 67532 10248 36781 59400 08750 54525 43537.