Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2013
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Mejorando la Sal en la Protección de Datos

Voy a hacer SPAM descaradamente, hoygan. Hace un ratejo he escrito un artículo sobre protección de claves de acceso usando hashes, proponiendo una mejora. A su salud:
Cita:
Empezado por En el blog
Aunque el tema que voy a tratar es técnico, no hace falta saber mucho. De hecho creo que incluso alguien que no sepa (todavía) cómo se maneja el tema de las claves de acceso y su protección puede entenderlo. Aun así, para que todos estemos al mismo nivel, deberíais echar un vistazo al artículo Entendiendo las Funciones Hash y Cómo Mantener las Contraseñas Seguras, que explica perfectamente el tema y no precisa ningún conocimiento previo. No hace falta que lo leas si controlas el tema.

Vale, ¿estamos todos? Pues al turrón.

La cuestión es que, tras darle vueltas y como uno es rarito, he decidido hacer mi propio gestor de contenidos. Que sí, que los hay muy buenos, que lo sé, que los conozco, pero es que cuatro megas (por poner el ejemplo de CodeIgniter, y que ni siquiera es un gestor de contenidos completo) para lo que necesito me parece demasiado. Evidentemente mi gestor de contenidos ha de ser, también, mínimamente seguro. Mi idea es confiar en el servidor todo lo que se pueda, pero el tema del acceso y las contraseñas tengo que manejarlo yo. Buscando información encontré el artículo anteriormente mencionado (a partir de ahora lo llamaré "El Artículo"). Leyéndolo me di cuenta de que ya hacía algo bien, aunque fuera un poco por casualidad. Esta no es la primera vez que me veo en el brete de almacenar claves de acceso. Desde hace años uso un sistema consistente en codificar la clave junto con otro dato del usuario, normalmente su dirección de correo, usando bien MD5, bien SHA1, según me diera. La razón era que si había dos usuarios que tuvieran la misma clave, en la base de datos no aparecieran con el mismo hash, y sin saberlo estaba añadiendo sal a la ensalada. Bien por mi. Cuando supe lo que era la sal, me di cuenta de la tremenda serendipia del caso, pero no me puse a analizarlo en profundidad. Cuando me puse a trabajar en Ágora 2.0 (que publicaré, lo prometo) y en el gestor de contenidos, decidí que era buen momento para machacar el tema. Y lo hice, ¡vaya si lo hice! Hasta el punto de encontrar el que, posiblemente, sea el mejor método hasta la fecha para elegir la sal a usar. Si El Artículo propone un método que con un buen ordenador necesitaría siete años (7) para crear la tabla rainbow, mi sistema necesitaría al menos catorce (14). Y todo ello manteniéndolo KISS. No está mal, ¿verdad?

La cuestión es sencilla. Para poder usar la sal, hay que saber cuál es esa sal. Es obvio, lo sé, pero es importante tenerlo en cuenta. Tenemos dos opciones para saber qué sal usar: calcularla o almacenarla. En el caso de El Artículo tenemos que almacenarla, ya que obtenemos esa sal de forma aleatoria, usando mt_rand. Si hacemos esto y un cracker nos roba la base de datos, tardará siete años por usuario (o menos, si va comprobando los resultados según los va calculando) en obtener su premio. Sin embargo, si esa sal no está almacenada en la base de datos sino que tiene que calcularla, tardará un poco más. ¿Qué tal si tarda en calcular esa sal tanto como en calcular el propio hash? Pues que se duplica el tiempo. ¿Y cómo hacerlo? Pues haciendo que la sal sea, precisamente, un hash. Pero, ¿cómo hacer que el piratón tarde lo mismo en calcular la sal, esto son siete años en nuestro caso? Pues haciendo que la sal se calcule a partir de la propia clave de acceso. Al no conocer la clave, deberá calcular una sal por cada posible clave y usar dicha sal para calcular el hash de la propia clave. Es decir: calcular dos hash por clave. Asunto resuelto. ¿No? ¿Os habéis perdido? No problemo. A ver qué os parece esto:
Código PHP:
    public function ObtieneHash ($Nombre$Clave)
    {
    
# Generamos la sal.
      
$Sal substr (sha1 ($Nombre.$Clave), 022);
      
$Sal substr (crypt ($Sal'$2y$10$'.$Sal), 2922);
    
# Obtenemos la codificación de la contraseña.
      
return substr (crypt ($Clave'$2y$10$'.$Sal), 2932);
    } 
¿Está más claro? Primero obtenemos una sal inicial a través de unir el nombre y la clave (para evitar que usuarios diferentes con la misma clave tengan la misma sal y devuelvan el mismo hash). Luego re-procesamos la sal con un coste de 10 (es decir, que hace 1024 iteraciones), y finalmente usamos esta sal para calcular el hash de la clave, de nuevo con un coste de 10. Además la función devuelve sólo el hash y no la sal, como hace crypt, ya que no necesitamos almacenarla. Cuando el usuario intenta acceder, usamos la clave que nos dé de la misma forma. La tabla rainbow, por tanto, necesitará el doble de tiempo para generarse, multiplicando el tiempo por el número de usuarios, ya que al incluir el nombre en la sal, la misma clave dará sales diferentes a diferentes usuarios.

Realmente desconozco si esto ya era conocido, pero lo cierto es que no lo he encontrado en ningún otro sitio. De todas formas, podéis usarlo si lo deseáis; y también podéis ponerlo a prueba, y si encontráis algún problema no dudéis en hacérmelo saber.
Original: Soliloquios del Guiller
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #2  
Antiguo 25-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.276
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Interesante, muy interesante...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 25-02-2013
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Muy interesante!
Gracias.
Responder Con Cita
  #4  
Antiguo 25-02-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Muchas gracias, Ñuño.

No me explico cómo pude pasar por alto tu estupenda bitácora Web.

Prometo echarle un vistazo esta semana y comentar.

Un abrazo.
Responder Con Cita
  #5  
Antiguo 25-02-2013
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Gracias por el interés.
Cita:
Empezado por Al González Ver Mensaje
No me explico cómo pude pasar por alto tu estupenda bitácora Web.
Es que publico pocas cosas, y muchas de estas cosas son poco interesantes. Es posible que esto cambie, porque tengo un plan. Claro que no sé si publicaré todo en la bitácora, o quizá me haga dos diferentes. Todavía lo estoy estudiando.

Yo tu bitácora la visito muy poco a menudo, también...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 25-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
.. tengo un plan.
Que sea para bien
Responder Con Cita
  #7  
Antiguo 26-02-2013
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Se intentará, Casimiro. Pero sabes de sobra cómo está el percal. Encontrar trabajo, difícil. Crear trabajo, igual de difícil o más.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #8  
Antiguo 26-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Se intentará, Casimiro. Pero sabes de sobra cómo está el percal. Encontrar trabajo, difícil. Crear trabajo, igual de difícil o más.
Lo sé, lo sé...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Protección anticopia... ¿ sí o no ? rretamar Debates 11 10-04-2013 19:37:34
Mejorando el ganado. JoseFco La Taberna 16 30-09-2008 21:18:15
firebird - proteccion de base de datos aladelta Conexión con bases de datos 6 06-11-2007 17:32:33
Protección de Datos unos sí otros no. marcoszorrilla La Taberna 2 28-03-2007 22:15:21
Encriptacion de datos y proteccion de software Wanderer OOP 2 12-03-2004 08:46:37


La franja horaria es GMT +2. Ahora son las 17:58:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi