Comprobar la complejidad de las contraseñas
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
Arkaitz Arteaga
Latest posts by Arkaitz Arteaga (see all)
- Access: Encriptar contraseñas con SHA-256 utilizando biblioteca de clases .NET con C# - 4 mayo, 2014
- Rendimiento de Access contra backend Access en servidor de archivos remoto. Cuarta parte. - 27 abril, 2014
- Rendimiento de Access contra backend Access en servidor de archivos remoto. Aclaración. - 21 abril, 2014
- Utilizar biblioteca de clases .NET en Access. Tercera aproximación a la Interoperabilidad COM - 14 abril, 2014
- Vincular tablas en Access con Visual Basic - 11 abril, 2014
Una respuesta a Comprobar la complejidad de las contraseñas
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.
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.