{"id":2141,"date":"2024-09-06T03:48:36","date_gmt":"2024-09-06T08:48:36","guid":{"rendered":"https:\/\/zidrave.net\/?p=2141"},"modified":"2024-09-06T03:53:06","modified_gmt":"2024-09-06T08:53:06","slug":"conociendo-bcrypt-el-protector-de-las-contrasenas-en-php","status":"publish","type":"post","link":"https:\/\/zidrave.net\/index.php\/2024\/09\/06\/conociendo-bcrypt-el-protector-de-las-contrasenas-en-php\/","title":{"rendered":"Conociendo BCRYPT el protector de las contrase\u00f1as en php"},"content":{"rendered":"\n<p>El uso de bcrypt para el hash de contrase\u00f1as proporciona una s\u00f3lida protecci\u00f3n contra ataques de diccionario y de fuerza bruta. Aqu\u00ed te explico por qu\u00e9 bcrypt es eficaz contra estos ataques y qu\u00e9 tan dif\u00edcil ser\u00eda comprometer una contrase\u00f1a hasheada con bcrypt, espec\u00edficamente con un costo de <code>$2y$10<\/code>.<br><br>Ya no se usa md5 ni SHA256 se usa Bcrypt como password_default en nuestro amado PHP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"538\" src=\"https:\/\/zidrave.net\/wp-content\/uploads\/2024\/08\/image-268-1024x538.png\" alt=\"\" class=\"wp-image-2037\" srcset=\"https:\/\/zidrave.net\/wp-content\/uploads\/2024\/08\/image-268-1024x538.png 1024w, https:\/\/zidrave.net\/wp-content\/uploads\/2024\/08\/image-268-300x158.png 300w, https:\/\/zidrave.net\/wp-content\/uploads\/2024\/08\/image-268-768x403.png 768w, https:\/\/zidrave.net\/wp-content\/uploads\/2024\/08\/image-268.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9 bcrypt es efectivo?<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Costo de C\u00e1lculo (Work Factor)<\/strong>:\n<ul class=\"wp-block-list\">\n<li>El par\u00e1metro <code>$2y$10<\/code> en bcrypt indica un costo de 10. Este par\u00e1metro especifica la cantidad de iteraciones que bcrypt realiza al generar el hash. A mayor n\u00famero de iteraciones, m\u00e1s tiempo y recursos computacionales se necesitan para generar un hash.<\/li>\n\n\n\n<li>El costo aumenta exponencialmente con cada incremento en el valor. Por ejemplo, aumentar el costo de 10 a 12 aumenta el tiempo de c\u00e1lculo del hash en aproximadamente 4 veces. Esto hace que los ataques de diccionario y fuerza bruta sean mucho m\u00e1s lentos y costosos.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Sal Aleatoria<\/strong>:\n<ul class=\"wp-block-list\">\n<li>bcrypt utiliza una sal (salt) aleatoria \u00fanica para cada contrase\u00f1a. Esto significa que incluso si dos usuarios tienen la misma contrase\u00f1a, sus hashes ser\u00e1n diferentes. La sal impide ataques de tablas de arco iris (rainbow tables), ya que cada hash es \u00fanico.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Lentitud Intencionada<\/strong>:\n<ul class=\"wp-block-list\">\n<li>bcrypt est\u00e1 dise\u00f1ado para ser intencionalmente lento, lo que ralentiza los ataques de fuerza bruta. Esto es parte de su fortaleza; incluso con hardware potente, el tiempo necesario para verificar cada intento de contrase\u00f1a se vuelve prohibitivo.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 tan dif\u00edcil es atacar un hash bcrypt con un diccionario?<\/h3>\n\n\n\n<p><strong>1. Ataques de Diccionario<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En un ataque de diccionario, el atacante prueba contrase\u00f1as comunes o previamente comprometidas. Debido al costo de c\u00e1lculo elevado de bcrypt, el atacante tiene que realizar muchas iteraciones para cada intento de contrase\u00f1a.<\/li>\n\n\n\n<li>A un costo de <code>$2y$10<\/code>, aunque se pueda manejar en t\u00e9rminos de tiempo en hardware moderno, el n\u00famero de intentos posibles sigue siendo extremadamente alto, lo que hace que un ataque de diccionario sea lento y poco pr\u00e1ctico para contrase\u00f1as fuertes.<\/li>\n<\/ul>\n\n\n\n<p><strong>2. Ataques de Fuerza Bruta<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los ataques de fuerza bruta implican probar todas las posibles combinaciones de contrase\u00f1as. La naturaleza exponencial de la complejidad del bcrypt hace que este tipo de ataques sean pr\u00e1cticamente inviables.<\/li>\n\n\n\n<li>Con un costo de <code>$2y$10<\/code>(valor predeterminado en PHP), incluso un sistema potente tendr\u00eda dificultades para realizar un ataque de fuerza bruta en un tiempo razonable.<\/li>\n<\/ul>\n\n\n\n<p><strong>3. Hardware y Tiempo<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La eficiencia de un ataque depende en gran medida del hardware utilizado. Un atacante con hardware especializado (como GPUs o ASICs) podr\u00eda intentar ataques m\u00e1s r\u00e1pidos, pero a\u00fan as\u00ed, el costo elevado de bcrypt juega un papel crucial en la defensa.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo de Tiempo Estimado<\/h3>\n\n\n\n<p>A modo de ejemplo, supongamos que un hash bcrypt con <code>$2y$10<\/code> toma aproximadamente 0.1 segundos para calcular en un sistema moderno. Si un atacante puede intentar 1,000 contrase\u00f1as por segundo (una tasa optimista), a\u00fan necesitar\u00eda mucho tiempo para probar millones de contrase\u00f1as.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusi\u00f3n<\/h3>\n\n\n\n<p>bcrypt con un costo de <code>$2y$10<\/code> ofrece una robusta protecci\u00f3n contra ataques de diccionario y de fuerza bruta. La combinaci\u00f3n de sal aleatoria y un alto costo computacional hace que la tarea de descifrar contrase\u00f1as hasheadas sea muy dif\u00edcil, especialmente cuando las contrase\u00f1as son lo suficientemente largas y complejas.<\/p>\n\n\n\n<p>Para mejorar la seguridad, siempre es recomendable usar contrase\u00f1as largas y complejas, y ajustar el costo de bcrypt seg\u00fan el hardware disponible y el nivel de seguridad requerido.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El uso de bcrypt para el hash de contrase\u00f1as proporciona<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4441,3619],"tags":[4865,4874,3625,4864,434,4867,4871,441,4870,4866,4869,4872,17,4868,4873],"class_list":["post-2141","post","type-post","status-publish","format-standard","hentry","category-programacion","category-web","tag-ataque-de-diccionario","tag-ataques-de-diccionario","tag-ataques-de-fuerza-bruta","tag-bcrypt","tag-cifrado","tag-contrasena","tag-costo-de-calculo","tag-criptografia","tag-fuerza-bruta","tag-hash","tag-hash-bcrypt","tag-sal","tag-seguridad","tag-verificacion-de-contrasena","tag-work-factor"],"_links":{"self":[{"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/posts\/2141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/comments?post=2141"}],"version-history":[{"count":2,"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/posts\/2141\/revisions"}],"predecessor-version":[{"id":2144,"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/posts\/2141\/revisions\/2144"}],"wp:attachment":[{"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/media?parent=2141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/categories?post=2141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zidrave.net\/index.php\/wp-json\/wp\/v2\/tags?post=2141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}