sha1 con un poco de sal

29 de enero de 2009

SSHA (o traducido SHA1 con un poco de sal) es el método que utiliza Zimbra para cifrar las contraseñas de usuario.

A cada usuario dentro del árbol LDAP "ou=people,dc=miempresa,dc=com" se le añade un subschema o un objeto llamado "zimbraAccount" este subschema, también conocida como una objectClass, contiene más atributos pertenecientes al usuario. Entre estos atributos está el userPassword.

Veamos esta objectClass:

# cd /opt/zimbra/openldap/bin
# ./ldapsearch -H ldap://zimbra.miempresa.com -x -b 
   "uid=amperis,ou=people,dc=miempresa,dc=com"
# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# amperis, people, miempresa.com
dn: uid=amperis,ou=people,dc=miempresa,dc=com
zimbraMailTransport: lmtp:zimbra.miempresa.com:7025
zimbraMailDeliveryAddress: amperis@miempresa.com
sn: Alejandro Moreno
zimbraMailStatus: enabled
zimbraId: 4ab82437-ff86-45f8-bbd0-76508e7527e4
mail: amperis@miempresa.com
displayName: Alejandro Moreno
uid: amperis
objectClass: organizationalPerson
objectClass: zimbraAccount
objectClass: amavisAccount
cn: Alejandro Moreno
zimbraMailHost: zimbra.miempresa.com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Veamos ahora el contenido de la objectClass para el usuario “amperis@miempresa.com":

# su - zimbra
# zmlocalconfig -s zimbra_ldap_password
zimbra_ldap_password = asdfghjklñ

# exit
# ./ldapsearch -H ldap://zimbra.miempresa.com -w asdfghjklñ -D 
   "uid=zimbra,cn=admins,cn=zimbra" -x "(&(objectClass=zimbraAccount)
   (mail=amperis@miempresa.com))"

# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (&(objectClass=zimbraAccount)(mail=amperis@miempresa.com))
# requesting: ALL
#

# amperis, people, miempresa.com
dn: uid=amperis,ou=people,dc=miempresa,dc=com
zimbraMailTransport: lmtp:zimbra.miempresa.com:7025
zimbraAccountStatus: active
zimbraMailDeliveryAddress: amperis@miempresa.com
sn: Alejandro Moreno
zimbraMailStatus: enabled
zimbraId: 4ab82437-ff86-45f8-bbd0-76508e7527e4
mail: amperis@miempresa.com
displayName: Alejandro Moreno
uid: amperis
objectClass: organizationalPerson
objectClass: zimbraAccount
objectClass: amavisAccount
cn: Alejandro Moreno
zimbraMailHost: zimbra.miempresa.com
zimbraLastLogonTimestamp: 20090126085702Z
userPassword:: e1NTSEF9ajJrc3JGUGNkck9ZMVNJUHdQY2pBSXR1REw4aHlSbEE=
zimbraPasswordModifiedTime: 20090127170140Z

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Podéis ver el resultado de "userPassword=e1NTSEF9ajJrc3JGUGNkck9ZMVNJUHdQY2pBSXR1REw4aHlSbEE=". Esto no es la password encriptada, sino la password codificada en Base64.
Si decodificamos la Base64 tenemos:

decodeBase64(e1NTSEF9ajJrc3JGUGNkck9ZMVNJUHdQY2pBSXR1REw4aHlSbEE=) = {SSHA}j2ksrFPcdrOY1SIPwPcj8ItuDL8hyRlA

Por tanto el userPassword es "j2ksrFPcdrOY1SIPwPcj8ItuDL8hyRlA" y está hasheado con el algoritmo SSHA. OpenLDAP proporciona varios métodos para cifrar la información: MD5, SHA1, SSHA, CRYPTO, etc.

El algoritmo SSHA (salted-SHA) se basa en SHA1 añadiendo un token o salt al password del usuario.

userPassword = SHA1(password_usuario + token)

¿alguien se anima a bajarse los fuentes de Zimbra y decirme cual es este token?

2 comentarios:

MACS dijo...

Hola Alejandro saludos desde panama
me gustaria hacerte una pregunta referente a la manera que Zimbra se puede pegar a un Ldap Externo

tengo lo siguiente
1- ClearOS (es un centos ya preconfigurado el cual trae diferentes servicios entre ellos openldap)
2 - dentro de Clearos Instale Zimbra y esta funcionando correctamente

la pregunta es la siguiente como logro pegar el zimbra al openldap del clearos que esta localmente en la misma maquina?

me gustaria saberlo

saludos desde panama

alboNica dijo...

Tenía entendido que el salt es generado aleatoriamente. En las fuentes debe estar el algorítmo, a lo sumo