Verschlüsselung



  • dann ist wohl rsa nicht so geeignet 😉 denn da musst du dir ja zunächst einen schlüssel generieren und den public key weiter geben etc pp. für so etwas solltest du möglicherweise tatsächlich besser eine symmetrische verschlüsselung wie einfach XOR nehmen, das dürfte dir reichen. für rsa ist das programm dann etwas komplexer...

    Gruß, Hunger



  • Hi,
    also der Text wird danach übers Netzwerk übertragen, daher halte ich etwas mehr als nur XOR für sehr sinnvoll, mir fehlt eben nur die passende Funtion... 😞



  • wozu benötigst du denn eine komplexe verschlüsselung?
    wenn du was asymmetrisches willst nimm eben RSA XD aber da musste dich schon n bissl mehr damit beschäftigen mit generierung der schlüssel zb. außerdem brauchst du, damit es wirklich sicher ist locker 1024-bit schlüssel, sonst hat man das ganze sehr schnell wieder entschlüsselt... d.h. du brauchst große zahlen (in java hab ich BigInteger genommen, vllt gibts so was auch für c++)

    gruß, Hunger



  • DaHunger schrieb:

    in java hab ich BigInteger genommen, vllt gibts so was auch für c++

    http://de.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library



  • siehste XD



  • Ich würde dir empfehlen die Verschlüsselung nicht selbst zu implementieren (außer du machst das aus Interesse und nicht für ein reales Projekt), da man leicht Fehler einbaut etc. Es gibt zahlreiche Bibliotheken für C und C++, zB die libgcrypt (aus dem GnuPG-Projekt) oder Crypto++. Ansonsten existieren für die meisten Verschlüsselungs-Algorithmen Referenz-Implementierungen, die du nutzen könntest.

    Wenn du mehr über Kryptographie erfahren willst, wirst du um das Standard-Werk wohl nicht herum kommen
    Applied cryptography | ISBN: 0471128457

    Nachtwind schrieb:

    Hm, bei Text, die nicht uebermaessig gross sind, duerfte doch Vernam/One-Time-Pad ganz brauchbar sein, schnell einfach, reversibel aber dennoch sicher...

    Hört doch bitte mit One-Time-Pad auf!



  • also von one-time-pad halt ich auch nicht wirklich viel,
    asymmetrische verschlüsselung ist im moment eigentlich wirklich das one and only also würd ich von da was nehmen kryptologie is ein sau interessantes thema ich kann dazu von simon singh geheime botschaften empfehlen, ein sehr gutes buch mit lesbaren formulierungen 😉 nur musste zu anwendung dazu dann weiter rein gehn für rsa musste ich viele websites besuchen um rauszufinden wie es tatsächlich funktioniert XD, kann dir da aber auch n paar infos geben wenn des willst,
    hab da so ne 120-Seiten-Seminararbeit... 😉

    Gruß, Hunger



  • Dann mal her damit, mich interessierts.



  • die ganze arbeit ? 😃



  • Was deiner Meinung nach nützlich ist um RSA zu implementieren.

    Ich kann auch Java soweit lesen 😉



  • hi,
    wenn es "nur" darum geht ascii Text zu verschlüsseln und das ganze etwas sicherer als xor sein soll, dann könnte die
    Random-Verschlüsselung ganz nützlich sein.

    Hier ein kleines Programm mit eingebautem (Primitiv) Randomgenerator, das die Randomverschlüsselung demonstriert:

    unsigned long lehmer(long int s)
    // Lineare Kongruenzmethode nach Lehmer
    {   static unsigned long a = 1, b = 4194301, c = 2147483647, z = b;
        if ( s < 0 ) { s = - s; b = s;}
        z = (a + b * z) % c;
        return z % s;
    }
    void chiffre ( long int seed, long int range, int n, string text, long int secret[])
    {   lehmer(-seed);
        if ( range > 0 )
          for (int i = 0; i < n; i++)  secret[i] = (int)text[i] + lehmer(range);
            else for (int i = 0; i < n; i++) text[i] = (char)(secret[i] - lehmer(range));
    }
    int main(int argc, char *argv[])
    {
       string text ="Where ignorance is bliss tis' folly to be wise";
       long int secret[100]; int n = text.length();
    
       // Parameter der Verschlüsselung setzen.
       // Seed und range müssen bei Sender und Empfänger identisch gleich sein.
       long int seed  = 314159265;   // Startwert für Zufallszahlenfolge
       long int range = 589793238;   // Zufallszahl aus Bereich 0..589793237
    
       cout << "Text:        " << text << endl;
    
       // Verschlüsselung
       chiffre ( seed, range, n, text, secret );
       cout << "Chiffriert:  ";
       for (int i = 0; i < n; i++) cout << secret[i] << " "; cout << endl;
    
       // Entschlüsselung
       chiffre ( seed, -range, n, text, secret );
       cout << "Dechiffriert: " << text << endl;
       return 0;
    }
    /*
    Text:        Where ignorance is bliss tis' folly to be wise
    Chiffriert:  
    517769730 147894922 18997234 206732853 183685324 121854227 
    400230142 159977991 311798117 195928414 188643095 311630247 
    332237088 193986841 361992925 149589485 449360302 582087321 
    175106033 309136939 68084118  150041065 537987766 367341035 
    07007728  241769222 41325606  495252861 505901981 185416513 
    379386708 336848968 480284029 87910431  155469837 550220938 
    353622729 42787025 354251736 331149278 387177826 85549929  
    165687031 117352297 25176161  586173098
    Dechiffriert: Where ignorance is bliss tis' folly to be wise
    */
    


  • rüdiger schrieb:

    ... oder Crypto++ ...

    👍
    http://www.cryptopp.com/



  • DaHunger schrieb:

    ...
    asymmetrische verschlüsselung ist im moment eigentlich wirklich das one and only ...

    Sorry, aber das kann ich so nicht stehen lassen. "Asymmetrische Kryptographie" ist erstmal keine Qualitätsaussage, sondern eine Kategorie kryptographischer Algorithmen nach einer bestimmten Eigenschaft ! Ich kann Dir auch eine "asymmetrische Verschlüsselung" programmieren, die absolut unsicher ist...

    Wenn Du eine aufwendige Schlüsselverteilprblematik zui lösen hast, empfehle ich auch asymmetrische Algorithmen ... andernfalls (vA bei performancekritischen Anwendungen) kann man prima (und pftmals besser) symmetrische verwenden.

    Gruß,

    Simon2.





  • @simon2{
    tut mir echt leid, dass du des nich so stehen lassen kannst.
    aber die am besten anzuwendenden verfahren findet man ganz einfach in diesem bereich,
    und damit ist dieser bereich der, in dem man suchen muss wenn man was braucht.
    damit ist er das one and only.
    }



  • DaHunger schrieb:

    ...aber die am besten anzuwendenden verfahren findet man ganz einfach in diesem bereich,...

    "Besser anzuwenden" ist für Dich ein Kriterium für "the one and only" ? Dann müsste Onetimepad ja das Beste vom Besten sein.... (nichts ist einfacher) 😉

    Dass Du das so wahrnimmst, kann nur an Deinem eingeschränkten Sichtfeld liegen. Schau Dir mal an, welche Algorithmen bei Chipkartentransaktionen in der überwiegenden Mehrheit angewandt werden: Symmetrische ! Warum ? Weil sie "besser anzuwenden sind" ... und weil man in diesem Umfeld die Vorteile asymmetrischer Kryptographie (Keymanagement) nicht braucht - wohl aber die der symmetrischen (geringer CPU- und Memoryverbrauch). Und für Verschlüsselung (sprich "Geheimhaltung von Daten") sind symmetrische Verfahren viiiel weiter verbreitet als asymmetrische. Bisweilen wird ein "asymmetrisches Verteilverfahren für symm. Sessionkeys" angehängt, aber der Sicherungsmechanismus der Daten ist weiterhin symmetrisch.
    Bei der "Authentikation" sind asymmetrische Verfahren dagegen wirklich oft die bessere Wahl (wenn sie denn technisch möglich ist).

    Hier gilt wie überall in der Programmierung: Das beste Werkzeug ist das bestpassende ! (und hängt damit stark vom Anwendungszweck ab)

    Ich will gar nicht RSA&Co schlechtmachen, aber wer sich freiwillig Scheuklappen aufsetzt, kann nicht mit meiner Zustimmung rechnen. (Hierbei verwende ich "Scheuklappen" übrigens in seiner ursprünglichen Bedeutung "Absichtliches Ignorieren von Alternativen" ... nicht in seiner (leider immer wieder auftauchenden) pejorativen Form "Du bist blöd und ich schlau" !)

    Andersherum wird IMO ein Schuh draus: Wer "Verschlüsseln" will, sollte sich auch bei asymmetrischen Verfahren umsehen ... aber nicht ausschließlich.

    Gruß,

    Simon2.



  • das problem bei asymmetrischen verfahren ist ja ganz eindeutig dass sie zu langsam sind. wenn er aber einen text verschlüsselen möchte ihn übers netz übertragen(sicher) und dort wieder entschlüsseln will dann ist das wohl die deutlich bessere variante, bzw in ähnlicher kombination wie das pgp tut: erst den schlüssel für ein symmetrisches verfahren mit zb rsa verschlüsseln den übertragen und mit dem schlüssel den eigentlichen text verschlüsseln und den mitübertragen. wenn er dem schlüsselaustausch problem aus dem weg gehen will geht der weg unweigerlich über asymmetrische verschlüsselung. ansonsten tuts auch die symmetrische. one-time-pad ist absolut nicht am einfachsten anzuwenden für seinen fall, denn er muss den schlüssel ja irgendwie JEDES MAL (one-time eben) für jeden text wieder analog damit sich zum andren pc transportieren.

    unterschiedliche sichtweisen=endlose diskussion und am ende macht beides (keinen) sinn also is des thema für mich hiermit beendet.

    gruß, Hunger



  • DaHunger schrieb:

    ...unterschiedliche sichtweisen...

    Mal abgesehen davon, dass ich nicht wüsste, wann man überhaupt duskutieren sollte, wenn nicht dann, wenn man unterschiedliche Sichtweisen hat:
    Deiner Darstellung stimme ich voll und ganz zu !

    Ich habe mich lediglich gegen die Vereinfachung gewandt und darauf hinweisen wollen, dass für Verschlüsselung (so gut wie) immer (auch) symmetrische Verfahren verwendet werden.
    Deswegen würde ich sagen: Einigkeit=>Diskussion beendet.

    Gruß,

    Simon2.


Anmelden zum Antworten