Creo que la gente se esta haciendo mucho lio con el tema de la firma, voy a intentar hacer otra explicacion, de lo que yo he entendido de Waninkoko. Vamos a ver.
=============Sistema asimetrico===================
La wii usa un sistema de cifrado asimetrico, especificamente RSA, el cifrado asimetro necesita dos claves, una publica y otra privada, en wii nintendo usa la clave privada para firmar, y la wii tiene alojada la publica para descrifrar. Funciona de la siguiente forma:
Tengo una cadena y las dos claves que llamare clapri (clave privada) y clapu (clave publica) por ejemplo:
cadena= 11111
clapri = 22222
clapu = 33333
yo con cadena y clapri y el algoritmo RSA obtengo cadenacifrada:
cadenacifrada= 444444
ahora la wii con cadenacifrada y clapu y el algoritmo RSA obtengo cadena, este es el fundamento basico, para entender lo que pasa en wii.
===============Proceso en la wii====================
En un juego de wii, se realiza el siguiente proceso:
Tenemos
cadena (en este caso seria desde issuer hasta el final del TMD) a esta cadena se le realiza un proceso de hash como el md5 (
mas info) asi obtenemos
cadenahash.
Ahora codificamos este hash con la clave privada de nintendo. Y obtenemos
cadenahashcodificada.
Bien pues en el juego se guarda
cadena y
cadenahashcodificada.
Hasta ahí lo que hace nintendo para cada juego.
Ahora una vez llega el juego a nuestra casa. cogemos
cadenahashcodificada y la desencriptamos con la clave publica obteniendo
cadenahash2.
Realizamos sobre
cadena el algoritmo de hash, por lo que deberia devolvernos
cadenahash si en su momento se uso la clave privada de nintendo,
cadenahash y
cadenahash2 seran iguales, si no son iguales es un sintoma de que no se ha firmado con la clave privada de nitendo.
El bug es el siguiente si en esta ultima comprobación ambos tienen un valor 0 en el primer byte de
cadenahash y
cadenahash2 el sistema lo dara como valido.
Espero haber aclarado y no liado mas, si yo entendi bien a Waninkoko
EDITADO, se me envio sin terminar.