La teva contrasenya és realment segura?

Posant a prova la resistència de les claus davant un atac de força bruta

Il·lustració d'un compte de correu electrònic destacat amb una contrasenya feble, representant el risc de compromís davant d'un atac informàtic.

Una contrasenya curta o massa previsible pot convertir-se en el punt feble d'un compte. Els atacants acostumen a provar primer les claus més comunes abans d'iniciar atacs de força bruta més complexos

Les contrasenyes protegeixen bona part de la nostra vida digital, però no totes ofereixen el mateix nivell de seguretat. Algunes poden ser descobertes en qüestió de segons, mentre que d'altres resistirien durant milions d'anys davant un atac per força bruta. En aquest article veurem de què depèn aquesta diferència i posarem a prova diverses contrasenyes mitjançant experiments reals amb Python.

Què és un atac de força bruta?

Un atac de força bruta consisteix a provar totes les combinacions possibles fins a trobar la contrasenya correcta. Si la clau és curta o utilitza pocs tipus de caràcters, el nombre de combinacions és relativament petit i es pot recórrer en poc temps. En canvi, quan augmentem la longitud de la contrasenya, el nombre de possibilitats creix molt ràpidament.

Aquesta és la raó per la qual una contrasenya llarga acostuma a ser molt més resistent que una contrasenya curta però aparentment complicada.

Temps estimat per trencar una contrasenya

Una contrasenya curta o massa previsible pot convertir-se en el punt feble d'un compte. Els atacants acostumen a provar primer les claus més comunes abans d'iniciar atacs de força bruta més complexos.

taula comparativa de fortaleses de contrasenyes en funció de la seva complexitat

Aquests valors són només estimacions. El temps real depèn de molts factors: la potència de l'ordinador, si l'atac es fa contra un hash robat, l'algorisme utilitzat, l'ús de targetes gràfiques i si l'atacant coneix o no l'estructura de la contrasenya.

La força bruta no és l'única amenaça

Tot i que els atacs de força bruta són fàcils d'entendre, en la pràctica els ciberdelinqüents acostumen a aprofitar filtracions de dades, contrasenyes reutilitzades o llistes de claus conegudes abans de provar totes les combinacions possibles.

Al respecte tenim un article en aquest mateix blog anomenat: El mite de la contrasenya complexa

Per aquest motiu, una contrasenya única continua sent tan important com una contrasenya llarga. Si una mateixa clau s'utilitza en diversos serveis, una sola filtració pot comprometre molts comptes diferents.

Per què la longitud és més important que la complexitat

Moltes polítiques de seguretat obliguen a utilitzar majúscules, minúscules, números i símbols especials. Tot i que aquestes mesures augmenten el nombre de combinacions possibles, l'efecte més important continua sent la longitud de la contrasenya.

Afegir un únic caràcter al final d'una contrasenya multiplica el nombre de combinacions que un atacant hauria de provar per un factor equivalent al nombre de caràcters del conjunt utilitzat: unes 26 vegades si només s'usen lletres minúscules, o prop de 95 vegades si s'inclouen majúscules, números i símbols. Aquest creixement és exponencial: cada nou caràcter afegeix la mateixa multiplicació, de manera que l'efecte acumulat sobre la dificultat total és enorme.

Això explica per què una frase de pas relativament llarga, encara que estigui formada per paraules senzilles, acostuma a oferir una protecció molt superior a una contrasenya curta plena de símbols i substitucions estranyes.

Gràfica de longitud de contrasenyes

Evalua la qualitat de la teva contrasenya

Un experiment real amb Python

Per entendre millor com funciona un atac de força bruta, hem desenvolupat un petit programa en Python capaç de generar combinacions de manera sistemàtica fins a trobar una contrasenya determinada.

for combinacio in itertools.product(caracters, repeat=longitud):
	clau = "".join(combinacio)
	if hashlib.sha256(clau.encode()).hexdigest() == hash_objectiu:
		print("Trobada:", clau)
		break

Les proves s'han realitzat sobre ordinadors convencionals, sense utilitzar targetes gràfiques especialitzades ni equipament professional. Tot i així, els resultats mostren que les contrasenyes curtes poden ser descobertes molt més ràpidament del que la majoria de persones imaginen.

En una de les proves, un PIN numèric de quatre dígits va ser localitzat en pocs segons. Quan es va augmentar la longitud i la varietat de caràcters, el temps necessari va créixer de manera espectacular. Aquest comportament és precisament el que fa que les contrasenyes llargues siguin tan efectives davant dels atacs de força bruta.

L'script complet utilitzat en aquestes proves es pot descarregar des dels adjunts d'aquest article perquè qualsevol lector pugui repetir els experiments pel seu compte.

Atac online vs atac offline

Quan es parla de trencar contrasenyes, sovint es dona per fet que tots els atacs funcionen de la mateixa manera. En realitat, existeix una diferència fonamental entre intentar accedir a un compte a través d'una finestra d'inici de sessió i intentar descobrir una contrasenya a partir d'una base de dades robada. Els experts anomenen aquestes dues situacions atac online i atac offline.

Com es desen les contrasenyes en un servidor?

Els servidors moderns no acostumen a desar les contrasenyes en text pla. En lloc d'això, calculen una empremta matemàtica anomenada hash i és aquest valor el que queda emmagatzemat a la base de dades.

Per exemple, una contrasenya com ara:

123456

es transforma en una llarga cadena de caràcters aparentment aleatòria. Quan l'usuari inicia sessió, el servidor calcula novament el hash de la contrasenya introduïda i compara el resultat amb el que té desat. Si coincideixen, l'accés és autoritzat.

Aquest sistema evita que un atacant pugui llegir directament les contrasenyes encara que aconsegueixi accedir a la base de dades.

Què és un atac offline?

Un atac offline es produeix quan els atacants aconsegueixen una còpia dels hash emmagatzemats en un servidor.

A partir d'aquí poden treballar sense cap mena de limitació. El seu ordinador genera milions de possibles contrasenyes, calcula el hash corresponent i el compara amb el hash robat. Quan troben una coincidència, han descobert la contrasenya original. Veure l'algorisme de Python abans descrit.

Com que tot el procés es realitza localment, sense necessitat de comunicar-se amb el servidor, la velocitat pot ser enorme. Aquest procés es pot automatitzar i accelerar mitjançant targetes gràfiques especialitzades capaces de calcular milers de milions de hash cada segon.

És en aquest escenari on la longitud de la contrasenya esdevé especialment important.

Què és un atac online?

En un atac online, l'atacant intenta accedir a un compte utilitzant directament la finestra d'inici de sessió d'un web o aplicació.

Cada intent ha de ser enviat al servidor a través d'Internet, processat i validat. A més, la majoria de sistemes moderns incorporen mesures de protecció com ara retards entre intents, bloquejos temporals, limitació d'intents per adreça IP, CAPTCHA o autenticació de doble factor.

Això fa que la velocitat dels intents sigui molt inferior a la d'un atac offline.

Per què és tan important aquesta diferència?

Imaginem una aplicació que només permet un intent cada tres segons i bloqueja l'accés després de diversos errors consecutius.

En aquestes condicions, una contrasenya relativament senzilla podria resistir durant anys un atac online. En canvi, si un atacant aconseguís una còpia dels hash i pogués treballar offline, la mateixa contrasenya podria ser descoberta en qüestió de minuts o hores.

Per aquest motiu, quan es parla de la fortalesa d'una contrasenya, sempre és important distingir entre la resistència davant un atac online i la resistència davant un atac offline. Els dos escenaris són molt diferents i requereixen mesures de protecció complementàries.

Com crear una bona contrasenya avui dia

La recomanació actual dels experts en seguretat no consisteix tant a crear contrasenyes difícils de recordar com a crear contrasenyes llargues i úniques.

Una bona estratègia és utilitzar frases de pas formades per diverses paraules sense relació aparent. Aquestes frases són fàcils de memoritzar per a les persones però generen un espai de cerca enorme per a un atacant.

També és important evitar reutilitzar la mateixa contrasenya en diversos serveis. Si una empresa pateix una filtració de dades, els atacants acostumen a provar les credencials robades en altres plataformes. Per aquest motiu, cada compte important hauria de disposar de la seva pròpia contrasenya.

Finalment, sempre que sigui possible, convé activar l'autenticació de doble factor. D'aquesta manera, encara que la contrasenya arribi a ser descoberta, l'accés al compte continuarà requerint una verificació addicional.

Conclusions

La seguretat d'una contrasenya no depèn tant de la seva aparença com del nombre de combinacions que un atacant hauria de provar per descobrir-la. Els experiments realitzats amb Python mostren que les claus curtes poden ser trencades en qüestió de segons o minuts, mentre que una frase de pas llarga pot resultar pràcticament inabastable per a un atac de força bruta.

Les recomanacions actuals dels experts són clares: prioritzar la longitud abans que la complexitat, utilitzar una contrasenya diferent per a cada servei i activar l'autenticació de doble factor sempre que sigui possible.

En definitiva, afegir uns quants caràcters més a una contrasenya acostuma a proporcionar molta més protecció que afegir-hi símbols estranys o combinacions difícils de recordar.

Referències

Altres webs

Vídeos

Podcasts

Infografia sobre la fortalesa de les contrasenyes i el temps necessari per descobrir-les mitjançant un atac de força bruta.

Quan trigaria un atacant a petar la teva contrasenya ? Comprova-ho

Annexos

Script per generar un hash d'una cadena. Copia el resultat en el altre script per provar si esbrina la cadena o no.

Script per provar la fortalesa d'un hash. Limita el nombre de caràcters en la variable LongitudMaxima que per defecte té un valor de 6.

Etiquetes:

contrasenyes,seguretat,força bruta,python,hash,ciberseguretat

codi post: 94ca