Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Passworte: eierlegende Wollmilchsau gesucht (https://www.delphipraxis.net/211187-passworte-eierlegende-wollmilchsau-gesucht.html)

Rainer Wolff 10. Aug 2022 09:09

Passworte: eierlegende Wollmilchsau gesucht
 
Ich habe bisher in meiner simplen Passwortverwaltung intern eingebaute, feste User/Passwortkombinationen eingesetzt, damit unser Servicepersonal sich jederzeit in interne Formulare einloggen kann.
Für die normalen Benutzer habe ich eine einfache Passworttabelle, in der User mit Zugriffsrechten eingetragen sind.
Es geht auch nicht um irgendwelche kritischen Prozesse oder Daten. Es handelt sich um Industriemaschinen, bei denen halt der einfache Anlagenbediener nicht an allen Einstellungen rumfummeln soll.

Leider kommt es bei der Inbetriebnahme durch unser Personal öfter (zu oft) vor, daß die Anlagenbediener die intern einprogrammierten Passworte mitbekommen.

Jetzt will/soll ich da etwas umstricken, um die internen Passwörter zu ersetzen. Es soll aber möglichst simpel bleiben, dem Servicepersonal Zugriff zu erhalten.

Hat jemand eine geniale Idee?

KodeZwerg 10. Aug 2022 10:06

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Im normal fall würde ich sagen per Datenbank den gespeicherten Hash mit eingegebener Name/Passwort Kombination auf Gleichheit prüfen.

Für Hardkodiertes gibt es meines Wissens nach nichts "sicheres", da kann man nur generelle Zugriffe erlauben oder halt nicht, aber es ist nicht Personenbezogen (was bei einer Datenbank der Fall wäre).


// edit
Eine Überlegung:
In deiner App Gruppen-Richtlinien festlegen (anstelle von Username)
Eine Externe Datei mit Hashes für die Richtlinien generieren (anstelle von Passwort)
Auf diese Weise kann man simpel die Anmeldungspasswörter jederzeit austauschen (am besten mit einem Generator.exe was nur admins starten dürfen)

Also "Generator.exe" stellt einem eine simple GUI mit Feldern für die vergabe von Passwörter für die Richtlinien bereit
Generator speichert den Hash vom den Richtliniennamen + Passwörtern in einer Datei (ini, xml, json etc... oder binär)
Deine App.exe vergleicht in deiner Login Methode nun nur noch das Eingebene (Hash generieren) mit dem was in der Datei (ini, xml, json etc) steht,
bei Gleichheit setze deine Richtlinien für diese Session und lasse den User rein :-D

Rollo62 10. Aug 2022 10:13

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Zitat:

Zitat von Rainer Wolff (Beitrag 1509948)
Es soll aber möglichst simpel bleiben, dem Servicepersonal Zugriff zu erhalten.

RfId-Lesegerät, USB-Key ?
Oder soll es eine reine Softwarelösung bleiben ?

Dann wird es schwierig.
Ich mache da gerne einfach 6-stellige PIN-Code-Eingabe, die der Bedienende gut vor anderen abschirmen und schneller eingeben kann.
Ist aber am Ende genauso sicher oder unsicher wie Passworteingabe.

Blup 10. Aug 2022 18:03

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Für die Anmeldung mit erweiterten Rechten wird jedes mal eine zufällige Ziffernfolge generiert und angezeigt (auch zusätzlich als QR-Code).
Aus dieser Ziffernfolge wird nach einem geheimen Algo ein Passwort generiert, das einzugeben ist.

Der Servicemitarbeiter hat eine App auf dem Handy, dass den QR-Code scannt (oder die Ziffernfolge wird eingegeben) und das Passwort berechnet und anzeigt.

Rollo62 10. Aug 2022 20:30

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Zitat:

Zitat von Blup (Beitrag 1509983)
Der Servicemitarbeiter hat eine App auf dem Handy, dass den QR-Code scannt (oder die Ziffernfolge wird eingegeben) und das Passwort berechnet und anzeigt.

:thumb: Das ist eine sehr gute Idee, die merke ich mir.
Ich habe mal sowas ähnliches, ohne App, mit Hash-Codes gemacht, mit fester Länge 4-6 Ziffern.

Wenn der TE dafür die App bereitstelt ( natürlich mit FMX :stupid: ) dann könnte das gut klappen.

Phoenix 10. Aug 2022 21:08

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Für sowas gibt es T-OTP. Time-based One-Time-Passwords (oder auch: Einmalkennwort https://de.wikipedia.org/wiki/Einmalkennwort )

Sind genau die gleichen Dinger, die auch durch alle gängigen Authenticator-Apps (Google Authenticator, Microsoft Authenticator etc.) unterstützt werden.

Die Funktionsweise ist easy: In der Anwendung ist ein Geheimnis hinterlegt (so wie aktuell das Passwort).
Das gleiche Geheimnis ist auch in der Authenticator-App hinterlegt.

Basierend auf dem Geheimnis und der aktuellen Uhrzeit wird in der Authenticator-App ein 6-Stelliger Code generiert.
Der wird in die Anwendung eingegeben. Dort wird der Code auch mit dem gleichen Algorithmus berechnet, und wenn der übereinstimmt ist der User drin.

Da gibts auch ne Implementierung für Delphi: https://github.com/wendelb/DelphiOTP

Eure Mitarbeiter bekommen also einfach den Code aufs Handy in der Authenticator-App und können sich die Passwörter bei Bedarf generieren. Der Kunde kommt nicht rein solange er nicht das Geheimnis aus der .exe extrahiert.
Bei Bedarf könnt ihr auch pro Kunde ein separates Geheimnis generieren und dann hat der Mitarbeiter eben mehrere Einträge in der Authenticator-App.

MyRealName 11. Aug 2022 11:04

AW: Passworte: eierlegende Wollmilchsau gesucht
 
OTPs sind klasse an der Stelle. Du kannst sowas serverbasiert machen, wenn Du einfach nur allen Serviceleuten eine kleine Handyapp geben willst, damit die alle das gleiche Passwort zu jedem Zeitpunkt angezeigt bekommen. Willst Du es User-Basiert machen, dann baust es halt basierend auf den User-Daten und das Programm generiertdas OTP und die HandyApp generiert mit den gleichen Start-Daten das gleiche OTP

dummzeuch 11. Aug 2022 11:35

AW: Passworte: eierlegende Wollmilchsau gesucht
 
OTP ist das einzig halbwegs sichere, was mir dazu einfällt (wobei es mir erst einfiel, als Phoenix es erwähnte). Ich habe auch schon Delphi-Code dafür irgendwo gesehen. Die App für's Handy wäre eine Standard-App z.B. der Google Authenticator oder wenn's was freies sein darf FreeOTP.

Edelfix 11. Aug 2022 11:40

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Wenn es simpel bleiben soll dann das Normale Passwort mit aktuellem Datum kombinieren.

Zum Beispiel Tag + Passwort Teil 1 + Monat + Passwort Teil 2 + Jahr.

Oder Das Datum mit fixen Zahlen kombinieren damit das nicht als Datum erkannt wird.

rabatscher 11. Aug 2022 12:25

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Fido2 und WebAuthn könnten hier auch ins Spiel gebracht werden.
Ich hab mal kleinere Projekte mit dem Webauthn interface von Microsoft bzw. auch die Fido2.dll von Yubico
gemacht..


check https://github.com/mikerabat/DelphiFido2

EdAdvokat 11. Aug 2022 15:18

AW: Passworte: eierlegende Wollmilchsau gesucht
 
in den Beispielen von cnpack findet man ebenfalls ein OTP-Beispiel ähnlich dem von Phoenix

https://github.com/cnpack/cnvcl

Rollo62 12. Aug 2022 08:40

AW: Passworte: eierlegende Wollmilchsau gesucht
 
TOTP mit Timestamp ist eine schöne Idee, das stimmt.
Ich gehe aber davon das die "Anlage" nicht unbedingt am Netz hängt oder sonstwie eine genaue Zeit bekommt.

Wie ist in dem TOTP-Standard denn die "Genauigkeit" der Uhrzeit/Datum definiert ?
Ich vermute mal die Uhrzeit kann in einem freilaufenden Windows mal ziemlich abweichen, ich habe sowas hier schon gesehen aber nie getestet.

rabatscher 12. Aug 2022 10:21

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Zitat:

Wie ist in dem TOTP-Standard denn die "Genauigkeit" der Uhrzeit/Datum definiert ?
Ich vermute mal die Uhrzeit kann in einem freilaufenden Windows mal ziemlich abweichen, ich habe sowas hier schon gesehen aber nie getestet.
Hier ist eine Beschreibung des "URL" formats - der Url kann
dann in einen QR Code gesteckt werden und der wiederum kann von den Authenticator Apps (goolge oder Microsoft) gelesen werden.

Die Periode lässt sich im URL angeben - Standard ist 30 Sekunden - und soweit ich gesehen habe machen das so ziemlich alle so.
Ausserdem kann man die Anzahl der Digits angeben - Standard ist 6 - auch hier sollte nicht unbedingt am Standard gerüttelt werden.
Diese Periode gibt eigentlich nur an in welchem Inervall sich der Code ändert. Clientseitig kannst du noch definieren welchen "Overlap" du zulässt.
Wir erlauben da ein Window von +- 2min . D.h ein Code ist schlimmstenfalls 5 minuten gültig.

Und... zu beachten gilt noch, dass die Authenticator aps die UTC time zone verwenden ;)

Wenn es jemanden interessiert kann ich einen Teil unseres Sourcodes beisteuern. Er hat allerdings einige 3rd Party Abhängigkeiten (DEC, Indy, Dec, ZXingQR),
die noch hinzugefügt werden müssten.

Rollo62 12. Aug 2022 13:24

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Ja danke für die Links, da gibt es auch das schöne Live-Demo.

Die Frage bleibt bei mir aber offen, was wenn kein Internet und Anlage und Handy komplett andere Datetime gesetzt haben ( Offline-Betrieb ).
Z.B. Anlage 11.06.22 14:00 und Handy 12.08.22 17:00

Ich habe das TOTP nicht im Detail gecheckt, aber ich bin aber immer davon ausgegangen das ein Timeserver oder zumindest eine einigermaßen verlässliche, gemeinsame Uhrzeit vorhanden sein muss.
Siehe auch hier mal in einfachen Worten

Vermutlich kann man dann nur noch HOTP mit einem Zähler benutzen, was aber auch Nachteile hat.

Eine Idee wäre der URI einfach die aktuelle Datetime der Anlage mitzusenden, welche dann der Authenticator nutzen kann.
Ich vermute mal mit der offenen Parameterbeschreibung wäre es möglich weitere, kundenspezifische Parameter anzuhängen.

Oder braucht das Handy zum Entschlüsseln die Datetime gar nicht zu wissen ?

rabatscher 12. Aug 2022 13:42

AW: Passworte: eierlegende Wollmilchsau gesucht
 
TOTP ist ja Zeitbasiert und naja es ist ja das Ziel den SHA-1 hash mit key und counter zu errechnen wobei counter
Zeitbasiert ist - konkret die Unix UTC Zeit modulo der Periode.
Die "Windowsize" ist ja dazu da um nicht ganz gleich laufende Systeme zu unterstützen aber bei
Stunden wenn nicht Tagen macht das Verfahren ja wenig Sinn.

Also entweder den counter selbst immer um eins hochzählen wenn die Eingabe gemacht wurde oder
evt. noch besser: Einen Fido Key nehmen ;) das ist grad das so ziemlich Sicherste was es gibt.
Das Funktioniert dann auch ganz ohne Passwort bzw. man muss es nur beim Erstellen angeben wenn gewünscht
-> also einstecken, draufdrücken, fertig

himitsu 12. Aug 2022 13:45

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Dann kann aber auch ein böser Junge*innen einfach "irgendeine" Zeit mitgeben ... vorzugsweise Die, von der er den Code bereits kennt. :angle2:

Das ist ja grade der Grund, warum dafür eine externe, nicht beeinflussbare, Zeit verwendet wird.



Andersrum ginge es, also die Authentificator-App bekommt die Zeit vom Server (nicht der Server die Zeit von der App), so lange man den Server als sicher betrachten kann.



Wenn dein Rechner also kein "Internet" hat, dann gib ihm doch einfach eine andere Uhr?
DCF77

Rollo62 12. Aug 2022 13:56

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Zitat:

Zitat von himitsu (Beitrag 1510060)
Das ist ja grade der Grund, warum dafür eine externe, nicht beeinflussbare, Zeit verwendet wird.

Ja nur woher nehmen, wenn nicht (Zeit) stehlen ?

Soweit ich weiß hat schon Albert Einstein an dem Problem gearbeitet, als er noch im Patentamt bechäftigt war, und hat wohl auch keine Lösung gefunden :stupid:

Mein Projekt war z.B. eines mit einem kleinen 32-Bit Controller, ohne Wifi, ohne RTC, ohne großes Display ( nur kleines TN ), ohne sonstwas.
Da muss man halt etwas tricksen, was dann natürlich nicht 100% sicher sein muss.
Da habe ich mit einem OTP-Pool an PIN-Codes gearbeitet, die natürlich irgendwann mal aufgebraucht sein können, aber auch nur extrem selten benötigt werden.

So habe ich auch die Aufgabe von dem den TN verstanden, nur ein paar vorwitzige Bediener abhalten.

rabatscher 12. Aug 2022 14:11

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Probier mal:
https://webauthn.io/

Die Seite zeigt recht schön was mit Webauthn/Fido2 so möglich ist
-> die API sind nur ein paar Funktionsaufrufe.
Wie gesagt... man braucht da halt nen Fido Key ;)

Uwe Raabe 12. Aug 2022 15:28

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Zitat:

Zitat von rabatscher (Beitrag 1510059)
-> also einstecken, draufdrücken, fertig

Kann man das auch zum Laufen bringen, wenn der Service-Techniker z.B. per Remote-Desktop oder TeamViewer auf das System geht?

rabatscher 12. Aug 2022 21:33

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Der Guide besagt, dass User Authentication (pin) und
oder User Presence (also drücken des Keys) benutzt werden können. Also ein Pin reicht prinzipiell bzw.
auch ein einfaches drücken.

WebAuthn ist ja eigentlich auch fürs Web konzipiert und auch in allen aktuellen Browsern implementiert (über die Webauthn.dll).

Das Ding ist nur... wenn die Zeit nicht aktuell ist, dann wird er auch kein Internet haben ;) also in diesem Fall muss ein Techniker vor Ort sein.

HolgerX 13. Aug 2022 00:08

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Hmm...

Wenn die Uhrzeiten nicht übereinstimmen, kann es eigentlich nicht funktionieren (TOTP) und Webbasierende Authendkeys gehen wegen fehlendem Internet nicht.

Alternativ kannst Du Dir deine eigene, angepasste TOTP KeyGen-Routine erstellen, bei der nicht die Uhrzeit des lokalen Systems genommen wird, sondern eine übergebene.

Der Techniker muss dann in der HandyApp neben dem OQ-Code z.B. eine zusätzlich angezeigte Uhrzeit mit angeben, welche dann für den KeyGen verwendet wird, oder dein QRCode enthält zusätzlich die Uhrzeit zum Einscannen mit der Handy-App.

Da beide Seiten (Maschinen und Handy-App) von Dir kommen, kannst Du hier ja beliebig erweitern.

Kannst dann zwar keine fertigen Tools für TOTP verwenden, aber die Implementierung in Delphi und deiner App ist simpel und kannst Du als Source im Netz finden.

dummzeuch 13. Aug 2022 10:52

AW: Passworte: eierlegende Wollmilchsau gesucht
 
Zitat:

Zitat von HolgerX (Beitrag 1510076)
Da beide Seiten (Maschinen und Handy-App) von Dir kommen, kannst Du hier ja beliebig erweitern.

Kannst dann zwar keine fertigen Tools für TOTP verwenden, aber die Implementierung in Delphi und deiner App ist simpel und kannst Du als Source im Netz finden.

Oder man sieht im Programm die Möglichkeit einer Zeitangabe vor. Dann kann man auf dem Handy eine Standard-App nehmen. Natürlich ist das unsicherer, denn bei Eingabe einer beliebigen Zeit kann man ja einen beliebigen Code generieren lassen. Vielleicht kann man diese Zeitangabe ja beschränken auf +/-24h der Rechnerzeit. Das ist dann zwar immernoch nicht 100% sicher, aber schon deutlich besser. Das setzt natürlich voraus, dass die Rechnerzeit nicht beliebig abweicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz