Foros:
Por sqrmatrix
Me he leído la patente del nuevo sistema de origen español que fue noticia hace unos días, y he visto algunos fallos, que expongo a continuación:
- Se afirma que "no es nada fácil descubrir y almacenar números primos suficientemente grandes". Quizá me equivoque, pero a mí me parece que esta afirmación es totalmente falsa. Por no decir que habla de que no disponemos de una fórmula matemática que genere números primos, pero no menciona que disponemos de métodos fiables que nos permiten obtener todos los números primos que queramos de la longitud que queramos de forma casi inmediata, o si queremos una mayor seguridad de que sea primo, tarda unos minutos.
- Se afirma que en la parte de las claves tenemos una cardinalidad Aleph-0 o mayor, pero que yo sepa, teóricamente ningún criptosistema puede tener una cardinalidad mayor a Aleph-0, y en la realidad, el espacio de claves siempre será finito.
- Se afirma que el número de ordenaciones de la matriz base es (mxn)!, cuando en realidad es m!xn!. Es decir, que en el ejemplo que pone de (27x27)!=729!~68x10^1770, en realidad es 27!x27!~1.19x10^56
Además se quiere convencer al lector, de manera indirecta, de que los demás sistemas son inseguros, lo cual a mí me parece que es mucho suponer.
En mi opinión, el algoritmo general es un algoritmo demasiado complejo, con demasiadas variables y demasiados pactos entre los interlocutores, lo que hará difícil la compatibilidad entre diferentes usuarios. También, el alto grado de expansión del tamaño de la información lo veo inaceptable. No le auguro ningún futuro, pero sí muchas críticas, como las que ya está teniendo aquí.
En lo que voy a exponer a continuación, espero no haberme equivocado. Si no, que alguien me corrija...
Como primera vulnerabilidad del algoritmo que se describe, veo lo siguiente. Antes, decir que esto se basa en lo indicado en el documento de la patente, pero el ejemplo que ponen no parece cumplir la fórmula. No sé si la fórmula indicada está mal, o el ejemplo indicado está mal. De ser cierta la fórmula, se tiene la vulnerabilidad que aquí explico.
Si tenemos un índice de protocolo j comprendido entre 1 y 3, sabemos que el número generado será R+Ax(10^(j-1)-1). Sabemos que R puede tomar los valores entre 1 y 9, y lo mismo con A. Así, pues, si j=3, tenemos que R+Ax(10^(3-1)-1)=R+Ax99. Esto supone un número limitado de valores, a saber, {100-108}U{199-207}U{298-306}U{397-405}U{496-504}U{595-603}U{694-702}U{793-801}U{892-900}. Es decir, si nos encontramos en el criptograma una secuencia de 3 números que no está en ninguno de esos conjuntos, tenemos la seguridad de que esa secuencia no pertenece a un índice de protocolo j con valor 3, o sea, que esos tres dígitos no codifican un dígito del mensaje. Podría codificarse con el primero de ellos, o los dos primeros, o los 4, 5, etc, pero no con esos tres. En caso de encontrarnos uno de esos valores, no tenemos ninguna seguridad de que codifiquen un dígito.
Por otro lado, en caso de que determinemos que uno de estos grupos de 3 dígitos efectivamente sí codifica un dígito del mensaje, podemos obtener directamente el valor de R, que vendrá dado por la suma del dígito más significativo con el menos significativo. En este caso, el valor aleatorio de A no aporta ninguna seguridad.
Por último, para este caso, suponiendo que haya al menos un índice de protocolo j igual a 3, y suponiendo que los índices de protocolo se repiten cíclicamente y no son demasiados (relativamente hablando), podemos obtener con probabilidad alta todas las cifras de 3 posiciones que codifican un dígito del mensaje. Para ello, buscamos todos los grupos de 3 dígitos que entren en uno de los conjuntos indicados (hay que buscarlos todos, es decir, si tenemos ...10895..., aquí tenemos el valor 108 y el valor 895) Una vez hallados todos estos grupos, realizamos el siguiente algoritmo: empezamos por el primer grupo, y buscamos el siguiente. Hallamos su distancia "d", y ahora, comprobamos todos los grupos que distan "d" partiendo del primero. Si todos ellos son grupos que caen dentro de los conjuntos antes especificados, es muy probable que todos ellos sean los valores generados por índices j de valor 3. De no ser así, repetimos el proceso, pero esta vez con el primer grupo y el tercero, ya que el segundo falló. Si haciendo todo esto no encontramos ningún caso en el que se cumpla que todos los valores pueden ser generados por un índice de protocolo j de valor 3, entonces reanudamos todo el proceso, pero esta vez partiendo del segundo grupo de 3, ya que el primero falló. Es decir, cogemos el segundo grupo de 3 dígitos y el tercero. Hallamos su distancia, y vemos si todos los grupos de 3 a distancia "d" partiendo del segundo grupo pertenecen a los conjuntos antes indicados. Y así sucesivamente. Si de ninguna forma encontramos ninguno de estos conjuntos, entonces bien no hay ningún índice de protocolo j igual a 3, bien estos índices no son cíclicos.
Si hemos encontrado uno de estos índices, que se repite a una distancia "d", no debemos descartar que haya otros, por lo que debemos seguir buscando, eso sí, saltándonos los que ya hemos encontrado. Si los encontramos, lo más probable es que su distancia sea "d", pero puede ocurrir que hayamos encontrado una configuración especial, como la siguiente: {2,3,6,3,1,3}. Siendo cíclica, tendríamos la secuencia 2,3,6,3,1,3,2,3,6,3,1,3,.... Traducido a dígitos, nos queda AABBBCCCCCCDDDEFFFAABBBCCCCCCDDDEFFF.... En ésta, aplicando el algoritmo, obtendríamos, por un lado, una distancia "d" de 9, que se corresponde a los índices 3 consecutivos dentro de la secuencia, pero por otro lado, descubriríamos una distancia secundaria de "d" de 18, no coincidente con la anterior. Para que esto ocurra, necesariamente la distancia menor ha de ser divisor de la distancia máxima hallada. Podría ocurrir que la secuencia de distancia menor esté dentro de la secuencia de distancia mayor en cuyo caso no podríamos determinar la secuencia mayor, pero bastaría ir probando secuencias de distancia múltiplo la que tenemos. En todo caso, si nos encontramos con varias secuencias no coincidentes, la longitud de la secuencia real será la de distancia mayor, o un múltiplo de ésta.
Halladas todas estas distancias, podemos saber la longitud total de la secuencia, en dígitos, antes de repetirse, y conocemos en qué posiciones están los índices de protocolo j de valor 3. Conocidos estos valores, podemos dividir el mensaje en bloques que sabemos que han sido codificados con los mismos índices de protocolo j, y también conocemos los índices de protocolo j de valor 3 que, como hemos visto, nos permiten saber el valor de R.
Visto esto, podemos seguir avanzando en el análisis, ahora que hemos reducido la complejidad del sistema. Ahora podemos averiguar la longitud del resto de bloques. Sabemos que si tenemos un bloque de 4 o más dígitos, sus dos últimos dígitos están fijados por el resto por la fórmula indicada en el algoritmo. Así, pues, nos situamos en el primer bloque, y cogemos el primer grupo de 4 dígitos. Para determinar la longitud de un grupo, suponemos que es de 4 dígitos. Comprobamos si los dos últimos dígitos cumplen las fórmulas. Si es así, hacemos lo mismo para el mismo grupo, pero en el siguiente bloque, y repetimos la operación para todos los bloques. Si en algún bloque no se cumple, sabemos que la longitud no es de 4, así que suponemos que es de 5 y repetimos. Si para una determinada longitud "l" se determinan los dos últimos dígitos para los mismos grupos de todos los bloques, es muy probable que la longitud del bloque sea ésa y hayamos determinado el valor de un índice de protocolo j. Si hemos alcanzado la máxima longitud permitida y no se ha cumplido en todos los bloques la determinación de los dos últimos dígitos, entonces es que estamos ante un bloque de 1 ó 2 dígitos. Como podemos estar ante un bloque de 1 dígito, lo que hacemos es repetir este proceso, pero empezando por el siguiente dígito, si tenemos a continuación 4 o más dígitos libres. En caso de haber pasado al siguiente dígito y haber encontrado un bloque de 4 o más dígitos, está claro que el dígito que hemos saltado es un bloque de longitud 1. Si hubiéramos saltado 2 ó más dígitos, de momento no podemos saber qué bloques son de 1 dígito y qué bloques son de 2 dígitos. Este procedimiento nos permitirá determinar algunos, o todos, los índices de protocolo j. Habiendo determinado estos bloques, podemos determinar el valor de R utilizando la fórmula dada.
En caso de no encontrar bloques de 3 dígitos, o en caso de que lo indicado anteriormente sea erróneo, podemos seguir aplicando este último ataque. Es simple. Obtenemos todos los posibles bloques de 4 ó más dígitos siguiendo el procedimiento indicado antes. En este caso, partimos de los primeros 4 dígitos y comprobamos si los dos últimos son generados por los anteriores. De ser así, lo anotamos, pero seguimos probando con más dígitos. Anotamos todos los posibles bloques, hasta llegar al máximo. De no haber ninguno, está claro que estamos ante un bloque de menos de 4 dígitos. Pasamos al siguiente dígito, y repetimos. Al final, obtendremos todos los posibles bloques. Unos serán válidos, otros no. Ahora, aplicamos el algoritmo de antes, pero con los datos que tenemos. Partimos del primer bloque, buscamos el siguiente de la misma longitud (que no se solape con éste, por supuesto), determinamos su distancia "d", y vemos si, partiendo del primer bloque, todos los bloques del mismo tamaño a distancia "d" son válidos. De ser así, es muy probable que todos sean bloques válidos. Si no es así, el bloque que estamos tratando no es válido. Pasamos al siguiente y repetimos. Este procedimiento deberá dar como resultado una secuencia de bloques que no se solape y que se repita (hablando en longitudes), que juntos formarán el bloque de índices de protocolo j, o un subloque de longitud un divisor de la longitud del bloque principal. En este punto, tendremos varios índices de protocolo j, o todos (los bloques de tamaño inferior a 3 podrían estar indeterminados en algunos casos). Como antes, podemos determinar el valor de R con la fórmula dada.
Creo que esto es un punto de partida para hacer el criptoanálisis, pero no creo que la cosa quede sólo en esto. Seguramente haya más fallos.
Por supuesto, esto que he expuesto no permite descifrar el mensaje, pero es un punto de partida para el ataque, y muestra que este sistema es más vulnerable de lo que afirma su autor. En particular, el cifrado por índices de protocolo es bastante vulnerable.
Bueno, espero no haberme equivocado en nada ni haberos aburrido.

Totalmente
Estoy totalmente de acuerdo en tu análisis. La cardinalidad no puede ser superior a Aleph0, de ninguna de la maneras, y el algoritmo es farragoso, pero no supera en seguridad a otros conocidos. Tu vía de ataque tengo que estudiármela mejor, pero tiene buena pinta.
Farragoso es la palabra. No
Farragoso es la palabra. No cumple con una de las normas fundamentales que deben cumplir los criptosistemas, que es que sean sencillos.
Otra posible vulnerabilidad
Otra observación que puede llevar a vulnerabilidad es la siguiente. Como antes, si estoy equivocado, que alguien me corrija. Siguiendo el ejemplo del documento para la matriz de 27x27, tenemos lo siguiente, que puede extenderse a otros tamaños de matriz si se sigue el mismo procedimiento indicado en el documento para crearlas:
Según se realiza la matriz, nos encontramos que en una fila el segundo dígito menos significativo es el mismo para todos los elementos de esa fila, y en una columna, el dígito menos significativo es el mismo para todos los elementos de esa columna. Esta propiedad no cambiará al realizar las permutaciones de filas y de columnas, ya que se mueven filas y columnas completas.
Por otro lado, el elemento A(i,j) de la matriz alfanumérica se define como cualquier elemento del conjunto {B(i,j),B(i+16,j),B(i,j+16),B(i+16,j+16)}, elementos de la matriz base reordenada. Esto define las esquinas de un cuadrado y, por lo visto antes, sabemos que los elementos B que estén en una misma fila comparten el segundo dígito menos significativo, y los que estén en la misma columna el menos significativo. Esto es, B(i,j) y B(i+16,j) comparten el segundo dígito menos significativo, y lo mismo ocurre con B(i,j+16) y B(i+16,j+16) (los dígitos que comparten ambos pares no tienen por qué ser el mismo). Por otro lado, B(i,j) y B(i,j+16) comparten el dígito menos significativo, y lo mismo ocurre con B(i+16,j) y B(i+16,j+16). Por otro lado, B(i,j) y B(i+16,j+16) no tienen por qué compartir ningún dígito, ya que están en fila y columna diferentes.
Pues bien, supongamos que estamos ante la codificación de los caracteres como elementos de la matriz base reordenada, que podemos conseguir con la vulnerabilidad indicada en este hilo (si no hay errores, claro). Supongamos que tenemos 3 valores diferentes, de 3 dígitos cada uno. Resulta que si estos tres valores pertenecen a la codificación del mismo carácter de la matriz alfanumérica, uno de estos tres valores compartirá el dígito menos significativo con uno de los tros dos valores, y el segundo dígito menos significativo con el otro valor que queda. Que se cumpla esto no garantiza que los tres valores codifiquen el mismo carácter, pero que no se cumpla significa que los tres valores no codifican el mismo carácter alfanumérico. Al menos codifican dos caracteres alfanuméricos diferentes.
Por otro lado, tenemos un determinado número de caracteres alfanuméricos, sea N, por lo que el número de valores diferentes que los codificarán a todos ellos será 4xN, lo que quizá permita aplicar estadísticas a los valores que aparecen, que estarán divididas por 4 si los valores se toman de forma aleatoria, lo que quizá permita agrupar valores por estadística semejante para saber cuáles codifican al mismo carácter. Esto, combinado con la observación anterior que nos permitirá descartar combinaciones erróneas, seguramente permita determinar qué valores codifican un mismo carácter, y qué carácter codifican, gracias a la estadística, lo que permitiría obtener el mensaje original.
Bueno!!!
Si seguimos así nuestros algoritmos "de juguete" van a resultar huesos mucho más duros de roer!
Esto deja claro que el
Esto deja claro que el talento de los kriptopoleros es grande grande. De todas formas, habrá que esperar a ver si alguien encuentra errores en mis planteamientos, que puede ser. Sigue el problema de los índices de protocolo j de valor menor a 3 (o igual si la fórmula indicada en el documento es errónea), que no nos permite distinguir longitudes de 1 ó 2 (ó 3), pero creo que con prueba y error se puede averiguar, salvo que tengamos un montón de bloques de estos tamaños
Si tenemos en cuenta
Si tenemos en cuenta que los kriptopoleros siempre procuran que los cifrados puedan ser resueltos, para lo cual se eliminan algunos "cerrojos", no vas desencaminado, no.
Se me olvidaba indicar cómo
Se me olvidaba indicar cómo determinar la longitud de dígitos con la que se codifica cada carácter de la matriz alfanumérica.
Puesto que todos los caracteres se codifican con la misma longitud, está claro que esta longitud será divisor del número de dígitos del mensaje, dígitos obtenidos después de aplicar la primera vulnerabilidad de este hilo.
Ahora, para averigur la longitud, probamos con cada uno de estos divisores obtenidos. Suponemos codificación con esta longitud, y dividimos el criptorama en valores de esta longitud. Obtenemos las estadísticas de todos los valores, y las ordenamos de mayor a menor.
Puesto que el número máximo de valores será 4xN, N el número de caracteres de la matriz alfanumérica, está claro que si obtenemos más de 4xN valores diferentes, la longitud supuesta no es válida y probamos con otra.
Las estadísticas deben ser parecidas en grupos de a 4, consecutivos, si es que cada valor que codifica a cada carácter se ha obtenido al azar. Además, estas estadísticas deben aproximarse a las estadísticas de un texto normal, divididas por 4. Si tenemos una distribución de valores así, la longitud seleccionada es candidata a ser longitud válida.
Por otro lado, aplicando la segunda vulnerabilidad de este hilo, en la que los 4 diferentes valores que codifican un mismo carácter comparten un dígito con dos valores del grupo, debemos asegurarnos de que esta relación se cumple para las estadísticas más claras. Para las menos claras, esto quizá no se cumpla, porque sean tan parecidas que elementos de un grupo han pasado a otro. Pero gracias a esta relación, quizá podamos determinar qué valores pertenecen a qué grupo. No siempre podremos hacer esto, porque puede haber valores que codifiquen diferentes caracteres de estadística parecida, pero que compartan la misma fila o columna. Pero esto se podrá resolver aplicando la segunda vulnerabilidad, a medida que se vaya descifrando el texto, que nos permitirá eliminar ambigüedades.
Agradezco los mensajes de sqrmatrix
Aprovecho, una vez más, para agradecer a sqrmatrix los mensajes donde nos explica inmejorablemente su profunda visión de asuntos sumamente complejos porque, aunque yo no llegue, se ve su calidad... se agradece el esfuerzo porque verbalizar todo eso tiene mucho mérito, sin duda.
Saludos cordiales. Ahora a ver si me voy enterando de algo más concreto y, si encuentro algo que pueda ser útil -cosa que dudo porque el nivel es demasiado alto para mí-, lo comento.
Pedro Fernández
--
P.S. Lo del teorema de los residuos me recuerda la entrada del nuevo estándar SHA3 enviada por squirrel el 08 de octubre 2012, lunes, sobre el algoritmo Keccak basado en funciones esponja pero sólo como una asociación nominal que hago sin saber muy bien por qué... puede que sólo sea por los nombres pseudobiológicos que se les da a este tipo de operaciones matemáticas.
Gracias, Pedro
Gracias, Pedro. Lo del Teorema de los Residuos yo no lo acabo de ver en la patente. Lo que veo es simplemente añadir un dígito (en la patente dos, pero vimos en el otro hilo que el dígito que nombró como "p" sobraba) que permite obtener el valor del dígito "R" añadido. Pero yo a esto no lo llamaría Teorema. No sé a qué se refiere con Teorema de Residuos (creo que nadie de aquí lo sabe :) )
Wikipedia sí lo sabe
http://es.wikipedia.org/wiki/Teorema_de_los_residuos
No entiendo muy bien lo que
No entiendo muy bien lo que dice a Wikipedia (mis Matemáticas no están tan avanzadas), y tampoco acabo de ver nada parecido en la patente. Quizá lo que está en la patente sea ese teorema, una vez simplificado, y por eso no lo vea
Nada que ver
A mi entender no tiene nada que ver el Teorema de los Residuos con la "Criptografía de Residuos" que parece haber inventado este señor.
¿Contactar con el autor?
Por lo que soy capaz de leer tanto de la patente como de las aparentes debilidades expuestas por sqrmatrix (por cierto, genial trabajo; enhorabuena) entiendo que el propio algoritmo muestra una debilidad intrínseca que le hace vulnerable a un ataque estadístico
¿No sería recomendable contactar con el autor del algoritmo y comentarle todo ésto?. Si los "uropeos" le han dado tan alta calificación a la patente, y se plantea su uso militar ¿No tiene el CCN nada que decir?.
Por lo que veo en google, salvo un tweet despistado, la noticia sobre esta posible vulnerabilidad todavía no ha salido de Kriptópolis
Gegen Dummheit kämpfen Götter selbst vergebens
Hola Jonsito
El autor fue contactado hace días y no tenía tiempo para participar en el debate.
Por supuesto si cambia de idea nuestro foro está a su disposición.
Coincido en las primeras conclusiones.
Sin entrar en el análisis de vulnerabilidades (creo que si voy a buscar tiempo para implementar el engendro para poder hablar con conocimiento de causa), comparto todas tus conclusiones prèvias y añadiría la falta total de detalle en la aplicación del sistema a un entorno real concreto.
Otro factor, quizás menor, pero feo, es que la llamada clave de equivalencias se aplica de manera muy pobre, ya que al funcionar por parejas de filas y columnas da igual el orden de cada pareja. Por ejemplo 3,27,18,9, etc. es exactamente igual que 27,3,9,18, etc. Tampoco me gusta que el último carácter de una clave con número impar de ellos simplemente se descarte reduciendo su tamaño. Se me ocurren infinidad de alternativas para mejorar esto, como transponer filas/columnas (caso de matrices cuadradas), operar por posiciones cíclicas y no entre parejas fijas, etc,
Tampoco soy capaz de seguir su ejemplo. Como indicas, los intercambios de filas/columnas han de mantener por filas el segundo dígito menos significativo, con lo cual creo que simplemente no es posible obtener la tabla 4 a partir de la tabla 3 con este método. Dado que en la 4 el dígito más significativo es igual por filas diria que está construida a partir de una tabla inicial distinta donde esto ya ocurría). En cualquier caso, si el sistema de llenado de la tabla inicial también es variable será una cosa más (como si no hubiera bastantes) en la que poner de acuerdo a los interlocutores antes de empezar.
La verdad es que el asunto este de la tabla lo veo ineficiente, con resultados poco caóticos. Una pequeña variación de la clave no tiene por que generar un cambio significativo en la reordenación de la tabla y por tanto puede implicar poco cambio en la codificación final.
A ver si acabo de profundizar más en todo este mamotreto, aunque creo que será un esfuerzo poco útil puesto que no creo que nada de esto llegue a existir jamás como un producto acabado, a menos que se introuzcan muchos y significativos cambios.
Con el asunto de la patente...
Estoy dudando sobre implementar y publicar o no dicho algoritmo. No se si puede o no hacerse y menos si puede liberarse con una licencia CC. ¿Alguien sabe algo al respecto?
Yo no lo haría
Yo no lo haría, forastero
Bueno, entonces
Quizás me lo implemento en la intimidad y genero un cifrado que será lo que cuelgue para analizarlo. Menos es nada.
Pero
El que nosotros no pudiéramos romper ese cifrado no significaría que fuera seguro. La conclusión debe venir del análisis matemático, en la línea de lo que sqrmatrix y tú habéis estado haciendo.
Yo tampoco entiendo mucho de
Yo tampoco entiendo mucho de patentes, y me pregunto si no estará protegido también todo producto resultante de aplicar un procedimiento patentado, o si eso tienen que solicitarlo aparte los que presentan la patente. Porque de ser así, tampoco podrías colgar un criptograma obtenido con ese procedimiento. No sé si alguien sabe de esto. Habrá que informarse
Por eso te decía que lo
Por eso te decía que lo publicases en plan académico, extendiendo la vulnerabilidad presentada en Kriptópolis. En alguna revista de informática seguro que no hay problemas de ningún tipo para exponerlo con pelos y señales, si lo hay, le preguntas al editor y ya te lo reseña, pero lo dudo muchísimo.
Hum..., las publicaciones de
Hum..., las publicaciones de divulgación son poco amigas de los artículos técnicos. Cuántas veces habré consultado este tipo de publicaciones, y me he encontrado con simple explicación verbal, sin profundizar nada en el asunto. Tampoco parece que este criptosistema haya despertado interés. No creo que haya publicaciones interesadas en este tema. Tampoco tengo ganas, ni tiempo, de andar buscándolas, ni preparar el artículo, etc. Considero que está bien publicado aquí, y creo que es donde mejor puede estar
null
vengánse a i2p y dejénse de estupideces de si esta prohibido o no esta prohibido implementar un algoritmo, que no un logaritmo, lol
I2p o cualquier solucion para la privacidad que les valga, pero de paso publicito esta gran darknet.
Alucinante el mundo en el que vivimos, una gente intenta aprender, jugar con unas ideas y conceptos y tienen que estar mirando si es legal o no. Me parece alucinante.
No se hable más
Si el inventor se toma la molestia de asomarse a esta página encontrará críticas suficientemente claras para poder intentar refutarlas, como por ejemplo, el comentario de sqrmatrix:
Más claro, agua.
También se afirma que
"... con la clave de equivalencias adecuada podemos obtener de la matriz base de residuos numéricos inicial cualquier matriz base reordenada de residuos numéricos que nos interese" y eso es falso, al menos con el método de intercambio de filas y columnas que aparece en la patente. Con él, las filas y las columnas podrán desordenarse y cambiar de lugar, pero siempre mantendrán los mismos elementos. Así no podremos llegar a resultados donde se sustituya un elemento de una columna o fila por el de otra.
Eso. Y además, para el
Eso. Y además, para el conocimiento científico, todo viene a ser mentira hasta que se demuestre lo contrario. Y aparte de contestar a las cuestiones pendientes, faltan, por lo menos, una implementación pública y un cifrado cuya seguridad se pueda verificar.
opinar