Questo algoritmo è sicuro per la crittografia? (L'algoritmo di crittografia è fornito)

0

Jasoos (Algoritmo di crittografia)

Sto lavorando alla crittografia e decrittografia dell'applicazione web. Ho costruito un algoritmo che utilizza una chiave lunga 24 bit per crittografare / decodificare il messaggio.

Controlla questo algoritmo e per favore suggerisci qualcosa di importante e di errore in questo algoritmo che possa farlo funzionare meglio. Inoltre, condividi i modi in cui posso testare la forza di questo algoritmo. Il tuo contributo può aiutarci a migliorare il nostro algoritmo.

Il codice è fornito sul mio GitHub

Algoritmo: -

1] La chiave inserita / generata a 24 cifre verrà convertita in codice ASCII con codice a 24 cifre.

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

2] La stringa inserita verrà modificata in un array di caratteri.

Ogni carattere verrà quindi incrementato prima con il valore della chiave e modificato in codice binario a 10 bit.

 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 (): - Prenderà una stringa di 10 bit come input e una matrice, e dividerà quella stringa in due codici binari a 5 bit.

Quindi calcoleremo il valore decimale di ogni codice binario a 5 bit.

Esempio : 0011101101 - > 00111 = 7 e 01101 = 13

Abbiamo una matrice di 32 x 32 dimensioni che ha valori casuali univoci da 0 a 1023 e non sarà condivisa pubblicamente.

Per 0011101101 cercheremo il settimo numero e il tredicesimo valore della colonna. Quel valore sarà cambiato in codice binario a 10 bit.

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] Eseguiremo questa procedura dieci volte con dieci diverse matrici private mediante il metodo 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;

}

Allo stesso modo, lo faremo per ogni carattere nel testo / stringa e lo cripteremo.

** Gli esempi sono forniti di seguito: -

Chiave : c | H @ yLzd3PkRte0H, u16zt8N

Messaggio : abcd ef $

Dopo la crittografia : 11001111000001101010000010000101101000001110100000101010111001110000011000001000

    
posta gauravd2196 14.07.2017 - 12:31
fonte

1 risposta

3

Prima regola di sicurezza .. non tirare il tuo. Esistono molti tipi di analisi che elimineranno questo sistema poiché è uno schema di crittografia incredibilmente semplice. Non mi sono preoccupato di fare un'analisi completa, ma sembra essere in gran parte solo un codice sostitutivo che può essere facilmente analizzato anche senza un testo in chiaro noto.

Con un testo in chiaro noto e un valore crittografato, puoi fare banalmente un attacco di testo normale noto e questo scomparirà completamente perché rivelerà la chiave e consentirà la decrittazione di qualsiasi altra cosa.

Ecco perché esiste la regola "non tirare il tuo". È abbastanza difficile applicare correttamente algoritmi crittografici anche quando si usano algoritmi stabiliti e ampiamente revisionati. Cercare di creare il tuo algoritmo è un processo eccezionalmente difficile che richiede una revisione approfondita e probabilmente milioni di dollari da sviluppare e convalidare.

Se stai cercando solo più feedback sui problemi a livello concettuale, probabilmente il problema più grande sono le matrici. La tua chiave non è davvero la tua chiave. Le matrici sono la tua chiave e sembrano essere condivise su ogni messaggio indipendentemente dalla chiave. La matrice può essere ottenuta banalmente passando una chiave conosciuta e dati sufficienti che tutte le griglie possano essere risolte algebricamente. Con la sostituzione che la matrice offerta ora neutralizzata, passiamo al prossimo numero.

Il secondo problema è il modo in cui viene applicata la "chiave". L'analisi della chiave fornita alle matrici è risolvibile a mano in quanto si tratta solo di un cifrario basico di turno. La semplice analisi di frequenza consentirà una decodifica insignificante poiché ogni 25 set riceverà uno scostamento identico rispetto al 25 precedente. Non sarebbe significativamente più difficile che risolvere un crittogramma sul quotidiano.

Gran parte di ciò che rende gli algoritmi di crittografia moderni buoni è che la chiave e l'algoritmo sono entrambi auto-modificanti. Il modo in cui vengono create le sostituzioni è alterato sia dalla chiave che dal testo in chiaro, cosicché è estremamente difficile lavorare all'indietro dal testo in chiaro e dal testo cifrato alla chiave. Ciò richiede una matematica abbastanza complicata da essere in grado di fare ed è il motivo per cui è così difficile da creare e persino utilizzare correttamente gli algoritmi di crittografia.

Anche se alcuni passi non vengono presi nell'uso di un algoritmo, possono fallire in modo catastrofico. Una volta ho visto una situazione in cui la crittografia RC4 era erroneamente utilizzata senza IV per distinguere i diversi testi in chiaro. Poiché RC4 costruisce un keytream dalla chiave e dal testo in chiaro, la mancanza di una IV ha permesso una decifratura banale con un attacco in chiaro conosciuto. Tutto quello che dovevi fare era criptare qualcosa di simile lunghezza e ottenere l'output e poi xorare i ciphertexts e applicare lo stesso xor al testo in chiaro e otterresti il valore decrittografato per la stessa chiave usata.

Per essere strong, un algoritmo di crittografia deve soddisfare molti criteri diversi per resistere all'analisi e crearne uno da zero che li copra tutti è notoriamente difficile.

    
risposta data 14.07.2017 - 16:16
fonte

Leggi altre domande sui tag