vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 564: Sichere Verschlüsselung (Vernam-Algorithmus) 
Autor: JAG
 Tipp anzeigenDatum: 29.12.08 12:43

Habe mir folgenden Tipp zum Verschlüsseln mit Vernam mal angeschaut, um etwas Text zu verschlüsseln.
http://www.vbarchiv.net/tipps/details.php?id=564

Außerdem wollte ich das Ganze ohne String-Variablen d.h. nur mit TextBoxen ausführen, um den verschlüsselten
Text anzuzeigen, markieren und kopieren zu können.

Bei den Tests sind mir dann aber zwei Sachen aufgefallen, welche man noch ändern muss, damit es auch klappt.
1. Wenn man die Verschlüsselung startet und kein Passwort eingegeben hat, kommt der Laufzeitfehler 5.
2. Zur Ausgabe des verschlüsselten Textes können nur String-Variablen genommen werden, da unter
gewissen Umständen die Ausgabe in eine TextBox nicht fehlerfrei ist (sh. folgende Beschreibung).

Bei der Umsetzung mit der Vernam-Funktion, wird bei zufälliger Übereinstimmung von einzelnen Zeichen
( z.B. ein „A“ an der gleichen Stelle im Passwort und im Originaltext ) im verschlüsselten Vernam-Code ein
NULL-Zeichen ( Chr(0) ) gesetzt.
Dies ist, wenn man den kompletten Code in eine String-Variable speichert ohne Bedeutung, da dort auch das
NULL-Zeichen mit gespeichert wird.
Nimmt man jedoch anstatt der String-Variablen dazu TextBoxen, oder auch Label, zur direkten Ausgabe bzw.
danach zur weiteren Nutzung des verschlüsselten Vernam-Codes, funktioniert das Ganze nicht mehr, da das
NULL-Zeichen in einer TextBox nicht dargestellt werden kann, aber auch im Zusammenhang mit Text als
Terminator verwendet wird und hier den Text ab der Stelle des ersten NULL-Zeichens abschneidet/terminiert.
(d.h. der Rest wird nicht mehr angezeigt)
Dies passiert aber auch wenn man die String-Variable in eine TextBox schiebt z.B. Text1.Text = String-Variable.
Ein Entschlüsseln dieses TextBox-Textes ist dann nicht mehr möglich, da der Text ja nur noch teilweise vorliegt.
Am Rande sei noch erwähnt, dass die Anzeige in einer MsgBox hierbei auch nicht korrekt ist.

Nun zu den Änderungen des Codes in der Vernam-Funktion um dies abzustellen:
Als Erstes eine Abfrage ob ein Originaltext oder ein Passwort eingegeben wurde. Wenn nicht, dann „Exit Funktion“.
Dann wird bei Übereinstimmung kein NULL-Zeichen mehr gesetzt, sondern stattdessen das Zeichen, welchen an
dieser Stelle übereinstimmte.
Einen Nachteil hat diese Ausführung aber dennoch (Dies wird zwar normalerweise nie vorkommen, aber ???).
Ist das Passwort gleich dem Originaltext, ist der verschlüsselte Text ebenfalls der gleiche wie der Originaltext.
Als Beispiel folgendes:
Ist der Originaltext = „Mustertext“ und das Passwort = „Mustertext“, ist auch die Verschlüsselung = „Mustertext“.
Um das dann noch abzustellen, wurde zusätzlich noch eine Verschiebung der Zeichen im Passwort vorgenommen.

Und nun der Code der überarbeiteten Vernam-Funktion, wobei die Änderungen gegenüber dem Original-Code
„fett“ dargestellt werden.

 ' Textverschlüsselung mit VernamCode
Public Function VernamCode(sOriginal As String, _
  sPassword As String) As String
 
  ' wenn nichts angegeben, wird auch nichts ver/entschlüsselt
  If sPassword = "" Or sOriginal = "" Then Exit Function
 
  Dim i As Long
  Dim aktpos As Long
  Dim bAkt As Byte
  Dim bCode As Byte
  Dim bPassword As String
 
  VernamCode = ""
  bPassword = ""
 
  ' Passwort auf die Länge des Originals bringen
  ' Aus "Passwort" wird dann "PasswortPasswortPas....usw."
  aktpos = 1
  For i = Len(sPassword) + 1 To Len(sOriginal)
    sPassword = sPassword & Mid(sPassword, aktpos, 1)
    aktpos = aktpos + 1
    If aktpos > Len(sPassword) Then aktpos = 1
  Next i
 
  ' einzelne Zeichen des Passwortes nochmals tauschen
  aktpos = 1
  For i = 1 To Len(sPassword)
    bPassword = bPassword & Chr(Asc(Mid(sPassword, i, 1)) - aktpos)
    aktpos = aktpos + 1
    If aktpos = 29 Then aktpos = 1
  Next i
 
  ' Verschlüsselung
  For i = 1 To Len(sOriginal)
    bAkt = Asc(Mid(sOriginal, i, 1))
    bCode = Asc(Mid(bPassword, i, 1))
 
    If bAkt = bCode Then
        VernamCode = VernamCode & Chr(bAkt)
    Else
        VernamCode = VernamCode & Chr(bAkt Xor bCode)
    End If
 
  Next i
 
End Function
Damit dürfte die Vernam-Funktion dann wohl in allen Situationen einsetzbar sein.

Als Letztes dann noch der Aufruf der Vernam-Funktion nur mit TextBoxen:
Private Sub cmdVerschlüsseln_Click()
Text3.Text = VernamCode(Text1.Text, Text2.Text)
End Sub
 
 
Private Sub cmdEntschlüsseln_Click()
Text4.Text = VernamCode(Text3.Text, Text2.Text)
End Sub
Sollte es noch etwas zum Verbessern geben, bitte melden.

Euch allen noch einen guten Rutsch und ein gesundes erfolgreiches neues Jahr.

Gruß JAG

PS.
Ein kleines Testprogramm (EXE) hierzu kann ich Interessenten zusenden.
(Bin ab 01.01.2009 ca. 3 1/2 Wochen nicht erreichbar)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sichere Verschlüsselung (Vernam-Algorithmus) 
Autor: NiWa
Datum: 18.09.10 19:10

Die gezeigte Verschlüsselung ist kein Vernam-Algorithmus, sondern eine simple XOR-Verschlüsselung. Der Vernam-Algorithmus gilt deswegen als mathematisch sicher, weil auf ein Klartextzeichen immer mindestens ein Passwortzeichen kommt. Wenn man beim hier gezeigten Algorithmus ein 10 Zeichen langes Passwort verwendet und einen 100 Zeichen langen Klartext hat, kann man schon mit einem Zeichen vom Passwort 10% des Klartextes herausfinden. Genau diese Unzulänglichkeiten behebt der echte Vernam-Algorithmus, was aber dazu führt, dass man für lange Texte auch lange Passwörter braucht. Deshalb werden heute fast immer wie in diesem Beispiel gekürzte Passwörter verwendet, die aber nicht mathematisch sicher sind und damit auch nicht dem Vernam-Algorithmus entsprechen.
Mathematisch sicher bedeutet, dass man ohne Passwort den Klartext nicht sehen kann. Im originalen Vernam-Algorithmus bedeutet das, dass man selbst mit einem teil vom Passwort auch nur den entsprechenden Teil des Klartextes sehen kann, bei der hier abgeschwächten Variante währen "rhythmisch" immer wieder Fragmente zu sehen, immer an den Stellen, an denen sich das Passwort wiederholt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sichere Verschlüsselung (Vernam-Algorithmus) 
Autor: ModeratorDaveS (Moderator)
Datum: 18.09.10 19:47

"Vernam" sprich "ein triviales Xor" ist sicher nur wenn richtig verwendet. Das bedeutet:

Der Schlüssel ist so lang wie der Klartext.

Der Schlüssel besteht nur aus einer mathematisch zufälligen Reihenfolge von Nummern (das bedeutet, die Zahlen lassen sich durch keine wiederherstellbare Komprimierung auf eine kürzere Sequenz reduzieren).

Der Schlüssel wird nur einmal verwendet (das heisst ein neuer Schlüssel bei jeder Übertragung, der natürlich dem Empfänger auch mitgeteilt werden muss).

"Vernam" oder "one time pad" ist also bei üblicher praxis völlig unbrauchbar.

Was du machst ist extrem schwach. Windows hat jede Menge echte Kryptofunktionen. Wer sicher sein will verwendet diese Methoden, oder noch besser überlässt solche "Sicherheit" den eingebauten Methoden wie EFS, Https, VPN usw.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sichere Verschlüsselung (Vernam-Algorithmus) 
Autor: NiWa
Datum: 18.09.10 20:22

Das entspricht in etwa dem, was ich gesagt hab.

> "Vernam" oder "one time pad" ist also bei üblicher praxis völlig unbrauchbar.

Ich hab ein Verfahren entwickelt, das bei annehmbarer Schlüssellänge die Vorteile beider Algorithmen kombiniert.
Dabei wird aus einem kurzen Key ein beliebig langer Key generiert, der dann für die Verschlüsselung mit Vernam verwendet werden kann. Dabei wird der Key allerdings nicht simpel wiederholt, sondern auf diverse Arten verlängert. Während dieser Verlängerung verändert jedes einzelne Bit im kurzen Key jedes Bit im langen Key drastisch, so dass man mit fast kompletten Keys ebenfalls nur Müll rausbekommt. Dieser Kompromiss aus Keylänge und Sicherheit ist imho akzeptabel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sichere Verschlüsselung (Vernam-Algorithmus) 
Autor: ModeratorDaveS (Moderator)
Datum: 18.09.10 21:31

Wenn du meinst. Ich werde mich weiterhin auf AES und RSA verlassen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel