En general, no queremos alentar este tipo de pregunta:
-
Las referencias al código no son buenas descripciones de algoritmos criptográficos. Las buenas descripciones utilizan el lenguaje de las matemáticas, no la programación.
-
Una descripción de un conjunto de archivos en github no es lo suficientemente permanente; si alguna vez lo cambia, esto hará que esta pregunta sea ilegible.
-
Hay un ciclo muy ineficiente y agotador, que dice lo siguiente: "Oye, no conozco el tema, pero tengo esta idea; ¿es segura? - No, no lo es, para esto razón. - ¿Qué pasa si agrego un +1 allí? - No, no ayuda. - Entonces, ¿qué pasa si también pongo un +2 en ese lugar? - ... "La experiencia demuestra que este tipo de proceso nunca termina con un buen algoritmo; sin embargo, produce discusiones espantosas y largas. Ya es suficientemente malo en los grupos de Usenet como sci.crypt
; en un Q & Un sitio como este, simplemente no funcionará.
Sin embargo, desde una mirada superficial a sus archivos, parece que quiere usar protocolo de tres pasos de Shamir . Esto requiere un cifrado conmutativo tal que pueda cifrar un mensaje con la clave u , luego con la clave v y luego descifrar con la clave u y v en ese orden, y recupera el mensaje original. Desafortunadamente, los cifrados conmutativos son difíciles de hacer sin una gran cantidad de matemáticas, como las grandes modulaciones exponenciales modulares.
Su idea de hacer multiplicaciones en módulo 2n y de "cifrar" solo los valores de mensaje x que no son invertibles en módulo 2 n no es seguro. De hecho, desde el exterior, el atacante ve x * u , x * v y x * u * v (todos los valores de módulo 2 n ). Como x es par, hay enteros m y y , de manera que y es impar y x = y * 2 m . u y v son impares (es necesario para que ellos sean invertibles), los valores observados son necesariamente múltiples de 2 m y no 2m+1 . En otras palabras, expresados en binario, todos terminan con exactamente m ceros.
El objetivo del atacante es recuperar x . Él ya sabe m , como se explicó anteriormente. Él quiere y , que tiene bits de longitud n-m . Al simplemente dividir todos los valores que observó mediante 2m , obtiene y * u , y * v y y * u * v , todos los valores de módulo 2nm , y todos son impares, por lo tanto, invertibles. Entonces basta con calcular (y * u) * (y * v) / (y * u * v) (módulo 2nm ) , que produce y . Fin del juego.
Lo anterior generaliza a todos los cálculos modulo algún número entero N cuando se toma x como módulo no invertible N .
Le recomiendo que haga su tarea, es decir, lea el Manual de criptografía aplicada , que es una descarga gratuita y muy buena. Lectura (aunque un poco tensa a veces). El protocolo de tres pasos de Shamir se describe en el capítulo 12, página 500. Tenga en cuenta el siguiente pasaje:
Si bien puede parecer que cualquier cifrado conmutativo (es decir, cifrado en el que el orden de cifrado y descifrado es intercambiable)
Sería suficiente en lugar de la exponenciación modular en el Protocolo 12.22, se recomienda precaución. por
Por ejemplo, el uso del cifrado Vernam (§1.5.4) sería totalmente inseguro aquí, ya que el XOR de
los tres mensajes intercambiados serían iguales a la clave en sí misma.
El peor pecado en la investigación científica es ignorar la investigación previa.