Announcement

Collapse
No announcement yet.

Wie funktionieren Verschlüsselungs-Algorithmen ala Blowfish?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie funktionieren Verschlüsselungs-Algorithmen ala Blowfish?

    Hi,

    Möglicherweise ist meine Frage ziemlich blöd aber..
    ich würde gerne einen Crypter coden und wüsste dazu gern wie diverse Verschlüsselungs-Algorithmen ala Blowfish und wie sie alle heißen funktionieren. Da wird doch aus einem Passwort das 5 Bytes lang ist ein Schlüssel von bis zu 512 Bytes erzeugt.

    Motzi

  • #2
    Hi

    Nein ! Man expandiert z.b. 5 Bytes auf eine größere länge. Die effektive Sicherheit besteht aber trotzdem nur aus 5 bytes !!

    Zu erklären ist das so:
    Stelle Dir einen Algortihmus vor der aus 5 Bytes eine ganze Anzahl von Bytes produzieren kann. Das gleiche macht z.B. Random(). RandSeed wird mit 4 Bytes gefüllt und jeder nachfolgende Aufruf produziert ein Byte. ABER, bei dem Design von Krypto"Machinen" geht man gundsätzlich von der Annahme aus das dem "Angreifer" der Algortihmus/Bauplan bekannt ist und somit vollständig analysiert werden kann. Im beispiel von Random()/RandSeed besteht also die effektive Sicherheit NUR aus den 4 Bytes in RandSeed. Zusätzlich läßt sich aus der Folge der mit Random() erzeugten Zufallszahlen auf das "Passwort" in RandSeed zurückrechnen. D.h. eine mit random() erzeugte Zufallsfolge IST unsicher da der zugrundeliegende Random() Algo. eben UNSICHER ist.

    D.h. KEIN Verschlüsselungsalgo erzeugt aus z.B. 5 bytes 512 Bytes. Du musst das falsch verstanden haben. Blowfish KANN 448 BIT -> 56 Byte lange Schlüssel nutzen, mehr nicht. Stelle Dir eine "Blowfish"-Druckmachine vor die 448 Schalter hat. Je nachdem wie die Schalter nun gedrückt sind wird jedesmal ein anders Druckmuster aus Papier gedruckt. Das Papier stellt nun Deine Message dar (Plaintext/Klartext) und das Druckmuster wird mit dieser Message verknüpft. Das bedruckte papier, bzw. die verschl. Message heist dann (Ciphertext).

    Willst Du den CipherText wieder entschlüsseln musst Du die richtige Kombination der 448 Schalter drücken um richtig enschlüsseln zu können. Würdest Du die 448 Bits durch einen Algo wie random() aus 32Bits berechnen so wäre die Sicherheit STARK reduziert. Die 32Bits lassen nur ca. 10^10 Kombinationen zu, 448Bit sind ca. 10^135 Kombinationen.<br>

    2^32 = 4.294.967.296<br>
    2^128 = 340.282.366.920.938.463.463.374.607.431.768.211.45 6<br>
    2^448 = 726.838.724.295.606.890.549.323.807.888.004.534.35 3.641.360.687.318.060.281.490.199.180.639.288.113. 397.923.326.191.050.713.763.565.560.762.521.606.26 6.177.933.534.601.628.614.656<br>


    gruß Hage

    Comment


    • #3
      Hi

      Es gibt aber Algortihmen die aus 5 Bytes bzw. beliebig langem Input eine immer gleichlange Folgen von bytes berechnen. Ich meine damit die "secure Hash" funktionen. Das sind Algortihmen die sozusagen einen kurzen "Fingerabdruck" beliebiger Daten erzeugen. Interessant ist nun das ausgehend von einem Fingerabdruck NICHT mehr aus den Input zurückgerechnet werden kann, bzw. es lässt sich aufgrund den Fingerabdrucks (gen. Digest) KEINERLEI Aussage treffen zu wem/was dieser gehört. Man kann nun einen solchen Hash nutzen um aus einem 5 Bytes Passwort ein 128/256 Bit = 16/32 Bytes Fingerabdruck des Passwortes zu erzeugen. Da eine Hashfunktion IMMER zu den Daten einen eindeutigen Fingerabdruck berechnet, kann auch nur das gleiche 5 Byte Passwort den gleichen Fingerabdruck berechnen. Die Nutzung einer solchen Funktion um ein Userpasswort in ein Sessionpasswort umzuwandeln ist sinnvoll, macht aber den anschließenden Cipher NICHT sicherer ! Wird das UserPasswort mit einem Salt (Zufallswert) versehen und davon mit einem Hash das Sessionpasswort erzeugt wird die Sicherheit weiter erhöht. Man muß dann aber den Salt an die verschl. Daten anhängen, um korrekt entschlüsseln zu können.

      Gruß Hage

      Comment


      • #4
        Hi Manuel,

        eine Menge Antworten findest du auf der Website von Bruce Schneier "Counterpane.com" - Bruce ist u.a. der Entwickler des Blow-Fish-Algorithmus. Allerdings sind die Algorithmen in der einschlägigen Literatur meistens in C/C++ verfasst. Aber: ein sehr sicheres und anerkanntes Verfahren ist RC4 von Ron Rivest. Der RC4-Algorithmus kann leichter implementiert werden. Anm: Der RC4-Algorithmus wurde von der Firma RSA Inc. nie geschützt aber auch nie freigegeben. Wenn du diesen Algo benutzt, so solltest du ihn dringend umbenennen!! Anbei ein RC4-"ähnlicher" Source in Delphi (ErCVier):
        NS: Der Algo ist nicht optimiert und leicht leserlich!

        Procedure TForm1.ErCVier_De_Encryption(var strText: String; var strKennwort: String);
        //////////////////////////////////////////////////////////////////////// Funktion: RC4-"ähnliche" Verschlüsselung in Delphi
        // Ich hoffe gut verständlich, da ohne Zeiger etc.
        // Sicherheit: Sehr hoch
        //////////////////////////////////////////////////////////////////////
        var KeyBox: Array[0..255] of Byte;
        var SBox: Array[0..255] of Byte;
        var i, J, KeyPos, RC4I, RC4J, RC4Next, RC4T,
        KeyLen, n: integer;

        begin
        // Die Arrays SBox() und KeyBox initialsieren:
        KeyLen := Length(strKennwort);
        KeyPos := 0;
        For i := 0 To 255 do begin
        inc(KeyPos);
        If KeyPos >= KeyLen Then KeyPos := 1;
        SBox[i] := i;
        KeyBox[KeyPos - 1] := ord(strKennwort[KeyPos]);
        end;
        // Das Kennwort aus dem Hauptspeicher entfernen:
        strKennwort := '';
        // SBox- und KeyBox-Permutation
        For i := 0 To 255 do begin
        J := (J + SBox[i] + KeyBox[i]) Mod 256;
        // SBoxen tauschen - kannst du natürlich effizienter codieren!
        n := SBox[i];
        SBox[i] := SBox[J];
        SBox[J] := n;
        // Ende Sboxen tauschen (benutze besser swap o.ä)
        end;
        // Variablen initialisieren:
        RC4I := 0;
        RC4J := 0;
        RC4T := 0;
        // Verschlüsselung bzw. Etschlüsselung:
        For n := 1 To Length(strText) do begin
        RC4I := (RC4I + 1) Mod 256;
        RC4J := (RC4J + SBox[RC4I]) Mod 256;
        // SBoxen tauschen - kannst du natürlich effizienter codieren!
        RC4T := SBox[RC4I];
        SBox[RC4I] := SBox[RC4J];
        SBox[RC4J] := RC4T;
        // Ende SBoxen tauschen (benutze besser swap o.ä)
        RC4T := (SBox[RC4I] + SBox[RC4J]) Mod 256;
        RC4Next := SBox[RC4T];
        // Transposition:
        strText[n] := Chr(ord(strText[n]) Xor RC4Next);
        end;
        end;

        procedure TForm1.Button1Click(Sender: TObject);
        var
        EText, EKennwort: String;
        begin
        // Test der Ver- bzw. Entschlüsselung in ErCVier
        EText := 'Ein Test!';
        EKennwort := 'geheim';
        ErCVier_De_EnCryption(EText, EKennwort);
        ShowMessage(EText);
        end;

        Gruss - Joachi

        Comment


        • #5
          Hi

          Es gibt aber auch viele gute Implemtierungen dieser Algorithmen in PASCAL. Als Beispiel enthält das "Delphi Encryption Compendium"

          <pre>

          23 Hash: MD4, MD5, SHA (other Name SHS), SHA1,
          RipeMD128, RipeMD160, RipeMD256, RipeMD320,
          Haval (128, 160, 192, 224, 256) with Rounds,
          Snefru, Square, Tiger,
          Sapphire II (128, 160, 192, 224, 256, 288, 320)

          40 Cipher: Gost, Cast128, Cast256, Blowfish, IDEA
          Mars, Misty 1, RC2, RC4, RC5, RC6, FROG, Rijndael,
          SAFER, SAFER-K40, SAFER-SK40,SAFER-K64, SAFER-SK64,
          SAFER-K128, SAFER-SK128, TEA, TEAN, Skipjack, SCOP,
          Q128, 3Way, Twofish, Shark, Square, Single DES,
          Double DES, Triple DES, Double DES16, Triple DES16,
          TripleDES24, DESX, NewDES, Diamond II,
          Diamond II Lite, Sapphire II

          </pre>

          Ansonsten sei zu erwähnen das der Blowfish Algo. ein Blockcipher ist und RC4 (auch PC4 genannt ein Streamcipher (Stromverschlüsselung). Im allgemeinen werden solche "weniger" komplexen Streamcipher wie RC4 als "unsicherer" wie Blockcipher eingeschätzt !

          Gruß Hage

          Comment


          • #6
            Grüss dich, Hagen,

            stimmt, das von dir entwickelte Compendium ist sehr gut und umfassend.
            Auch die Speed wurde von dir mittels Inline-Assembler hervorragend forciert.
            Einer meiner favorisierten Algorithmen bleibt (nach IDEA) der Stromchiffrierer RC4. Nicht weil er sehr leicht zu implementieren und schnell ist, sondern weil mir (bei vernünftig gewählten Passwörtern und einer 2048 Bit Schlüssellänge) noch kein Brechen des Chiffrats oder Teile davon bekannt sind. - Und der Algorithmus ist ja bekanntlich nun einige Jahre alt und (hoffentlich) umfangreich kryptoanalisiert worden? Wenn du hier andere Informationen hast,
            bin ich dir für eine Info sehr dankbar.
            Gruss, Joachi

            Comment


            • #7
              Hi Joachim

              Danke, nun haste es ja jedem gesagt. Ich wollte eigentlich nicht direkt Eigenwerbung machen.

              Nun, ich traue RC4 NICHT, wäre er der Stein der Weisen hätte RSA Inc. bzw. Jon Rivest ihn vielmehr geschützt und wie bei RSA Inc. üblich hohe Lizenzen verlangt. Mir schien aber die Empörung Rivest's über die "illegale" Verbreitung ein kleines bischen "getürkt", geschickte Werbung ? vielleicht sogar dahinter der NSA. Beachte auch das einem führendem Sicherheitsunternehmen ein Firmenkapital direkt gestohlen werden konnte, vielleicht am Tag der Offenen Tür ?? hm, hm, aha.
              RC4 wurde übrigens garnicht so häufig analysiert, warum auch ? Die Crypto-Gurus haben besseres zu tun als RSA Inc. unter die Arme zu greifen, und dann noch kostenlose Werbung für RSA mit dem guten Namen des Crypto-Gurus ? neee.
              2048 Bit Schlüssellänge hört sich viel an, ABER es ist ein StreamCipher und der arbeite so als würde man ein unendlich langes pseudo-Passwort generieren und es einfach XOR verknüpfen mit den daten ! Beachte auch das die meistgebrochenen Cipher der Geschichte eben Stromverschlüsselungen SIND. Nein, ich meine BlockCipher sind komplexer und sicherer. IDEA ist ne gute Wahl, aber lizenzpflichtig in kommerziellen Anwendungen.
              Ab 128Bit Schlüsseln wird eine Brute Force Attacke "heutzutage", aus Erdgeschichtlicher Sicht, sowieso unpraktikabel. Um so wichtiger das der Algo. neueren Verfahren wie differentieller Kryptoanalyse standhält. Nun die ersten Cipher die mit solchen Methoden gebrochen wurden waren Stream-Cipher ! Erst aus dieser Erkenntniss wurden die Block Verschlüsselungen entwickelt. Zudem wird RC4 von Netscape/MSIE etc verwendet. Also ca 99% aller Browser nutzen RC4. Bei der Masse ist RC4 ein wirklich lohnendes Ziel für diverse "....Sekten".
              Ansonsten ist RC4 wirklich ein kleiner, feiner und übersichtlicher Code, leicht zu implementieren, geradezu prädistiniert das jeder ihn schnell verbreiten kann...

              Gruß Hage

              Comment


              • #8
                Grüss dich, Hagen,

                du hast Recht - diese Sachverhalte sollte man sich immer wieder in
                Erinnerung rufen! Nun, mit der Zeit wird man halt träge und macht es
                sich (aus Zeitgründen, Faulheit?) zu einfach.
                Da niemand weiss, inwieweit die Technologie der NSA o.ä. fort-
                geschritten ist, sollte man praktischerweise immer den z.Z. besten Algo einsetzen - auch wenn´s mehr Mühe macht.
                Gruss, Joachi

                Comment


                • #9
                  Hi,

                  erstmal danke für eure zahlreichen Antworten. Werd mir das alles mal
                  anschauen.<BR>
                  Aber eines wüsste ich trotzdem noch gern: Was muss ich beachten bzw.
                  welche Schwierigkeiten gibt es bei der Entwicklung eines eigenen
                  Crypt-Algos?

                  Motz

                  Comment


                  • #10
                    Hi Manuel

                    Schwierige Frage. Grundsätzlich gibt es keine exakte Theorien, nur Axiome. Als allererstes kommst Du um einschlägige Fachliteratur nicht herum. Da wird es aber echt dünn, und die wirklich guten Bücher/Artikel sind in englisch. Es gibt auf der Erde nur eine Handvoll von Crypto-Gurus die solche Algorithmen designen. Meistens sind diese Personen Professoren/Doktoren die an Universitäten arbeiten. D.h. deren Fachwissen/Manpower (Studenten) und Mainpower (Rechner/Wissen/Infos) wirst Du nicht so schnell erlangen können. Grundsätzlich bin ich also der Meinung es ist sicherer und effektiver sich 2-3 anerkannte Algorithmen dieser Gurus rauszupicken und leicht abzuändern/anzupassen. Am einfachsten und im ersten Moment am sichersten dürften StreamCipher basierend auf guten Pseudo-Zufallsdaten sein. Damit würde ich anfangen. Aber diese Stromverschlüsselungen sind diejenigen Cipher die durch mathematisch komplexere Verfahren am ehesten "geknackt" werden können, aber als Algo. insich am sichersten sind. Blockcipher sind zwar sicherer, aber auch schwerer zu designen. D.h. die Wahrscheinlichkeit das ein algorithmischer Fehler entsteht ist wesentlich höher. Das führt dazu das auf den ersten Blick ein Blockcipher sicher erscheint es aber eine spezialisierte Attacke existiert die den Algo. wesentlich schneller bricht als einen halbwegs guter Streamcipher. Die Gefahr das ein Blockcipher absolut UNSICHER ist, aufgrund eines unbekannten Desitgnfehlers, ist also wesentlich größer.

                    Die größten Schwierigkeiten beim Design treten in der Beweisbarkeit der Sicherheit auf. Man kann nicht einfach alle Möglichkeiten durchtesten um festzustellen ob er sicher ist. Wäre ja auch Schwachsinn da die schier unwahrscheinlich hohe Kombinationsvielfalt ja ein Sicherheitskriterium darstellt. Man testet also immer stark abgeschwächte Versionen des Algos auf Angriffsmöglichkeiten. Falls eine solche gefunden wird, berechnet man proportional den Worstcase mit der starken Version. Nun, stellt sich aber hier schon die Frage ob die stark abgeschwächte Version auch eine echte "Subgruppe" der starken Version ist, oder ob sich ein eigenständiger, nicht vergleichbarer Algo, gebildet hat. Auch das muß bewiesen werden !

                    Die meisten, nicht professionellen, Cipher argumentieren aufbauend auf irgendwelche Wahrscheinlichkeitsrechnungen. Da liegt aber eben auch ein großes Risiko, da die Wahrscheinlichkeit das in Zukunft ein Problem durch eine verbesserte Methode leichter/schneller lösbar wird eben 100% ist, und somit die unendlich kleine Wahrscheinlickkeit einen Cipher zu brechen schlagartig auf 100% ansteigen kann. So passiert mit den StreamCiphern und der neuen Methode der differntiellen Kryptoanalyse.

                    Gruß Hagen

                    PS: Du kannst Kryptosicherheit immer auf einen Punkt bringen: <b>Vertrauen</b&gt

                    Comment


                    • #11
                      Du kannst einem ja richtig Mut machen.. :-)<BR>
                      Na egal.. ich würd mich trotzdem gern ein bisschen eingehender mit
                      diesem Thema beschäftigen.<BR>
                      Welche Lektüre wäre denn da empfehlenswert? (egal ob Englisch oder
                      Deutsch wobei ich das natürlich vorziehen würde) Es sollten aber nicht
                      allzu viele Vorkenntnise vorrausgesetzt werden..

                      Danke, Motz

                      Comment


                      • #12
                        Hi

                        Ein absolutes MUSS:
                        <li>Angewendete Kryptographie, Bruce Schneier, ISBN3-89319-854-7<br>
                        <li>Handbook of Applied Cryptography, Alfred J. Menezes, ISBN0-8493-8523-7<br>
                        <li>Einführung in die Kryptographie, Buchmann, ISBN3-540-66059-3<br>

                        Mit dem ersten würde ich anfangen, also sehr gut für Anfänger. Macht aber echt heiß auf mehr. Besonders das Drum Herum ist gut, also ein bischen Wahrscheinlichkeiten angefangen von der Wahrscheinlichkeit vom Blitz getroffen zu werden bis hin zu politischen Aspekten und der mit Kryptographie doch sehr eng verpflochtenen Ängsten/Staatspolitik.
                        Das zweite ist dann wirklich schon tiefer, aber genau das richtige um sich Tips und Tricks abzuschauen. Besonders die angewendtete Mathematik, die Zahlentheorie und Algorithmen sind wertvoll. Das letzte Buch dann zur Verfestigung der "englishen" Theorie im "deutschen" denken . Buchmann befasst sich wie ein "Mathe" Lehrer von A-Z mit allem was nötig ist. Das Lerntempo bestimmst Du. Alle Werke sind gute Lehr- und Nachschlagebücher.

                        Gruß Hage

                        Comment


                        • #13
                          Hallo :-)<br>
                          Ich habe die Units von Hagen Reddmans "Delphi Encryption Compendium". Ich möchte nun von dem String "ABCDE" den SHA Wert haben.<br>
                          Wie bewerkstellige ich das bitte ?<br>
                          Herzlichen Dank und schöne Grüße,<br>
                          Zuletzt editiert von Gast_1; 31.03.2010, 13:12.

                          Comment


                          • #14
                            Hi

                            ResultAsHEXString := THash_SHA.CalcString('ABCDE', nil, fmtHEX);

                            Gruß Hage

                            Comment


                            • #15
                              Danke, Hagen Reddman <br>
                              <br>
                              Schöne Grüße ...
                              Zuletzt editiert von Gast_1; 31.03.2010, 13:12.

                              Comment

                              Working...
                              X