Comprobar la complejidad de las contraseñas

Ataque diccionario

Si habéis seguido los artículos dedicados a Medidas básicas de seguridad para aplicaciones Access, tendréis ya las contraseñas de vuestros usuarios de base de datos encriptadas con un hash SHA-2 de 256 bits. Como comenté en el artículo de encriptación, este algoritmo no lo han conseguido «romper» hasta el momento por lo que podríamos pensar que nuestra base de datos es segura. Nada más lejos de la realidad…

Generalmente, los usuarios, tienden a utilizar contraseñas sencillas de recordar y por lo tanto sencillas de encontrar mediante ataques de fuerza bruta combinados con ataques de diccionario. Para evitar los primeros (por lo menos los menos avanzados), cuanto mayor sea la contraseña, más difícil resultará que un programa de fuerza bruta la encuentre. En cambio los segundos son más potentes ya que cada vez se utilizan diccionarios más extensos y con mayores combinaciones de caracteres.

Es cierto que con el suficiente tiempo, o la suficiente capacidad de procesamiento, tarde o temprano se acaba encontrando una contraseña, pero para eso estamos nosotros, para ponérselo difícil al usuario malintencionado. Para ello utilizaremos 2 estrategias:

-Limitar el número de intentos de conexión (lo explicaré más adelante)

-Comprobar la complejidad de la contraseña del usuario.

Expresiones regulares en Visual Basic para complejidad de contraseñas

Las expresiones regulares en Visual Basic se utilizan para comprobar cadenas de caracteres que generalmente introduce el usuario. Ejemplos de posibles utilizaciones son formularios de datos en los que la información debe tener un formato determinado, por ejemplo, una dirección de correo electrónico (caracteres + @ + caracteres), una URL (http:// + caracteres).

En nuestro caso vamos a utilizar las expresiones regulares para comprobar que cuando nuestros usuarios modifiquen su contraseña, introduzca otra lo suficientemente compleja como para que no sea factible encontrarla mediante fuerza bruta o diccionario.

Lo primero que tendremos que hacer para poder utilizar las expresiones regulares es Añadir la referencia a Microsoft Visual Basic Script Regular Expressions 5 a nuestro proyecto desde el menú Herramientas->Referencias de Visual Basic. En este caso, vamos a crear una función que nos compruebe que nuestra contraseña tiene entre 6 y 15 caracteres, tiene mayúsculas, tiene minúsculas y tiene caracteres numéricos. La expresión que comprueba esos criterios sería la siguiente:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}$

Podéis jugar todo lo que queráis con las expresiones regulares, pero de momento yo creo que es suficiente este tipo de contraseña para nuestro sistema de seguridad (a veces pasarse hace que los usuarios tengan la contraseña con un Post-it en la pantalla del ordenador…).

A modo de ejemplo, os dejo una función que devuelve TRUE cuando se cumplen las condiciones que he citado anteriormente al pasarle una contraseña:

Public Function Comprobar_Contraseña(Contraseña As String) As Boolean
On Error GoTo algomalopasa
Dim oReg As RegExp
' Crea un Nuevo objeto RegExp
Set oReg = New RegExp
' Expresión regular
oReg.Pattern = "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}$"
' Comprueba y Retorna TRue o false
Comprobar_Contraseña = oReg.Test(Contraseña)
Set oReg = Nothing
Exit Function
algomalopasa:
MsgBox ("Error al crear la contraseña comprobando longitudes"), vbCritical, "Error"
End Function
The following two tabs change content below.
Llevo más de 10 años programando, sobre todo en Visual Basic y con bases de datos Access. Para mí, VBA y Access siguen siendo herramientas muy potentes. He desarrollado varios proyectos con PHP y MySql. Si sumo las webs que he tenido, probablemente pasaría de 100. Ahora prefiero dedicar todo mi esfuerzo a este blog (aunque sigo manteniendo unas cuantas...). Trabajo en la administración pública (si, soy funcionario), pero he trabajado en pequeñas empresas e incluso en una "grande" de las telecomunicaciones. Ultimamente estoy bastante metido en abrirme nuevos horizontes con C# y .NET. Renovarse o morir!

Una respuesta a Comprobar la complejidad de las contraseñas

  1. Excelente blog. Soy un apasionado a la programación PHP, VBA, MYSQL, pues aunque me considero también un programador de palo, soy exigente a la hora de crear un administrador de usuarios.
    He realizado varias aplicaciones en ACCESS y estoy exactamente realizando la división de base de datos y trabajar con FE y BE.

    Gracias por compartir tus valiosos conocimientos, pues es muy raro que expertos en este tema lo hagan. Y sobre todo en Access….

    Desde Colombia un saludo especial.

Deja una respuesta