www.JsDir.com

paZZword

      Lo script della password pubblicato a fine gennaio era più che sicuro, perché si basava sull'esistenza o meno di una pagina HTML all'interno del sito per decidere se se la password era esatta.
      E non era niente di originale, quel tipo di script è in circolazione sulla rete nei siti specializzati da anni. Ma presentava un difetto. Se la pagina non esiste il browser genera un errore. Purtroppo non è un errore gestibile in JavaScript perché non è un errore generato da JavaScript, ma, appunto, dal browser. L'event handler onError non può essere usato perché può essere messo solo all'interno di un tag HTML, allora per controllare la pwd bisogna per forza mettere un controllo all'interno dello script.
      L'unica soluzione è, naturalmente, mascherarla.
      In questa versione il mascheramento avviene con due passaggi successivi:
      1.- in base ai caratteri della pwd scritta dal visitatore viene generata una stringa carattere per carattere
      2.- la stringa generata viene ordinata alfabeticamente così da far perdere la corrispondenza di posizione fra i caratteri della pwd e quelli della stringa.

      Punto 1: Generazione della stringa di controllo.
      La stringa viene generata usando la funzione cos(x). Per chi non lo sapesse cos(x) è una funzione periodica che a valori diversi (multipli di 2) restituisce lo stesso risultato.


      Dato che le lettere dell'alfabeto completo sono 26 ci saranno alcune lettere che danno lo stesso risultato. Il criterio è semplice, la lettera "a" è "1", "b" è "2" ... "q" è 17 .... "z" è "26". Di questi numeri lo script calcola il seno ed in base al risultato va a scegliere un'altra lettera.
      Tanto per fare un esempio la parola "accendino" una volta trasformata genera la stringa "ziioxxcxd", messe in colonna si notano le ripetizioni dovute all'uso del seno:

      Punto 2: Come se non bastasse un'altro script mette in ordine alfabetico la stringa generata:
      E questa è la stringa che compare in chiaro nello script perché venga controllata con il risultato della stessa trasformazione fatta sulla password inserita dal visitatore del sito.

      Da qui la sicurezza dello script che vi propongo, non è possibile risalire alla password basandosi sulla stringa, in primo luogo perché se, nel caso dell'esempio, usiamo la funzione inversa di cos(x) cioè cos-1(x) quando la applichiamo alla lettera "x" otterremo un risultato che sarà la "d" o la "n" ma non tutte e due, e sopratutto perché dovendo partire alla stringa ordinata alfabeticamente, lo stesso tentativo dovrebbe essere fatto su tutte le possibili combinazioni della stringa di controllo (cioé su tutti gli anagrammi). Provate a calcolare quanti sono i possibili anagrammi della parola "accendino".
      È evidente che grazie al lavoro della funzione coseno, una stringa di controllo non è generata da una sola chiave. Per una stessa stringa ne esistono molte. Questo è un vantaggio ma anche uno svantaggio.
      È un vantaggio perché consente di avere delle password diverse per molti utenti, uno svantaggio perché se per caso un visitatore imbrocca una password che verifica la stringa di controllo, ma quella non è la password giusta, il javascript lo farà accedere alla pagina, ma se la pagina non esiste si verificherà la stessa situazione dello script precedente.
      Un modo per cautelarsi da quest'eventualità c'è, ed è quello di trovare tutte le chiavi che generano la stringa di controllo e generare tutti i file della password. Ho messo a punto un programmino che in base alla parola che scegliamo come password ("accendino" nel nostro esempio) mi consente di fare questa ricerca. Il programma non fa certo il lavoro di scandaglio, semplicemente manipola i caratteri della stringa di controllo, generato in base alla password scelta, e ne restituisce le combinazioni giuste da usare come password. Il numero di password è variabile, esistono parole che generano poche password ed altre che ne generano centinaia. L'output che fornisce per "accendino" è in questo file di testo. Non fatevi ingannare dall'apparente semplicità del risultato. La segretezza principale, ripeto, non sta nella generazione dei caratteri di controllo, quanto nel fatto che la stringa di controllo è ordinata alfabeticamente. E non badate nemmeno tanto alla prima colonna. Ciò che è pubblico perché inserito nel sorgente della pagina è solo la terza colonna.



      Il programmino mi è costato 4 weekend di lavoro. Ragion per cui non mi sento di regalarlo. Il costo è di 150.000 lire che mi sembra abbastanza abbordabile.
       Se non volete il programma ma volete che vi generi io il file risultato il costo è di 25.000 lire per ogni file. Come dire una pizza&birra. Scrivetemi per le modalità di pagamento.



      Ho pronta anche un'altra versione dello script e del programma che consente una protezione ancora più sicura. Lo scheletro è quello che ho appena descritto, ma c'è un accorgimento in più che lo rende ancora più impenetrabile. Naturalmente di questo non dico niente. Il suo funzionamento resterà a conoscenza solo mia e di chi comprerà quest'ulteriore versione che, per inciso, costa 500.000 lire. Mi dispiace vendere "a scatola chiusa". Purtroppo JavaScript è fatto così, trasparente. Non avete che da fidarvi, ma mi sembra di darvene ragione.
       È superfluo aggiungere che eventuali aggiornamenti, se saranno necessari saranno gratuiti ed inviati tempestivamente per e-mail.
      Anche qui una preghiera, se usate il mio script mettete un link a jsdir.




Due parole sugli altri metodi di protezione e sulla crittografia

      Non mi va di vendere fumo. O, peggio, darne l'impressione.
      La protezione offerta da questo script, per quanto forte, non è sicura come quella che può fornirvi un Internet Service Provider a livello di server. Ma provate a chiedere in giro un po' di prezzi. E se siete dei privati non vi parlano nemmeno. Inoltre nessuno dei due metodi (il mio script ed il server dell'ISP) resistono all'attacco di un buon cracker. Se un cracker riesce ad avere l'accesso di SUPERUSER ad un server (NT, Unix, Linux, etc.) non c'è password o condivisione ristretta che tenga. Un cracker che riesce a fregare un firewall può gironzolare negli hard disk del server esattamente come fate voi con con Esplore Risorse sul vostro pc personale.

      Inoltre nessun tipo di crittografia è sicuro.
      Poco più di due anni fa la RSA (se la sigla non vi dice niente pensate a PGP) ha sfidato la comunità Internet a craccare l'algoritmo DES usato nel commercio elettronico, nelle smart card dei ricevitori satellitari digitali, nei bancomat, dal Pentagono per i segreti militari ecc. Pensate che il governo americano non vi fa ancora esportare o scaricare i browser che gestiscono chiavi a 128 bit per le protezioni perché il DES a 128 bit è ancora di importanza militare strategica.
       Dalla sfida della RSA è nato il progetto DesChallenge che riunendo gli sforzi di migliaia di computer collegati a Internet (esattamente come il progretto GIMPS o il SethiAtHome) è riuscito ad aver ragione della sfida della RSA, lanciata il 13 marzo 1997, dopo appena 96 giorni: la sera del 17 giugno 1997 e dopo che le migliaia di computer coinvolti avevano scandagliato solo il 24,6% delle chiavi. (Maggiori info nel bellissimo articolo di Corrado Giustozzi sul numero 177 di McMicrocomputer ottobre 1997.).
      Ma naturalmente non vorrete mettere il numero della vostra carta di credito o il vostro estratto conto trimestrale su una pagina Web vero?