Protezione dalla copia

In questi giorni sto diventando veramente avido e sto pensando a come può essere possibile proteggere dalla copia (ma in generale dalla pirateria) l’applicazione che sto sviluppando.

Qualcuno potrebbe dire che, effettivamente, se il prezzo è corretto e le feature sono adeguate, la pirateria può anche essere una sorta di “male necessario”, e ne sono conscio, però, forse proprio perché voglio scalare la montagna, mi sto scervellando su quali possano essere i rimedi in modo che chi utilizza l’applicazione lo faccio solo se ha pagato il giusto.

Giusto che nel mio caso corrisponderà a circa un euro per una versione assolutamente base che funziona con i soli parametri di default e tre o quattro euro per quella completa e che consente anche di sincronizzare i file.

Mi sono dunque posto da due punti di vista: quello dell’utente finale e quello dello sviluppatore, però facendo particolare attenzione soprattutto all’esperienza dell’utilizzatore, perché se questa è funzionale, allora tutto arresto viene in qualche modo “perdonato”.

Esperienza utente

Il framework che ho sviluppato è tale per cui l’utente, la prima volta che apre l’applicazione, si trova di fronte una schermata in cui deve inserire un nome utente e un codice seriale.

Senza titolo 3.001

Il codice seriale, ovviamente, è stato acquistato in qualche modo, più o meno ovviamente, gli è stato recapitato per e-mail.

L’utente a questo punto si registra e per farlo deve necessariamente essere connesso ad Internet (altrimenti questo metodo non funziona).

Senza titolo 3.002

Una volta che il prodotto è stato registrato l’utente può utilizzarlo liberamente.

L’utilizzo però è vincolato necessariamente alla macchina con cui sta effettuando la registrazione, una volta utilizzato il numero seriale non può essere più utilizzato un’altra volta su un’altra macchina.

Senza titolo 3.003

Per poterlo fare l’utente deve andare alla schermata di di attivazione e, sempre essendo connesso a Internet, disattivare la macchina, in modo tale per cui il codice seriale può essere utilizzato a questo punto su uno nuovo computer.

Senza titolo 3.004

Direi che questo è un sistema abbastanza “politically correct”, diciamo che l’utente finale deve essere connesso ad Internet almeno una volta e poi tutto quanto funziona.

Senza titolo 3.005

C’è di peggio, non è vero?

Il punto di vista dello sviluppatore

Dal punto di vista dello sviluppatore le cose sono un pochettino più complesse, ma cercherò di essere abbastanza chiaro ed esaustivo.

Il primo assioma che ci riguarda è dato dal fatto che dobbiamo disporre di un generatore di numeri seriali, e, possibilmente, anche di un controllo di ridondanza tale per cui nessuno si può inventare un numero seriale ma questo debba poter essere verificato.

Senza titolo 3.007

Questa cosa non è necessaria, dato che ci si connette ad Internet per la verifica e l’attivazione, però non guasta e, in caso, vedrò di implementare anche questa funzione.

Una volta che abbiamo una generatore di numeri seriali, possiamo generarne una quantità a piacere, diciamo che dobbiamo avere una sorta di grande serbatoio che ci consente di non andare mai “stretti”, in parole povere la domanda non deve mai nemmeno lontanamente avvicinarsi all’offerta disponibile.

Senza titolo 3.006

Dotati di numeri seriali in quantità, possiamo vendere gli stessi su Internet, ci sono un sacco di moduli di e-commerce pensati apposta per la vendita di codici e non di beni materiali (o di materiale da scaricare): l’applicazione è liberamente scaricabile ma è necessario il codice per attivarla al 100%.

La lista di numeri seriali che abbiamo generato va a finire anche in un grande database che, all’inizio, sarà vuoto e contiene soltanto questi codici.

Quando l’utente cerca di registrarsi, inserisce il codice ha ricevuto per e-mail, a questo punto l’applicazione si connette ad Internet reinterrogato il database dei numeri seriali.

Senza titolo 3.009

Se il numero seriale esiste (e dunque è stato generato correttamente) si va a vedere se è libero nel database.

Senza titolo 3.010

Questo significa che il numero esiste ma non è mai stato utilizzato.

In questo caso la macchina dell’utente invia un identificativo dell’hardware e, una volta per tutte, numero seriale hardware vengono legati nel database on-line.

Senza titolo 3.011

Parallelamente, il locale, viene scritto un file “crittografato” che unisce numero seriale e identificativo dell’hardware, generando una licenza che è, appunto, univoca e con hash, della macchina e del seriale stesso.

Il seriale può anche essere salvato in chiaro da qualche parte, ma non il codice identificativo della macchina, per cui, all’attivazione dell’applicazione, le due stringhe (seriale e identificativo) vengono unite (in qualche modo che non spiegherò, naturalmente) e viene generata la hash.

Senza titolo 3.012

Se la hash risponde a quella salvata allora la macchina è autorizzata e il software può girare liberamente.

Nel (malaugurato) caso che l’utente, in qualche modo, cancellasse il file della licenza, al momento del lancio, avendo salvato il numero seriale, l’applicazione può comunque connettersi a Internet e vedere di autorizzare di nuovo la macchina (in modo anche trasparente all’utente).

Se si cancella, ipotizzandolo sempre per errore, il codice seriale, verrà richiesto all’utente e la procedura di attivazione sarà quella vista nel primo caso.

Mettiamo adesso il caso che un utente desideri lanciare l’applicazione da un’altra macchina, ma utilizzando sempre lo stesso numero seriale.

L’applicazione controllerà su Internet il database, e vedendo che il numero seriale è stato già preso ma con un altro identificativo di macchina, negherà la licenza, chiedendo l’utente, se proprio vuole lanciare l’applicazione su quella macchina, di disinstallarlo dalla macchina precedente.

Senza titolo 3.013

L’utente “maligno”, non può nemmeno copiare il file della licenza dalla prima macchina alla seconda, dato che questo file contiene, con un’ascia, non solo numero seriale ma anche l’identificativo della macchina, motivo per cui la licenza non si può spostare da un hardware all’altro.

Qualcuno adesso potrebbe obiettare che, se l’utente in qualche modo perde il numero seriale, non può nemmeno disinstallare l’applicazione.

Vero, ma qui siamo nel confine dello sticazzi, per cui l’utente deve per forza contattare lo sviluppatore e, in qualche modo, si deve procedere operando a mano.

A questo punto qualcuno potrebbe obiettare che l’anello debole della catena è quello relativo alla crittografia su spazio locale.
Per quanto mi riguarda io opererei con una simpatica MD5, a cui ad ogni stringa aggiungo una chiave identificativa (che rimane ovviamente segreta).

Note

Un sentito ringraziamento a Roberta Molinari che mi ha suggerito un paio di cose su come implementare, dal punto di vista dell’utente, tutto l’insieme.
Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...