Hallo Community
Name:
PwKeySetHolder
Verwendete Programmiersprache(n) und IDE(s):
Dll: VS 2017 - FW 4.7.1 - C# 7.3
TestForm: VS 2017 - FW 4.7.1 - VB.NET
Screenshot(s):
Systemanforderungen:
Windows 10
Lizenz/Weitergabe:
Freeware; Closed
Beschreibung:
Für das Generieren und Aufbewahren von einem KeySet bzw. von Passwörtern während der Laufzeit habe ich hier eine kleine Dll (Assembly) mit dem Namen PwKeySetHolder erstellt.
PwKeySetHolder verwaltet das verkryptete KeySet als Byte-Array, nimmt aber nur Jagged-Byte-Arrays entgegen, oder gib sie so wieder aus. Es kann jederzeit ein neues KeySet generiert werden, das verkryptet im Arbeitsspeicher aufbewahrt wird. Dazu generiert PwKeySetHolder wiederum jeweils eigene neue Parameter für den internen Schlüsselsatz, die auch verkryptet im Arbeitsspeicher vorliegen.
Wer möchte, kann das KeySet mittels Eingabe eines persönlichen Passwortes auf die HDD ablegen, und zum späteren Zeitpunkt wieder (mit Passworteingabe) einlesen für den weiteren Gebrauch.
Es können auch eigene KeySet dem Programm zugeführt werden. PwKeySetHolder nimmt den Schlüsselsatz als Klartext entgegen, und bewahrt es (während der Laufzeit) für die weitere Verwendung sicher auf.
Für das Versenden eines Keyset erstellt PwKeySetHolder ein CipherPackage und ein dafür vorgesehenes Passwort, dass z.B. mit dem Diffie-Hellman-Verfahren problemlos übers I-Net weitergereicht werden kann. Es liegt hierzu ein kleines Beispiel vor.
Verkryptung des KeySet / interner Schlüsselsatz
PwKeySetHolder verkryptet das KeySet mittel AES. PwKeySetHolder verwendet dazu ein eigener interner Schlüsselsatz, der mit ProtectedData verschlüsselt wird. Sobald ein neuer KeySet generiert bzw. importiert wird erstellt PwKeySetHolder jeweils ein neuer interner Schlüsselsatz für die Verwendung mittels AES. So ist es möglich, dass mit einem kleinen internen Schlüsselsatz ein sehr grosser KeySet (Millionen von Byte) problemlos verschlüsselt und verwaltet werden kann.
Die Nutzung von PwKeySetHolder sollte eigentlich fast selbsterklärend sein. Hier noch eine kleine Erläuterung.
Erstellen eines neuen KeySet
Nach der Instanziierung von PwKeySetHolder kann mit der Methode CreateNewKeySet(PARAMETER) ein neues KeySet erstellt werden. Dazu gibt es mehrere Überladungen, die man sich am Besten kurz anschaut.
Mit der Methode ToPwKeySet() kann das KeySet wieder als Klartext extrahiert werden.
Verwendung eines eigenen KeySet
Wer sein eigenes Passwort in PwKeySetHolder einfliessen lassen will, kann das mit der Methode ImportKeySet(PARAMETER) bewerkstelligen. Dazu ist eine Jaggend-Byte-Array vorgesehen.
Ein Passwort, das als String vorliegt, muss also vorher in eine Jagged-Byte-Array umgewandelt werden.
Nun kann das eigene Passwort in PwKeySetHolder eingespielt werden.
Sicherungspackage eines KeySet
Um das KeySet sicher von einem Ort zu einem anderen Ort zu übertragen (z.B. übers I-Net), kann man sich ein DispatchData erstellen lassen.
DispatchData gibt ein verkryptetes CipherPackage aus, wie auch ein Passwort als Klartext. Für die sichere Übertragung eignet sich z.B. das Diffie-Hellman-Verfahren. Hierzu gibt es im Unittest ein Beispiel.
Ich hoffe das Problem mit der Hart-Codierung des Passwortes im Code hat sich hiermit erledigt.
Viel Spass beim Testen
Freundliche Grüsse
exc-jdbi
Anmerkung:
Obwohl Closed, darf bezugnehmend auf den Code der mit einem IL-Converter jederzeit angeschaut werden kann, für weitere Dialoge im Forum wie Anmerkungen, Vorschläge etc. verwendet werden.
EDIT:
Version2: Mit GcHandle und Rfc2898DeriveBytes ist ersetzt worden durch eine HMACSHA512-Variante
Name:
PwKeySetHolder
Verwendete Programmiersprache(n) und IDE(s):
Dll: VS 2017 - FW 4.7.1 - C# 7.3
TestForm: VS 2017 - FW 4.7.1 - VB.NET
Screenshot(s):
Systemanforderungen:
Windows 10
Lizenz/Weitergabe:
Freeware; Closed
Beschreibung:
Für das Generieren und Aufbewahren von einem KeySet bzw. von Passwörtern während der Laufzeit habe ich hier eine kleine Dll (Assembly) mit dem Namen PwKeySetHolder erstellt.
PwKeySetHolder verwaltet das verkryptete KeySet als Byte-Array, nimmt aber nur Jagged-Byte-Arrays entgegen, oder gib sie so wieder aus. Es kann jederzeit ein neues KeySet generiert werden, das verkryptet im Arbeitsspeicher aufbewahrt wird. Dazu generiert PwKeySetHolder wiederum jeweils eigene neue Parameter für den internen Schlüsselsatz, die auch verkryptet im Arbeitsspeicher vorliegen.
Wer möchte, kann das KeySet mittels Eingabe eines persönlichen Passwortes auf die HDD ablegen, und zum späteren Zeitpunkt wieder (mit Passworteingabe) einlesen für den weiteren Gebrauch.
Es können auch eigene KeySet dem Programm zugeführt werden. PwKeySetHolder nimmt den Schlüsselsatz als Klartext entgegen, und bewahrt es (während der Laufzeit) für die weitere Verwendung sicher auf.
Für das Versenden eines Keyset erstellt PwKeySetHolder ein CipherPackage und ein dafür vorgesehenes Passwort, dass z.B. mit dem Diffie-Hellman-Verfahren problemlos übers I-Net weitergereicht werden kann. Es liegt hierzu ein kleines Beispiel vor.
Verkryptung des KeySet / interner Schlüsselsatz
PwKeySetHolder verkryptet das KeySet mittel AES. PwKeySetHolder verwendet dazu ein eigener interner Schlüsselsatz, der mit ProtectedData verschlüsselt wird. Sobald ein neuer KeySet generiert bzw. importiert wird erstellt PwKeySetHolder jeweils ein neuer interner Schlüsselsatz für die Verwendung mittels AES. So ist es möglich, dass mit einem kleinen internen Schlüsselsatz ein sehr grosser KeySet (Millionen von Byte) problemlos verschlüsselt und verwaltet werden kann.
Die Nutzung von PwKeySetHolder sollte eigentlich fast selbsterklärend sein. Hier noch eine kleine Erläuterung.
Erstellen eines neuen KeySet
Nach der Instanziierung von PwKeySetHolder kann mit der Methode CreateNewKeySet(PARAMETER) ein neues KeySet erstellt werden. Dazu gibt es mehrere Überladungen, die man sich am Besten kurz anschaut.
Mit der Methode ToPwKeySet() kann das KeySet wieder als Klartext extrahiert werden.
Verwendung eines eigenen KeySet
Wer sein eigenes Passwort in PwKeySetHolder einfliessen lassen will, kann das mit der Methode ImportKeySet(PARAMETER) bewerkstelligen. Dazu ist eine Jaggend-Byte-Array vorgesehen.
Ein Passwort, das als String vorliegt, muss also vorher in eine Jagged-Byte-Array umgewandelt werden.
Nun kann das eigene Passwort in PwKeySetHolder eingespielt werden.
Sicherungspackage eines KeySet
Um das KeySet sicher von einem Ort zu einem anderen Ort zu übertragen (z.B. übers I-Net), kann man sich ein DispatchData erstellen lassen.
DispatchData gibt ein verkryptetes CipherPackage aus, wie auch ein Passwort als Klartext. Für die sichere Übertragung eignet sich z.B. das Diffie-Hellman-Verfahren. Hierzu gibt es im Unittest ein Beispiel.
VB.NET-Quellcode
- ' ... und wieder zurück
- Using pks = New PwKeySetHolder
- 'DispatchData-Instanz erstellen
- Using dispatch = New DispatchData With
- {
- .Plain_Password = password,
- .ChiperData = cipherpackage
- }
- 'DispatchDaten importieren
- pks.ImportDispatchData(dispatch)
- 'PlainKeySet extrahieren
- Dim ks = pks.ToPwKeySet
- End Using
- End Using
Ich hoffe das Problem mit der Hart-Codierung des Passwortes im Code hat sich hiermit erledigt.
Viel Spass beim Testen
Freundliche Grüsse
exc-jdbi
Anmerkung:
Obwohl Closed, darf bezugnehmend auf den Code der mit einem IL-Converter jederzeit angeschaut werden kann, für weitere Dialoge im Forum wie Anmerkungen, Vorschläge etc. verwendet werden.
EDIT:
Version2: Mit GcHandle und Rfc2898DeriveBytes ist ersetzt worden durch eine HMACSHA512-Variante
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „exc-jdbi“ ()