[FHEM::Core::Authentication::Passwords] Password Hilfsmodul

Begonnen von CoolTux, 26 März 2021, 16:20:55

Vorheriges Thema - Nächstes Thema

herrmannj

ähhh - nö. Hash ist eine kryptographische Einwegfunktion. Das darf nicht rückwärts funktionieren. Auf keinen Fall.

Das was Du vmtl möchtest, ist verschlüsseln (plaintext wird in eine cipher gewandelt). Das gibt es in den Geschmacksrichtungen symmetrisch (ver- und entschlüsseln mit dem gleichen Key) oder asymmetrisch (mit dem einem Key wird verschlüsselt, mit einem anderen entschlüsselt).

Ein passendes symmetrisches Verschlüsselungsverfahren ist AES, 128 bit Schlüssellänge gilt als hinreichend sicher (bruteforcen dauert etwa 550Mio Jahre).

Problem: der Key wird als (gemeinsames) Secret bezeichnet. Bedeutet: wenn jemand Zugriff auf die Daten bekommt, dann darf er nicht gleichzeitig den Key welcher zum ver- und entschlüsseln der Passwörter benötigt wird erhalten. Das ist ein Zielkonflikt denn dann müsste man den Key ja immer händisch eingeben wenn fhem das passwort (welches verschlüsselt ist) benötigt.

CoolTux

Ich habe FERTIG!

Mag vielleicht jemand über den Code schauen bitte. Danke

https://git.cooltux.net/FHEM/mod-Password/raw/branch/devel/lib/FHEM/Core/Password/Utils.pm



Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: herrmannj am 20 April 2021, 14:39:30
ähhh - nö. Hash ist eine kryptographische Einwegfunktion. Das darf nicht rückwärts funktionieren. Auf keinen Fall.

Das was Du vmtl möchtest, ist verschlüsseln (plaintext wird in eine cipher gewandelt). Das gibt es in den Geschmacksrichtungen symmetrisch (ver- und entschlüsseln mit dem gleichen Key) oder asymmetrisch (mit dem einem Key wird verschlüsselt, mit einem anderen entschlüsselt).

Ein passendes symmetrisches Verschlüsselungsverfahren ist AES, 128 bit Schlüssellänge gilt als hinreichend sicher (bruteforcen dauert etwa 550Mio Jahre).

Problem: der Key wird als (gemeinsames) Secret bezeichnet. Bedeutet: wenn jemand Zugriff auf die Daten bekommt, dann darf er nicht gleichzeitig den Key welcher zum ver- und entschlüsseln der Passwörter benötigt wird erhalten. Das ist ein Zielkonflikt denn dann müsste man den Key ja immer händisch eingeben wenn fhem das passwort (welches verschlüsselt ist) benötigt.

Habe eben erst Deine Antwort gesehen.
Ich habe es nach besten Wissen, Gewissen und meiner gedachten Funktionsweise umgesetzt. Key zum ver und entschlüsseln ist gleich und wird auch entsprechend festgehalten. Aber ich denke mal besser wir nichts und/oder die bisherige Lösung aus dem Fritz-Modul.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

vuffiraa

Ich muss hermannj zustimmen. :(

Es wird doch immer noch nur der Key aus der Passwortdatei gehasht und buchstabenweise mit dem Passwort ver-"oder"-t.
Außerdem ist die Entschlüsselung in getReadPassword in Code gegossen.

Man braucht nur die Datei uniqueID, da steht alles drin.
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

CoolTux

Die Anforderung war gewesen das Passwort verschlüsselt ab zu legen und ohne User Zutun wieder entschlüsselt aufzurufen um es an eine Anwendung weiter zu reichen. Zum Beispiel HttpUtils um sich an einer Web API zu Authentifizieren.
Gibt es bessere Vorschläge zur Lösung bin ich voll Ohr. Möchte es ja gerne besser machen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

"Besser" gibts nicht, die Alternativen sind nur Geschmackssache.

Wenn man FHEM ohne menschliche Interaktion betreiben will, dann ist die Verschluesselung des Passworts nur eine Verschleierung, da der Schluessel "daneben" liegt, und jeder mit Zugriff auf dem System es frueher oder spater entschluesseln kann. Meine Loesung (mit setKeyValue/getKeyValue) speichert solche Geheimnisse in einer Datei (/opt/FHEM/FhemUtils/uniqueID), die man normalerweise nicht im Forum herumzeigt.

CoolTux

Danke Rudi.
So war ja auch meine Intention. Sollte dennoch jemand eine elegantere Lösung haben dann bitte bitte her damit.
So wie es aktuell ist würde ich es die Tage einchecken und nach und nach meine entsprechenden Module umstellen.


Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Guten Morgen,

Ich habe das Modul eingecheckt. Habe im ersten Post noch etwas geschrieben.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Hi Marko,
ich habe das in eines meiner Module eingebaut... funktioniert wunderbar. Im ersten Post könntest du vielleicht noch einen Einzeiler für
getReadPassword($name) hinzufügen.
Rename funktioniert bei mir allerdings nicht (und - um ehrlich zu sein - kann eigentlich auch mit meiner alten Funktion nicht funktioniert haben). Wenn ich keine Tomaten auf den Augen habe, existiert $defs{$old} zum rename-Zeitpunkt nicht mehr und daher kann in getReadPassword bei $defs{$name}->{TYPE} auch nichts mehr gefunden werden... Bin nur gerade etwas verwirrt, weil das ja in 1000 Modulen so implementiert ist... Wo ist mein Denkfehler?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

Hallo Oli,

vielen Dank für den Rename Hinweis, da hast Du vollkommen Recht. Das muss ich noch umschiffen mit $defs{$name}->{TYPE} mit alten Instanznamen.

Aber in meinen Modulen hatte ich das Problem mit Rename gelöst gehabt. Siehe Gardena oder TeslaPowerWall.


Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Hallo Oli,

Ich habe das gefixt. Kommt heute ab 8 Uhr per FHEM Update.

ACHTUNG!!! Neue Syntax für das erstellen des Objektes
FHEM::Core::Authentication::Passwords->new($hash->{TYPE});

Es muss nun immer der Instanztype mit übergeben werden.



Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Zitat von: CoolTux am 23 April 2021, 02:56:45
Hallo Oli,

Ich habe das gefixt. Kommt heute ab 8 Uhr per FHEM Update.

ACHTUNG!!! Neue Syntax für das erstellen des Objektes
FHEM::Core::Authentication::Passwords->new($hash->{TYPE});

Es muss nun immer der Instanztype mit übergeben werden.



Grüße
Marko
Nice, dann baue ich heute Abend um (und schaue mal ins Gardena-Modul ;-))
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

Zitat von: KernSani am 23 April 2021, 08:37:55
Nice, dann baue ich heute Abend um (und schaue mal ins Gardena-Modul ;-))

Wie gesagt im Gardena ist noch die alte Lösung ohne das neue Hilfsmodul.

Schau mal hier
https://git.cooltux.net/FHEM/mod-TeslaPowerwall2AC/src/branch/devel/lib/FHEM/Devices/Tesla/Powerwall.pm

Hier habe bereits eine komplett fertige und saubere Implementierung des neuen Password Modules.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Hi Marko,
die globale Definition macht dann aber keinen Sinn, da da $hash noch nicht bekannt ist ;-)
Ansonsten fluppt das und spart eine Menge copy/paste.
Grüße,
Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

Zitat von: KernSani am 24 April 2021, 01:06:27
Hi Marko,
die globale Definition macht dann aber keinen Sinn, da da $hash noch nicht bekannt ist ;-)
Ansonsten fluppt das und spart eine Menge copy/paste.
Grüße,
Oli

Hast auch wieder Recht. Oh man wie gut das noch jemand drauf schaut. Aber auch hier baue ich mal was ein.
Vielen lieben Dank

Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net