Com crear passwords segurs i fàcils de recordar

 cranor - com crear passwords segurs i fàcils de recordar

La xerrada de Lorrie Faith Cranor  em va fer pensar com crear passwords segurs i fàcils de recordar. La xerrada “What’s wrong with your pa$$w0rd?” la va fer al març de 2014 a TED Talks.

Recullo varies idees interessants sobre la xerrada que vull que serveixin per crear passwords segurs i fàcils de recordar.

  • Millor apuntar les claus amb un Post-it a la pantalla que memoritzar una sola clau i utilitzar-la a varis llocs.
  • Que no és una bona idea tenir que utilitzar claus del tipus “TkejJ,kQp3“. Si només tinguéssim una sola clau, encara. Amb la quantitat de  claus que faig anar, les d’aquest tipus, no són fàcils de recordar.
  • Busquem claus segures! Només han de complir que siguin llarges amb un conjunt de caràcters el més gran possible(lletres majúscules, lletres minúscules, números i símbols) i que no siguin de diccionari.   En cap lloc està escrit que per tenir un password segur ha de ser difícil de recordar.

cranor - com crear passwords segurs i fàcils de recordarLa Lorrie Faith Cranor va fer imprimir sobre un edredó els 1000 passwords robats més usats del lloc web RockYou. La mida dels passwords es proporcional a la freqüència amb que apareixien al conjunt de dades robades. Encara que l’estudi s’ha fet amb passwords de angloparlants, haig de reconèixer que ja he identificat alguns dels passwords que utilitzo en certs llocs. Vaja!, vaig a canviar els passwords ara mateix… Com ho haig de fer per no prendre mal?

Anem a analitzar primer quins passwords tinc!

Bàsicament en tenia quatre de tota la vida, per llocs importants un, per llocs no fiables i per coses banals un altre. Alguns que per les regles del lloc havia de ser d’una mida i característiques especials. I Sí, és veritat! Tenia el password 1234  per entrar a alguns llocs.

He de trobar una manera que em sigui fàcil recordar els passwords! Per poder recordar els passwords tinc dues maneres.

Construccions de paraules sense sentit a partir de paraules amb sentit. Per exemple: “cavallpletornacalaix” afegint números , signes i majúscules amb algun patró establert quant així em sigui requerit pel propi lloc on vull accedir. “c/avalL12P/lE13t/ornA14c/alaiX

O que sonin be per recordar: “etacapotat” Canviant algunes per majúscules(per exemple la “T”  “eTacapoTaT” i si és vol algun símbol i algun número… “eTa_2005capoTaT“. A partir d’aquí canviar un petit patró a cada nova clau que necessitem! Per exemple, primera i última lletra de lloc a on volem accedir i insertar-ho sempre en alguna posició:

  • youtube(ye):  eTa_2ye005capoTaT
  • gmail(gl):  eTa_2gl005capoTaT
  • Twitter(tr): eTa_2tr005capoTaT

I si primer escrivim eTacapoTaT desprès movem el cursor  8 posicions o millor amb el ratolí i escrivim _2ye005 per accedir al youtube, evitem possibles  Keylogger. El Keylogger  haurà captat eTaTocapoTaT_2ye005 i nosaltres hauríem escrit  eTa_2ye005capoTaT. Bé! això és per si estem obsessionats amb la seguretat

Els llocs on es guarden els passwords n’hi ha de dues classes. Els que guarden el password tal qual i els que guarden el HASH del password. Els llocs que guarden el password tal qual  haurien d’estar prohibits i mai accedir-hi.  Són en aquests llocs on millor crear una altre contrasenya amb patró diferent  per cada lloc dubtós. En el cas dels que guarden un HASH, doncs no hi ha problema utilitzar  el tipus de password on canvia poca cosa de un lloc a un altre. Encara que canviï poca cosa al password, el HASH serà totalment diferent i no aportarà cap informació que pugui servir per esbrinar el patró utilitzat en l’altre.

El HASH és fàcil de generar i te dues propietats que fa que sigui un bon sistema pels passwords:

  1. A partir d’un HASH d’un password és impossible trobar el password. Funció unidireccional.
  2. Una petita modificació del password genera un HASH diferent.

Per autenticar-te es genera el HASH de la clau i es compara amb el HASH guardat. Si és el mateix doncs usuari autenticat!

He fet un petit programa per generar el HASH de qualsevol paraula. Amb aquest programa es pot provar les propietats del hash.

Password:

He estat buscant i no he trobat cap lloc web que generi un password que sigui fàcil de recordar i que em serveixi de base per als meus passwords. N’hi ha un munt que el que fan és generar passwords que no hi ha manera de poder recordar:

Tots aquests llocs bàsicament fan anar una funció javascript que simplificada queda així:

function creapassword(llargada) {
    var retVal  = "";
    var charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    var n = charset.length;
    for (i=0;i<llargada;i++) {
        retVal += charset.charAt(Math.floor(Math.random() * n));
    }
    return retVal;
}

El resultat del qual es pot provar clicant al botó:

  Llargada Password:

Amb una mica d’imaginació és pot modificar el codi per tal que doni passwords que siguin fàcils de recordar, que siguin segurs i que compleixin els requisits que actualment estan més o menys establerts.

  • Que tinguin símbols: @
  • Que hi hagi barreja de majúscules i minúscules: @Ab
  • Que hi hagi números: @Ab2
  • Que tingui una llargada de 8 caràcters com a mínim: @Ab2@Ab2
  • Que no siguin paraules de diccionari, ni referents al lloc on volem ficar la clau.

Sembla difícil, que amb aquests requeriments, trobem una manera automàtica de generar tants passwords com vulguem i que siguin segurs i fàcils de recordar.

Anem a veure que surt!

Per començar vull establir uns criteris sobre els criteris establerts que facin fàcil aquesta tasca.

  • Els números que surtin al password vull que estiguin junts i que siguin entre 11 i 99 sense zeros. Per poder associar el número que em doni a un any.  82 –> 1982 (mundial de futbol).
  • Decideixo que les vocals estaran en minúscules i les Consonants en majúscules.
  • El conjunt de caràcters vull que sigui aquest: aBCDeFGiKLMNoPRSTuXZ. Decideixo treure la Q, W, Y, H, J i la V. Crec que el password serà mes llegible.
  • Els símbols vull que siguin aquests: _ $ # @ & %
  • Necessito que tingui unes petites normes morfològiques:
    1. Començarà amb vocal o Consonant.
    1. Si davant hi ha una vocal puc ficar qualsevol  caràcter: aBCDeFGiKLMNoPRSTuXZ.
    1. Si davant hi ha una Consonant puc ficar una vocal: aeiou.
    1. Si davant hi ha la consonant B, C, F, G o P puc ficar una vocal (aeiou) o una R o L.
    1. Si el password és llarg vull que em separi alguna síl·laba amb un dels símbols.
  1. El número vull que porti un símbol davant i que serveixi per separar síl·labes o al final dels password per una major llegibilitat.

Tots aquests criteris ficats a un programa amb javascript queden així:

function creapasswordOK(llargada) {
    var r      = "";  //retorn
    var aTot   = "BDMaBCDeFGiKLMNoPRSTuXZ";  // menys Q W Y H J V
    var aVoc   = "aeiou"; 
    var aVocRL = "RLaeiou";
    var aNum   = "123456789";  
    var sig    = "_$#@&%";  
    var bCon   = false;  
    var bVolRL = false;  
    var nTot   = aTot.length;
    var nVoc   = aVoc.length;
    var nVocRL = aVocRL.length;
    var nsig   = sig.length;
    var bsig   = true;
    var bmig   = Math.floor(Math.random() * 2);  // 0  o 1
    var i =0;
    while (i<llargada) { if (i==0) { r += aTot.charAt(Math.floor(Math.random() * nTot)); if ((r[i]=='a') || (r[i]=='e') || (r[i]=='i') || (r[i]=='o') || (r[i]=='u')) bCon=false; else bCon=true; if ((r[i]=='B') || (r[i]=='C') || (r[i]=='F') || (r[i]=='G') || (r[i]=='P')) bVocRL=true; else bVocRL=false; } if (i>0) {
        if (bCon) {
          if (bVocRL) {
            r += aVocRL.charAt(Math.floor(Math.random() * nVocRL));
          } else {
            r += aVoc.charAt(Math.floor(Math.random() * nVoc));
          }  
        } else {
          if (bsig && i>3 && i<llargada-3){
            if (bmig) {
              r += sig.charAt(Math.floor(Math.random() * nsig));
              r += aNum.charAt(Math.floor(Math.random() * aNum.length));
              r += aNum.charAt(Math.floor(Math.random() * aNum.length));
              bsig=false;
              i=i+3;
            } else {
              r += sig.charAt(Math.floor(Math.random() * nsig));
              bsig=false;
              i++;
            }
           }  
          r += aTot.charAt(Math.floor(Math.random() * nTot));
        }
      }  
      if (i==(llargada-4) && bmig==false) {
        r += sig.charAt(Math.floor(Math.random() * nsig));
        r += aNum.charAt(Math.floor(Math.random() * aNum.length));
        r += aNum.charAt(Math.floor(Math.random() * aNum.length));
        i=i+3;
      }
        bCon=false;bVocRL=false;  // per quant hi ha signe.
        if ((r[i]=='a') || (r[i]=='e') || (r[i]=='i') || (r[i]=='o') || (r[i]=='u')) bCon=false;  else  bCon=true;
        if ((i<(llargada-1)) && ((r[i]=='B') || (r[i]=='C') || (r[i]=='F') || (r[i]=='G') || (r[i]=='P'))) bVocRL=true; else  bVocRL=false;
     i++; 
    }
    return r;
}
function resultatOK(llargadaOK){
  document.getElementById('resOK').value=creapasswordOK(llargadaOK);
}

I el resultat és pot provar tantes vegades com es vulgui aquí mateix.

  Llargada Password:

Exemples que m’han sortit i que són bons candidats per a mi:

  • TuMu$29PaD  TUMU PAD  i $29 al mig
  • MuDeLoC#16  MUDELOC  i #16 al final
  • GoTu$44BaR  GOTU BAR i $44 al mig
  • KiTuCLi@83  KITUCLI i @83 al final
  • NuCeBuT_38  NUCEBUT i _38 al final
  • CoMu%94oPu  COMU OPU i %94 al mig
  • PRaNeoG%42  PRANEOG  i %42 al final
  • MeDo@53CRu  MEDO CRU i @53 al mig

També m’han sortit passwords que no em fan el pes, però tampoc són de l’estil a: TkejJ,kQp3. (generat des de  https://password.es/)

  • Muuo%63KoX  MUUOKOX i %63 al mig
  • XiRaKoo_89   XIRAKOO i _89 al final
  • CiiNuSi@13  CIINUSI i @13 al final

Que tal? Amb aquesta eina hem guanyat alguna cosa o encara són complicats de recordar?

Autor: Ramon Llorens

Pogramador

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *