Archiv verlassen und diese Seite im Standarddesign anzeigen : Vingenère-Programm und ein Problem
Also ich hab mir mal das Programm runtergeladen:
http://www.venilia.de/dload/ViPro10.exe
Ich hab also dort einen text geschrieben und ihn dann dort verschlüsselt, nun wollte ich wissen wie er aussieht wenn ich einen falschen schüssel eingebe. Nach dem ich den falschen schüssel benutzt haben stand dort auch nur Mist, dann habe ich den Text wieder mit dem falschen Schüssel verschlüsselt. Danach den richtigen schüssel angewandt und herauskam nur ein Teil der Botschaft und ne menge Müll.
Jetzt meine Fragen:
1. Warum habe ich nicht den original text bekommen ?
2. Warum wird der Text länger nach dem Verschüsslen?
Normalerweise dürfte der Text nicht länger werden, wenn man nur das Vingenère Quadrat benutzt.
1. Wahrscheinlich eine schlampige Implementierung
2. erhärtet meine erste Vermutung, sonst fällt mir nix ein.
Das ist eine gute antwort *g*
Ich werd vielleicht eine Email an den Programmierer schreiben und fragen wie das funktioniert oder warum das so ist
Hallo Deknos,
danke für deinen Kommentar - hast du das Programm überhaupt mal ausprobiert, geschweige denn dich damit beschäftigt ?
Regel 1: Probiere das Programm aus !
Regel 2: Hast du ein Problem - benutz die HILFE !
Regel 3: Versteht du was nicht - frag den Autor und unterlass deine klugen Sprüche !
Zu Punkt 1: Wer sich mit dem Programm mal genauer beschäftigt hätte wüßte, daß die Verschlüsselung nicht nur auf "Vingenère" basiert sondern zusätzlich noch eine "Maskierung" und "Transposition" verwendet ! D.h. so einfach wie aus "A" mach "F" und aus "F" mach wieder "A" funktioniert das ganze nicht ! Wird versucht den Text mit einem falschen Schlüsselwort zu dechiffrieren, erhält man nur noch "Codiermüll" und das ist auch so beabsichtigt ! GRUNDREGEL DER VERSCHLÜSSELUNG: Ein Text der Geheim ist soll auch geheim bleiben und nur dem zugänglich sein der das richtige Schlüsselwort kennt ! Experimente mit Schlüsselwortspielereien gestattet das Programm nun mal nicht !
Zu Punkt 2: Warum wird der Text wohl länger ??? Antwort: Die Maskierung ! Bei der Maskierung wird der Text zu einem Textblock aufgefüllt um keine Rückschlüsse auf die Originaltextform zu ermöglichen. D.h. die Zeilen werden "künstlich" aufgefüllt und die Textlänge durch zusätzliche, überflüssige Zeilen ergänzt.
Zum "Vigenère-Quadrats ": Das Programm benutzt ein erweitertes Quadrat mit 95 unterschiedlichen Geheimtextalphabeten anstatt 26 !
Zum "One-time-pad": Das Programm benutzt ein "Pseudo-One-time-pad" ! Ein reeles One-time-pad wäre computertechnisch nicht so einfach umsetzbar und auch etwas unrealistisch in der Anwendung, zumal ein Computer keine "wahren" Zufallsfolgen erzeugen kann und ein "One-time-pad" eine einmalige Sache ist, d.h. der Text könnte zwar verschlüsselt aber nicht mehr entschlüsselt werden.
FAZIT: Erstmal die HILFE des Programms zu Rate ziehen ! Ich Empfehle hier besonders das Kapitel "Die Chiffrierungstechnik von VigenèrePro" ! Hätte sich das mal jemand durchgelesen würden sich viele Fragen von selbst klären - vorrausgesetzt er versteht die Zusammenhänge und kann mit Kryptographie was anfangen !
Gruß
M66
(Autor des Programms)
Erstmal Willkommen im Board !!!
und Danke für deine Antwort, eigentlich haben wir uns ja nur darüber unterhalten (nicht lustig gemacht), dass es kein ONE-TIME PAD ist sondern eben nur ein Pseudo-Pad.
Wo findet man Informationen zum erweiterten Vigenère-Quadrat ?
mfg
reggid
Hallo m66,
sorry wenn du den Post als Angriff auf dich verstehst.
Ich habe nur zwei Fragen.
1. Soll dein Programm auch Geheimtexte so sicher verschlüsseln, dass NSA , BND usw. nicht auf den Klartext kommen ? )
2. Soll dein Programm mal einer "richtigen kryptanalytischen" Analyse unterzogen werden ?
Gruss Deknos
Nur zu,
wo ist das Problem ? Wenn das Programm nicht sicher ist, nehm ich es aus dem Angebot !
Entschlüssel folgenden Text:
*** VigenèrePro-Chiffrierung ***
A&|E5|KxZ9._e'wDBnwRv((X@|fs(E{q).
dl-pDOpMyD9nUj]:^BH2,]_uuYq'Uv2_$m
u3/Ur&iQ,\X!15YEb=E m7"ä;M031T&<Hd
G^[=*Z^x;'\:?E[k[F(xzB5QyrB.)89P)P
z4DL5E%|tmae)jtjHU(4$YdJä|&M?p:r-q
[Uw15gS*_RT'c:WH6=pz]f'#)b7aVf! U
n6Km8q%1~QLg&$>c-`6!;%f]OnYRNVZ[4J
}nQ83HFE\$dnHStzDd^?p1sC[wz:to:8pR
0*^mq'[HL[5ez1`S]`K8I7PLLMTr|:mO)>
0ü{+/a~\LZVZ99l`.,SU&x-t*.x_8=b9&G
9nK#D\Sz26(kUp2%V)Gr-}lJ!YBh4QA7|X
Ly,]PLWgQTkbUW#lma|2b{Z4tn"GqZx^W3
g+KORKe$ui]NJ*X,yDgrvAV!>W:\Rc^m)K
*r:+Rd Y_VWEe(nW-p6_nj}97oOed'9\A7
BJ8kqf6PGvo=N-Hah,rf!W9u6FL-@\ULQA
s&I:DP^*|0Oj.U)h-g{vp\bWWxyO[gCOj\
(KZsS3j;äpo22EdF2RvuK/ 7-ZzvW3-6C#
9*}RJ{V@^TiFIS;&`_pN(cahvK?\qM'yxC
\*m~{1`V@W%=J&2rh{4[]EIM()H&KfyJtk
nSu8(!91Ij/^L;k1/fwi 4g<^&pM|?:TkU
!a\Q&p; "F6C^N#üc= "lA@'`Jf0qQ.bq
QwS!E%AB"9b4c7EO~349s|O~a<x$*U/S5o
0Sw8Qy#j7e:>Ra;)s<lC/x1_vcOncF"=$)
GJBV"3#a{3C88N+I:8FmQO?BDuuvgH$cZ2
EZVXNYJ{<u%yM`rcw47TpäI.v\ njLnD(B
v<I=jJK.8J;]'FEnf:$zA*{~*v=uB\&I;~
H=,c=|iI{ZDJ8m9r1t;DeCz:>1W7RuYqTC
z)_~_%wz&^uwS+wD>]Q!%[3);,I'zD;^Hz
5~ve6eIjPR)&%c<)PV!aq#[!tw6hmid|y,
[mlB tr_7(*Yd3>@TyFu~(-Qf;D:Me\bE:
Y;myV&lyPq>w-J&T8'=;~&TLWSt!w%A..Y
]&-HeS;P^/.:.lC8VK=7/>&&&A, 8POpAe
gpT.RB+c8eTOqz?3o1ax W2FM%7r<&c> 8
WB%m{:I:J2e"-$!)XEr`;+hofSF%gnJ]cv
GZS|~@Iz5a^Q(MGWnhce]n~ZMW_I*iE!?]
*** VigenèrePro-Chiffrierung ***
Gruß
M66
Naja,
die Smilies sind nicht von meinem Programm *g* !
Soll ich den Text per Mail übermitteln ?
M66
Naja,
die Smilies sind nicht von meinem Programm *g* !
Soll ich den Text per Mail übermitteln ?
M66
Du hättest einfach nur smiles in deinem Beitrag deaktivieren brauch, das steh unten drunter unter dem Text den du eingibst, wenn du auf antworten clickst.
Moment.
1. Wollte ich den Algorithmus.
2.Wenn schon bestimmte Ascii Zeichen in dein Programm nicht erlaubt sind, wie z.B. "~" ist das eine inakzeptable Einschränkung. Algorithmen wie AES, IDEA, Gost, Twofish, funktionienieren mit jeder Bitkombination trotz bekannten Klar/geheimtextpaaren.
3. Vigenere mit so _kurzem_ Geheimtext bei pseudo-otp ist inakzeptabel.
4.faq lesen wäre auch nett ;)
5. Du hast meine Fragen nicht beantwortet
1. Soll dein Programm auch Geheimtexte so sicher verschlüsseln, dass NSA , BND usw. nicht auf den Klartext kommen ? )
2. Soll dein Programm mal einer "richtigen kryptanalytischen" Analyse unterzogen werden ?
Ich will ein komplette algorithmische Beschreibung deiner Version
(am besten mit beispiel) allgemeine informationen sind in deiner hilfe absolut nicht hilfreich, und genau nicht vorhanden.
6. Ein One-Time-Pad hat _zufälllige_ Schlüssel
Fazit: es geht nicht um verschlüsselte texte sondern um die kenntnis des algorithmus, ich dachte das weisst du, wenn du schon kerckhoff zitierst ...
Ne, ne...
dann vegessen wir das mal ganz schnell mit der "Kryptoanalyse" !
Dabei geht es hier garnicht um "Kerckhoff" sondern ganz einfach um die Belange meiner Copyrightrechte an der "Kombination" verschiedener Chiffrierungstechniken ! Mein Programm ist zwar Freeware aber kein "Public Domain". Warum sollte ich meine Arbeit so einfach preisgeben ? Damit einige Leute neue Ideen bekommen = Ideenklau ?
Dann zum Thema "inakzeptable" Einschränkung - wenn ich bestimmte Zeichen auschließe dann dürften wir uns hier garnicht über Vigenere unterhalten - denn bis auf 26 Zeichen ist im Original garnichts erlaubt !
Weiterhin hat eine "Transposition" oder gar "Vigenere" nichts mit einer "Bitverschlüsselung" wie IDEA, GOST etc. zu tun !
Außerdem sehe ich erstmal die "reelle" Seite der Chiffrierung. Wenn ich eine Nachricht "chiffriere" und diese Nachricht von einem Unbefugten abgefangen wird, so hat dieser zuerstmal auch keine Kenntnisse über den Algorithmus ! Also muß er sehen, wie er den Text entschlüsselt ohne diese Kenntnis - und ein guter "Hacker" schafft das !
Und insgesamt - von der Formulierung "..schlampige Implementierung" angefangen, hab ich eher das Gefühl, daß dir am meisten darin liegt, jemanden zu diskreditieren als sachlich auf ihn zuzugehen !
Unter all diesen Bedingungen verzichte ich gerne auf eine Kryptoanalyse und bleib lieber wie der Schuster bei meinen Leisten !
Und was soll ich befürchten - wenn niemand die verschlüsselten Texte von "VigenerePro" entschlüsseln kann ?
Trotzdem interessantes Board - auch wenn mein Besuch hier kurz war !
Gruß
M66
Und was soll ich befürchten - wenn niemand die verschlüsselten Texte von "VigenerePro" entschlüsseln kann ?
auf diesen beweiss verzichtest du hier. Deswegen darfst du das auch nicht behaupten. Man hat auch mal gesagt das win95 geil ist ... aber als man dann rausgefunden hat, wie funktioniert (oder halt nicht), und es zurecht als schrott deklariert.
ich sag ja nicht, dass dein programm schrott ist, oder schlecht, aber du darfst auch nicht sagen, wenn du den beweiss nicht lieferst, dass es gut ist. Gleichberechtigung halt.
Warum sollte ich meine Arbeit so einfach preisgeben ? Damit einige Leute neue Ideen bekommen = Ideenklau ?
wenn du das verfahren preis gibst? hmmm ...
Und insgesamt - von der Formulierung "..schlampige Implementierung" angefangen, hab ich eher das Gefühl, daß dir am meisten darin liegt, jemanden zu diskreditieren als sachlich auf ihn zuzugehen !
wenn man nun gesagt bekommt
Normalerweise dürfte der Text nicht länger werden, wenn man nur das Vingenère Quadrat benutzt.
kann man dann nicht annehmen, dass wenn es so waere, dass es wirklich schlecht war? Das es nun andere gruende hatte, ist halt dumm gelaufen.
stefan, member
1.Betreff Ideenklau:
Ich glaube wenn jemand Ideen klauen will, wird er das bei Algorithmen wie Blowfish, AES, DES ... machen und nicht bei deinen Algorithmus.
2."Reelle Seite" der Chiffierung:
Es ist durchaus sehr wahrscheinlich, das ich den Algorithmus von einem abgefangen Chiffretext kenne, da ich zum Beispiel weiß, das dieser von Person XY kommt der immmer ein bestimmtes Programm benutzt oder aufgrund statistischer Berechnungen (etwas schwieriger aber solange es sich nicht um wirklich gute Algorithmen handelt machbar)
3. Jeder gute Kryptograph veröffentlicht seinen Algorithmus. Ein Algorithmus der nicht veröffenlicht wurde gilt automatisch als unsicher
P.S. Wenn du deinen Algorithmus für so gut hälts lass ihn doch patentieren.
;;) ;) ;)
Hallo M66,
wenn jemand kritik nicht vertragen kann, sollte er zumindest erklären, wie reggid diese Probleme bekam.
ich will dich wirklich nicht anfeinden, warum sollte ich, ich kenne dich gar nicht. ausserdem begrüsse ich persönlich jeden der Datensicherheit unterstützt.
Deshalb bin ich dir eher positiv zugeneigt ;) ich wollte dir bloss konstruktive vorschläge geben, dein Programm zu verbessern.
Warum sollte ich meine Arbeit so einfach preisgeben ? Damit einige Leute neue Ideen bekommen = Ideenklau ?
Nein, aber um dir behilflich zu sein, und um dein Programm zu verbessern.
Dann zum Thema "inakzeptable" Einschränkung - wenn ich bestimmte Zeichen auschließe dann dürften wir uns hier garnicht über Vigenere unterhalten - denn bis auf 26 Zeichen ist im Original garnichts erlaubt !
Weiterhin hat eine "Transposition" oder gar "Vigenere" nichts mit einer "Bitverschlüsselung" wie IDEA, GOST etc. zu tun !
Warum verwendest du dann Vigenere ? Oder soll es gar nicht wirklich vor bösen Leuten schützen sondern als Zeitvertreib ?
dann vertreibe es aber nicht als kryptographisch sichere software sondern wird es mit der zeit als snakeoil bezeichnet,
und zwar nicht von mir, und leider dann zurecht.
Und insgesamt - von der Formulierung "..schlampige Implementierung" angefangen, hab ich eher das Gefühl, daß dir am meisten darin liegt, jemanden zu diskreditieren als sachlich auf ihn zuzugehen !
Ich wiederhole, was für einen Vorteil hätte ich davon ?
und dass du hier postest zeigt mir dass du das Programm ernst nimmst - und Kryptographie ist eine ernste Sache -
deshalb will ich es nicht diskreditieren.
Unter all diesen Bedingungen verzichte ich gerne auf eine Kryptoanalyse und bleib lieber wie der Schuster bei meinen Leisten !
eine kryptoanalyse beweist die Un/sicherheit eines Algorithmus
1. Soll dein Programm auch Geheimtexte so sicher verschlüsseln, dass NSA , BND usw. nicht auf den Klartext kommen ? )
diese Frage hast du nicht beantwortet .
nachtrag, nur weil ich in der nacht so müde war, habe ich kurz cryptool (siehe faq) angeschmissen und ne vigenere analyse über den chiffrierten Text geworfen ..
interessanter weise erkannte er bei drei versuchen immer die schlüssellänge ...
Der Autor hat sich leider vom Board abgemeldet :(
Deshalb ist die weitere diskussion mit ihm, sein Verfahren zu verbessern sinnlos.
Wer will kann ja weiterhin das Programm beobachten und analysieren.
Er kann konstruktive Kritik vielleicht nicht verkraften...
Ich hab ein paar emails mit dem Autor geschrieben, daher kam er auch zu diesem Board und zu mir meinte er, dass er sich darüber freut, wenn sich jemand mit seinem Programm auseinandersetzt und versucht es zu verbessern und über Kritik freut er sich.
Warum hat er sich dann wieder om Board losgesagt?
wahrscheinlich meinte er konstruktive kritik eher so, dass man ihn lobt.
Ich hab ein paar emails mit dem Autor geschrieben, daher kam er auch zu diesem Board und zu mir meinte er, dass er sich darüber freut, wenn sich jemand mit seinem Programm auseinandersetzt und versucht es zu verbessern und über Kritik freut er sich.
ne etuli er freut sich auch über schlechte Kritik...
ich muß ja ein ganz schlimmer Finger sein *lol* !!!
reggid hat schon recht - ich kann auch negative Kritik vertragen !
An Deknos: Also normalerweise "sollte" das Schlüsselwort nicht erkannt werden können, da dieses nicht (direkt) auf den Text angewandt wird !
Wenn noch Interesse besteht leg ich den Algorithmus soweit es mir >möglich< erscheint gerne offen und lasse mich auch (konstruktiv) Kritisieren und verbessern. Dabei gilt mein Wort das ich das Programm vom "Markt" (wenn es dies überhaupt einen hat ;) ) nehme falls der Code geknackt wird !
Empfindlich reagiere ich wenn die Kritik persönlich wird (sorry - ist numal so) ! Ich habe mit VigenerePro auch keine Profisoftware wie IDEA etc. entworfen, sondern "nur" ein Programm zur Verschlüsselung von Texten welches auf (alte) Chiffrierungstechniken beruht !
Vorschlag:
Sollte jemand was persönlich dagegen haben wenn ich weitermache (aufgrund der vergangenen Vorkommnisse) höre ich sofort auf, ansonsten bin ich - Step by Step - zur "Verhörung" bereit !
Da ich beruflich ziemlich eingespannt bin, ist mir ein täglicher Besuch des Boards leider nicht möglich ! Bitte daher - bei Beantwortungen von mir - um etwas Geduld !!!
Gruß
M66
(Der schlimme Freeware-Autor *g*)
Erstmal willkommen zurück...
Empfindlich reagiere ich wenn die Kritik persönlich wird (sorry - ist numal so) !
Würd ich niemals tun... und wenn dann nur unbewusst.
Wenn noch Interesse besteht leg ich den Algorithmus soweit es mir >möglich< erscheint gerne offen und lasse mich auch (konstruktiv) Kritisieren und verbessern. Dabei gilt mein Wort das ich das Programm vom "Markt" (wenn es dies überhaupt einen hat ) nehme falls der Code geknackt wird !
Soviel ich mitbekommen habe verschlüsselt dein Programm Texte mithilfe des Vigenère Algorithmuses oder? Jedenfalls wurde Vigenère schon geknackt da ist eine Kryptanalyse doch wohl kaum von Nöten.
Vorschlag:
Sollte jemand was persönlich dagegen haben wenn ich weitermache (aufgrund der vergangenen Vorkommnisse) höre ich sofort auf, ansonsten bin ich -
Bin zwar kein Mod aber ich hätte nix dagegen wennde weitermachst... löl des waren noch keine krassen Vorkommnisse du solltest mal andere Threads lesen *G*.
Step by Step - zur "Verhörung" bereit !
Es iss ja net so als wären wir das BKA!!! :)
Es iss ja net so als wären wir das BKA!!!
Genau, deshalb M66, willkommen zurück :)
Also normalerweise "sollte" das Schlüsselwort nicht erkannt werden können, da dieses nicht (direkt) auf den Text angewandt wird !
es hat nur "mal" geklappt, die schlüssellänge herauszufinden (der selbe test wie bei vigenere (btw: war die schlüssellänge bei dem Chiffretext oben auch 3 ?)
Wenn noch Interesse besteht leg ich den Algorithmus soweit es mir >möglich< erscheint gerne offen und lasse mich auch (konstruktiv) Kritisieren und verbessern.
Es besteht interesse :)
Empfindlich reagiere ich wenn die Kritik persönlich wird (sorry - ist numal so)
Verständlich :)
Ich habe mit VigenerePro auch keine Profisoftware wie IDEA etc. entworfen, sondern "nur" ein Programm zur Verschlüsselung von Texten welches auf (alte) Chiffrierungstechniken beruht !
Erkannt und verstanden.
also, ich freue mich wenn der Algorithmus, soweit wie dir möglich und du willens bist, genauer erklärt wird.
ps: soll man sie besser siezen ?
dann mal los,
das Du ist schon o.k. !
Also Deknos: Das Schlüsselwort bestand aus 19 Buchstaben. Hat (gottseidank) nicht geklappt gell ! Das eingegebene Schlüsselwort dient nur zum generieren des richtigen Schlüsselworts in Gesamttextlänge (also ein (Pseudo!) One-time-pad - den Begriff hätte ich im Programm wohl besser nicht verwendet).
Zu ascii: Vigenere ist nur die halbe Miete. Das Programm ist eine Chiffrierungskombination klassischer Algorithmen. Die Maskierung (Ein Versteckspiel), die Transposition (Ein Verwürfelspiel), das Pseudo-One-time-pad ("zufallsgeneriertes" Schlüsselwort in Gesamttextlänge) und letzendlich Vigenere mit einem zeitlich angepassten Quadrat.
Aber eins nach dem anderen !
Fangen wir mal an:
Teil 1 - Die Initalisierung:
Bei der Initalisierung passiert zweierlei. Erstens: Das Vigenerequadrat wird erstellt und einem Array zugeordnet. Zweitens: Zufallsgenerierte Pseudozeilen werden erstellt (zur Maskierung) und auch einem Array zugeordnet. Das Vigenere Quadrat erstreckt sich vom ANSI-Code 032 bis zum ANSI-Code 126 also !"# ... bis ... {|}~
Das Quadrat ist ansonsten so aufgebaut wie bei Vigenere, also versetzt um eine Stelle je tiefer man geht !
Warum nicht mehr Zeichen ? Nun vor dem ANSI-Code 32 befinden sich Steuercodes und nach dem ANSI-Code 126 oft fontspezifische Definitionen ! Ich bitte hierbei nochmals zu bedenken, daß das Grundkonzept des Programms darin besteht Texte und keine Binärdaten (wie z.B. in EXE-Dateien, Bilddateien etc.) zu chiffrieren. Deshalb wehr ich mich auch so dagegen das das Programm mit den modernen Verschlüsselungstechniken
wie z.B. Blowfish, IDEA, DES usw. in einem Topf geworfen wird !
Ist dieser Vorgang soweit klar, oder bestehen hierzu Fragen bzw. Quellcodewünsche ? Ich denke wie man programmiertechnisch Zufallszahlen generiert und was ein Array ist, dürfte hier jeden klar sein !?
Soweit erstmal ! Wenn ich fortfahren kann sagt es mir.
Gruß
M66
hi!
also wie man pseudozufallszahlen erzeugt, ist auf verschiedene weise möglich, weshalb du uns deinen generator offenbaren solltest! (ich und meine zufallsgeneratoren... :D )
denn ein schlechter generator wirkt sich schlecht auf den restlichen algo aus und könnte schon zu möglichen angriffen führen!
quelltext wäre nicht schlecht!
ein erster verbesserungsvorschlag: (auch wenn du gegen ihn argumentiert hast)
verwende den vollen zeichensatz! dann können andere auch 'nicht-textdateien' verschlüsseln und es würde eventuelle statistische angriffe verhindern! nachteile hast du dadurch auch keine!
mfg
otto
*g*
Für die Maskierungsfunktion wird doch kein besonderer Zufallsgenerator benötigt ! Die Zeichen dienen einzig der "Auffütterung" des Textes und haben mehr eine "verwirrende" Funktion !
Dazu zunächst mal zu der Programmiersprache die ich verwende. Ich arbeite ausschließlich mit Profan. Dabei handelt es sich nicht um eine Hochsprache wie C++, VB, Delphi etc. sondern um eine einfache strukturierte Interpretersprache. Der Syntax ist an BASIC und Turbo Pascal orientiert. Wer also Basic kann dürfte mit der Sprache wohl kaum Probleme haben.
Zur Erstellung von Zufallszahlen bietet die Sprache eine fertige Funktion an. Sie wird mit:
RANDOMIZE
initalisiert und mit der Funktion:
@RND(N)
wird jeweils eine Zufallszahl zwischen 0 und N-1 erzeugt.
Die RANDOMIZE-initalisierung sorgt dafür, daß die Zufallszahlen (@RND) auch wirklich zufälligen Charakter haben. Zur Erstellung eines 255 Zeichen langen Zufallstextes würde man in Profan z.B. eine folgende Schleife programmieren:
Clear Durchlauf%,Zeile$
While @Lt(Durchlauf%,255)
inc Durchlauf%
Let Zeile$=@Add$(ct$,@Chr$(@Add(32,@Rnd(95))))
wend
Wer die Sprache mal testen will hier die url: http://www.profan.de
Das mit der Verwendung des vollen Zeichensatzes wäre in einer weiteren Version des Programms durchaus umsetzbar. Ob es aber je eine weitere Version geben wird hängt von dem Ergebnis der Kryptoanalyse ab !
Zum Testen hab ich auf folgender Adresse ein chiffrierten Text hinterlegt:
http://www.venilia.de/dload/Test1.txt
oder mit dem Dechiffrierer von VigenerePro:
http://www.venilia.de/dload/VPRO.ZIP
OK - Dann mal weiter.
Teil 2 - Die Textanalyse
Bei der Textanalyse geschieht eigentlich nichts besonderes. Sie dient eigentlich nur der Feststellung der maximalen Zeilen- und Spaltenlänge des Textes. Diese Ermittlung wird einzig und allein für die Maskierung benötigt.
Teil 3 - Die Maskierung
Die Maskierung ist eigentlich nur ein Verwirrspiel ! Der Text wird mit Pseudotext soweit zugeschüttet, so das ein rechteckiger Textblock entsteht. Der Zweck ? - Nun, zum einen soll das Format des Originaltextes verschleiert werden (Original Zeilen- und Spaltenlänge) um zu verhindern, daß über einen vermutlichen Vergleichstext Rückschlüsse auf das Originalformat geschlossen werden kann. Zum anderen dient es dazu bei der Transposition
ein "verwirrteres" Bild zu erzeugen. Die Maskierung ist also eine Maskerade ! Die Vorgehensweise: Enthaltene Leerzeichen werden mit dem reservierten Charakter ~ aufgefüllt ! - Das Ende einer Zeile wird mit dem Charakter ^ gekennzeichnet ! - Leerzeilen werden mit Pseudotext gefüllt ! - Die Zeilen insgesamt werden mit zugefügten Pseudotext auf gleicher Länge gebracht ! - Überflüssige Zeilen werden hinzugefügt !
Mit Profan ist die Programmierung der Maskierung relativ einfach:
@Translate$(Zeile$," ","~") 'Leerzeichen in dem String werden durch ein ~ ersetzt, für " " könnte man auch @Chr$(32) setzen.
@Add$(Zeile$,"^") 'Setzt am Ende der Zeile den Charakter ^ bzw. bei Leerzeilen den Charakter direkt am Anfang.
@Add$(Zeile$,@Mid$(Zufallscode$[Nr%],1,@Sub(MaxZeileLaenge%,@Len(Zeile$)))) 'Addiert zu kürzeren Zeilen aus einem Array Zufallscode hinzu.
Fragen hierzu ?
Weiterreichende Erklärungen gewünscht (Codes etc.) ?
Ansonsten gehts demnächst weiter.
Gruß
M66
ups...
Sorry, die Schleife müßte natürlich richtig lauten:
Clear Durchlauf%,Zeile$
While @Lt(Durchlauf%,255)
inc Durchlauf%
Let Zeile$=@Add$(Zeile$,@Chr$(@Add(32,@Rnd(95))))
wend
M66
baphomet
07.09.2002, 09:40
Hallo M66, ich weiß zwar nicht, mit welcher ungefähren Schlüssellänge der Beispieltext verschlüsselt wurde, ich hoffe jedoch der Fairness halber, dass er nicht wie der erste 19 Zeichen umfasst. Ein Teilabschnitt deines Algorithmus besteht ja aus der Vigenere-Chiffre. Diese ist prinzipiell (mit einigen Ausnahmen) um so sicherer anzusehen, je länger das Schlüsselwort und desto kürzer der verschlüsselte Text ist. Um die Sicherheit eines Algorithmus festzustellen, muss man also auch von Anwendern ausgehen, die einen deutlich kürzeren Schlüssel (5-6 Zeichen) verwenden (natürlich wäre jeder Algortihmus Mist, wenn der Benutzer nur einen Schlüssel von einem Zeichen eingiebt, aber eine Schlüssellänge von 5-6 ist durchaus realistisch).
...dazu komm ich noch !
das EINGEGEBENE Schlüsselwort ist NICHT das Schlüsselwort mit dem der Text chiffriert wird. Aus dem eingegebenen Schlüsselwort (oben waren es 19 Zeichen) wird mit einem "reproduzierbaren Zufallsgenerator" (sonst dürfte das wohl kaum funktionieren), ein Schlüsselwort in der GESAMTTEXTLÄNGE des Textes erzeugt. In meinem Programm habe ich das (dummerweise) als (Pseudo) One-time-pad deklariert. Aber dazu komme ich noch - evtl. noch heute abend.
Natürlich funktioniert das auch mit einem kurzen Schlüsselwort ! Allerdings sollten mindestens 8 Zeichen das minimum sein. Denn auch bei meinem Programm steht und fällt die ganze Chiffrierung mit dem Schlüsselwort (deshalb hab ich auch in meiner Hilfe Kerkhoff zitiert) !
Weitere Fragen bis hierher ?
Gruß
M66
Quantumseeker
07.09.2002, 15:27
was du machst nennt sich key scheduling ;)
aber wie streckst du das auf die länge des Textes ?
kommt da nicht irgendwann mal ne periodizität rein ?
das würde mich interessieren ...
Die Maskierung ist also eine Maskerade
das musst ich erwähnt lassen *gg* ;)
! Die Vorgehensweise: Enthaltene Leerzeichen werden mit dem reservierten Charakter ~ aufgefüllt !
feste zeichen reinzuhauen ist immer schlecht, bietet nen anhalt zu kryptanalyse.
Hallo M66, ich gebe mal dein Verfahren in eigenen Worten wieder, um sicherzugehen, dass ich es richtig verstanden habe.
Im zweiten Teil kommen dann Kommentare und eine erste Analyse aus meinem (beschränktem) Horizont.
### Paraphrasierung ########################
Du kombinierst auf recht pfiffige Weise 3 Verschlüsselungsverfahren: Würfel, Vigenère, und Verschleierung der Schlüssels, um die Schwächen von Vigenère zu decken.
Im einzelnen - Verschlüsselung:
A) Würfel:
Der Text wird in Rechteck-Form gebracht, Zeilenenden werden hierzu markiert, und danach mit Zufallszeichen aufgefüllt.
Das Rechteck wird transponiert.
B) Vigenère:
Alfabet: char(32)..char(126), Verknüpfung mit Pseudoschlüssel (s.u.) via zeichenweise Moduloaddition.
C) Pseudoschlüssel ("Pseudo-One-Time-Pad")
Schlüssel wird über festen Algo. (nicht einfache Widerholung) auf benötigte Länge aufgeblasen.
- Entschlüsselung:
Pseudoschlüssel wird erzeugt (Algo wie oben), Vigenère Dechiffrierung, Transposition, Säuberung von Füllzeichen.
### Kommentare etc. #########################
- Anmerkungen
1) Bei Würfel läge Doppelwürfel nahe, gilt als sicher, wurde aber schon lange nicht mehr untersucht (Problem: sichere Übermittlung der Würfeldimensionen).
2) Was für einen Sinn macht es Leerzeichen durch festes anderes Zeichen zu ersetzen?
Evtl. sollten die Leerzeichen anders kodiert werden (z.B. numerische Textposition).
3) Die Erzeugung der Füllzeichen via Pseudozufallszahlen halte ich für ausreichend sicher.
- Analyse
3) Standardverfahren (allgemein):
Vigenère wird über Zeichenfolgenwiederholungen analysiert (Kassitzki), ergibt Schlüssellänge, danach monoalfabetische Analyse (Buchstabenhäufigkeiten), um Schlüssel zu ermitteln. (Weinberg-Verfahren kenne ich zu wenig für eine Beschreibung hier).
Würfel zu knacken bedeutet die Dimensionen zu bestimmen, das geht z.B. über Schrittweiten bei denen typische Buchstabenfolgen auftreten.
Pseudoschlüssel: Algorithmus evtl. über Known-Plaintext zu bestimmen (oder Decompilation? nee)
4) Verfahren hier
Übliche Vigenère-Analyse ist erschwert durch die beiden anderen Verfahren.
Zunächst der Würfel:
Anscheinend wird nicht versucht, die Würfeldimensionen zu verschleiern, d.h. durch Faktorzerlegung der Gesamttextlänge, sowie Plausibilitätsannahmen über die Zeilenlänge, ergeben sich wenige Möglichkeiten, die einzeln durchprobiert werden.
(Anregung: Text nach Transposition durch zufällige Anzahl Füllzeichen verlängern).
Dann der Pseudoschlüssel:
Damit steht und fällt m.E. das ganze Verfahren.
Falls der Algo. für alle Schlüssel schön unregelmässige und statistisch gut verteilte Zeichenfolgen produziert, könnte das Verfahren gesamt m.E. durchaus sicher sein.
Puh - nicht schlecht und recht gut durchschaut.
Und deWalk, dein Horizont ist nicht beschränkt sondern scharfsinnig !
Ich möchte mit den schwächen von VigenerePro nicht zurückhalten und natürlich auch die Knackpunkte offenlegen. Eine Periodizität bei der Maskierung kommt dann rein, wenn der Klartext eine bestimmte länge erreicht, da das Array für die zufallsgenerierten Pseudotexte natürlich begrenzt ist. Außerdem benutzt das Programm - während eines jeden Ablaufs - die gleichen zufallsgenerierten Pseudotexte. Die Zufallstexte werden ja zu beginn des Programmstarts erzeugt und immer wieder verwertet, es sei denn das Programm wird neu gestartet, dann erhalte ich natürlich einen neuen Pseudotextarray. Diese Lösung ist vielleicht nicht Klug aber die vom zeitlichen Ablauf des Verfahrens die günstigste.
Tja, das Auffüllen der Leerzeichen ist mir - wie soll ich sagen - reingerutscht ? Ein überbleibsel aus Testphasen des Programms. Ist nicht i.o.- ist mir schon klar. Ob dies allerdings ausreicht um die Texte zu analysieren ?! Für mich ist das System erst dann unsicher wenn jemand - Analysen hin und her - in der Lage sein sollte, den hinterlegten chiffrierten Text zu dechiffrieren ! Kann ja für jeden der den Text knacken möchte ein Einstiegspunkt sein !
RICHTIG - Die Kombination der Verfahren soll dazu dienen die Schwächen von Vigenere zu überspielen. Sie erschweren die Analysen. Ein Kasiski oder Friedmanntest (dürften) hierbei nicht ziehen. Man bedenke durch die 3 Verfahren muß ich ja den Text 3x "zurücksetzen" !!! Das heißt eine Vigenere-Entschlüsselung würde den Klartext ja nicht bringen ! Schrittweiten gibt es nicht, da der Text mit einem Schlüssel in Klartextlänge chiffriert wird.
UND KORREKT - Kerkhoff !!! - Das System steht mit dem SCHLÜSSEL ! Ob der (reproduzierbare) Zufallsgenerator sicher ist, muß sich zeigen !
Aber bitte STEP by STEP !
Zu dem Pseudo-one-time-pad komm ich ja noch !
Aber jetzt erstmal ...
Teil 4 - Die Transposition
Die Transposition ist nichts anderes als eine Umreihung der Klartextbuchstaben. VigenerePro benutzt zwei Wege zur Transposition: 1) Der Text wird reverse umgeschrieben, d.h. z.B. der Text "Hallo Freunde" würde umgewandelt nach "ednuerF ollaH" (banale spielerei gell).
2) Der Text wird Zeilenintern permutiert d.h.eine Würfelchiffrierung mit Kennzahl k: Je k Buchstaben eines Textes werden in eine Zeile geschrieben und dann spaltenweise abgelesen und wieder zu einer Zeile zusammengefügt. Die Permutation ist statisch im Programm festgelegt weshalb ich sie hier nicht offenlegen möchte. Aber die Vermutung ist vollkommen korrekt, die Verfahrensweise ist die klassische Form. Die Transposition ist natürlich keine sichere Chiffrierungsform und eigentlich leicht zu knacken. Mit der Maskierung bietet sie jedoch ein "verwirrendes Bild" !
Reicht das oder weitere Fragen dazu ?
Gruß
M66
Teil 4 - Die Transposition
Die Transposition ist nichts anderes als eine Umreihung der Klartextbuchstaben. VigenerePro benutzt zwei Wege zur Transposition: 1) Der Text wird reverse umgeschrieben, d.h. z.B. der Text "Hallo Freunde" würde umgewandelt nach "ednuerF ollaH" (banale spielerei gell).
Hat wenig Sinn wenn man weiss von wo bis wo der Text umgedreht wurde!!! zu bijektiv eben... wenn man das so sagen kann!
2) Der Text wird Zeilenintern permutiert d.h.eine Würfelchiffrierung mit Kennzahl k: Je k Buchstaben eines Textes werden in eine Zeile geschrieben und dann spaltenweise abgelesen und wieder zu einer Zeile zusammengefügt. Die Permutation ist statisch im Programm festgelegt weshalb ich sie hier nicht offenlegen möchte. Aber die Vermutung ist vollkommen korrekt, die Verfahrensweise ist die klassische Form. Die Transposition ist natürlich keine sichere Chiffrierungsform und eigentlich leicht zu knacken. Mit der Maskierung bietet sie jedoch ein "verwirrendes Bild" !
Da gab es doch schon mal einen netten Thread, ähm wie hieß er noch... Zettel und Bleischtift Algorithmen oder so ähnlich!!!
Da wurde ein ähnliches Verfahren beschrieben...
Habe mir das Prog mal geholt und Analyse weitergetrieben:
Zunächst mal zur Ehrenrettung des Autors: in der Hilfe wird das verwendete Verfahren tatsächlich sehr schön beschrieben (kriegt man aber erst zu Gesicht, wenn man das Prog geholt hat).
Das Verfahren lässt sich klassifizieren als
One-Time-Pad (Verknüpfung mittels Vigenère),
wobei der Key-Stream aber mittels Pseudo-Zufallszahlen aus dem eingegebenen Schlüssel abgeleitet wird (ich nenns mal Pseudo-OTP).
Die "Transposition" lässt sich m.E. weitgehend ignorieren:
Es wird ein (vermutlich) festes Permutationsschema verwendet, das sich einfach über chosen-plaintext rauslesen lässt:
Man verschlüsselt zunächst einen Referenztext, danach variert man darin einzelne Zeichen, und sieht nach, wo sich im Ciphertext was ändert.
(-> Verbesserungsvorschlag: wechselnde Permutationsschemen; für die Dechiffrierung wird die Info, welches verwendet wird, vor dem Vigenère-Schritt in den Plaintext eingefügt)
Die Effekte für das weitere sind:
- dass durch "Transposition" und "Maskierung" in unregelmässigen Abständen Schrottzeichen in den Ciphertext eingestreut werden.
- dass die Zeichenreihenfolge des Plaintextes (bzw. des Pseudo OTPs) verändert wird.
Die Idee "Pseudo-OTP" ist nicht neu -> Internet-Recherche.
Hier ergibt sich ein durchwachsenes Bild:
Die Produktanbieter halten sich für sicher, die Cryptoanalysten bezeichnen Pseudo-OTP durchweg als unsicher, ich finde aber keine Entschlüsselungsverfahren, geschweige denn Quantifizierungen (benötigte Ciphertext-Länge, Rechenaufwand).
Was aber klar ist, ist, dass die Güte des Zufallszahlen-Algos entscheidend ist.
(Insofern verstehe ich, dass sich der Autor bisher ziert, in diesem Punkt die Hosen runterzulassen.)
Mögliche Angriffe auf die Verschlüsselung:
0) Vorbereitung: Algos offenlegen (und nachbauen für Geschwindigkeit)
Mittels Chosen-Plaintext oder Reversen des Codes.
1a) Brute-Force-Angriff auf Passwort.
Wie bei jeder Verschlüsselung. Schwachstelle User.
1b) Differenz-analyse bei mehreren Ciphertexten mit selbem Passwort
Wie bei jedem OTP. Schwachstelle User.
2) Angriff auf die Pseudo-Zufallszahlen
Das hängt natürlich vom verwendeten Algo ab. Nehmen wir mal an, aus dem eingegebenen Passwort wird ein Seed berechnet, der einen evtl. selbstgestrickten Pseudozufallszahlengenerator initialisiert.
2a) Beispiel: Angriff auf Seed
Algos mit kleinem Seedwertebereiche (z.B. 2 Byte: 0..65536) lassen brute-force'n.
Dasselbe gilt, falls die Abbildung Passwort->Seed zuwenig Werte liefert.
2b) Beispiel: Angriff auf Schwächen des Zufallszahlengenerators.
Für z.B. lineare Kongruenzen oder lineare Feedback-Shift Verfahren sind Schwächen bekannt (Werte konzentrieren sich auf k-Plans, bzw. Differenz-Methoden). Hier lässt sich eine statistische Analyse ansetzen (die durch o.g. Effekte der Transposition erschwert wird). Vermutlich sind hierfür aber sowohl sehr hohe Ciphertextlängen, als auch hoher rechenaufwand nötig.
Überraschender Weise stell ich immer wieder fest, daß man bei meinem Programm auf einem geheimnisvollen Algorithmus zu warten scheint !? Doch vorweg, denn gibt es nicht. Das warten ist also vergebens.
Die aktuelle Programmversion ist 1.0 ! Überlegungen zur Verbesserung - z.B. variable Transposition - bestehen natürlich !
Ok - kommen wir zu den letzten Abschnitten.
Teil 5 - Die Schlüsselworteingabe
Im integrierten Schlüsselwortgenerator und in der Hilfe empfehle ich ein Schlüsselwort mit einer Länge von mind. 8 Zeichen zu benutzen. VigenerePro verarbeitet das eingegebene Schlüsselwort als nummerischen Wert. Dabei werden die Codewerte der einzelnen Zeichen addiert und um die Authentizität des Schlüsselwortes zu garantieren, einzelne herausgepickte Charakteren des Schlüsselwortes hinzugerechnet.
Damit entsteht ein schlüsselspezifischer Wert !
Teil 6 - Das PSEUDO One-time-pad
Wie ich schon öfters erwähnt habe, bereu ich es diesen Begriff im Programm überhaupt benutzt zu haben. Vielleicht hier nochmal eine kurze Umschreibung des Themas aus einer wissenschaftlichen Arbeit:
"Soll eine Entschlüsselung durch Häufigkeitsanalyse verhindert werden, so darf ein Schlüssel nur für eine Nachricht verwendet werden und muss zudem ebenso lang wie die Nachricht sein. Ein solches Konzept gibt es bereits, es nennt sich One-Time-Pad
(Einmalblock) oder Vernam-Chiffre und wurde 1917 von Major Joseph Mauborgne und Gilbert Vernam von AT&T erfunden. Problematisch ist jedoch die Handhabung derart langer Schlüssel.
Das klassische One-Time-Pad besteht aus nichts weiter als einer sehr langen Folge von zufällig gewählten Schlüsselbuchstaben, die auf mehrere Blätter Papier geschrieben und zu einem Block zusammengeklebt werden. (Ursprünglich handelte es sich um einen Lochstreifen für Fernschreiber.) Der Sender einer Nachricht chiffriert jedes Klartextzeichen mit einem Schlüsselbuchstaben auf seinem One-Time-Pad. Dabei wird jeder Schlüsselbuchstabe nur genau einmal und nur in einer einzigen Nachricht verwendet. Die benutzten Blockseiten, bzw. Lochstreifenabschnitte, werden vernichtet. Der Empfänger besitzt einen identischen Block und dekodiert die einzelnen Buchstaben des Chiffres anhand der Schlüsselzeichen auf seinem Block. Danach werden auch hier
die Blockseiten bzw. Lochstreifenabschnitte vernichtet. Bei einer neuen Nachricht werden neue Schlüsselbuchstaben verwendet.
Handelt es sich beim Schlüssel eine gleichverteilte Zufallsfolge von Buchstaben und es erlangt niemand Zugriff auf das One-Time-Pad, das zur Verschlüsselung der Nachricht verwendet wurde, ist dieses Konzept absolut sicher. Dies liegt daran, dass es ebenso
viele mögliche Schlüssel wie mögliche Klartexte gibt, somit kann ein bestimmter Chiffretext mit derselben Wahrscheinlichkeit zu jedem der rekonstruierbaren Klartexte der gleichen Länge gehören. Dass man sich auch weiterhin mit anderen Chiffrierverfahren befasst, obwohl ein absolut sicheres Verfahren bekannt ist, liegt an den Nachteilen des One-Time-Pads:
1) Der Schlüssel muss genauso lang sein wie der Klartext und dem Empfänger vorliegen.
2) Jeder Schlüssel wird nur ein einziges Mal verwendet und muss sicher vernichtet werden.
Des weiteren stellt sich die Frage der Übermittlung eines solchen Schlüssels und zum Anderen muss die fehlerfreie Verwendung des selben sichergestellt sein. Daher ist das Verfahren für die Praxis im Allgemeinen nicht geeignet."
Im Klartext ein reelles One-time-pad ist programmiertechnisch nur schwer umsetzbar ! Stellen wir uns vor eine chiffrierte Nachricht ist für 3 Personen bestimmt, wie sollte man diese Nachricht den bei einem One-time-pad dechiffrieren ? Also muß der Grundgedanke in reproduzierbarer Form in einem Programm umgesetzt werden. Bei VigenerePro wird das dahingehend verwirklicht, indem ein REPRODUZIERBARES One-time-pad erstellt wird, also ein Schlüsselwort in Gesamttextlänge, das aber auch jederzeit am anderen Ende der Leitung wird hergestellt werden kann. Vielleicht wäre hier ein Name wie long-password-system angebrachter ?! Nun gut - zur Umsetzung benötigt man also einen reproduzierbaren Zufallsgenerator. Ich habe mich bei VigenerePro für einen "alten" in Turbo-Pascal geschriebenen Zufallsgenerator entschieden. Der Turbo-Pascal-Algorithmus:
CONST pi = 3.141592654;
VAR seed: REAL;
{---------------------------------------------------------------------------}
{ Zufallszahlen-Generator fuer reproduzierbare Folgen: }
FUNCTION random: REAL;
BEGIN
seed := seed - Trunc(seed);
random := seed;
seed := 997 * seed + pi;
END;
Die erzeugte Zufallszahl ist ein REAL-Wert. VigenerePro benötigt aber ein 2-stelligen Integerwert zur Umsetzung eines Charakters. Deshalb filtert das Programm aus dem Realwert 2 Zahlen heraus. Die Stellen der 2 Zahlen werde ich hier allerdings
nicht offenbaren !
Teil 6 - Das Vigenere-Quadrat
Der generierte Schlüssel wird wie üblich über den Klartext gelegt und chiffriert. Ich denke das Prinzip ist allen klar und bedarf keiner weiteren Erklärung.
So - das wars !
Noch Fragen dazu ?
Dann legt mal los !
Gruß
M66
einzelne herausgepickte Charakteren des Schlüsselwortes hinzugerechnet.
wie werden sie herausgespickt ? hinzugerechnet ist das plus , ja ?
Das berüchtigte Pseudo OTP ... ;)
das was du machst könnte man auch u.U. keyschedule nennen.
Aus dem Passwort werden entweder mehrere subkeys gebildet, oder ein grösserer.
aber das dünnt das passwort aus, da bei einem simplen verfahren als beispiel :
P a s s w o r t
|
v
P a w P s o o r t s
die gleichen zeichen natürlich häufiger vorkommen.
Die Stellen der 2 Zahlen werde ich hier allerdings
nicht offenbaren !
Warum nicht ? liegt das an der Programmiersprache ?
dies ist doch wichtig.
MfG && Glücklich, das ein Programmierautor sich so offen zeigt.
( Ist heutzutage bei Windows entwicklern leider selten :( )
Dennis
Ja, wirklich anerkennenswert von M66, dass er sich fürs Review seines Verfahrens so aufgeschlossen zeigt.
@Deknos
> key schedule
Damit hat sein Verfahren mE. nichts zu tun. Was er macht, ist "key expansion" (aus dem key wird eine PseudoRandomNumber-Folge abgeleitet), auch Standardbestandteil aktueller stream cipher-Algos.
> Ziffernpositionen nicht offen gelegt aber wichtig?
Warum? Dem Autor gehts um die Beurteilung der Sicherheit seines Verfahrens. Das ist mit den gegebenen Informationen möglich.
Die zusätzlichen Infos brauche ich zum konkreten Knacken der Verschlüsselung, was über die Intention des Autors hinausgeht, schliesslich ist das Verfahren bereits im Einsatz.
> Das berüchtigte Pseudo OTP
(Was stört mich nur an so plakativen Aussagen?)
Man sollte Aussagen über die Unsicherheit von Pseudo OTP nicht missverstehen.
Das wird von Kryptologen nur deshalb so betont, weil sich viele Bastler auf die bekannte absolute Sicherheit von OTP berufen, und verschweigen, dass diese bei Verwendung von PseudoRandomNumbers nicht mehr gegeben ist.
Die tatsächliche (praktische) Sicherheit von Pseudo OTPs (wie z.B. RC4) hängt aber stets von der Güte des PseuRandomNumber-Generators ab (und von evtl. Implementierungsfehlern).
Zum Zufallszahlengenerator - Da stimmt noch was nicht:
Soweit beschrieben wird aus dem Passwort ein Integerwert produziert.
Dieser würde an der Zeile: seed := seed - Trunc(seed);
aber stets auf 0 geschmissen.
Zwei Schwächen fallen auf:
1) Der Random-Algo verwendet real (32bit), da es nur auf die Mantisse (24bit) ankommt, haben
wir maximal so 17Mio Zustände. Das lässt sich Brute-forcen.
-> Ausweichen auf einen anderen Algo.
2) Passwort-Zeichen zu addieren verschenkt einen Haufen Information.
(z.B. Zeichen aus a..t: Variation 1 Zeichen: 20, Variation 20 Zeichen: 400).
-> Besser über Faktoren gewichten oder gleich einen erprobten Hash-Algo benutzen.
Fazit: Das Verfahren ist sehr anfällig für Angriff auf den Seed
Vorgehen zum Cracken:
1) Nachbau des RandomNumberGenerators
2) Brute Force: jeweils so ca 30 Zeichen erzeugen, deVigenère, plausibilisieren
3) Gesamttext deViginère,
4) Permutation analysieren (z.B. Chosen Plaintext)
Ich machs nicht, vielleicht solltest Du einen moderaten Preis aussetzen, dann reizts vielleicht irgendeinen Junior-Cracker.
Falls diese Schwächen ausgeräumt sind (Version 1.1?), ist das Verfahren m.E. recht sicher, soll heissen unter einer Ciphertextlänge von 10KB dürfte mit Statistik wohl nichts zu machen sein.
Ich klink mich jetzt aus, hab schon zuviel Zeit reingesteckt, ausserdem nervts dass sich kein anderer engagiert.
@deWalk:
keyschedule vs. keyexpansion
Du hast recht.
Warum? Dem Autor gehts um die Beurteilung der Sicherheit seines Verfahrens. Das ist mit den gegebenen Informationen möglich.
Für dich, aber für andere ?
..was über die Intention des Autors hinausgeht, schliesslich ist das Verfahren bereits im Einsatz.
versteh ich das richtig, dass du auf den Versuch verzichtest, das Verfahren vollständig zu brechen ?
(Was stört mich nur an so plakativen Aussagen?)
Man sollte Aussagen über die Unsicherheit von Pseudo OTP nicht missverstehen.
Das wird von Kryptologen nur deshalb so betont, weil sich viele Bastler auf die bekannte absolute Sicherheit von OTP berufen, und verschweigen, dass diese bei Verwendung von PseudoRandomNumbers nicht mehr gegeben ist.
Mein ich ja....
Wenn man sci.crypt mitliesst, kann man das regelmässig von den "hobbybastlern" bemerken.
Sorry,
war ein paar Tage nicht im Netz !
Ok - zum Zufallsgenerator nochmal. Ein kleines Testprogramm hierzu könnte Ihr hier downloaden:
http://www.venilia.de/dload/Rand.zip
Bei der Eingabe einer "Basiszahl" erstellt der (Pseudo) Zufallsgenerator 40 Zufallsfolgen. Der Pascalquellcode wurde von mir natürlich in Profan umgeschrieben. Bei den Zufallszahlen erhalte ich Realwerte (= Float = Fließkomma-Zahlen). Diese Werte sind so nicht für das Programm verwertbar ! Deshalb werden daraus nur 2 Werte herausgepickt und verwendet. Beispiel: Zufallswert 213.143852 - man könnte z.B. jetzt den 2ten Wert (also 1) und die 3te Nachkommastelle (also 3) herausfiltern und zusammenfügen. Ich erhielte also z.B. dann den Wert 13. Dieser Wert ist dann verwertbar !
Warum gebe ich die Stellen des Zufallswertes nicht preis bzw. die des Schlüsselwortes ? Ganz einfach, diese Stellen sind unrelevant da sie variabel sind ! Sie können jederzeit geändert werden. Deshalb stellen sie keinen zuverlässigen Indikator für eine Dechiffrierung da !!! Zur Zeit sind Sie im Programm statisch, könnten aber genauso gut variabel programmiert werden.
Dann nochmals zur Dechiffrierung. Kryptoanalysen hin, Kryptoanalysen her - das System ist für mich erst dann unsicher wenn jemand den hinterlegten Text knacken kann. Hier nochmal die Downloadadressen:
http://www.venilia.de/dload/Test1.txt
oder mit dem Dechiffrierer von VigenerePro:
http://www.venilia.de/dload/VPRO.ZIP
Was interessieren irgendwelche Analysen mit deren Werte man nichts Anfangen kann - das kann ich als jemand der chem. Analyen durchführt durchaus so mal im Raum werfen.
Bezüglich Brute-Force-Attack: Bereits in meiner Hilfe weise ich auf die Gefahr dieser Hackermethode hin. Das System STEHT und FÄLLT mit dem SCHLÜSSELWORT ! Ein unsicheres Schlüsselwort wie z.B. OTTO usw. bietet NATÜRLICH keine Sicherheit. Aber auch wenn man den Text mit dieser Attacke knackt, so ist das System doch nicht unsicher ! Auch einen Text den man z.B. mit Blowfish verschlüsselt hat und hierbei nur einen Buchstaben z.B. "A" verwendet hat, ist mit dieser Methode knackbar ! Ist Blowfish deshalb ein unsicheres System ?
Sollte bis zum 22 Sept. niemand den Text geknackt haben - ich denke diese 1 Woche reicht aus, da das Programm ja scheinbar einige Unsicherheitsfaktoren aufweist - gebe ich das Schlüsselwort bekannt. OK ?
Bis die Tage
M66
Eigentlich wollte ich mich ja raushalten, aber der letzte Post von M66 und sein etwas widersprüchliches Verhalten sind mir denn doch sauer aufgestossen.
Einerseits hält er Details zurück ("unrelevant, ... können jederzeit geändert werden"), andrerseits pocht er aber penetrant auf sein 'Hic Rhodos, hic salta' ("... für mich erst dann unsicher wenn jemand den hinterlegten Text knacken kann").
Einerseits diskutiert er sein Verfahren hier, und stellt auch bereitwillig Material zur Verfügung, andrerseits interessieren ihn Analysen nicht ("Was interessieren irgendwelche Analysen mit deren Werte man nichts Anfangen kann").
Unter diesen Umständen spare ich mir weitere Analyse (Schwachstellen, Verbesserungen), und gebe stattdessen konkrete Dechiffrierungen:
-> Posting Nr 7: Password deWalk-wzuz ergibt
Der Mathematiker Leon Battista ... entwickelte damit ein erstes polyalphabetisches Verfahren.
-> Download (s. letztes Posting): Password deWalk-lza ergibt
Es war zur großen Trockenzeit ... "Es tut mir leid, Consuelo. Lo siento mucho."
(Übrigens ein interessanter Text, wo ist der raus?)
(Passworte erzeugt mit beiligendem VB-Modul)
-------------------------------------------------------------------------------
Für die Interessierten stelle ich mal mein Vorgehen dar (Achtung M66: dabei nehm ich auch Bezug auf meine vorigen Analysen).
-------------------------------------------------------------------------------
Prinzipielles Vorgehen s. mein letztes Posting, dort ist auch die ausgenutzte Password-Hash-Schwäche beschrieben.
Am aufwendigsten war der Nachbau des Zufallsgenerators, der von M66 dankenswerterweise bereitgestellt wurde (random.exe). Zu klären:
1) Rechengenauigkeit
-> 8Byte-Gleitkomma, auch bei Zwischenergebnissen (aus Profan-Doku)
2) Umrechnung Eingabe -> initialer Seed
-> Aus 1. Zufallszahl wird der initiale Seed zurückgerechnet.
Dieser ist Seed=Konstante*Eingabe, mit Konstante = 1/Pi.
Anm: der (abgeschnittene) Ganzzahl-Anteil lässt sich bestimmen
3) Anzahl Iterationen vor Ausgabe
-> anscheinend legt der Zufallsgenerator manchmal Zusatziterationen ein,
nähere Untersuchung bringt Kriterium (seed vor iter < 0.06)
4) Abgezapfter Wert für OTP
-> Zunächst wird aus VigenerePro eine Zufallszahlenfolge (PAD-Stream) bestimmt:
Hierzu verschlüsselt man eine lange Folge gleicher Zeichen mit einem einfachen Schlüssel ("x"=asc(120)). Da die Zeichen gleich sind, haben Permutationen keine Auswirkung.
Der bekannte Vigenere-Algo liefert direkt die verwendete Zufallszahlenfolge.
-> Vergleich mit per Zufallsgenerator erzeugten Folgen für Eingaben der Form x*120+y ergibt einerseits die verwendeten Stellen, andrerseits den Initialseed 240/Pi.
Als nächstes bestimmt man dem Algo für die Umsetzung Password->Initialseed.
Hierzu variiert man das eingegebene Passwort, liest aus Ciphertext den PAD-Stream,
und bestimmt den Initialseed. Ergebnis: Summe Asci, erstes und jedes 3. Zeichen zählt doppelt.
Damit steht einem BF-Angriff auf den Initialseed bei Ciphertext-only nichts mehr im Wege:
Seed= 1/Pi ... 10000/Pi, DeVigenere, plausibilisieren.
Aus den erhaltenen Seeds lässt sich dann ein passendes Password zurückrechnen, und in VigenerePro eingeben.
Anm: Die Permutationen erledigt also VigenerePro, deren (nicht komplizierte, aber arbeitsaufwendige) Bestimmung kann man sich also sparen.
Wie schrieb M66 so schön: "Brute-Force-Attack: ... Das System STEHT und FÄLLT mit dem SCHLÜSSELWORT":
Das stimmt halt blos für sichere Verfahren ohne Implementierungschwächen.
Eine solche (der schlechte Password-Hash) macht hier einen BF-Angriff auf den Seed möglich, unabhängig vom gewählten Schlüsselwort.
tja, war wohl doch ein Flop mein Progi !
Ich halte natürlich mein Versprechen und nehme das Programm, daß mir ne Menge Nerven gekostet hat aus dem Sortiment.
Werd mich in Zukunft besser anderen Bereichen widmen.
Der Text ist übrigens von "Starhawk - Das fünfte Geheimnis", erschienen im Hannah-Verlag und dort auch kostenlos downloadbar. Adresse: http://www.hannah-verlag.de
Gruß an alle
M66
Addie Asbach
18.09.2002, 20:28
Dein Programm war doch gar nicht so schlecht. deWalk hat ja genau beschrieben wie er zu dem Ergebnis gekommen ist. Wenn du die Schwachstellen ausbügelst, ist das Programm meiner Ansicht nach immer noch zu gebrauchen.
Ich finde es sogar ziemlich gut, wenn man nicht nur auf die angesehenen Algorithmen (wie z.B. Blowfish) setzt, sondern schwächere Algorithmen mit eigenem Gehirnschmalz zu verbessern versucht. Wenns nicht gleich auf Anhieb klappt, dann muss man halt noch etwas optimieren...
Danke deWalk, dass du dein Vorgehen genau geschildert hast - einfach genial wie du vorgegangen bist. Es war sehr interessant, das Ganze mitzuverfolgen!
Gruß,
Addie Asbach
Finde das Prog. eigentlich auch nicht schlecht, wär schade drum.
(Hatte im Geiste schon Version 1.1 vor mir gesehen:
abwärtskompatibel mit Version 1.0:
enthält Ciphertext in 1. Zeile "***...Version 1.1 ***" dann Version 1.1, sonst Entschlüsselung mit Version 1.0
Modifikation verbesserte Password->Seed-Umwandlung:
a la: i=1..len: x = x / 256 + ord(password[i])
Modifikation: andere Stellen des Seeds für OTP abzapfen
Passwort Mindestlänge 6 Zeichen
)
@M66
(Danke für den Roman-Link.)
Eine Bitte: Besteht irgendeine Möglichkeit, das Prog. auf Venilia oder im Board zu konservieren, damit spätere Leser die Sache nachvollziehen können?
hab ich ihm auch schon gemailt, aber er reagiert nicht :(
alleskot
13.08.2004, 16:50
Nett nett hat noch jemand das Prog und die random.exe
würde das ja auch mal gerne durch spielen...