noviembre 21st, 2011
Soy cliente desde hace años del BBVA, uno de los grandes bancos del capital. He pasado por varios, y es de los pocos donde me he sentido cómodo, y donde nunca he tenido problemas. Pero ahora, me estoy empezando a cuestionar que el banco como tal sea realmente seguro, y os voy a contar por qué.
Es de sobra conocido por todos que Steam fue asaltado hace casi dos semanas, y si no, pues os lo resumo: todos los datos de un número indeterminado de usuarios de la base de datos de Steam fueron extraídos, y eso incluye tarjetas de crédito. Claro está que la información se hallaba cifrada, y bien cifrada, pero no quita que uno sea desconfiado por deformación profesional y tome medidas cautelares…
Como por ejemplo, bloquear la tarjeta. Llamé al BBVA, les comenté el caso, y al parecer no pusieron ninguna pega. Me la bloquearon, y me enviaron una nueva a casa. Lo cierto es que me cobraron una comisión que no procedía; de hecho, la reclamé y me la devolvieron, pero eso es otra historia. A los dos días me llega la tarjeta a casa (en vez de 5-7 días, que fue el plazo que me dieron). Aquí empieza el primer fallo: ¡¡es una carta ordinaria!! Efectivamente, no es una carta certificada, no es que el cartero te la de en mano… te la echa en el buzón (presumiendo que la intención del cartero siempre es benévola) y ahí te apañes. Evidentemente, se nota desde lejos que no se trata de una carta normal, porque se palpa el plástico, por lo que vete tú a saber si se “extravía”.
Alguien que esté un poco informado dirá: hombre, pero está desactivada por defecto. Y yo le doy la razón. En la tarjeta hay una pegatina en rojo que dice algo como “llame a este número para activar la tarjeta”. Entonces respiré tranquilo y pensé: bueno, si se hubiera “extraviado” estaría desactivada. El caso es que me dispongo a llamar, y tras varios saltos con el contestador automático e introducir el número de tarjeta… ya está. Eso es, no ha hecho falta en ningún momento ningún dato de índole… privado, qué sé yo, DNI, tarjeta anterior, PIN, algo. Vamos, que la podría haber activado cualquiera. Tras este mal trago, decidí que la próxima vez que pida una tarjeta nueva, la manden a la oficina… al menos, es más seguro que el buzón de una casa, y pasa por menos manos. Días después, llega otra carta con el PIN. Ya me avisaron que el PIN no cambiaría al tratarse de un “robo” (aunque el número de tarjeta es evidentemente diferente), por lo que esta última carta es un gasto innecesario. Sin embargo, aquí viene lo curioso…
Pensemos un poco. Sí, tenían razón, el PIN no ha cambiado. Pero espera, ¿cómo es que sabían mi PIN anterior? Para los no entendidos en la materia de programación y bases de datos en general, las contraseñas nunca se deben guardar en texto plano en una base de datos, precisamente para evitar que, si hay un robo como el de Steam, los ladrones no puedan (o les cueste mucho trabajo) conseguir información valiosa de esos datos cifrados, que no dejan de ser un puñado de cadenas de texto sin sentido al ojo humano.
Avanzando un poco más en este sentido y para brindar luz a los no entendidos, omitiendo detalles, cuando el usuario introduce su contraseña en texto plano (en una web, por ejemplo), esa contraseña se cifra con un algoritmo predeterminado y la compara con la que está almacenada en la base de datos, que está cifrada de la misma manera:
a. Texto plano: tomate
b. Cifrado (md5): 02e409c8bf00d35d7a7d61c56829da7f
‘a’ es lo que conoce el usuario y ‘b’ es lo que se guarda en la base de datos. Es un cifrado irreversible (aunque hoy por hoy, un tanto débil, pero no es el tema), esto es, que teóricamente sólo se puede realizar el paso a->b, pero no b->a. En caso de que se robara ‘b’, el ladrón no podría hacer nada con esos datos, al menos en un periodo de tiempo legítimo (¿< 10 años?).
Por tanto, llegamos a la conclusión de que en algún lugar de la base de datos del banco, al menos el número de mi tarjeta y mi PIN están relacionados y guardados en texto plano, o bien con un cifrado reversible (mediante clave privada, por ejemplo). ¿Cómo puede el banco saber mi PIN? ¿Qué ocurre si robaran esa clave privada? El PIN es un número personal de identificación que nadie más que el propio dueño debería conocer, y debería estar cifrado con un algoritmo irreversible y confiable. No tiene sentido que se pueda “recuperar”. Desde mi punto de vista, para mí, esto es un problema de seguridad, aunque como siempre, invito a brindar y discutir cualquier otra opinión aquí.
Con esto quiero decir que, para ser un banco tan conocido, creo que tiene fallos de seguridad importantes como para ser pasados por alto… ¿Es normal en los bancos españoles que estas cosas funcionen así? ¿Es cosa del banco? ¿Es cosa del proveedor de tarjetas? ¿Es simplemente así? ¿Hay algo más? A ver si podemos llegar a alguna conclusión.
Actualización: El amigo albertjh (mil gracias) me envía este enlace (lo cuelgo en PDF aquí, por si lo modifican) y cito textualmente el fragmento que nos interesa:
El PIN de su tarjeta BBVA, su clave de acceso a BBVA.es, y su clave de operaciones en BBVA.es, son claves privadas, que deberá custodiar de forma segura, pues todo aquel que pudiera acceder a sus claves podría operar con sus productos y servicios en BBVA. Por este motivo le recomendamos que no comunique a nadie bajo ningún concepto dichas claves. Nadie en BBVA conoce cuales son sus claves, éstas se encuentran almacenadas en nuestros sistemas cifradas con un algoritmo irreversible, de forma que nadie en BBVA puede conocerlas.
Actualización 2: Una persona responsable del área de seguridad del BBVA se ha puesto en contacto por email conmigo, y me ha explicado la generación de PIN mediante un resumen trabajado. Partiendo de esta explicación, llegamos a las siguientes conclusiones:
- Hay dos tipos de PIN: a) el generado con datos públicos de la tarjeta, que conocemos y podemos cambiar y b) el generado por el HSM (más información en WP para los que desconozcan el dispositivo), aleatorio, y que nunca sale del HSM (importante).
- Y cito: Ambos están relacionados por un “offset” que no es más que una suma digito a digito complemento a 9. Cuando se cambia el PIN “de usuario” realmente lo que se hace es cambiar el offset o diferencia entre el “natural” y el escogido. De este “offset” (que sí se almacena) en ningún caso podríamos derivar el PIN.
- Para la comprobación del PIN – que obviamente va cifrado en la transmisión – se utiliza el propio PIN que conocemos, como el generado por HSM, y se hace la comparación internamente, gracias al “offset”.
- Entonces, ¿cómo es posible que me envíen mi anterior PIN en plano?: Con los datos públicos de tu tarjeta antigua y el offset de tu PIN de usuario “antiguo” y DENTRO DEL HSM, se calcula tu PIN de usuario “antiguo” por un lado y por otro se calcula el nuevo PIN “natural” con los datos públicos de tu tarjeta nueva y con ambos se calcula cual tiene que ser tu nuevo offset para que tu PIN de usuario sea el mismo que tenías antes.Antes de enviarlo a imprimir, se cifra antes en el HSM, y después se envía en plano, aunque no queda ninguna traza ya que el sitio donde se imprime el papel es independiente del lugar donde se realiza la estampación de tarjetas. ¿La razón? Hacerle la vida más cómoda al cliente.
Por la parte de privacidad/seguridad física, no ha habido ningún comentario. Me hubiera encantado escuchar algo sobre esto, aunque otro representante de BBVA ha estado en contacto conmigo y me ha dicho que se lo ha pasado a un responsable para ver qué ocurre.
He de decir que me ha encantado escribir esta entrada, puesto que ha habido opiniones de distinto tipo, hemos aprendido y hemos escuchado voces de todas las partes. La explicación técnica la he intentado simplificar al máximo posible, pero entre la hora a la que escribo esta última actualización (5 de la mañana de un martes) y que hay cosas que, sencillamente, no se pueden explicar de otra manera, quizá no llegue a todo el público esperado. En cualquier caso, muchas gracias a todos, incluyendo a los representantes del BBVA que se han movido en cuanto he escrito la entrada, a pesar de ser una invitación a debate para clarificar el asunto, más que una acusación directa.



















