¿Este algoritmo es seguro para el cifrado? (Se proporciona algoritmo de criptografía)

0

Jasoos (algoritmo de criptografía)

Estoy trabajando en el cifrado y descifrado de la aplicación web. He construido un algoritmo que usa una clave de 24 bits para cifrar / descifrar el mensaje.

Revise este algoritmo y, por favor, sugiera cualquier cosa importante y falla en este algoritmo que pueda mejorar el rendimiento. Además, comparte las formas en que puedo probar la fuerza de este algoritmo. Su contribución puede ayudarnos a mejorar nuestro algoritmo.

El código se proporciona en mi GitHub

Algorithm:-

1] La clave ingresada / generada de 24 dígitos se convertirá en un código ASCII de un código de 24 dígitos.

public void setKey(char[] arr){
 for(int i=0;i<24;i++){
   key[i] = (int)arr[i];
 } 
}

2] La cadena introducida se cambiará a una matriz de caracteres.

Cada carácter se incrementará primero con el valor de la clave y se cambiará a un código binario de 10 bits.

 public void Encryption(String text){
 char[] msg = text.toCharArray();
 int flag = 0;
 int l = msg.length;
 for(int i=0;i<l;i++){
  int a = (int)msg[i];
 // System.out.print(msg[i]+" "+a+"-> ");

 if(flag>23)
     flag=0;
 int b=a+key[flag];
 flag++;
 //System.out.print(b+" | ");
 String z = binary(b);
 sb.append(lookUpTool(z));
 //Character.toString((char)b);
 }
 //sb.append(sumBinary);
 sb = comp1(sb);
}

3] lookUp (): tomará una cadena de 10 bits como entrada y una matriz, y dividirá esa cadena en dos códigos binarios de 5 bits.

Luego calcularemos el valor decimal de cada código binario de 5 bits.

Ejemplo : 0011101101 - > 00111 = 7 y 01101 = 13

Tenemos una matriz de 32 x 32 dimensiones que tiene valores aleatorios únicos de 0 a 1023 y no se compartirá públicamente.

Para 0011101101 buscaremos el valor de la fila 7 y la columna 13. Ese valor se cambiará a un código binario de 10 bits.

public String lookUp(String bits, int[][] mat){

int mid = Math.round((float) bits.length() / 2);
String part1 = bits.substring(0, mid);
String part2 = bits.substring(mid, bits.length());
int row=binaryValue(part1);
int col=binaryValue(part2);;


//System.out.print("row: "+row);
// System.out.println("|| col: "+col);
int a = mat[row][col];
return binary(a);

}

4] Realizaremos estos pasos diez veces con diez matrices privadas diferentes mediante el método lookUpTool.

  public String lookUpTool(String s){

   String s1 = lookUp(s,matrix1);
   String s2 = lookUp(s1,matrix2);
   String s3 = lookUp(s2,matrix3);
   String s4 = lookUp(s3,matrix4);
   String s5 = lookUp(s4,matrix5);
   String s6 = lookUp(s5,matrix6);
   String s7 = lookUp(s6,matrix7);
   String s8 = lookUp(s7,matrix8);
   String s9 = lookUp(s8,matrix9);
   String s10 = lookUp(s9,matrix10);

   return s10;

}

Del mismo modo, haremos esto para cada carácter en el texto / cadena y lo cifraremos.

** Los ejemplos se proporcionan a continuación: -

Clave : c | H @ yLzd3PkRte0H, u16zt8N

Mensaje : abcd ef $

Después del cifrado : 1100111100000110101000001001010101000000010100000001010111001110000011000001000

    
pregunta gauravd2196 14.07.2017 - 12:31
fuente

1 respuesta

3

Primera regla de seguridad ... no hagas tu propio rollo. Hay muchos tipos de análisis que desgarrarán este sistema, ya que es un esquema de encriptación increíblemente simple. No me molesté en hacer un análisis completo, pero parece que en gran parte solo es un cifrado de sustitución que se puede analizar con bastante facilidad incluso sin un texto plano conocido.

Con un texto simple y un valor cifrado conocidos, puedes realizar un ataque de texto simple conocido trivialmente y se desintegrará completamente porque revelará la clave y permitirá el descifrado de cualquier otra cosa.

Esta es la razón por la que existe la regla de "no lanzar tu propia cuenta". Es suficientemente difícil aplicar algoritmos criptográficos seguros correctamente, incluso cuando se usan algoritmos establecidos y ampliamente revisados. Tratar de hacer su propio algoritmo es un proceso excepcionalmente difícil que requiere una revisión exhaustiva y probablemente millones de dólares para desarrollar y validar.

Si está buscando más comentarios sobre los problemas desde un nivel conceptual, probablemente el problema más grande son las matrices. Tu llave no es realmente tu llave. Las matrices son su clave y parecen compartirse en cada mensaje, independientemente de la clave. La matriz se puede obtener de forma trivial pasando una clave conocida y datos suficientes para que todas las cuadrículas se puedan resolver algebraicamente. Con la sustitución que la matriz ofrecida ahora neutraliza, pasamos al siguiente problema.

El segundo problema es la forma en que se aplica la "clave". El análisis de la clave dadas las matrices se puede resolver a mano, ya que es solo un cifrado de cambio rotativo básico. El simple análisis de frecuencia permitirá la decodificación trivial, ya que cada conjunto 25 recibirá un desplazamiento idéntico del 25 anterior. No sería significativamente más difícil que resolver un criptograma en el diario.

Una gran parte de lo que hace que los algoritmos de cifrado sean buenos es que la clave y el algoritmo son auto-modificables. La forma en que se crean las sustituciones se ve alterada tanto por la clave como por el texto plano, de modo que es extremadamente difícil trabajar hacia atrás desde el texto simple y el texto cifrado a la clave. Esto requiere cálculos matemáticos bastante complicados y es por eso que es tan difícil crear e incluso usar algoritmos de cifrado adecuados.

Incluso si no se toman ciertos pasos en el uso de un algoritmo, puede fallar catastróficamente. Una vez vi una situación en la que el encriptado RC4 se usaba incorrectamente sin IV para distinguir diferentes plaintexts. Debido a que RC4 construye una secuencia de teclas a partir de la clave y el texto sin formato, la falta de una IV permitió el descifrado trivial con un ataque de texto sin formato conocido. Todo lo que tenía que hacer era cifrar algo de longitud similar y obtener la salida y luego xor los textos cifrados y aplicar el mismo xor al texto sin formato y obtendría el valor descifrado para la misma clave utilizada.

Para ser fuerte, un algoritmo de cifrado debe cumplir muchos criterios diferentes para resistir el análisis y crear uno desde cero que los cubra a todos es notoriamente difícil.

    
respondido por el AJ Henderson 14.07.2017 - 16:16
fuente

Lea otras preguntas en las etiquetas