Blowfish Verschlüsselung wohin mt dem Schlüssel?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Levario
Beiträge: 44
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.8 FPC 3.04)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von Levario »

Hallo zusammen,

ich habe eine Datenbank programmiert in der ich ein Passwort ablegen möchte. Dieses soll verschlüsselt abgelegt werden und nur in der Software entschlüsselt angezeigt werden können. Mann kennt es, das ein Auge als Bild gibt bei dem das Passwort angezeigt wird. Ich habe daher eine Blowfish Verschlüsselung genommen. Nun ist die Frage wo speichert man den Verschlüssungsschlüssel?

Im Quelltext, In der Datenbank oder einen Teil im Quelltext und einen Teil in der Datenbank. Diese müssten ja im Klartext gespeichert werden. Ist der Quelltext sicher solange man nur eine .exe weiter gibt? Gibt es für solche Verschlüsselungen einen Standard?

Wie hand habt man das bei einer OpenSource Software legt der Nutzer diesen Schlüssel selbst fest?

Vielen Dank für euer Wissen!
Gruß Levi
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

corpsman
Beiträge: 1183
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von corpsman »

Hallo Levario,

Eine Datenbank in der man Passwörter Ablegt nennt sich Passwortmanager, ich hab da auch einen gemacht und der ist hier (sammt Quellcode).

Ein Passwort ab zu speichern, egal wo ist generell nicht sicher. Der Passwortmanager ist da keine Ausnahme. Die Sicherheit kommt daher das niemand das Passwort kennt (und das Verfahren zum Ver und Entschlüsseln Offen und geprüft ist). Bei Meinem Programm ist es auch so ( viewtopic.php?f=18&t=13194 ), vergisst du das Passwort sind alle deine Passwörter Weg.

In deinem Fall würde ich den User inital nach einem Passwort fragen das er jedes mal eingeben soll wenn dein Programm auf die Datenbank zugreifen soll, Wenn du unbedingt "Komfort" haben willst, dann speicherst du dir das passwort im RAM irgendwo, so lange deine Anwendung offen ist, das sollte dann aber möglichst kurz sein.
--
Just try it

Levario
Beiträge: 44
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.8 FPC 3.04)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von Levario »

Also z.B. bei der Installation eine Schlüsseldatei mit 256Bit erstellen und auf einem externen Medium kopieren und als zusätzlichen Schlüssel zum einbinden beim Login verwenden. Hört sich gut an.

Vielen Dnak für den Denkanstoß.
Dachte mir das sich da schon mal jemand gedanken zu gemacht hat.

Ich denke einen PIN oder ein Passwort kann man vergessen, aber auch einen USB Stick kann man verlieren oder verbummeln :) No Risk no FUN :)
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

corpsman
Beiträge: 1183
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von corpsman »

Programme wie VeraCrypt kombinieren das, da gibts ne Keyfile und ein Passwort.

Und ja deswegen setzt man Passwortmanager ein, so muss sich der Mensch nur 1 Passwort merken und kann dennoch für zig unterschiedliche Dinge zig Passwörter haben. Seit ich meinen PWM nutze hab ich auch alle PW's bis auf eines vergessen, bzw mittlerweile die alten "einfachen" Passwörter durch neue generierte ersetzt, seit der neuesten Version des PWM unterstützt dieser MultiUser, damit kannst du dann wenn du große Angst vorm "Vergessen" hast bestimmte super wichtige Passwörter mit vertrauenswürdigen Personen Teilen. In meiner Datenbank hat jedes Familienmitglied einen Eigenen Account, aber die Kids haben dadurch z.B. keinen Zugriff auf meine Bankdaten ...

Ein Sicherheitsforscher meinte mal "das Beste Passwort ist das, welches der User selbst nicht kennt" ;)

Ganz auf das Passwort würde ich aber nicht verzichten wollen, denn du willst ja verhindern, dass jemand deinen Rechner Hackt die Platte Kopiert oder dir den USB-Stick Klaut und dann ohne Aufwand an deine PW's kommt.

Ich selbst behandle meine Verschlüsselte Datenbank wie alle meine anderen Daten auch (sie werden gebackuped) -> Damit kann ich theoretisch meinen Rechner verlieren, die PW's bleiben geschützt und dank der Bakups kann ich sie wieder herstellen.
--
Just try it

Levario
Beiträge: 44
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.8 FPC 3.04)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von Levario »

Das ist nochbesser. Ich kenne nur den Keepass als Passwort-Save. Vielen Dank für dein Wissen!
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

Warf
Beiträge: 1557
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von Warf »

corpsman hat geschrieben:
Di 6. Apr 2021, 07:14
In deinem Fall würde ich den User inital nach einem Passwort fragen das er jedes mal eingeben soll wenn dein Programm auf die Datenbank zugreifen soll, Wenn du unbedingt "Komfort" haben willst, dann speicherst du dir das passwort im RAM irgendwo, so lange deine Anwendung offen ist, das sollte dann aber möglichst kurz sein.
Auf gar keinen Fall das Passwort im klartext RAM ablegen. Vor einer verschlüsselung muss das Passwort sowieso auf die entsprechende Größe für die Verschlüsselung gebracht werden (z.B. 128, 192 oder 256 bit für AES) und dafür benutzt man normalerweise Hashing algorithmen. Wenn du das Passwort im RAM halten willst, dann solltest du es über den Hash machen. Der Grund dafür ist das über Sicherheitslücken wie Meltdown oder Spectre programme den RAM anderer programme auslesen können. Diese konnten sogar über Javascript ausgelöst werden (die meisten Browser haben das gefixt), d.h. eine Website könnte Javascript code Deployen der deine Passwörter mittels dieser Schwachstellen ausließt, stielt und hochläd, und das obwohl websiten eigentlich gesandboxed sind.

Dann kann man zwar den Hash stehlen und damit dein Programm benutzen, aber das wars dann auch. Das Grundproblem ist das Nutzer unfassbar schlecht mit Passwörtern sind, die meißten benutzen das selbe passwort für alle dienste. Wenn also jemand das Passwort für deine Anwendung stielt, hat man meist gleichzeitig das Passwort zum e-mail zugang, banking, social media und viel mehr.

An dieser Stelle sollte man dann auch einen Salt verwenden, um Rainbow Table angriffe zum cracken des Hashs zu vermeiden.

Schlüsseldateien sehe ich etwas kritisch, da usb sticks unerwartet kaputt oder verloren gehen können. Die schlüsseldatei auf dem rechner selbst liegen zu haben ist wiederum selbst sinnlos, da das das virtuelle Äquivalent zu dem Schlüssel unter der Fußmatte ist. Also entweder hat man die Schlüsseldatei extern und läuft gefahr sich selbst auszuschließen, oder man hat die schlüsseldatei lokal oder auf irgendeinem Server auf den man einfachen zugriff hat, dann bringt das aber keine extra Sicherheit, denn wenn die Schlüsseldatei einfach zugängilch für dich ist, ist sie das auch für einen Angreifer.
Nicht Falsch verstehen, Schlüsseldateien können die Sicherheit enorm erhöhen, aber mir sind schon so viele USB sticks kaputt gegangen mit z.T. wichtigen informationen drauf (z.B. mein PGP master key), das ich mich nicht mehr darauf verlasse das ich einen USB stick mit irgendwelchen schlüsseldaten zur hand habe

Levario
Beiträge: 44
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.8 FPC 3.04)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von Levario »

Alles gut, deshalb frage ich ja. Genau solche Anregungen benötige ich. Danke Warf !
Zuletzt geändert von Levario am Di 6. Apr 2021, 11:35, insgesamt 1-mal geändert.
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

Levario
Beiträge: 44
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.8 FPC 3.04)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von Levario »

Die Frage ist halt auch,
-Was ist hier Best Practice
-und für den Anwender noch handlebar?
-Welche Sicherheit benötigt man?
-Gibt es da gesetzliche Vorgaben?
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

corpsman
Beiträge: 1183
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von corpsman »

Auf gar keinen Fall das Passwort im klartext RAM ablegen.

Sein Problem ist aber das er das PW anzeigen will, das heist egal wie er es anstellt irgendwann muss das PW in den Ram damit es angezeigt werden kann. Ganz um diese Lösung kommt er also nicht Rum.
Der Hash hilft dir wenn du den User dazu kriegst immer wieder das PW ein zu geben.

Hier trifft dann die Usability auf die Sicherheit. Wie weit du da gehen kannst hängt extrem von deinen Usern ab. Bei mir ist es z.B. das ich mein Programm starte PW eingebe, das pw für den Zugang in den zwischenspeicher ziehe (zum pasten in der Eingabemaske) und dann mein programm beende (das dann auch automatisch den zwischenspeicher überschreibt und dann zurücksetzt). => ich gebe also für jedes Passwort das ich benötige mein DB Passwort neu ein.

Und ja salting hatte ich vergessen, das solltest du auch machen, wie das z.B. Geht kannst im Source von meinem Programm nachschauen. Dort setze ich im übrigen das Rjindal ein, weil das wohl noch "besser" sein soll.
--
Just try it

Warf
Beiträge: 1557
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Blowfish Verschlüsselung wohin mt dem Schlüssel?

Beitrag von Warf »

Eine sache kann ich dir schonmal direkt sagen, Blowfish zu benutzen ist schonmal keine best practice, da es bereits schon einen Nachfolgealgorithmus (Twofish) vom selben Entwickler gibt, der selbst sagt man solle nicht mehr Blowfish verwenden und stattdessen zu Twofish wechseln. Man sieht hier häufiger das Leute gerne Blowfish verwenden, ich gehe mal davon aus das das was damit zu tun hat das es eine Blowfish unit gibt die man ohne Zusatzkomponenten benutzen kann, aber es ist definitiv nicht mehr zeitgemäß

Aber mal ganz allgemein wenn man was mit Crypto macht, empfieht es sich die Technischen Richtlienen des BSI einzuhalten: Link

An Gesetzlichen vorgaben gibt es in Deutschland das IT-Sicherheitsgesetz (Link) sowie das BSI-Gesetz (Link). Diese Gesetze betreffen allerdings nur bestimmte Branchen (Telekomunikationsunternehmen, Kritische Infrastruktur), solang dein Program also nicht benutzt wird um eine Kerntechnische Anlage zu steuern bist du Gesetzmäßig natürlich nicht wirklich zu irgendwas verpflichtet.

Natürlich hast du eine Verpflichtung gegenüber deinen Kunden. Hier wird gerne der Ausdruck "Stand der Kunst" oder "Stand der Technik", denn, solang nicht anders vereinbart bist du dazu verpflichtet einem Kunden die best mögliche Software abzuliefern, und der beste Weg das zu tun ist es sich an den Stand der Technik zu halten. Zum Beispiel würdest du für ein Verifikationssystem MD5 als Checksumme zu verwenden, was nach dem Stand der Technik als unsicher gilt, kannst du für eventuelle Schäden haften. Benutzt du allerdings SHA-256 benutzt bist du auf der sicheren Seite, da dies Stand der Technik der vom BSI empfohlen wird.
Natürlich kann es Gründe geben die die Verwendung von Technologien rechtfertigen die nicht auf dem Stand der Kunst sind, z.B. kann in einem nicht sicherheits kritischen system md5 zum integritätstest für große Dateien verwendet werden, da die berechnung deutlich schneller ist als die SHA Familie. Du musst aber immer im hinterkopf behalten, wenn du eine Technologie verwendest die nicht nach dem Stand der Kunst als solche anerkannt ist, solltest du besser eine gute Begründung haben warum du die benutzt.
Das gilt aber natürlich nur für Auftragsarbeiten. Wenn du wiederum eine Software als paket verkäufst, solang du sie nicht anders bewirbst, kannst du da machen was du willst (Also du kannst die Software nicht als State of the Art Sicherheit verkaufen und dann MD5 verwenden).

Das alles aber natürlich mit einem Körnchen Salz nehmen, ich bin kein Anwalt, das ist nur das wie es mir im Studium erklärt wurde. Das ist auch ein paar Jährchen her, ist aber denke ich im allgemeinen immernoch richtig.

Generell kann ich die Website des BSI empfehlen, ein paar Seiten die ich mal beim benutzen der Suchfunktion gefunden habe die von Relevanz sein könnten:
https://www.bsi.bund.de/DE/Themen/Verbr ... _node.html
https://www.bsi.bund.de/DE/Themen/Unter ... _node.html
https://www.allianz-fuer-cybersicherhei ... /con1.html

Antworten