Sobre el contenido del sector 0 y la dirección 800h, voy a formatear de nuevo, a ver que hace.
Hermes escribió:Esto nos da una base de trabajo, pues hasta ahora no conociamos el contenido de un sector desencriptado y por tanto, no sabiamos que habia que buscar de utilizar un metodo de fuerza bruta.
de todas formas es tan probable o tan poco probable como que 200h-3ffh sea un sector lleno de ceros una vez encriptado.
3) Savage ha supuesto que el metodo de encriptacion es TEA o XTEA, aunque tambien ha descubierto que si se modifica un byte, varia el resultado de los posteriores a este. Yo no se si el metodo será exactamente asi o no, lo que está claro es que de ser uno de estos metodos, la key debe variar en cada encriptacion, pues de ser la misma, siempre que codifiquemos el mismo paquete de 64bits, deberiamos obtener el mismo paquete codificado y los datos observados no coinciden.
Asi que de ser alguno de estos metodos, la key debe variar en funcion de los datos previos obtenidos y es posible que la "semilla" para poder desencriptar un sector, esté en esos primeros 16 bytes que se repiten tanto. Es posible que esa semilla xoreada con algo, de la clave para desencriptar los siguientes 64 bits/128 bits y que luego el resultado se utilice como nueva key (xoreando de nuevo con ese algo) para obtener otro paquete.
Para cifrar debemos tener en cuenta dos cosas, el algoritmo y el método de cifrado:
Algoritmos clave simétrica, entre parentesis longitud bytes del bloque cifrado:
- des(8), tripledes(24), xtea(16), blowfish(56), rijndael(32), twofish(32)
Descartamos tripledes y blowfish dado que 24 y 56 no son divisores de 512
Metodos:
- ECB: Electronic CodeBook mode. Metodo mas sencillo, cada bloque de cifrado se hace independientemente.
- CBC: Cipher Block Chaining mode. Se hace XOR con el bloque anterior a los datos antes de cifrarlos.
- OFB: Output-Feedback mode. Una cambio (byte) en origen implica solo un cambio en destino (usado para transmisiones, facil recuperación).
- CFB: Cipher-Feedback mode. Stream adaptado a bloques, resultado parecido a CBC pero recupera si faltan datos o se alteran.
Yo descartaría OFB y CFB, son más orientados a transmisiones digitales. Y descrato definitivamente ECB, por que en sectores con bytes repetidos (dentro del propio sector) veríamos repeticiones en el cifrado.
Me quedo con método CBC, por fácil, rápido y conocido.
Creo que esto contesta a varias de tus dudas o preguntas.
1) Me gustaria que me dierais la opinion sobre esos 16 bytes que se suelen repetir: ¿creeis que es algun tipo de cabecera que está encriptada o los debemos considerar como una semilla a partir de la cual se obtiene la key para desencriptar un sector?
Eso me hace pensar que detrás hay una secuencia de 16 bytes desencriptados que existen en todos esos sectores donde el cifrado se repite. Me indica además, que la longitud de bloque de cifrado es de 16bytes o menor y que solo te puede pasar al inicio de sector (como si usasen CBC).
Respecto a usar eso para sacar la clave, no es posible: Aunque tengas datos + equivalentes datos cifrados, no se puede averiguar la clave de forma matemática. El único camino es explorar el total del espacio de claves existente (inabarcable ni con una PS3), deberíamos montar un CrackTEA@Home ...
Una vez petada la clave (16Bytes), deberíamos averiguar que relación tiene con el DISK-ID. Bastante difícil si han usado un MD5SUM (16bytes)
La lógica indica que ha llegado el momento de olvidarse del tema.
Pero, aunque parezca todo imposible, a veces la estupidez humana (lo único infinito) hace que las cosas se hagan más sencillas. No es el primer sistema de este estilo que he abierto gracias a adivinar que pensaba el programador de turno cuando lo escribió.
Mi nariz me dice que esos 16bytes son ceros patateros. Con lo cual solo hace falta implementar TEA.crypt o TEA.decrypt y trabajar con esos 16bytes, no con todo el sector.
La putada adicional es que para cada clave TEA existen 2 claves validas equivalentes, pero que no tienen nada que ver con la original, y si diesemos con una de esas no podríamos encontrar nunca la relación DISK-ID con la key de cifrado.
Bueno, no decaiga el humor, que en cuanto haya un exploit de verdad, volcamos la memoria de las SPU's (256K's cada una), y una de ella se debe encargar de estas cosas.
EDITO:
Última prueba realizada: He metido el primer mega de HaDeSh a mi disco, y la PS3 me ha pedido formatear el disco. Esto indica con bastante seguridad que se usa el DISK-ID como parte de la clave de cifrado, y que si no somos capaces de cambiar el Disk-ID tampoco podemos hacer full-backup para meterlo en otro disco duro.