{"id":26693,"date":"2023-10-02T23:24:24","date_gmt":"2023-10-03T05:24:24","guid":{"rendered":"https:\/\/latam.kaspersky.com\/blog\/?p=26693"},"modified":"2023-10-02T23:25:23","modified_gmt":"2023-10-03T05:25:23","slug":"how-to-store-passwords","status":"publish","type":"post","link":"https:\/\/latam.kaspersky.com\/blog\/how-to-store-passwords\/26693\/","title":{"rendered":"La seguridad y el almacenamiento de contrase\u00f1as"},"content":{"rendered":"<p>A estas alturas, a medida que se acerca el final del primer cuarto del siglo XXI, seguramente ya todo el mundo sea consciente de que las contrase\u00f1as son puro oro digital y que su protecci\u00f3n es clave para garantizar la seguridad y privacidad de los datos. Sin embargo, a pesar de ello, no todas las empresas almacenan las contrase\u00f1as correctamente.<\/p>\n<p>En esta publicaci\u00f3n veremos c\u00f3mo NO almacenar las contrase\u00f1as de los usuarios y qu\u00e9 m\u00e9todos utilizan los servicios que s\u00ed se toman en serio la seguridad.<\/p>\n<h2>Almacenar contrase\u00f1as en texto plano: la forma incorrecta<\/h2>\n<p>El m\u00e9todo m\u00e1s sencillo es almacenar las contrase\u00f1as en una base de datos sin cifrar. Por tanto, cuando un usuario intenta iniciar sesi\u00f3n, la autenticaci\u00f3n consiste en comparar lo que introduce con lo que hay en la base de datos.<\/p>\n<p>Pero siempre existe el riesgo de que los atacantes roben esta base de datos de una forma u otra, por ejemplo, explotando las vulnerabilidades en el software de la base de datos. O bien, un empleado con malas intenciones y altos privilegios de acceso podr\u00eda robar un documento de contrase\u00f1as. Tambi\u00e9n podr\u00edan usarse las credenciales filtradas o interceptadas de los empleados para robar contrase\u00f1as. En pocas palabras, hay muchos posibles escenarios en los que las cosas podr\u00edan salir mal. Recuerda: los datos almacenados en formato abierto est\u00e1n, como su propio nombre indica, <em>abiertos<\/em>.<\/p>\n<h2>Cifrar las contrase\u00f1as: algo mejor<\/h2>\n<p>\u00bfQu\u00e9 pasa si almacenas las contrase\u00f1as en forma cifrada? A simple vista, no es una mala idea, pero en la pr\u00e1ctica no funciona del todo bien. Despu\u00e9s de todo, si almacenas contrase\u00f1as cifradas en una base de datos, debes andar descifr\u00e1ndolas cada vez que necesites acceder a una cuenta de usuario.<\/p>\n<p>Eso significa que tendr\u00e1s la clave de cifrado a mano y, si se diera el caso, esta clave podr\u00eda caer f\u00e1cilmente en manos de los ciberdelincuentes, junto con la base de datos de contrase\u00f1as. Por tanto, todo este proceso no habr\u00eda servido de nada: los ciberdelincuentes podr\u00edan descifrar r\u00e1pidamente la base de datos y obtener las contrase\u00f1as en texto plano, por lo que volvemos al punto de partida.<\/p>\n<p>Como suelen advertir los cript\u00f3grafos, el cifrado no resuelve el problema de la privacidad de los datos: simplemente lo convierte en un problema de almacenamiento seguro de claves. Puedes intentar pensar en alg\u00fan tipo de estrategia astuta que reduzca los riesgos, pero en general este m\u00e9todo no te permitir\u00e1 proteger tus contrase\u00f1as con confianza.<\/p>\n<h2>Almacenar los <em>hashes<\/em> de las contrase\u00f1as: la forma correcta<\/h2>\n<p>El mejor m\u00e9todo consiste en no almacenar contrase\u00f1as. Si no tienes algo, no te lo pueden robar, \u00bfcierto?<\/p>\n<p>Pero \u00bfc\u00f3mo se puede comprobar entonces si un usuario que ha iniciado sesi\u00f3n ha introducido la contrase\u00f1a correcta? Ah\u00ed es donde entran en juego las <a href=\"https:\/\/es.wikipedia.org\/wiki\/Funci%C3%B3n_hash\" target=\"_blank\" rel=\"noopener nofollow\">funciones <em>hash<\/em><\/a>: algoritmos cifrados especiales que codifican cualquier dato en una cadena de bits de longitud fija de una forma predecible pero irreversible.<\/p>\n<p><em>Predecible<\/em> aqu\u00ed significa que los mismos datos se convierten siempre en el mismo hash e <em>irreversible<\/em>, que es completamente imposible recuperar los datos hash del hash. Eso es lo que hace cualquier servicio online si se preocupa, aunque sea m\u00ednimamente, por los datos de los usuarios y valora su reputaci\u00f3n.<\/p>\n<p>Cuando un usuario crea una contrase\u00f1a durante el registro, no es la contrase\u00f1a en s\u00ed, sino su hash, lo que se almacena en la base de datos junto con el nombre de usuario. Despu\u00e9s, durante el proceso de inicio de sesi\u00f3n, este hash se compara con el de la contrase\u00f1a introducida por el usuario. Si coinciden, significa que las contrase\u00f1as son las mismas.<\/p>\n<p>En caso de filtraci\u00f3n de la base de datos, los atacantes no obtienen las contrase\u00f1as, sino sus datos hash, de los que no se pueden recuperar los datos originales; son <em>irreversibles<\/em>, \u00bfrecuerdas? Por supuesto, se trata de una gran mejora en t\u00e9rminos de seguridad, pero a\u00fan es demasiado pronto para cantar victoria: si los ciberdelincuentes consiguen los datos hash, podr\u00edan intentar un ataque de fuerza bruta.<\/p>\n<h2>Los hashes \u201csalados\u201d: a\u00fan mejor<\/h2>\n<p>Despu\u00e9s de hacerse con tu base de datos, los ciberdelincuentes podr\u00edan intentar extraer las contrase\u00f1as mediante fuerza bruta. Esto supone hacerse con una combinaci\u00f3n de caracteres, calcular su hash y buscar coincidencias en todas las entradas de la base de datos. Si no se encuentran coincidencias, probar\u00e1n con otra combinaci\u00f3n, y as\u00ed sucesivamente. En caso de coincidencia, ahora conocer\u00e1n la contrase\u00f1a que se utiliz\u00f3 para calcular el hash en la base de datos.<\/p>\n<p>O, lo que es peor, el proceso de descifrado de contrase\u00f1as con hash se puede acelerar mediante las llamadas <a href=\"https:\/\/es.wikipedia.org\/wiki\/Tabla_arco%C3%ADris\" target=\"_blank\" rel=\"noopener nofollow\">tablas arco\u00edris<\/a>, que son enormes conjuntos de datos con funciones hash precalculadas para las contrase\u00f1as m\u00e1s frecuentes cuyo objetivo es facilitar la b\u00fasqueda de coincidencias en la base de datos robada. Todo esto se hace autom\u00e1ticamente, por supuesto, por lo que el proceso de descifrado de contrase\u00f1as se acelera considerablemente.<\/p>\n<p>No obstante, tenemos una buena noticia: no se puede calcular el hash de todas las combinaciones posibles de caracteres de antemano. De hecho, una tabla arco iris completa para cualquier algoritmo hash ocupar\u00eda m\u00e1s espacio en disco del que hay disponible en el planeta. Incluso para el algoritmo MD5, que no es de mucha confianza, esta tabla contendr\u00eda (respira hondo) 340 282 366 920 938 463 463 374 607 431 768 211 456 registros. Por ello solo se incluyen las combinaciones m\u00e1s comunes dentro de estas las tablas arco\u00edris.<\/p>\n<p>Para combatir el uso de tablas arco\u00edris, los cript\u00f3grafos idearon una soluci\u00f3n que utiliza otra propiedad importante de las funciones hash: incluso el m\u00e1s m\u00ednimo cambio en el texto principal altera el resultado del hash.<\/p>\n<p>Antes de que una contrase\u00f1a con hash se compute y escriba en la base de datos, se a\u00f1aden un conjunto aleatorio de caracteres: la sal. De esta forma, la base de datos con hash se modifica hasta tal punto que ni siquiera <a href=\"https:\/\/latam.kaspersky.com\/blog\/recuerdas-el-gowker-media-password-breach-del-2010\/4845\/\" target=\"_blank\" rel=\"noopener\">las contrase\u00f1as m\u00e1s b\u00e1sicas, obvias y frecuentes<\/a> como \u201c12345678\u201d y \u201ccontrase\u00f1a\u201d pueden conseguirse por fuerza bruta mediante tablas arco\u00edris.<\/p>\n<p>La variante m\u00e1s simple usa la misma sal para todas las contrase\u00f1as. Pero la m\u00e1s resistente a los ataques crea una sal diferente para cada registro individual. Lo bueno de esta estrategia es que las sales se pueden almacenar en la misma base de datos sin riesgo adicional: conocer la sal no facilita mucho la tarea de los atacantes. De hecho, para descifrar los hashes, a\u00fan tendr\u00e1n que aplicar pura fuerza bruta: revisando una a una cada combinaci\u00f3n.<\/p>\n<p>Cuantos m\u00e1s servicios online adopten este m\u00e9todo de <em>no almacenar contrase\u00f1as<\/em>, menos probabilidades habr\u00e1 de que se produzca un robo masivo de credenciales de usuario y los problemas posteriores asociados con el <em>hackeo<\/em> de cuentas.<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"mdr\"><input type=\"hidden\" class=\"placeholder_for_banner\" data-cat_id=\"mdr\" value=\"24810\">\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo deber\u00edan almacenar las contrase\u00f1as de usuario los servicios online y c\u00f3mo minimizar los da\u00f1os en caso de filtraci\u00f3n o ataque.<\/p>\n","protected":false},"author":2726,"featured_media":26694,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2795,3539,3540],"tags":[427,92,2648,121,3707,1025,38,2928,192],"class_list":{"0":"post-26693","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-ataques","11":"tag-contrasenas","12":"tag-criptografia","13":"tag-cuentas","14":"tag-filtraciones-de-datos","15":"tag-hash","16":"tag-seguridad","17":"tag-servicios-online","18":"tag-tecnologia"},"hreflang":[{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/how-to-store-passwords\/26693\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/how-to-store-passwords\/26286\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/how-to-store-passwords\/21719\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/how-to-store-passwords\/28961\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/how-to-store-passwords\/26568\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/how-to-store-passwords\/29183\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/how-to-store-passwords\/36161\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/how-to-store-passwords\/49101\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/how-to-store-passwords\/21014\/"},{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/how-to-store-passwords\/21802\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/how-to-store-passwords\/30524\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/how-to-store-passwords\/26839\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/how-to-store-passwords\/32570\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/how-to-store-passwords\/32223\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/latam.kaspersky.com\/blog\/tag\/contrasenas\/","name":"contrase\u00f1as"},"_links":{"self":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/26693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/users\/2726"}],"replies":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/comments?post=26693"}],"version-history":[{"count":2,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/26693\/revisions"}],"predecessor-version":[{"id":26696,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/26693\/revisions\/26696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media\/26694"}],"wp:attachment":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media?parent=26693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/categories?post=26693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/tags?post=26693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}