8 bit Blöcke neu anordnen



  • Hallo,

    Ich habe bin gerade dabei einen kryptopgraphischen Algorithmus zu schreiben und bin beinahe fertig.
    Ich habe ein letztes Problem.
    Ich möchte einen 128 bit Block in 16 8 Bit Blöcke zerlegen, diese neu anordnen und zwar so, dass es wieder umkehrbar ist.
    Das Ganze sollte wenn möglich schlüsselbasiert sein.

    Hat vielleicht jemand eine Idee? Danke


  • Mod

    Die ersten vier Bit des Schlüssels zerlegst du in eine Zahl 0 bis 15 und eine Zahl 0 bis 0. Die erste Zahl ist die Position an die der erste Block gesetzt wird (16 Möglichkeiten), die zweite Zahl ist die Position an die ganz am Ende der letzte Block gesetzt wird (da gibt es nur noch eine Möglichkeit, weil 15 Positionen schon besetzt sind).

    Die nächsten vier Bit des Schlüssels zerlegst du in eine Zahl 0 bis 14 und eine Zahl 0 bis 1. Die erste Zahl ist die Position an die der zweite Block gesetzt wird (noch 15 Möglichkeiten, da der erste Block schon gesetzt wurde), die zweite Zahl ist die Position an die am Ende der vorletzte Block gesetzt wird (zwei Möglichkeiten, weil 14 Positionen schon besetzt sind).

    Und so weiter.

    Rückgängig machen geht auf die gleiche Weise, du musst eben gucken, von welcher Position der erste Block zu holen ist, usw.

    Sicherheit des Verfahrens: 8*4 = 32 Bit Schlüsselraum. Plus jede Menge andere Angriffsverfahren, da dieses Verfahren nichts verschleiert, sondern nur umordnet. Also insgesamt ungefähr so schwer zu lösen, wie ein einfaches Rätsel aus der Sonntagszeitung. Das liegt auch nicht an meinem speziellen Verfahren, sondern an der Idee an sich. Mein Vorschlag holt bereits die maximalen 32 Bit aus der Idee heraus, die herauszuholen sind.



  • Moba schrieb:

    Hallo,

    Ich habe bin gerade dabei einen kryptopgraphischen Algorithmus zu schreiben und bin beinahe fertig.
    Ich habe ein letztes Problem.
    Ich möchte einen 128 bit Block in 16 8 Bit Blöcke zerlegen, diese neu anordnen und zwar so, dass es wieder umkehrbar ist.
    Das Ganze sollte wenn möglich schlüsselbasiert sein.

    Hat vielleicht jemand eine Idee? Danke

    Andere Alternative:

    Nimm 2 (kryptografische) Pseudo-Zufallsgeneratoren. Den einen initialisierst du mit einem Hash (SHA1 oder so) des Keys und den anderen mit einem anderen Wert (oder dem Hash eines zweiten Keys). Beide Zufallsgeneratoren erzeugen dann zusammen ein Wertepärchen die du als Indizes in dein 16*8-Array zum Vertauschen verwenden kannst. Zum Entschlüsseln machst du die Indexberechnung gleich, tauscht aber in die andere Richtung. Das Verfahren ist nach Belieben ausbaubar bzw. kaskadierbar und die Sicherheit ist abhängig von der Schlüssellänge, dem Hash-Algorithmus und der Qualität der Zufallsgeneratoren.



  • Nachtrag: zum Testen deiner Verschlüsselung kannst du das hier nehmen: https://www.cryptool.org/en/cryptool1

    ^^ Dieses Tool kann den Output deiner Verschlüsselung bewerten, z.B. wie gut die Bits verwirbelt sind. 🙂



  • Andromeda schrieb:

    [...}Den einen initialisierst du mit einem Hash (SHA1 oder so) [...]
    Das Verfahren ist nach Belieben ausbaubar bzw. kaskadierbar und die Sicherheit ist abhängig von der Schlüssellänge, dem Hash-Algorithmus und der Qualität der Zufallsgeneratoren.

    Dann würde ich auf jeden Fall von SHA1 abraten 😃



  • Schau dir doch z.B. mal Rotate in der Rijndael Cipher (AES) an.



  • Vielen Dank für die Antworten. Habe inzwischen eine Methode gefunden und werde den Algorithmus in einem eigenen Thread auch posten. Liebe Grüsse



  • SeppJ schrieb:

    Die ersten vier Bit des Schlüssels zerlegst du in eine Zahl 0 bis 15 und eine Zahl 0 bis 0. Die erste Zahl ist die Position an die der erste Block gesetzt wird (16 Möglichkeiten), die zweite Zahl ist die Position an die ganz am Ende der letzte Block gesetzt wird (da gibt es nur noch eine Möglichkeit, weil 15 Positionen schon besetzt sind).

    Die nächsten vier Bit des Schlüssels zerlegst du in eine Zahl 0 bis 14 und eine Zahl 0 bis 1. Die erste Zahl ist die Position an die der zweite Block gesetzt wird (noch 15 Möglichkeiten, da der erste Block schon gesetzt wurde), die zweite Zahl ist die Position an die am Ende der vorletzte Block gesetzt wird (zwei Möglichkeiten, weil 14 Positionen schon besetzt sind).

    Und so weiter.

    Rückgängig machen geht auf die gleiche Weise, du musst eben gucken, von welcher Position der erste Block zu holen ist, usw.

    Sicherheit des Verfahrens: 8*4 = 32 Bit Schlüsselraum. Plus jede Menge andere Angriffsverfahren, da dieses Verfahren nichts verschleiert, sondern nur umordnet. Also insgesamt ungefähr so schwer zu lösen, wie ein einfaches Rätsel aus der Sonntagszeitung. Das liegt auch nicht an meinem speziellen Verfahren, sondern an der Idee an sich. Mein Vorschlag holt bereits die maximalen 32 Bit aus der Idee heraus, die herauszuholen sind.

    Wo steht, dass sein Schlüssel nur 32 Bit lang ist? Es gibt 16! Möglichkeiten, die 16 Bytes anzuordnen. 16! > 2^32.



  • Hellstorm schrieb:

    Andromeda schrieb:

    [...}Den einen initialisierst du mit einem Hash (SHA1 oder so) [...]
    Das Verfahren ist nach Belieben ausbaubar bzw. kaskadierbar und die Sicherheit ist abhängig von der Schlüssellänge, dem Hash-Algorithmus und der Qualität der Zufallsgeneratoren.

    Dann würde ich auf jeden Fall von SHA1 abraten 😃

    Weil man pro Sekunde 1 Million Hashes durchprobieren kann, oder wieso?


  • Mod

    Gregor schrieb:

    Wo steht, dass sein Schlüssel nur 32 Bit lang ist? Es gibt 16! Möglichkeiten, die 16 Bytes anzuordnen. 16! > 2^32.

    Nirgendwo. Aber ich kann nicht richtig rechnen. Du hast natürlich Recht.



  • Andromeda schrieb:

    Hellstorm schrieb:

    Andromeda schrieb:

    [...}Den einen initialisierst du mit einem Hash (SHA1 oder so) [...]
    Das Verfahren ist nach Belieben ausbaubar bzw. kaskadierbar und die Sicherheit ist abhängig von der Schlüssellänge, dem Hash-Algorithmus und der Qualität der Zufallsgeneratoren.

    Dann würde ich auf jeden Fall von SHA1 abraten 😃

    Weil man pro Sekunde 1 Million Hashes durchprobieren kann, oder wieso?

    Weil SHA1 gebrochen ist: Announcing the first SHA1 collision (Google Blog).



  • icarus2 schrieb:

    Andromeda schrieb:

    Hellstorm schrieb:

    Andromeda schrieb:

    [...}Den einen initialisierst du mit einem Hash (SHA1 oder so) [...]
    Das Verfahren ist nach Belieben ausbaubar bzw. kaskadierbar und die Sicherheit ist abhängig von der Schlüssellänge, dem Hash-Algorithmus und der Qualität der Zufallsgeneratoren.

    Dann würde ich auf jeden Fall von SHA1 abraten 😃

    Weil man pro Sekunde 1 Million Hashes durchprobieren kann, oder wieso?

    Weil SHA1 gebrochen ist: Announcing the first SHA1 collision (Google Blog).

    Vielen Dank! 👍


Log in to reply