Wie kann ich meine eigene Verschlüsselung programmieren?

11 Antworten

Wie die anderen schon geschrieben haben: Gar nicht.

Einfach weil du als Anfänger überhaupt nicht weißt, worauf es ankommt.

Es ist völlig unerheblich ob du deinen Algorithmus und Schlüssel geheim hältst, aber normalerweise wird jeder Kryptologe deine primitive Verschlüsselung knacken können.

Weißt du was ein "One-Time-Pad" ist? Das ist bislang die einzige mathematisch nachweisbar unknackbare Verschlüsselung, die darüber hinaus sogar noch sehr leicht mit ein paar Zeilen Code auch von Einsteigern implementiert werden kann.

Im Studium - genauer gesagt im Bereich "Kryptoanalyse" - haben wir allerdings zu Übungszwecken auch diverse One-Time-Pads geknackt. Das war möglich, weil die Implementierung schlechte Seeds oder schlechte Pseudozufallszahlengeneratoren genutzt hat.

Und genau das ist der Punkt: Selbst die stärkste Verschlüsselung ist leicht knackbar, wenn sie von einem ahnungslosen Einsteiger implementiert wird, der überhaupt keine Vorstellung davon hat, worauf es ankommt.

Grundsätzlich gibt es EINE ganz wichtige goldene Regel unter Softwareentwicklern: Entwickle NIEMALS deine eigene Verschlüsselung! Die einzigen, die sich nicht daran halten müssen, sind ausgebildete Kryptologen, aber 99% aller Softwareentwickler verfügen nicht über die notwendigen (mathematischen) Kenntnisse, um eine vernünftige Verschlüsselung selbstständig zu entwickeln.

Als Anfänger ist diese Aufgabe also um mehrere Faktoren zu hoch für dich. Deshalb nimm die anderen Antworten bitte ernst, die dir davon abraten, und tue sie nicht als unbegründet ab.

Verschlüsselungen entwickelt man nicht selbst. Auch nicht als Programmierprofi und erst recht nicht als Einsteiger. Punkt.

Egal was du auf deinem jetzigen Stand entwickelst, du kannst dir sicher sein, dass generische Entschlüsselungswerkzeuge - die jeder Kryptoanalytiker ständig nutzt - nur Bruchteile von Sekunden benötigen werden, um deine Verschlüsselungen zu knacken. Und zwar völlig unabhängig davon, ob der Algorithmus an sich bekannt ist, oder nicht.

Fazit: Auch wenn du das nicht hören willst ... vergiss es. Du wirst nicht mal ein One-Time-Pad zufriedenstellend sicher implementieren können. :)

Woher ich das weiß:Berufserfahrung

Seitenkanal  26.03.2019, 21:26

PS: Noch ein Buchtipp, der sich an Einsteiger ohne höhere Mathematikkenntnisse richtet:

https://www.amazon.de/Kryptografie-Verfahren-Protokolle-Infrastrukturen-iX/dp/3864903564/

Wenn du das gelesen hast, wirst du den Inhalt meiner und die Fehler in precursors Antwort verstehen! ;)

0
Seitenkanal  26.03.2019, 22:36
@precursor

Sag mal, willst du mich veräppeln?

Dass man sich irrt ist eine Sache, aber dann so borniert zu sein und sich jeglicher Bildung zu verweigern lässt tief blicken.

Meine Aussagen stammen nicht nur von mir, sondern von so ziemlich ALLEN Kryptologen, die du da draußen finden wirst.

Leih dir das verlinkte Buch wenigstens mal aus einer Bibliothek aus, bevor du dich hier noch weiter in Peinlichkeiten hinein reitest.

Ist ja nicht zu fassen ... keine Ahnung von der Materie aber verdammt viel davon. Krass.

PS: Und was soll der Kindergarten mit dem Screenshot? Mach erst mal dein Studium zu Ende, Jungchen ... ><

0
precursor  26.03.2019, 22:39
@Seitenkanal

Du spielst dich hier als Kenner und Profi auf.

Die Wahrheit ist und bleibt, dass du das nicht knacken kannst, so einfach ist das.

Da kannst du mit Wortspielereien ablenken soviel du willst.

Ich hätte sehr großen Respekt vor dir gehabt, wenn du die Größe besessen hättest zuzugeben, dass du das nicht knacken kannst.

Hinter deinen Worten steckt gar nichts !

0
Seitenkanal  26.03.2019, 23:13
@precursor

Hör mal du Leuchte, können und wollen ist ein großer Unterschied. Ich tue nichts, was du mir befiehlst.

Wenn ich dir befehle aus dem Fenster zu springen, tust du das auch nicht, und es ist kein Zeichen dafür, dass du es nicht könntest, wenn du wolltest. Soweit so klar? Prima!

Es ist jetzt nach 23:00 Uhr und ich werde jetzt bestimmt keine Zahlen von einem Screenshot abtippen um einem mir völlig Unbekannten Dinge zu beweisen, die in JEDEM Fachbuch stehen.

Sorry, aber so wichtig bist du mir dann doch nicht.

Mir geht es nur um den Fragensteller und die anderen Mitleser, die deine Ergüsse evtl. für bare Münze nehmen.

Also schreib doch bitte nicht so einen Stuss hier! Das ist ja wirklich peinlich, wenn du hier auf dem Gegenteil von dem beharrst, was jeder Student im entsprechenden Fach an einer Uni lernt.

Genauso könntest du behaupten, die Erde sei flach, und ich solle dir doch das Gegenteil beweisen ... dir ist schon klar, dass ich so einen Zirkus nicht mitmachen werde, oder?

Schönen Abend noch, und bilde dich gefälligst mal ein bisschen auf dem Gebiet der Kryptoanalyse. Allein Wikipedia wäre schon ein Anfang, falls dich das nicht überfordert ...

0
precursor  26.03.2019, 23:15
@Seitenkanal

Ablenkungen und faule Ausreden um die Tatsache zu verschleiern, dass du das nicht knacken kannst.

1
Seitenkanal  26.03.2019, 23:22
@precursor

Ablenkungen und faule Ausreden um die Tatsache zu verschleiern, dass du nicht Selbstmord begehen kannst.

Passt genauso gut, stimmts? Vorausgesetzt, man ignoriert deinen freien Willen, so wie du meinen ignorierst. ;)

Aber ursprünglich ging es hier mal um Kryptografie bzw. Kryptoanalyse, wozu du ja offensichtlich nichts beizutragen hast.

Gute Nacht! Du bist mir ehrlich gesagt zu primitiv, bzw. deine Äußerungen. ><

0
RIDDICC  20.12.2019, 12:04
  1. wie soll man n One-Time-Pad ungut implementieren?
  2. zur Not nimmt man irgendn physikalisches Phänomen (Radioaktivität (gibt ja genug Zwischenlager), Rauschen an nem pn-Übergang)...
  3. aber auch das heutige Linux /dev/urandom sollte hinreichend gut sein... wär na klar ohne Beweis...
  4. und das Ersetzen von bekannten Teilen des Klartextes kann man auch leicht umgehen...
  5. ich wüsste ja gern, was der Zoll macht, wenn da jemand aus Thailand einreisend eine 2TB SSD mit angeblichem nächtlichem beruhigenden Meeresrauschen durch den Zoll tragen will... wahrscheinlich nix... :) da hilft dann nur noch der beherzte Gummischlauch-Einsatz...
0

Du wandelst Buchstaben in Zahlen um und machst dann etwas mit den Zahlen z.b. alle um 2 stellen nach rechts schieben und machst dann wieder buchstaben drauß


matmatmat  26.03.2019, 08:15

Ja, kein schlechter Einstieg, dann ist man was verschlüsseln angeht bei dem Stand, den wir hatten bevor die Römer für ihr Militär Nachrichten verschlüsselt haben. :)

2
Kaen011  26.03.2019, 13:35
@matmatmat

Ja, es ging hier wie ich vermute ja nur um die Grundlagen. Man kann mit den Zahlen natürlich wesentlich komplexere Dinge anstellen

1
matmatmat  26.03.2019, 13:58
@Kaen011

Jup, wenn sich nach jedem Buchstaben das Alphabet ändert sind wir schon im 2. Weltkrieg angekommen :)

0
Kaen011  26.03.2019, 14:07
@matmatmat

Oder wir Potenzieren den Buchstaben und Multiplizieren ihn dann mit dem Produkt zweier Primzahlen schon sind wir in der Nachkriegszeit :-)

2
  1. einfach so...
  2. macht bestimmt Spaß...
  3. und schlimmer als son NSA-verseuchter Schrott ohne die Spur eines Sicherheits-Beweises kann es auch nicht werden...
  4. Bsp.: dass Primfaktorzerlegung wirklich schwierig ist, kann niemand öffentlich beweisen... diejenigen, die es könnten, haben alle ganz komischen gesellschaftlichen Umgang...
  5. ich würd empfehlen, mit One-Time-Pad anzufangen... falls man auch verhindern will, dass die bekannten Teile der Nachricht unbemerkt verfälscht werden, kann man immer zwei One-Time-Bytes zur Verschlüsselung eines Klartext-Bits verwenden... das müsste dann aber wirklich sicher sein... dabei müsste man na klar ein One-Time-Byte überspringen, wenn das nächste One-Time-Byte gleich ist... oder so... kicher...
  6. Bsp.: ohne Gewähr... LOL
byte encrypt(deque<byte> otp, bit ktb) {
  byte otp0 = otp.pophead();
  byte otp1;
  for (;;) {
    otp1 = otp.pophead();
    if (!ktb || otp0!=otp1) break;
  }
  return (ktb) ? (otb1) : (otb0);
}

bit decrypt(deque<byte> otp, byte cb) {
  byte otp0 = otp.pophead();
  byte otp1 = otp.pophead();
  if (otp0==cb) return 0;
  while (otp0==otp1) otp1=otp.pophead();
  return 1;
}

uint32 charge(deque<byte> otp, Meldebehörde amt) {
  uint32 i;
  for (i=0; otp.size()<3GiB; i++)
    otp.pushtail(amt.giveMeOneMoreRandomBytePlease());
  return i;
}
Woher ich das weiß:Studium / Ausbildung

RIDDICC  08.01.2020, 00:53

vllt doch lieber so: *kicher*

byte encrypt(deque<byte> otp, bit ktb) {
  byte otp0 = otp.pophead();
  byte otp1; while (otp0==(otp1=otp.pophead()));
  return ktb ? otb1 : otb0;
}

bit decrypt(deque<byte> otp, byte cb) {
  byte otp0 = otp.pophead();
  byte otp1; while (otp0==(otp1=otp.pophead()));
  if (otp0==cb) return 0;
  assert(otp1==cb);
  return 1;
}

statt „byte“ kann man na klar auch „2 bits“ nehmen... oder „3 bits“ (im Mittel 7 bits vom Pad pro Klartext-bit)...

1

du nimmst ein text

du nimmst ein geheimnis

jetzt baust du dir eine arbeitsanweisung wie man text und geheimnis nutzt um ein wieder rückgängimachbare änderung erzeugt.

dabei kann diese arbeitsanwiesung alles möglich sein , wichtig nur , es muss irgendwie rückgängig gemacht werden können , sonst kann ja niemand den geänderten text zurück ändern ;)

das war es schon .

Am besten so, daß sich möglichst viele Daten während des Verschlüsselungsprozesses ständig gegenseitig modifizieren, wobei dann auch mehrere spezielle sich stetig gegenseitig modifizierende Zufallsgeneratoren benutzt werden, und die Verschlüsselung der Dateidaten über unregelmäßige Offsets mit stetig wechselnden Umwandlungsanweisungen erfolgen, bei denen auch noch unregelmäßige Austausche von unregelmäßig langen Bitarrays erfolgen.

Ich habe mir ein solches Tool geschrieben, das ohne Kennwort auskommt, weil das Tool selbst quasi als "Kennwort" dient, und so selbstverständlich gut geschützt irgendwo aufbewahrt werden muß, nur nicht auf dem Rechner oder in dessen Nähe.

Die Verschlüsselung ist überaus komplex, und für jedes Bit der verschlüsselten Datei gibt es nicht 2, sondern 4 Möglichkeiten der Bedeutung (es fehlt und muß aus anderen Daten ermittelt werden, oder es ist ein eingefügtes Fake-Bit, das seinerseits eine Bedeutung haben kann oder auch nicht). Für Bytes, Words, Longs und Longlongs oder Bitarrays sehr unteschiedlicher Länge und Richtung bestehen jeweils viele unterschiedliche Möglichkeiten der Umrechnung oder Bitmanipulation.

Das Tool arbeitet dennoch extrem schnell und deutlich schneller als gute kommerziell erhältliche Tools der modernen Art und hat für mich den Vorteil, daß mir der Mist mit den ellenlangen Hyroglyphen-Kennworten erspart bleibt und für mich insgesamt vertrauenswürdiger ist.

Daß in dem Tool noch einige ganz andere Algorithmen enthalten sind, die dafür sorgen, daß weder Art, Länge, Inhalt, Datums und Namen für Unbefugte ermittelbar sind, gehört natürlich ebenso dazu, wie das, daß dieselbe Programm bei erneuter Verschlüsselung jedes mal völlig anders aussieht und daß die Wahrscheinlichkeit möglicher Widerholungen zeitlich betrachtet bei einem Mehrfachen der angenommenen Lebensdauer des Universums liegt.

Ich vermute einmal auf blauen Dunst hin, daß du jetzt nur noch Bahnhof verstehst. Denn wer sich ernsthaft mit der gesamten Komplexität von Datensicherheit auseinandergesetzt hat, der fragt nicht mehr, sondern tüftelt und entwickelt.