Utiliza esas librerias que nos da apache http://commons.apache.org/codec/ <http://commons.apache.org/codec/>hace muy poco tiempo los use y si q me sirvieron y claro siguiendo los consejos de los amigos que aqui escriben. soy un principiante pero paro en constante auto-capacitacion y tambien investigacion saludos a todos.
El 26 de enero de 2010 23:35, Juan Pablo Scaletti <[email protected]>escribió: > Concuerdo con Jesús: No reinventar la rueda no solo es más fácil sino que > es más seguro. > > Mucha gente usa el mismo password para muchas cosas. Osea que no es solo tu > sistema el que esta en juego: Si un atacante consigue los passwords a través > de tu sistema, habrá conseguido acceso a las cuentas de correo de muchos de > tus usuarios, que a su vez podrá usar para recuperar el password de algunos > bancos, Amazon, etc. Osea que estarán jodidos. Y tu tendrás que decírselos. > > En otras palabras: no lo hagas. > > > Dicho eso... > Si te sobra el tiempo para investigar y de todos modos quieres reinventar > la rueda, esto es lo mínimo que debes saber sobre el tema: > > > *1.* Los passwords no los guardas ni como texto plano ni encriptados. En > vez de eso, lo que guardas es un *hash*, osea una suma de comprobación == > el resultado de una operación matemática sobre el texto del password. > > Cuando el usuario intenta loguearse hasheas el password que te da y lo > comparas con el hash guardado. > Los hashes de dos textos iguales, hasheados con el mismo algoritmo, serán > siempre iguales. Así que si el nuevo hash y el guardado coinciden es que el > password es correcto. > > > *2. *No sacas el hash de *solo* el password. Eso es *inseguro*. > ¿Por que? Por que los hashes de dos textos iguales son siempre iguales. Eso > significa que: > > *A)* Si averiguas el password de un usuario sabrás que cualquier otro > usuario con el mismo hash tiene el mismo password. > *B)* El atacante puede dejar su computadora prendida un mes y armar una > lista de hashes pre-calculados para todas las combinaciones > de letras y números hasta un largo de 6 (o más). Luego le bastaría > compararlos con los tuyos para averiguar la mayoría de los passwords. > *C)* Malas noticias: Ya muchos lo han hecho... y puedes descargarte esas > listas de Internet. > > Lo que debes hacer es generar un texto al azar, juntarlo al password y > hashear el resultado: > > hash = algoritmo_de_hashing( 'un_texto_al_azar_que_debería_ser_más_largo' + > password ) > > A este texto agregado se le llama "*sal*". > > Ahora, ese texto debe ser largo (o si no está por las puras), al azar, *y > diferente para cada password*. Si no es diferente todo lo que consigues es > inutilizar las tablas pre-calculadas, pero todavía tienes los problemas de > los passwords iguales (A) y si el atacante averigua cual es tu "sal" puede > hacer su propia lista (B), pero esa lista le serviría para todos los > passwords en tu sitio. Si la sal es diferente para cada password tiene que > hacer el mismo esfuerzo no una vez sino para *cada* password. > > Como necesitas saber la sal para loguear a los usuarios, debes guardarlas > con los datos de cada usuario: En otra fila o pegada al hash. > > password_en_la_bd = SAL + '#' + algoritmo_de_hashing( SAL + password) > > Ejemplo: > > SAL > = > 'un_texto_al_azar_que_deberia_ser_mas_largo_y_que_es_exclusivo_para_este_usuario' > password_en_la_bd = SAL + '#' + algoritmo_de_hashing( SAL + 'mi_password') > > "Pero así la sal está a la vista de cualquier atacante!" dirás (si, si > dijiste eso, yo te oi). No importa: La sal solo está ahí para evitar las > tablas pre-calculadas > y que dos hashes sean iguales. Nada más (Si la sal es diferente para cada > password tiene que hacer el mismo esfuerzo no una vez sino para *cada* > password). > > Pero puedes hacer tu sistema más seguro agregándole... "*pimienta*" (los > informáticos a los que se les ocurrió todo esto tenían hambre). > > Una pimienta es un texto como la sal pero: > - Es la misma para todos los passwords > - No la guardas en la base de datos sino en tu código o en un archivo > aparte, como el sitio donde guardas la contraseña de la base de datos. > > La idea de la pimienta es hacer que el atacante tenga que ganar acceso no > solo a tu base de datos sino tambien al servidor donde está el código del > programa > antes de que pueda intentar romper los passwords por fuerza bruta. > > El código quedaría así: > > password_en_la_bd = SAL + '#' + algoritmo_de_ hashing( SAL + PIMIENTA + > password) > > > *3.* Hay varios algoritmos de hashing y no todos son buenos para guardar > passwords. > > Algunos son: MD5, SHA1, SHA256, SHA512 > Usar MD5 está muy mal visto, SHA1 para arriba es lo que más se usa. > > En el fondo todos tienen un problema: Son muy rápidos y paralelizables. > Osea que probar decenas o cientos de combinaciones por segundo > depende solo de cuantas computadoras puedas conseguir. > > La solución es usar un algoritmo de hashing diseñado para ser mucho más > lento y secuencial > > Del lado de los usuarios de la web eso no importa: De todas formas el > cuello de botella es la base de datos y dibujar la página, no el algoritmo > para hashear el password. Si este demora dies veces más ni siquiera lo > notarán. > > Pero para el atacante significa demorar un mes en probar las combinaciones > que antes podía probar en tres días. > > El algoritmo que buscas es *bcrypt*: > http://www.mindrot.org/projects/jBCrypt/ > (que de paso también se encarga de salar el password) > > > *4. *La cadena se rompe en el eslabón más debil, así que no dejes de > prestar atención al sistema para recuperar passwords (osea generar uno > nuevo, el password nunca debe poder recuperarse), > la forma de guardar las cookies de sesión, etc. que son formas de loguearse > sin tener el password... por lo menos las cuentas de correo ya están seguras > :) > > > Suerte y disfruta la programación > > Juan Pablo > > > --- > Juan Pablo Scaletti > > > > 2010/1/26 Jesus Hinojosa <[email protected]> > > la mayoria de frameworks ya traen un modulo para authenticacion, porque >> reinventar la rueda? >> >> El 26 de enero de 2010 19:22, Brando <[email protected]> escribió: >> >>> Hola Amigos de la lista, recurro a Uds. por un tema que quizás muchos >>> de aquí conozcan y me puedan orientar. Bueno resulta que estoy desarrollando >>> un sistema web (Java, JSP, Struts, etc.) y dentro del esquema de desarrollo >>> está la parte de seguridad para el tema de almacenamiento de password de >>> usuarios en un base de datos. Estuve revisando algo de información al >>> respecto y tenía dudas para el tipo de encriptado o codificación (corríjanme >>> si me equivoco en los términos), inicialmente estuve revisando algo acerca >>> de utilizar AES como algoritmo de encriptación y por allí me sugirieron >>> mejor utilizar HASH, entonces allí es donde se me genero la duda. >>> >>> La pregunta es puntual, que me podrían sugerir Uds. en base a sus >>> experiencias?, este sistema manejara información critica entonces quisiera >>> manejar esta parte de la seguridad de la mejor forma. >>> >>> >>> >>> Espero haberme hecho entender. >>> >>> >>> >>> Gracias por la atención >>> >>> >>> >>> Saludos. >>> >>> >>> >>> Brando. >>> >>> >>> >>> _______________________________________________ >>> Lista de correo Linux-plug >>> Temática: Discusión general sobre Linux >>> Peruvian Linux User Group (http://www.linux.org.pe) >>> >>> Participa suscribiéndote y escribiendo a: [email protected] >>> Para darte de alta, de baja o hacer ajustes a tu suscripción visita: >>> http://listas.linux.org.pe/mailman/listinfo/linux-plug >>> >>> IMPORTANTE: Reglas y recomendaciones >>> http://www.linux.org.pe/listas/reglas.php >>> http://www.linux.org.pe/listas/comportamiento.php >>> http://www.linux.org.pe/listas/recomendaciones.php >>> >> >> >> >> -- >> Jesus Hinojosa Palma >> Cel RPC +51 1 989097034 >> Cel RPM 99620 7436 - #945571 >> >> _______________________________________________ >> Lista de correo Linux-plug >> Temática: Discusión general sobre Linux >> Peruvian Linux User Group (http://www.linux.org.pe) >> >> Participa suscribiéndote y escribiendo a: [email protected] >> Para darte de alta, de baja o hacer ajustes a tu suscripción visita: >> http://listas.linux.org.pe/mailman/listinfo/linux-plug >> >> IMPORTANTE: Reglas y recomendaciones >> http://www.linux.org.pe/listas/reglas.php >> http://www.linux.org.pe/listas/comportamiento.php >> http://www.linux.org.pe/listas/recomendaciones.php >> > > > > -- > > Juan Pablo Scaletti > > _______________________________________________ > Lista de correo Linux-plug > Temática: Discusión general sobre Linux > Peruvian Linux User Group (http://www.linux.org.pe) > > Participa suscribiéndote y escribiendo a: [email protected] > Para darte de alta, de baja o hacer ajustes a tu suscripción visita: > http://listas.linux.org.pe/mailman/listinfo/linux-plug > > IMPORTANTE: Reglas y recomendaciones > http://www.linux.org.pe/listas/reglas.php > http://www.linux.org.pe/listas/comportamiento.php > http://www.linux.org.pe/listas/recomendaciones.php > -- Atte. Eddú Meléndez Gonzales. @: [email protected] [email protected] Nextel: 838*3365 99838-3365 Movistar: 95663-7321 RPM: *167618
_______________________________________________ Lista de correo Linux-plug Temática: Discusión general sobre Linux Peruvian Linux User Group (http://www.linux.org.pe) Participa suscribiéndote y escribiendo a: [email protected] Para darte de alta, de baja o hacer ajustes a tu suscripción visita: http://listas.linux.org.pe/mailman/listinfo/linux-plug IMPORTANTE: Reglas y recomendaciones http://www.linux.org.pe/listas/reglas.php http://www.linux.org.pe/listas/comportamiento.php http://www.linux.org.pe/listas/recomendaciones.php
