Diferencia entre revisiones de «19/Salado de contraseña»

De MoodleDocs
(Corregidas algunas erratas e incorporados los últimos cambios de la versión en inglés.)
Sin resumen de edición
Línea 3: Línea 3:
Las contraseñas se guardan en Moodle en una forma cifrada(*) llamada '[http://es.wikipedia.org/wiki/MD5 resumen MD5 ]' (o hash MD5).
Las contraseñas se guardan en Moodle en una forma cifrada(*) llamada '[http://es.wikipedia.org/wiki/MD5 resumen MD5 ]' (o hash MD5).


(*) Aun cuando en esta página hablemos de cifrado de contraseñas, en realidad no es tal. Se trata de un función de resumen digital de vía única (one way digital hashing function). Por lo que no tiene sentido hablar de descifrado de las mismas, por cuanto dichas funciones se supone que no son reversibles.
(*) Aun cuando en esta página hablemos de cifrado de contraseñas, en realidad no es tal. Se trata de un función de resumen digital de vía única (one way digital hashing function). Por lo que no tiene sentido hablar de un descifrado de las mismas, por cuanto dichas funciones se supone que no son reversibles.


El [http://es.wikipedia.org/wiki/Sal_%28criptograf%C3%ADa%29 salado de contraseñas] es una forma de hacer las contraseñas más seguras, añadiendo una cadena aleatoria de caracteres a las mismas antes de que se calcule el resumen MD5. Esto hace que sean más difíciles de averiguar (cuanto más larga la cadena, más difícil se hace el averiguarlas).
El [http://es.wikipedia.org/wiki/Sal_%28criptograf%C3%ADa%29 salado de contraseñas] es una forma de hacer las contraseñas más seguras por añadirles una cadena pseudo-aleatoria de caracteres antes de calcular el resumen MD5. Esto hace que sean más difíciles de averiguar (cuanto más larga la cadena, más difícil se hace el averiguarlas).


==Cómo habilitar el salado de contraseñas==
==Cómo habilitar el salado de contraseñas==
Línea 13: Línea 13:
  $CFG->passwordsaltmain = 'cadena larga de caracteres aleatorios con gran cantidad de caracteres';
  $CFG->passwordsaltmain = 'cadena larga de caracteres aleatorios con gran cantidad de caracteres';


La cadena aleatoria de caracteres debería ser una mezcal de letras (mayúsculas y minúsculas), números y otro tipo de caracteres (excepto la comilla simple y la barra inclinada hacia la izquierda '\'). Se puede usar el [http://dev.moodle.org/gensalt.php Generador de Sales Moodle] para obtener una cadena aleatoria larga aceptable. Se recomienda que la longitud de dicha cadena sea de al menos 40 caracteres.
La cadena aleatoria de caracteres debe estar formada de letras (mayúsculas y minúsculas), números y otro tipo de caracteres (excepto la comilla simple "'" y la diagonal inversa "\"). Se puede usar el [http://dev.moodle.org/gensalt.php Generador de Sales Moodle] para obtener una cadena aleatoria larga aceptable. Se recomienda que la longitud de dicha cadena sea de al menos 40 caracteres.


''Nota'': For razones de seguridad, la única forma de activar el salado de contraseñas es editando el fichero config.php. No es posible hacerlo desde la interfaz Moodle.
''Nota'': For razones de seguridad, la única forma de activar el salado de contraseñas es por editar el fichero config.php. No es posible hacerlo desde la interfaz Moodle.


''Consejo''': Guarde una copia de su sal de contraseñas en otro lugar además del fichero config.php, para evitar que todos los usuarios del sitio tengan que realizar la operación de recuperación de contraseña en caso de que se pierda la sal.
''Consejo''': Guarde una copia de su sal de contraseñas en otro lugar además del fichero config.php, para evitar que todos los usuarios del sitio tengan que realizar la operación de recuperación de contraseña en caso de que se pierda la sal.
Línea 21: Línea 21:
==Como cambiar la sal==
==Como cambiar la sal==


Si por alguna razón desea cambiar la sal, es imprescindible que se mantenga la antigua sal en el fichero config.php junto conla nueva sal.
Si por alguna razón desea cambiar la sal, es imprescindible que se mantenga la sal original (antigua) en el fichero config.php junto con la sal nueva.


<code>passwordsaltmain</code> debería cambiarse a <code>passwordsaltalt1</code> (nótese que se debe usar la expresión exactamente tal cual está escrita aquí) para la antigua sal tal como sigue:
<code>passwordsaltmain</code> debería cambiarse a <code>passwordsaltalt1</code> (nótese que se debe usar la expresión exactamente tal cual está escrita aquí) para la sal original, tal como sigue:


  $CFG->passwordsaltalt1 = 'antigua cadena aleatoria larga';
  $CFG->passwordsaltalt1 = 'cadena aleatoria original larga';
  $CFG->passwordsaltmain = 'nueva cadena aleatoria larga';
  $CFG->passwordsaltmain = 'cadena aleatoria nueva larga';


Si cambia la sal de nuevo en el futuro, deberá mantener todas las sales previas durante un cierto tiempo (hasta que todos los usuarios hayan entrado en sesión al menos una vez, para que empiecen a usar la nueva sal). Puede usar $CFG->passwordsaltalt2, $CFG->passwordsaltalt3, etc. para guardar hasta las últimas 20 sales.
Si en el futuro se llegara a cambiar nuevamente la sal, entonces todas las sales previas deberán mantenerse durante un cierto tiempo (hasta que todos los usuarios hayan entrado en sesión al menos una vez, para que empiecen a usar la nueva sal). Puede usar $CFG->passwordsaltalt2, $CFG->passwordsaltalt3, etc. para guardar hasta las últimas 20 sales.


''Atención: ¡Si cambia la sal y no mantiene la anterior en el fichero config.php no podrá entrar en sesión en su sitio!''
''Atención: ¡Si cambia la sal y no mantiene la anterior en el fichero config.php no podrá entrar en sesión en su sitio!''
Línea 48: Línea 48:
  */
  */


Sin embargo, ¡eso no es todo! Además '''tiene que mover el valor de la antigua sal a un valor "alt"''', como si estuviera cambiando la sal (ver más arriba):
Sin embargo, ¡eso no es todo! Además '''tiene que mover el valor de la sal original a un valor "alt"''', como si estuviera cambiando la sal (ver más arriba):


  $CFG->passwordsaltalt1 = 'antigua cadena aleatoria larga';
  $CFG->passwordsaltalt1 = 'cadena aleatoria original larga';
  $CFG->passwordsaltmain = <nowiki>''</nowiki>;
  $CFG->passwordsaltmain = <nowiki>''</nowiki>;


==Como importar usuarios de otro sitio==
==Como importar usuarios de otro sitio==


Si importa usuariow de otro sitio Moodle que usa una sal de contraseña, necesita añadir la sal del otro sitio en su fichero config.php. Para ello puede usar cualquiera de las 20 sales alternativas disponibles:
Si importa usuarios de otro sitio Moodle que use una sal de contraseña, entonces necesita añadir la sal del otro sitio en su fichero config.php. Para ello puede usar cualquiera de las 20 sales alternativas disponibles:


  $CFG->passwordsaltalt1, $CFG->passwordsaltalt2, ...  $CFG->passwordsaltalt20
  $CFG->passwordsaltalt1, $CFG->passwordsaltalt2, ...  $CFG->passwordsaltalt20
Línea 61: Línea 61:
==¿Cómo funciona el salado de contraseñas?==
==¿Cómo funciona el salado de contraseñas?==


Cuando se valida una contraseña, el código comprueba el valor de <code>CFG->passwordsaltmain</code>. Si el valor está definido, añade la sal a la contraseña del usuario de calcular el resumen MD5.
Cuando se valida una contraseña, el código comprueba el valor de <code>CFG->passwordsaltmain</code>. Si el valor está definido, entonces la sal se añade a la contraseña del usuario antes de calcular el resumen MD5.


Si el resumen MD5 de la contraseña del usuario sin salar valida, entonces se supone que la contraseña está sin salar (la sal se habilitó después de que el usuario entrará en sesión por última vez). En ese mismo instante se sala la contraseña y se guarda el resumen MD5 salado. '''Por tanto la contraseña se sala durante el primer inicio de sesión después de que se haya establecido la sal en el fichero config.php'''.
Si el resumen MD5 de la contraseña del usuario sin salar pasa la validación, entonces se asume que la contraseña está sin salar, es decir, la sal se habilitó después de que el usuario ingresó al sistema. Por lo tanto, en ese instante se sala la contraseña y se guarda el resumen MD5 salado. '''Esto significa que la contraseña se sala durante el primer inicio de sesión después de que se haya establecido la sal en el fichero config.php'''.


Si ni el resumen MD5 salado ni el resumen MD5 sin salar validan, entonces el código comprueba si el resumen MD5 con alguna de las 20 sales alternativas lo hace.
Si ni el resumen MD5 salado ni el resumen MD5 sin salar validan, entonces el código comprueba si el resumen MD5 con alguna de las 20 sales alternativas lo hace.


Si se cambia la sal, para que las cuentas de usuario existentes no se queden sin poder ser usadas, es necesario almacenar la angtgua sal en uno de los valores alternativos.
Si se cambia la sal, para que las cuentas de usuario existentes no se queden sin poder ser usadas, es necesario almacenar la sal original (antigua) en uno de los valores alternativos.


Cuando un usuario que tiene una contraseña con una "sal antigua" entra en sesión, la primera comprobación de su contraseña con la nueva sal fallará. En ese caso el código probará con las sales alternativas, buscando una que permita verificar que la contraseña es válida.
Cuando un usuario entra en sesión con una contraseña salada con una sal "antigua", la primera comprobación de su contraseña con la nueva sal fallará. En ese caso el código probará con las sales alternativas, buscando una que permita verificar que la contraseña es válida.


Si se confirma que la contraseña del usuario es válida, el sistema actualizará la contraseña cifrada usando la última sal (esto es, la sal principal).
Si se confirma que la contraseña del usuario es válida, entonces el sistema actualizará la contraseña cifrada usando la sal actual (esto es, la sal principal).


[[Category:Seguridad]]
[[Category:Seguridad]]


[[en:report/security/report_security_check_passwordsaltmain]]
[[en:report/security/report_security_check_passwordsaltmain]]

Revisión del 16:49 22 abr 2011

¿Qué es el salado de contraseñas?

Las contraseñas se guardan en Moodle en una forma cifrada(*) llamada 'resumen MD5 ' (o hash MD5).

(*) Aun cuando en esta página hablemos de cifrado de contraseñas, en realidad no es tal. Se trata de un función de resumen digital de vía única (one way digital hashing function). Por lo que no tiene sentido hablar de un descifrado de las mismas, por cuanto dichas funciones se supone que no son reversibles.

El salado de contraseñas es una forma de hacer las contraseñas más seguras por añadirles una cadena pseudo-aleatoria de caracteres antes de calcular el resumen MD5. Esto hace que sean más difíciles de averiguar (cuanto más larga la cadena, más difícil se hace el averiguarlas).

Cómo habilitar el salado de contraseñas

Para usar una sal de contraseña, añada la siguiente línea a su fichero config.php:

$CFG->passwordsaltmain = 'cadena larga de caracteres aleatorios con gran cantidad de caracteres';

La cadena aleatoria de caracteres debe estar formada de letras (mayúsculas y minúsculas), números y otro tipo de caracteres (excepto la comilla simple "'" y la diagonal inversa "\"). Se puede usar el Generador de Sales Moodle para obtener una cadena aleatoria larga aceptable. Se recomienda que la longitud de dicha cadena sea de al menos 40 caracteres.

Nota: For razones de seguridad, la única forma de activar el salado de contraseñas es por editar el fichero config.php. No es posible hacerlo desde la interfaz Moodle.

Consejo': Guarde una copia de su sal de contraseñas en otro lugar además del fichero config.php, para evitar que todos los usuarios del sitio tengan que realizar la operación de recuperación de contraseña en caso de que se pierda la sal.

Como cambiar la sal

Si por alguna razón desea cambiar la sal, es imprescindible que se mantenga la sal original (antigua) en el fichero config.php junto con la sal nueva.

passwordsaltmain debería cambiarse a passwordsaltalt1 (nótese que se debe usar la expresión exactamente tal cual está escrita aquí) para la sal original, tal como sigue:

$CFG->passwordsaltalt1 = 'cadena aleatoria original larga';
$CFG->passwordsaltmain = 'cadena aleatoria nueva larga';

Si en el futuro se llegara a cambiar nuevamente la sal, entonces todas las sales previas deberán mantenerse durante un cierto tiempo (hasta que todos los usuarios hayan entrado en sesión al menos una vez, para que empiecen a usar la nueva sal). Puede usar $CFG->passwordsaltalt2, $CFG->passwordsaltalt3, etc. para guardar hasta las últimas 20 sales.

Atención: ¡Si cambia la sal y no mantiene la anterior en el fichero config.php no podrá entrar en sesión en su sitio!

Si esto sucede, deberá hacer uso de la funcionalidad de recuperación de contraseñas estándar (que generará una nueva y se la enviará por correo a la dirección especificada en su configuración de usuario).

Como deshabilitar el salado de contraseñas

Nota: ¡No se recomienda! Una vez habilitado, debería mantener el salado de contraseñas activado.

Para deshabilitar el salado de contraseñas, puede borrar, comentar o cambiar a la cadena vacía el valor de $CFG->passwordsaltmain:

// EJEMPLO: poner la cadena vacía
$CFG->passwordsaltmain = '';
// EXAMPLE: comentar el valor
/*
$CFG->passwordsaltmain = '';
*/

Sin embargo, ¡eso no es todo! Además tiene que mover el valor de la sal original a un valor "alt", como si estuviera cambiando la sal (ver más arriba):

$CFG->passwordsaltalt1 = 'cadena aleatoria original larga';
$CFG->passwordsaltmain = '';

Como importar usuarios de otro sitio

Si importa usuarios de otro sitio Moodle que use una sal de contraseña, entonces necesita añadir la sal del otro sitio en su fichero config.php. Para ello puede usar cualquiera de las 20 sales alternativas disponibles:

$CFG->passwordsaltalt1, $CFG->passwordsaltalt2, ...  $CFG->passwordsaltalt20

¿Cómo funciona el salado de contraseñas?

Cuando se valida una contraseña, el código comprueba el valor de CFG->passwordsaltmain. Si el valor está definido, entonces la sal se añade a la contraseña del usuario antes de calcular el resumen MD5.

Si el resumen MD5 de la contraseña del usuario sin salar pasa la validación, entonces se asume que la contraseña está sin salar, es decir, la sal se habilitó después de que el usuario ingresó al sistema. Por lo tanto, en ese instante se sala la contraseña y se guarda el resumen MD5 salado. Esto significa que la contraseña se sala durante el primer inicio de sesión después de que se haya establecido la sal en el fichero config.php.

Si ni el resumen MD5 salado ni el resumen MD5 sin salar validan, entonces el código comprueba si el resumen MD5 con alguna de las 20 sales alternativas lo hace.

Si se cambia la sal, para que las cuentas de usuario existentes no se queden sin poder ser usadas, es necesario almacenar la sal original (antigua) en uno de los valores alternativos.

Cuando un usuario entra en sesión con una contraseña salada con una sal "antigua", la primera comprobación de su contraseña con la nueva sal fallará. En ese caso el código probará con las sales alternativas, buscando una que permita verificar que la contraseña es válida.

Si se confirma que la contraseña del usuario es válida, entonces el sistema actualizará la contraseña cifrada usando la sal actual (esto es, la sal principal).