Proseguiamo l'affascinante cammino nel mondo delle tecniche di protezione del software iniziato il mese scorso con l'analisi degli strumenti legali a disposizione degli autori e delle softwarehouse per tutelare il proprio lavoro. In questa e nelle prossime puntate percorreremo rapidamente l'evoluzione delle tecniche di protezione del software, soffermandoci brevemente solo su alcune di esse.
Fino ad oggi sono state sviluppate due diverse famiglie di protezioni, la prima, solo per questioni cronologiche e non per importanza ed efficacia, mira a rendere i supporti magnetici ed ottici, sui quali è memorizzato il software, non duplicabili con gli strumenti a disposizione dell'utente medio; la seconda, mira, invece, a rendere non utilizzabile o solo parzialmente la versione pirata.
La prima famiglia è stata sperimentata ed adottata con successo nel passato ed ancora oggi è usata; all'inizio dell'era dell'informatica personale era più che sufficiente per garantire un elevato grado di protezione, e per comprenderne il funzionamento è bene conoscere come operino i supporti di memoria, dei quali ci accingiamo a dare una superficiale spiegazione. Ci occuperemo brevemente di quelli di tipo magnetico, rinviando la trattazione di quelli ottici ad un prossimo articolo, perché illustreremo le tecniche di protezione specifiche per questo tipo di unità di memoria. I supporti di tipo magnetico sono costituti da un substrato plastico (nastri, floppydisk, Iomega zip, ecc...) o metallico (harddisk e supporti analoghi), ma non magnetizzabile, che funge da supporto meccanico, ricoperto da una sottilissima pellicola, nella quale sono affogate particelle magnetizzabili, generalmente polveri di ossidi metallici. Le informazioni, ovvero le sequenze di bit prodotte
dal calcolatore, sono memorizzate come variazioni dello stato di magnetizzazione delle singole cellette (ciascuna contenete migliaia di particelle magnetizzabili) nelle quali è logicamente suddiviso. Un cambio della magnetizzazione corrisponte ad 1, mentre una persistenza a 0, la distanza tra due cambi espressa come misura del tempo, e non dello spazio, di solito è dell'ordine dei microsecondi. Onde evitare che troppi bit uguali si susseguano confondendo il controller si adottano particolari schemi di codifica, che generalmente hanno lo svantaggio di dimezzare le capacità di stoccaggio del mezzo, però consentono una maggiore affidabilità, anche perché sono inserite altre informazioni necessarie per i futuri controlli. Vediamo ora come vengono trasferite le informazioni verso e da unità di massa, e ci riferiremo alla figura 1, nella quale è raffigurata una generica testina di lettura-scrittura, sia essa del vostro impianto HiFi o del vostro harddisk, ciò che varia sono le dimensioni e la sensibilità alle variazioni del campo magnetico H, e non il modus opernadi. Durante la fase di scrittura il controller altera opportunamente la corrente I che circola nella testina di scrittura, esercitando così un controllo sul campo magnetico H prodotto da quest'ultima, che andrà a polarizzare di conseguenza le particelle magnetiche che in quell'istante si trovano sotto la testina. La lettura è un'operazione perfettamente simmetrica, questa volta è il trascinamento del supporto magnetico, al disotto della testina di lettura, che provoca una variazione del campo magnetico H nelle vicinanze della stessa, e quindi anche una variazione della corrente I che vi circola, che viene interpretata dal controller, e trasformata nuovamente in 1 e 0. Com'è facilmente intuibile, l'intero processo è tutt'altro che affidabile, essendo il buon esito legato a diversi fattori, tra i quali spiccano le fluttuazioni della velocità del supporto, ed il deterioramento o la scarsa qualità dello stesso.
Per limitare i possibili errori, i dati sono suddivisi in pacchetti di piccole dimensioni, ciascuno dei quali può essere suddiviso logicamente, come mostrato in figura 2, in tre parti: header, datablock, controlblock.
L'header contiene, in generale, i segnali di sincronismo che consentono di adattare la velocità del controller a quella del supporto, ovviamente entro certi limiti, questo è molto importante quando lo stesso supporto deve essere letto e scritto da diverse meccaniche. Inoltre sono aggiunte anche altre informazioni specifiche del supporto come il numero del cilindro o della traccia e del settore per i dispositivi come floppydisk e harddisk, mentre per le unità a nastro di solito sono memorizzati il numero del settore ed il numero identificativo della bobina.
Il datablock contiene le informazioni che desideriamo memorizzare permanentemente sul supporto. La sua lunghezza è misurata in byte, e di solito è un multiplo di 256, e varia a seconda del filesystem che gestisce la periferica.
Il controlblock contiene informazioni, generalmente si tratta di una banale somma di controllo (checksum), per verificare l'integrità dei dati appena letti, e sono memorizzate durante le precedente operazione di scrittura.
Spesso a queste 3 aree si affianca una quarta, ed è presente in quei dispositivi dove le tracce sono circolari e non lineari, questa è detta gap, e viene memorizzata prima dell'header, ed costituita da una manciata di byte, che vanno irrimediabilmente persi, ma che fungono da barriera protettiva durante la scrittura di un settore, infatti in caso di rallentamento improvviso della velocità di scrittura, entro certi limiti, impediscono che i dati vadano a sovrascrivere l'header del settore successivo, danneggiandolo irrimediabilmente.
L'operazione di formattazione serve proprio a creare fisicamente questa suddivisione, ed a memorizzare le informazioni coerenti negli header e nei controlblock, nonché ad inserire i provvidenziali gap tra un settore e l'altro nei dispositivi di memoria di tipo rotativo. Storicamente, i computer sono in grado di scrivere e di leggere un solo settore per volta, quindi oltre al gap di inizio traccia è necessario inserire un gap tra due settore contigui, ciò comporta uno spreco di memoria, basti pensare ai computer basati su MS-Dos, i cui dischetti avevano una capienza di 720Kb, essendo divisi in 80 cilindri (2 tracce per cilindro), a loro volta contenenti 9 settori, ciascuno da 512byte. I progettisti di Amiga, come al solito controcorrente, decisero che il loro computer avrebbe scritto e letto sempre e solo una traccia per volta, rendendo del tutto inutile la presenza dei gap intersettore, e quello spazio in eccesso è stato accorpato e trasformato in 2 settori extra per ogni traccia, portado così la capienza del disco a ben 880Kb.
Durante la scrittura sono aggiornate le informazioni sia del datablock sia del controlblock, ed immediatamente dopo sono rilette e verificate, se ci sono discrepanze l'operazione viene bloccata segnalando la presenza dell'errore all'utente del computer, che deciderà sul da farsi. Durante la lettura se i controlli di correttezza dei dati falliscono, si ha la certezza che le informazioni sul supporto non possono essere ritenute più valide, visto che alla precedente verifica lo erano, e quindi i dati sono cestinati dal Sistema Operativo, mentre l'utente riceve la solita segnalazione di errore, ovviamente ciò accade dopo alcuni tentativi di rilettura accompagnati dal caratteristico rumore, che tutti gli utenti di personal computer hanno imparato a riconoscere ed a temere.
Le prime unità di memoria di massa, nel mercato home-personal, furono i registratori, che sfruttavano le normali audiocassette, tranne in casi particolari, sostituiti successivamente dai primi floppy disk. In quei tempi, per copiare il software era sufficiente leggere in memoria, tecnica per altro comune a tutti i supporti, il file desiderato, per poi riscriverlo su di un altro, oppure nel caso delle audiocassette bastava usare il banale impianto Hi-Fi di casa, se non si desiderava perdere troppo tempo.
Tutto ciò era possibile, e tutt'ora lo è, per il fatto che tali unità di massa sono del tipo lettura/scrittura, l'unico modo per rendere induplicabile un supporto è di realizzarne uno a sola lettura, e non divulgare le specifiche tecniche per costruire gli apparati di scrittura, un po' quello che successo alla comparsa dei primi CD-Rom, ora facilmente copiabili da qualsiasi Personal Computer dotato di masterizzatore, e che si sta ripedendo con i DVD.
Per le audiocassette non c'era niente da fare, tant'è vero che sono ormai scomparsi i tradizionali registratori a nastro dalla lista delle unità di massa, e ciò è dovuto non alla loro lentezza ed inaffidabilità come molti credono, ma alla facilità con cui era possibile duplicarle. Oggi si continuano ad usare i registratori, anche se si sono trasformati, con l'uso di nastri di particolare formato (proprio per non essere duplicabili con i normali Hi-Fi) e capacità, in unità streamer, il cui scopo di offrire spazio a basso costo per effettuare i back-up degli harddisk, ma vista la disponibilità ed il costo in calo dei masterizzatori presto verranno soppiantati del tutto, almeno nel mercato consumer.
Il floppy disk è un dischetto (oggi a doppia faccia) di materiale magnetizzabile, custodito in una confezione quadrata più o meno rigida, che preserva la delicata superficie magnetica dalla polvere, ditate, ecc... La superficie magnetica viene divisa, durante la formattazione, in anelli concentrici denominati tracce, ogni traccia viene suddivisa in porzioni più piccole definite settori o blocchi, come ormai tutti dovrebbero sapere. Quando si registra un file, non tutti i settori disponibili sul disco sono utilizzati, dato che generalmente un file più piccolo dello spazio disponibile sul supporto magnetico impiegato, e questo era particolarmente vero agli inizi dell'era dell'informatica personale; così alcuni programmatori decisero di sfruttare i settori liberi per inserire dei codici di riconoscimento o porzioni di codice eseguibile, quindi copiando semplicemente il file su un'altro dischetto, nella copia mancano tali vitali informazioni, rendendo non funzionante il programma. Una volta scoperto l'inganno, i pirati hanno realizzato dei programmi in grado di copiare i singoli settori, ottenendo una copia (quasi) perfetta del disco originale. Per motivi di sicurezza, data la bassa affidabilità offerta dalle vecchie meccaniche, non tutta la superficie del dischetto era impiegata per memorizzare le informazioni lasciando delle tracce vuote nella parte più interna del disco, purtroppo ancora oggi si incorre in tale limitazione nonostante l'affidabilità delle meccaniche sia aumentata, quindi qualcuno ha impiegato quelle zone extra, per altro inaccessibili se si pilota il drive con le normali routine di lettura e scrittura offerte dal Sistema Operativo. Agendo così, oltre ad aumentare artificialmente la capienza del disco, si era sicuri, o quasi, di rendere il disco induplicabile. Anche questa volta la soluzione si è magicamente materializzata: è bastato sostituire, nel programma per copiare il dischetto, tutte le chiamate alle routine del S.O. con chiamate alle routine proprietarie, per altro realizzate studiando le routine di accesso diretto al disco presenti nei programmi protetti.
Con il progredire delle conoscenze tecniche è stato persino possibile ricreare, simulandoli per via software, ovvero alterando le informazioni contenute negli header e nei controlblock dei singoli settori, alcuni degli errori hardware della superficie dei floppy, usandoli come identificativi dell'originale, ma anche questi vennero riprodotti dai più avanzati programmi di copia. Qualcuno si spinse oltre generando un formato di memorizzazione non standard spesso associato ad un sistema crittografico, solo il bootblock era di formato standard in modo tale da essere riconosciuto dal sistema, su piattaforma Amiga tali dischi furono chiamati "Not Dos", dall'abbreviazione della segnalazione di errore fornita dal filesystem quando questi erano inseriti dopo l'avvio della macchina. Successivamente, a qualcuno venne in mente la brillante idea di produrre un errore di tipo hardware sulla superficie magnetica. I normali programmi di copia lo simulano alterando le informazioni negli Header o nei Controlblock, in apparenza il disco è copiabilissimo, ma...
Riformattando la traccia l'errore software scompare, mentre quello hardware resta, e poichè non tutti possono permettersi un marchingegno, che con un qualsiasi sistema danneggi in punti prestabiliti il dischetto, di solito è impiegato un piccolo laser, da qui il nome di Laser Hole Protection.
Si ha così un criterio affidabile per distiguere, durante l'esecuzione del programma, se si sia in presenza di un originale o di una copia pirata. Il software da proteggere non deve far altro che limitarsi a formattare la traccia rovinata, e verificare se l'errore sia scomparso o meno. La soluzione per l'eliminazione di tale protezione sembrava non esistere, e ha dato filo da torcere a molti e per diverso tempo. In realtà la tecnica è, sotto certi punti di vista, ancora più banale di quelle segnalate prima, e verrà illustrata nelle prossime puntate, visto che può essere adottata efficacemente con qualunque schema di protezione.
Putroppo lo spazio a disposizione si è esaurito, la prossima volta parleremo della seconda famiglia di tecniche, che non tende a proteggere il supporto rendendolo induplicabile, ma mira a rendere non pienamente utilizzabile il software pirata.