Logo JsDir.com [niente]
Bring Your Site To Life!!!
5 Settembre 2008 - 19:21:37 - 26 scripters on-line! - La tua posizione nel sito: StaffScripts/Script021/
BedInLecce
StaffScripts
paZZword

Autore: Riccardo Data: 15/03/2000 Downloads: 2598 Voto: 3,5/5 Download P r o v a


Protezione password avanzata

      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 coseno:

      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.

<SCRIPT>
<:!--
function Ordina(stringa)
{
ol=stringa.length;
for (oi = 0 ; oi<ol ; oi++)
   {
   opp=stringa.substring(oi,oi+1);
   ordinato=true;
   for (oj = oi ; oj<ol; oj++)
      {
      st=stringa.substring(oj,oj+1);
      if ( st < opp)
         {
         opp=stringa.substring(oj,oj+1);
         pospp=oj;
         ordinato=false;
         }
      }
    (!ordinato)?stringa=stringa.substr(0,oi)+opp+stringa.substr(oi,pospp-oi)+....
	                                                     ....stringa.substr(pospp+1,ol-pospp):null;
   }
return stringa;
}

function password (pwd)
   {
   var controllo=true;
   (document.login.pwd.value == "" )?(controllo=false):null;
   var p="";
   window.status='';
   pass=pwd.toLowerCase();
   alfabeto=" abcdefghijklmnopqrstuvwxyz";
   for ( i=0 ; i < pass.length ; i++)
      {
      var j=parseInt(Math.round(Math.abs(1+25*Math.cos(alfabeto.indexOf(c=pass.substring(i,i+1))-1))));
      p+=alfabeto.substring(j,j+1);
      }
   p=Ordina(p);
   (p != "aakoxzz")?(controllo=false):null;
   (controllo)?(self.location.href= pwd+".html"):(alert("               ....
	                                                     ....  Errore!\n \nLa password inserita non č corretta."));
   }
-->
</SCRIPT>
      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.



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.
       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 bancario su una pagina Web vero?




Per navigare correttamente il sito è necessario abilitare i cookies.
Enjoy Open Source!
ffx80bl1

    javascript
 
 
 
         Stampa
          Segnala
          Preferiti





ffx1201