Verschlüsselung

Mir ist eine Frage aufgekommen.

  1. Wieso gibt es zu demselben Geheimschlüssel und demselben Klartext mehrere Geheimtexte, die alle zu demselben Klartext decrypted werden können? ( eigentliche Frage… )
  2. Ist dadurch das Verfahren sicherer oder unsicherer?
  3. Seien zwei Geheimtexte zu demselben Klartext bekannt ( qZgEo4fp+2RK6JpuqeOj1lxVeOULJECb und K5hd33jwIar5AtKHN43/ZA5zZuMyzRtk ), kann dann auf den Geheimschlüssel oder Klartext geschlossen werden?
  4. Sei zudem die Länge des Klartextes bekannt (8) und/oder seien die ersten 7 der 8 Buchstaben des Klartextes bekannt, kann dann auf den Geheimschlüssel oder Klartext geschlossen werden?
  5. Sei zudem das Verschlüsselungserfahren bekannt (Algorithm: PBEWithMD5AndTripleDES and Key obtention iterations: 1000), kann dann auf den Geheimschlüssel oder Klartext geschlossen werden? (Ja, wiederhole mich :frowning: ).
    ( 6) Was müsste bekannt sein, um auf den Geheimschlüssel oder Klartext zu schließen? )
  1. Wie soll das funktionieren? Die Gleichung c = E_k(m) [c=Ciphertext, E_k = Algo mit Key k, m = Plaintext] ist doch eindeutig bzw muss eindeutig sein? Wäre c = c_1 | c_2 | c_3 ist der Algorithmus kaputt. Wie wärs mit konkreten Beispielen?
    2,3,4 s.o. Klingt komisch die Aussage

Allgemein gibt es verschiedene Schwächen in Algorithmen. Die Frage, “Was müsste bekannt sein” ist abhängig vom Algorithmus. Block-Chain-Algorithmen haben ihre Schwächen, Stromchiffren genauso aber eben andere.

1 Like

Danke für die Antwort. Ich hab mich gewundert, das überhaupt jemand antwortet…
Also, 1) ist die eigentliche Frage, ich hab mich gewundert, wieso es mehrere Geheimtexte gibt. 2) bis 6) hab ich mir i-wie dazugedichtet.
Auf stackoverflow hab ich jetzt zu dem Verfahren gelesen,

  1. ihr benötigt “Unlimited Strength” Policy, wenn ihr das ausprobieren möchtet,
  2. der Schlüssel wird als Seed für einen Initialization Vector (IV) benutzt, (~)
  3. deswegen gibt es mehrere Geheimtexte?,
  4. die effektive Schlüssellänge beträgt bei PBEWithMD5AndTripleDES “nur” 112 bits…
    Frage 7): Ist das so richtig erklärt (ist das Verfahren dann ein modernes starkes Verfahren)? Frage 8): Wie viele Geheimtexte gibt es zu demselben Schlüssel und demselben Klartext?

Zudem stand auf Wikipedia zu TripleDES, dass mal ein Angriff möglich war/ist, wenn der Klartext und Geheimtext bekannt ist… Ist das so?

Der Post ist so wirr, dass ein konkreter Kontext für mich nicht zu erkennen ist.

  1. es fehlt weiterhin ein Beispiel, Link auf SO würde ja reichen.

Ab dann wird wieder diese obskure Aussage mit mehreren möglichen Ciphertexten als Basis für weitere obskure Aussagen genommen.

  1. Ich vermute du redest von der Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy. Warum schreibst du das nicht?.. ja ich weiß die Antwort
  2. ja
  3. Es gibt mehrere Geheimtexte, weil der IV randomisiert erzeugt wird. Ist vll. das die Frage? Der IV ist dabei kein Geheimnis

Sorry, normalerweise mache ich keine Doppelposts.
Schade, dass ihr mir nicht glaubt:

import java.security.SecureRandom;
import org.jasypt.util.password.StrongPasswordEncryptor;
import org.jasypt.util.text.StrongTextEncryptor;

/**
 * @author
 */
public class EncryptionExample {
    public static void main(String[] args) {
        String pw = "dasGeheimePassworz";

        SecureRandom sr = new SecureRandom();
        String pw1 = "";
        for (int i = 0; i < 20; i++) {
            pw1 += (char) (sr.nextInt('z' - 'a' + 1) + 'a');
        }
        System.out.println("pw1 = " + pw1);

        StrongPasswordEncryptor spe = new StrongPasswordEncryptor();
        String pw2 = spe.encryptPassword(pw);
        System.out.println("pw2 = " + pw2);
        if (spe.checkPassword(pw, pw2)) {
            System.out.println("hallo");
        }

        StrongTextEncryptor ste1 = new StrongTextEncryptor();
        ste1.setPassword(pw);
        String e1 = ste1.encrypt("Testtext");
        System.out.println("text = " + e1);

        StrongTextEncryptor ste2 = new StrongTextEncryptor();
        ste2.setPassword(pw);
        String e2 = ste2.encrypt("Testtext");
        System.out.println("text = " + e2);

        System.out.println(e1.equals(e2));
        StrongTextEncryptor ste3 = new StrongTextEncryptor(); // genausogut ste1
        // oder ste2 möglich
        ste3.setPassword(pw);
        System.out.println(ste3.decrypt(e1));
        System.out.println(ste3.decrypt(e2));
    }
}

Bitte seht euch die Ausgabe an, sie könnte z. B. sein:

pw1 = Buchstabensalat
pw2 = langerBuchstabensalat
hallo
text = xyz...
text = cba...
false
Testtext
Testtext

Hinzufügen möchte ich noch, dass ich nirgendwo hoffentlich ein sensibles… pw… mitkopiert hab.


-> Bitte erklärt mir das Phänomen mehrerer (<- schweres Wort^^) Geheimtexte.<-

Hat @timbeau doch gemacht:

Der erste Block wird dabei der IV sein. Da der IV nach der Entschlüsselung nicht mehr benötigt wird, wird er verworfen.

Aber ich hab das noch nicht ganz verstanden…

  1. Wieso hat man sich bei Jasypt dafür entschieden, dieses Verfahren zu wählen?
  2. Ist es „stark“?
  3. Durch zwei unterschiedliche Quellen hab ich jetzt gelesen, die effektive Schlüssellänge beträgt 112 bits bei TripleDES.
  4. Ist PBE und „Key obtention iterations: 1000“ nur für „schwache“ Passwörter gedacht, ändert sich etwas an der effektiven Schlüssellänge?
  5. 112 bits… Klartext (Testtext) und zwei Geheimtexte sind bekannt, könnte ich/du/er sie es jetzt einen Geheimschlüssel berechnen?
  6. 112 bits… ist nur so „mittel“? 64 bits würd glaub ich mein Computer auch packen oder?

Sonst bedanke ich mich schon mal für Antwort, das Thema ist fast [done]. :wink:

Hast du dir vl irgendwann mal den wikipedia-artikel zum Thema Initalisierungsvektor durchgelesen?

vl verstehst du es dann.

Kryptographie ist auf jeden Fall NICHT einfach. Sonst gäbe es nicht einige wenige Algorithmen, die weltweit verwendet werden. Und jedes Produkt, dass sein eigenes Süppchen kocht, quasi per default unsicher ist.

  1. Ich finde solche Fragen sind für ein Uni-Niveau zu simpel. Das aknn man bestimmt herausfinden indem man danach sucht. Für irgendein Verfahren muss man sich entscheiden, vll. wars aber auch nur Würfeln. 1) AES, 2) Swordfish, 3) Cesar…
  2. …s.o.
  3. Der NIST, der für einige Standards weltweit als Richtlinie zählt (gleiches hat das BSI auch), zählt Triple DES atm glaube ich noch zu den starken Algorithmen, das wird sich aber demnächst ändern. SWEET32 ist hier das STichwort. Nach PCI DSS ist Triple DES raus.
    Alle anderen Fragen lassen sich ebenfalls durch Eigeninitiative präzisieren.