Crittografia dei dati di testo sostituendo i caratteri?

1

Ho pensato a questo metodo ma non ci sono riuscito perché pensavo che fosse stupido da fare per qualche motivo, forse perché non ne ho mai sentito parlare ed è abbastanza ovvio. Ma oggi ci ho messo un po 'di più e ci ho pensato.

Se voglio parlare in sicurezza con un compagno su Internet con un programma che ho creato appositamente per questo, che solo noi abbiamo. Il programma rende il mio computer collegato al suo computer o viceversa e trasferisce i dati.

Ora il fatto è che, per semplificare, diciamo che usiamo solo la lingua inglese senza simboli, solo caratteri minuscoli.

Possiamo impostare ad esempio che a sarà uguale a gH5S e così via, e alla fine riceveremo un lungo testo di parole senza senso, e in più avremo una crittografia RSA prima che venga inviata .

Capisco, l'hacker dopo aver decrittografato i dati RSA può dividere il testo in pezzi che si ripetono come gH5S ma ci sono molti caratteri usati, come può sapere quale divisione è quale personaggio? Ha bisogno di indovinare le parole e in qualche modo essere sicuro, e ci sono un sacco di possibilità per costruire parole.

C'è un semplice programma di esempio in Java per spiegare questo:

public class Test {
    static String[] replacements = new String[] {
            "abK98", "HGD3x", "aRfXZ", "hdZdgb", "eDzfh", "aieSZ3", "iLz5",
            "zH4", "ab98", "abK2398", "a5568", "ACz98", "loW91", "ZmKuJ",
            "azS6D", "ZcfZS", "dFXze", "FszXF", "rXzFttX", "fdXRS", "52aF",
            "ZaWRQ", "qPweQ", "dWtQY", "puEz", "ZdeA"
    };

    static String space = "lKi89";

    public static void main (String[] args) throws java.lang.Exception
    {
        StringBuilder encrypted = new StringBuilder();
        String text = "hello i really like to program and be on stackexchange";

        for (int i = 0 ; i < text.length(); i++) {
            char c = text.charAt(i);
            if (c == ' ') {
                encrypted = encrypted.append(space);
                continue;
            }

            int idx = Character.getNumericValue(c) - 10;
            encrypted = encrypted.append(replacements[idx]);
        }

        System.out.println(encrypted.toString());
    }
}

L'array replacements , il primo indice è a e l'ultimo è z in base all'ordine. E questo è l'output:

zH4eDzfhACz98ACz98azS6DlKi89ab98lKi89FszXFeDzfhabK98ACz98ACz98puEzlKi89ACz98ab98a5568eDzfhlKi89fdXRSazS6DlKi89ZcfZSFszXFazS6DiLz5FszXFabK98loW91lKi89abK98ZmKuJhdZdgblKi89HGD3xeDzfhlKi89azS6DZmKuJlKi89rXzFttXfdXRSabK98aRfXZa5568eDzfhdWtQYaRfXZzH4abK98ZmKuJiLz5eDzfh

È un metodo sbagliato? può essere facilmente decodificato spiando i dati? Come?

    
posta Ben Beri 23.06.2016 - 16:18
fonte

4 risposte

17
  • È un metodo sbagliato? SÌ.
  • È possibile decodificarlo facilmente spiando i dati? SÌ.
  • In che modo? L'analisi crittografica standard è stata eseguita in guerre come WW2 e precedenti.

In sostanza ciò che hai ottenuto è una variazione del codice Caesar . Una semplice analisi statistica identificherà rapidamente le tue "lettere". e appena ciò è fatto, è solo questione di ottenere abbastanza dati attraverso la linea per essere in grado di eseguire il riconoscimento del pattern sulle parole (come l'identificazione delle vocali e così via). Quindi è una questione di ipotesi plausibili di certe parole e significato e viola hai infranto il codice. Come è stato affermato più e più volte: non eseguire la crittografia personalizzata . La crittografia è davvero molto difficile. e anche gli esperti sbagliano (SPESSO)

    
risposta data 23.06.2016 - 16:34
fonte
7

È un metodo sbagliato?

Sì, questo metodo è negativo per molte ragioni. Per prima cosa, non ti guadagna nulla. Se stai già usando RSA, usare il tuo in aggiunta non ti guadagna nulla. Se non stai utilizzando RSA o un'altra crittografia accettata pubblicamente ... allora rolling tuo è una pessima idea.

può essere facilmente decodificato spiando i dati?

Si

Come?

Come già affermato da LvB, quello che hai è una variazione del Caesar Cipher ... che è uno dei tecniche di crittografia più semplici e conosciute. La tua variazione di esso mentre può sembrare complessa per te è piuttosto semplice ... guardare la stringa crittografata che hai fornito (anche se non hai fornito il tuo codice sorgente) ha schemi molto ovvi. Se hai utilizzato una variante dell'algoritmo di compressione LZW sul testo crittografato , il dizionario generato produrrebbe alcune statistiche molto interessanti sull'uso di vari modelli trovati.

04, x9, lKi89
01, x6, eDzfh
02, x5, ACz98
07, x5, abK98
03, x4, azS6D
14, x3, ZmKuJ
06, x3, FszXF
00, x2, zH4
05, x2, ab98
09, x2, a5568
10, x2, fdXRS
12, x2, iLz5
08, x1, puEz
13, x1, loW91
15, x1, hdZdgb
16, x1, HGD3x
17, x1, rXzFttX
11, x1, ZcfZS
18, x1, aRfXZ
19, x1, dWtQYaRfXZ

 0  1  2  3  4  5  4  6  1  7  2  8  4  2  5  9  1  4  10  3  4  11  6  3  12  6  7  13  4  7  14  15  4  16  1  4  3  14  4  17  10  7  18  9  1  19  0  7  14  12  1 

Una volta identificati alcuni dei modelli più comunemente usati, puoi confrontarli con le dodici lettere più comuni in lingua inglese e t a o i n s r h l d c e riempire gli spazi vuoti con quello che è rimasto.

hello i reall_ li_e to _ro_ra_ and _e on stac_e_chan_e

Dopo questo puoi provare diverse mappature di diversi modelli alle lettere e cercare la maggior parte delle parole comuni nella lingua inglese ... mentre questo non funziona molto bene sulla stringa di esempio ... una volta ottenuto un paragrafo o due di testo crittografato, inizia a funzionare abbastanza bene.

Quindi, sì, non solo la tua crittografia può essere infranta ... potrebbe essere spezzata a mano con carta e penna da un bambino con un interesse per i pattern e il codice che si rompe (io lo uso per divertirti nella scuola elementare).

    
risposta data 23.06.2016 - 20:45
fonte
4

Per aggiungere alle risposte eccellenti già qui, mi concentrerò su questo punto:

If I want to securely speak with a mate on the Internet with a program I made specially for this, which only we have.

Questo è il problema numero 1. Qualcun altro potrebbe acquisire una copia del tuo programma. Ancora peggio, fallo a tua insaputa. Questo è il motivo per cui in crittografia c'è una differenza tra tecniche e tasti :

  • Le tecniche sono difficili da sviluppare e modificare e devono essere pubblicate in modo sicuro.
  • Le chiavi devono essere mantenute segrete, ma sono facili da modificare.

Quindi, con la crittografia corretta, se impari che la tua chiave potrebbe essere trapelata, puoi semplicemente cambiare la chiave, il che è molto più semplice della modifica del programma di crittografia. Di fatto, è pratica standard di crittografia per ruotare i tasti - per cambiarli periodicamente - al fine di limitare il danno fatto quando qualcuno ti ruba la chiave senza che tu lo sappia. Questo si spinge fino alla progettazione di protocolli per usare i tasti effimeri , che sono usati per la comunicazione one e poi buttati immediatamente.

    
risposta data 23.06.2016 - 21:36
fonte
3

Anche se una risposta è già accettata, ne aggiungerò un'altra perché in realtà credo che sia esattamente l'opposto della risposta accettata.

Fondamentalmente, stai facendo rotolare la tua stessa offuscazione e poi usi la crittografia RSA.

  • È un metodo sbagliato? No, ma è inutile. La crittografia RSA strong è sufficiente senza ulteriore offuscamento.
  • Può essere facilmente decodificato spiando i dati? No, ma non a causa di ciò che stai facendo, ma a causa dell'utilizzo di una strong crittografia RSA.

Se qualcuno riesce a decifrare la crittografia RSA strong, probabilmente creeranno il tuo algoritmo poco dopo, quindi non c'è quasi nessun beneficio per quello che stai facendo.

Conclusione : ciò che stai facendo è leggermente migliore rispetto all'utilizzo della sola crittografia RSA. Ma se stai pensando di fare solo la tua offuscazione e non usare la crittografia RSA, allora sarebbe sicuramente (usare le tue stesse parole) "un metodo sbagliato". In effetti, sarei completamente d'accordo con la risposta di LvB se stavi considerando di fare la tua offuscazione senza crittografia RSA.

    
risposta data 23.06.2016 - 17:00
fonte

Leggi altre domande sui tag