Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP, JAVA, XOR] Data versleutelen voor transport

Pagina: 1
Acties:

  • TygeR
  • Registratie: Oktober 2000
  • Laatst online: 06-02 16:23
Hallo Allemaal,

Ik moet voor een project een configuratie bestand voor een client over internet versturen. Het configuratiebestand is plain tekst en bevat wachtwoorden voor onder andere SIP accounts. Het leek mij verstandig dit eerst te encrypten voordat het verstuurd wordt. Nu heb ik zelf een simpele encryptie en decryptie functie geschreven zowel voor Java als voor PHP dezelfde functies. Ik vraag me alleen af hoe veilig is, in principe is het in de basis een XOR encryptie met een nooit repeterende sleutel.

Hier volgt de code om voor de encrypt in java:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    /** Encrypts the given value with the given password.
     * @param pass The password that will be used to encrypt the data.
     * @param value The value that will be encrypted.
     * @return The encrypted data string that results from the encryption with the given password.
     */
    public static String encryptString(String pass, String data)
    {
        String key = calcMD5(pass);
        String encryptedData = "";
        for( int i = 0 ; i < data.length() ; )
        {
            key = calcMD5(key + i);
            for( int n = 0 ; n < key.length() ; n++ )
            {
                if( i >= data.length() ) break;
                char v = data.charAt(i);
                char k = key.charAt(n);
                encryptedData += (char)(v ^ k);
                i++;
            }
        }
        String encodedData = Base64.encodeString(encryptedData);
        
        return encodedData;
    }


Kan er iemand inschatten hoe veilig dit is en hoe lang het zou duren om deze encryptie te kraken?
Zijn er eenvoudige aanpassingen te doen waardoor dat de encryptie veiliger word (zonder het veel complexer te maken)?

Misschien leuk voor iemand die zin heeft in een uitdaging ;-), hier is een stuk encrypted data gemaakt met bovenstaande code, als je het kan kraken laat het dan ook graag weten:
code:
1
bVgNFRhcRxlRFhcDFkAWEUsOXg9bBEIWVhlHAUIXRhYMV0ZWBBJXRUdTAEQQXxIbGF1SRhJYABIEDVtCHEIQCgkNFARYX11CWkIJWEAZRg9URUtXE0JWF1RDU0UGRBgHVF1XRBcJGUoEB0VHDFsWEE1dT0ITRlsGVxJXQlxSWFUYCBJERwsVUVVCcwpVX0QGG1YIEFBXAURaAUQYWQYTU1laFhcNVkEZSFsRFVNfBxFQF0FCW1FVSgMa


Bij voorbaat bedankt voor jullie hulp.

[ Voor 11% gewijzigd door TygeR op 27-03-2011 10:49 ]


Verwijderd

Ik denk niet dat veel mensen een tijdsindicatie kunnen geven maar je kunt er zeker van uit gaan dat dit zeer veilig is... (na mijn idee zo laten dus)

  • LuckY
  • Registratie: December 2007
  • Niet online
Waarom moeten er altijd nieuwe code geschreven worden voor iets wat allang bestaan :)? waarom pak je niet geteste bestaande code ipv het wiel opnieuw uitvinden in de maart editie van hakin9 wordt http://www.cryptool.org/ besproken hier zijn known good code snippets voor cryptografie :) ik zou zeggen kijk daar eens rond.

quote van de site:
The current version offers the following highlights:

* Numerous classic and modern cryptographic algorithms (encryption and decryption, key generation, secure passwords, authentication, secure protocols, etc.)
* Visualization of several algorithms (Caesar, Enigma, RSA, Diffie-Hellman, digital signatures, AES, etc.)
* Cryptanalysis of several algorithms (Vigenère, RSA, AES, etc.)
* Cryptanalytical measurement methods (entropy, n-grams, autocorrelation, etc.)
* Related auxiliary methods (primality tests, factorization, base64 encoding, etc.)
* Number theory tutorial
* Comprehensive online help
* Accompanying script with additional information about cryptology
* And plenty more!
Although het wel leuk is om een eigen algoritme te schrijven

  • TygeR
  • Registratie: Oktober 2000
  • Laatst online: 06-02 16:23
Bedankt voor de reacties,

Ja vond het inderdaad wel leuk om zelf even te kijken vooral omdat ik het ook weer vrij wil kunnen gebruiken in allerlei projecten en omdat ik zo snel even geen snippet kon vinden die zowel geschikt was voor PHP en Java.

Voorlopig ga ik er maar even vanuit dat het sterk genoeg is om op deze manier te encrypten mits het password natuurlijk sterk is.

Verwijderd

Ik zou het niet als veilig beschouwen. Je kunt nu niet zomaar jou challenge oplossen, maar dat wil niet zeggen dat een aanvaller in een real life scenario niet achter de key zou kunnen komen (of de plaintekst).

Je hebt nu basicly een soort one-time-pad encryptie gemaakt. Dit is in principe secure, maar dan moet je de sleutel niet hergebruiken. Dit doe jij feitelijk gezien wel (alleen rehash je de sleutel). Hoe word die password bepaald? Is die hetzelfde voor elke client? Of wordt deze random bepaald (en zo ja, hoe krijg je hem dan naar de client). Een aanvaller zou nu door meerdere berichten af te luisteren informatie kunnen verkrijgen over de gebruikte sleutel. Dit doordat een aanvaller gebruik kan maken van het feit dat sommige tekst misschien bekent is (zoals comments op een vaste plek, newlines etc) zo kan hij bepalen wat de key voor die char was. Als laatste aanval welke ik zo snel zie is dat als een aanvaller controle kan krijgen over de inhoud van de config file hij deze gewoon op 0 kan zetten. 0 ^ key levert namelijk gewoon de key op.

Zelf een crypto systeem maken is gewoon nooit verstandig. Elk crypto vak wat ik tot nu toe gevolgd heb begint met de regel 'bedenk/implementeer nooit je eigen crypto systeem'. Er zijn zo veel dingen die fout kunnen gaan dat het onmogelijk is om dit in je eentje zomaar goed te doen. Er zijn goede algoritmes (RSA, AES e.d.) met goede implementaties. Gebruik deze gewoon en ga niet zelf aan prutsen.