La SIM y la autentificacio n
La tarjeta SIM basicamente sirve para identificar a un usuario dentro del servicio de GSM. La tarjeta tiene un numero de identificacion (IMSI) que se relaciona en una base de datos del operador, con el numero de telefono, un numero secreto Ki (que
tambien esta en la tarjeta, facturacion y sus datos personales (en caso de que se sea una tarjeta de contrato).
Con esto solo seria facilmente "falsificar" los datos de un usario. Para evitarlo la SIM contiene un sistema de autentificacio n basado en una funcion matematica. Esa funcion matematica es una funcion HASH. Estas funciones tienen la propiedad de
devolver una unica salida a partir de una entrada. Esto es tu metes un numero (el 45) y la funcion te devuelve el siempre para ese numero otro (por ejm el 7. Si meterias otro numero el resultado nunca seria 78 (o tendrias poquisimas
probabilidades de ello).
Otra de la propiedad de las rutinas HASH es que no puedes a partir de la salida deducir la entrada. Esto es: si tu tienes el 78 no puedes calcular de ninguna forma (aun teniendo la rutina HASH) cual era la entrada para esa salida. Es decir
son funciones inreversibles.
Bueno pues la tarjeta SIM tiene una funcion HASH se llama COMP128 y tiene dos versiones v1 y v2. Para acceder a esta funcion HASH se utiliza el comando GSM 11.11 A0 88.
La funcion HASH (COMP128)
La funcion HASH (COMP128) de las SIM se utiliza como hemos comentado para autentificar la tarjeta SIM.
¿Como? Con esta secuencia:
- La SIM manda a la central el IMSI y se identifica.
- El operador comprueba que datos tiene su base de datos para este IMSI.
- El operador genera un numero aleatorio que llamaremos SRand.
- Envia el SRand a la tarjeta (todo por medio de telefono que no es mas que un mero terminal)
- La tarjeta usa este SRand + mas un numero secreto Ki de datos de entrada para ejecutar el COMP128.
- El COM128 devuelve un resultado en dos partes SRes + Kc.
- El SRes es devuelto a la central. El Kc se guarda.
- La central que conoce Ki de esa SIM (que esta asociado al IMSI en su base de datos) repite toda la operacion que ha echo la SIM.
(Daros cuenta que tiene el Ki y el SRand por lo que puede ejecutar una COMP128 como lo hace la tarjeta).
- El operador compara el SRes enviado por la SIM, con el que acaba de calcular el. Si son iguales la tarjeta es "valida".
¿Para que todo esto?
Los numero que pasan entre el operador y la tarjeta son aletorios. No puedes generar con este procedimiento una autentificacio n (o respuesta igual) si no tienes el Ki.
La implementacion concreta de la rutina COMP128 esta de la forma que sigue:
- Una entrada de 32 Bytes compuesta por 16 Bytes del SRand + 16 Bytes del Ki
- Una salida de 12 Bytes. De los cuales 4 Bytes son para el SRes + 8 para el Kc.
¿Para que se usa el Kc?
El Kc se usa posteriormente como clave de la encriptacion de voz. Los ultimos 10 bits del Kc en COMP128 v1 y v2 SON CEROS!!!. Se comenta por ahi que eso es para que los gobiernos o empresas estatales, puedan oir los telefonos moviles. Daros cuenta que las combinaciones del KC serian a 2^64 , pero al ser los ultimos 10 bits ceros se reducen a 2^56. Numero de combinaciones altas pero superables con una maquina apropiada.
Para probar todo esto teneis una posibilidad mendiante el XSIM. El XSim en su funcion de busqueda del Ki tiene una solapa llamada Test Vectors.
Ahi lo que hace es mandar a la tarjeta 3 SRand diferentes y comprobar los resultados (separandolos por sus partes). Con esto tiene una muestra de comportamiento de la tarjeta. Estos datos sirven posteriormente de TEST para comprobar si el Ki obtenido es el mismo que el que ha generado esas comprobaciones . Con eso se puede "certificar" que el Ki encontrado es bueno.
;
0 comentarios