No es realmente la redundancia de ASCII, sino la redundancia de lo que está codificado con ASCII. Es decir, usa ASCII porque codifica secuencias de caracteres , y usa caracteres porque desea que los datos sean perceptibles por los ojos y el cerebro. Por lo tanto, los datos son texto o algo lo suficientemente cerca (por ejemplo, XML). Algunos personajes serán más comunes que otros. Se utilizarán algunos patrones.
La idea general de un teclado de un solo uso reutilizado es que transporta información de un texto sin formato a otro: si conoce 'A xor P' y 'B xor P' (A y B son los bytes de texto sin formato, P el pad), entonces puede calcular 'A xor B' al agrupar los dos valores. Luego, cada bit de información que aprendes sobre A produce la información correspondiente sobre B. Por ejemplo, si A es un texto XML y ya has comprobado que algunos bytes de texto plano son " <config
", entonces puedes adivinar que el siguiente byte de A probablemente será un " >
", un espacio o un " u
". Estos son tres posibles bytes de texto sin formato, de los cuales puede deducir inmediatamente los únicos tres posibles bytes de texto sin formato en la misma posición para B. Dependiendo de lo que sepa de B, puede eliminar los valores que "no tienen sentido", y así conocer el valor de byte para A, y así sucesivamente.
Al romper el infame dos veces, simplemente continúa propagando información de un texto sin formato a otro, y viceversa.
ASCII ya dice mucho, porque los valores ASCII válidos están en el rango de 0 a 127, pero en el texto "normal", no aparecerá mucho: en el rango de 0 a 31, solo 9 (tab), 10 (Lf) y 13 (cr) se encontrarán en la práctica.