Fuente: Foro de Zacky
Fecha: 07/4/2005
Usuario: brad2

5. Encriptación/Desencriptación

Hay dos tipos de sistemas de encriptación, los sistemas simétricos y los de clave pública, en los primeros el algoritmo de encriptación y desencriptación son distintos, pero emplean la misma clave, el ejemplo más conocido es DES, que es el que emplea Vía para las ECMs.

En los algoritmos de clave pública por el contrario, el algoritmo permanece constante, lo que cambia es la clave, el más conocido es RSA, es el que emplea Vía para las EMMs.

Se eligen dos números primos............................................ ................................. P y Q, ( Sea N = P*Q)
Y dos números E y D tales que............................................... ............................. D*E = 1+A*(P-1)*(Q-1),

La clave pública es la pareja (E,N) y la privada (D,N),
Dado un mensaje en claro (M) para encriptarlo se emplea la fórmula.............. E(M) = M^E mod N
Y dado el mensaje cifrado (M’) para desencriptarlo se emplea la fórmula........ D(M') = M^D mod N

Aunque a primera vista no se vea, se puede demostrar que D(E(M)) = M y E(D(M)) = M, es decir D y E son funciones inversas.

Aunque pueda parecer un contrasentido publicar una de las claves y el algoritmo, no lo es, ya que no se puede averiguar fácilmente la clave privada (se requiere hacer la descomposición en factores primos de N, y si P y Q son suficientemente grandes es muy difícil), por eso dado que las claves que conocemos son las de la tarjeta, podemos desencriptar las EMMs, pero no se pueden encriptar (por desgracia).

El gran inconveniente, es que el cálculo de la exponencial modular es lento, por ello se suelen emplear sólo para el intercambio de claves, y después se emplea un algoritmo simétrico de encriptación, empleando como clave la transmitida con el algoritmo de clave pública, más o menos lo que hace Vía con las EMMs y ECMs.

Normalmente se elige el exponente E pequeño, de modo que el D es forzosamente grande, y no puede calcularse fácilmente por fuerza bruta, de este modo la parte de la encriptación es muy rápida, aunque la desencriptación sea más lenta.

El sistema que han elegido en Nagra Digital es emplear dos exponenciales modulares, en la primera el exponente de encriptación es 3 y en la segunda el exponente de la encriptación inversa es 3, el sistema queda de la siguiente forma:

Se eligen 4 primos de 32 bytes P1, Q1, P2, Q2, todos ellos de resto 2 al dividir por 3 (es necesario aunque no vamos a detallar aquí los motivos),

Sean N1=P1*Q1
N2=P2*Q2
E1 y E2 los inversos de 3 módulo (P1-1)*(Q1-1) y (P2-1)*(Q2-1) respectivamente,

El algoritmo de encriptación es: ........ E(M) = (M^3 mod N1)^E2 mod N2
y el de desencriptación ......... D(M) = (M^3 mod N2)^E1 mod N1

En este caso hay un pequeño problema, y es que el primer resultado (M^3 mod N1) puede ser mayor o igual que N2. Para evitarlo a la hora de encriptar se suprimen los dos bits superiores del resultado intermedio y se copian en los dos bits superiores de select key, y para desencriptar se hace el proceso inverso.

Hay otra pequeña cosa añadida, que es que antes de encriptar (y por tanto después de desencriptar) se hace una inversión de los bytes de orden (byteflop, para el desensamblado de StuntGuy), la razón es que los mensajes que no llegan a 64 bytes los 1

El módulo de la primera exponencial (para desencriptar, es decir N2) es EMMKEY, y el de la primera no está almacenado directamente en la tarjeta, para calcularlo se emplea la parity key 2 (la 1 parece que se emplea para generar los primos P2 y Q2 empleados en la 30/31 para encriptar los mensajes que se mandan por teléfono, y la 0 parece que no se emplea), el algoritmo es la subrutina en la dirección 7b5b (en las tarjetas ROM3, como las de Vía), que genera la pareja de primos P1 y Q1 en las direcciones 100..11f y 120..13f.
Después N1 = P1*Q1, y E1 = (2*(P1-1)*(Q1-1)+1)/3.

Cuando mandaban una EMMal principio de la misma aparece el ID del proveedor al que se dirige y un byte llamado byte de selección de clave que nos indica con cual de los juegos de claves debemos desencriptar, o sea para las EMM las claves en los DATATYPES 07.

Las ECM (03) podían ser de varios tipos.
Según el canal al que pertenecieran eran encriptadas con DES o E*DES con las publickeys 0 o 1 que están en los DATATYPES 06, pero además se hacía un XOR con la clave MECM que era una clave de 256 bytes.

Dentro de la ECM había un byte que indicaba el punto de la MECM a partir del cual se cogían a su vez 8 bytes para el XOR, esta MECM no está en la CAM sino que nos la mandan (a trozos porque la CAM solo guardaba 16 bytes) en un comando 02 anterior, de tal forma que si la parte de la MECM que la tarjeta necesita para desencriptar la ECM no está guardada, solicita a la CAM que le envíe la última instrucción 02 que haya recibido.

Además, como es sabido, se encripta también con la BOXKEY y así se pasa al IRD que, naturalmente, tiene la misma BOXKEY.

Byte de selección de clave:
Se usa para seleccionar el conjunto de claves de desencriptación a usar (EMMKEY0 o EMMKEY1) , y qué clave de paridad se usará dentro de dicha EMM (0, 1, o 2).

Este byte se codifica así:

B I T S
+---+---+---+---+---+---+---+
1----2---3----4---5----6---7----8
|.....|....|.....|....|.....|....|.....|
|.....|....|.....|....|.....|....|___|__ Selecc. clave de paridad: 0, 1, or 2. Aviso: No hay control de errores (ver abajo)
|.....|....|.....|....|.....|__________ Desconocido
|.....|....|.....|....|______________ Bit de selección de tipo de clave
|.....|....|.....|__________________ Desconocido
|.....|....|_____________________ Desconocido
|.....|________________________ Desconocido
|____________________________ Desconocido


COMMAND $00: EMM
--------------------------------------------------------

Cita:
21 40 53 A0 CA 00 00 4D 00 4B 40 01 62 78 0A C9 81 D0 42 7C 91 44 A3 F4 75 48 6A 9B E4 35 D2 6B 3C B1 8B 40 BE 44 95 8B 5B 8E 72 E3 6D A7 46 91 2F FD AC DB CC 64 A5 CD 48 69 AE 24 AB 0A 56 F3 0B 1E DF EE BC 1D F1 5A BF C8 9D DC B6 12 7C 28 E9 76 A5 D8 52 05 E3

Codigo:

ID PROVIDER = 4001

KEYSELECT = 62 =B'01100010’ PK = 2 ¿bit 5? (TD $07->0)

SIGNATURE = 78 0A C9 81 D0 42 7C 91

ENCRYPTED DATA = 44 A3 F4 75 48 6A 9B E4 ; Block 1
------------------------35 D2 6B 3C B1 8B 40 BE ; Block 2
------------------------44 95 8B 5B 8E 72 E3 6D ; Block 3
------------------------A7 46 91 2F FD AC DB CC ; Block 4
------------------------64 A5 CD 48 69 AE 24 AB ; Block 5
------------------------0A 56 F3 0B 1E DF EE BC ; Block 6
------------------------1D F1 5A BF C8 9D DC B6 ; Block 7
------------------------12 7C 28 E9 76 A5 D8 52 ; Block 8
--------------------------------------------------------------------------------------------------------------------------