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

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

Vorheriges Thema - Nächstes Thema

CoolTux

Hallo,

Ich habe ein Password Hilfsmodul geschrieben um Passwörter entsprechend zu verwalten. Bedeutet speichern, auslesen, löschen und ändern.
Die Passwörter werden gesalzen als SHA265 Hash im keyFileName (default uniqueID) abgespeichert.

Beispiel Anwendung:

Klasse einbinden und ein Objekthash mittels des Constructors erzeugen

use FHEM::Core::Authentication::Passwords qw(:ALL);
...
sub Define {
    my $hash = shift // return;
    my $aArg = shift // return;
.....
    ### create password object to handle pass keystore
    $hash->{helper}->{passObj}  = FHEM::Core::Authentication::Passwords->new($hash->{TYPE});
.....
}

Passwort speichern

my ($passResp,$passErr);
($passResp,$passErr) = $passwdObj->setStorePassword($name,$password);


Passwort auslesen

my $password;
$password = $passwdObj->getReadPassword($name);


Passwort löschen

my ($passResp,$passErr);
($passResp,$passErr) = $passwdObj->setDeletePassword($name);


Ist $passResp definiert und $passErr ist undef wurde das Passwort erfolgreich abgespeichert. Bei einem Fehler bekommt $passResp ein undef und $passErr enthält den Fehlergrund


Wenn Devices/Instanzen umbenannt werden so muss man eine Rename Funktion in seinem Modul haben welche entsprechend in der Initialize Funktion zugewiesen wurde.
$hash->{RenameFn}       = \&Rename;
Die Funktion könnte dann zum Beispiel so aussehen.

sub Rename {
    my $new     = shift;
    my $old     = shift;
   
    my $hash    = $::defs{$new};

    my ($passResp,$passErr);
    ($passResp,$passErr) = $hash->{helper}->{passObj}->setRename($new,$old);
   
    ::Log3($new, 1,
qq(MODULNAME \(${new}\) - error while change the password hash after rename - $passErr))
        if ( !defined($passResp)
        and defined($passErr) );

    ::Log3($new, 1,
qq(MODULNAME \(${new}\) - change password hash after rename successfully))
        if ( defined($passResp)
        and !defined($passErr) );

    return;
}



Spricht etwas gegen das einchecken ins SVN?
Das Modul befindet sich seit heute im SVN



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

herrmannj

Md5 ist brooken, aber das nur am Rande. ;) Und salzen, bitte ;)

Das Modul ist nicht dafür gedacht ein Passwort zu hinterlegen um auf einen 3rd Dienst zu zugreifen? Richtig? Thnx für die Idee!


CoolTux

#2
Zitat von: herrmannj am 26 März 2021, 16:25:56
Md5 ist brooken, aber das nur am Rande. ;) Und salzen, bitte ;)

Das Modul ist nicht dafür gedacht ein Passwort zu hinterlegen um auf einen 3rd Dienst zu zugreifen? Richtig? Thnx für die Idee!

Das musst Du mir erklären. Wieso ist Md5 broken?

Das Modul ist dafür gedacht Modulentwickler beim händling mit Passwörtern zu unterstützen. Für was das Passwort im jeweiligen Modul genutzt obliegt dem jeweiligen Entwickler.


    my $index   = $defs{$name}->{TYPE} . '_' . $name . '_passwd';
    my $key     = getUniqueId() . $index;
    my $enc_pwd = '';

    if ( eval q{use Digest::MD5;1} ) {

        $key = Digest::MD5::md5_hex( unpack "H*", $key );
        $key .= Digest::MD5::md5_hex($key);
    }

    for my $char ( split //, $password ) {

        my $encode = chop($key);
        $enc_pwd .= sprintf( "%.2x", ord($char) ^ ord($encode) );
        $key = $encode . $key;
    }

    my $err;
    $err = setKeyValue( $index, $enc_pwd );


Der Code ist experimental bitte nicht verwenden!!!


Grüße
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

ZitatWieso ist Md5 broken?
Weil irgendwelche Leute mit viel Geduld und CPU vor paar Jahren geschafft haben, mehrere Texte zu erstellen mit dem gleichen MD5 Hashwert.
Selbst allowed verwendet seit Jahren sha256. Mit Salz. :)

CoolTux

Alles klar. Dann baue ich entsprechend um. Kein Problem.
Danke für den Hinweis.
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

Ist ja cool... >Vor ca. einem Jahr hatte ich mal überlegt ein Passwort-Hilfsmodul zu bauen. Das kann ich dann von der Taskliste streichen :-)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Cooltux, wenn du einen Tester suchst - ich hätte einen konkreten Anwendungsfall für das Teil...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

Sehr gerne. Ich muss aber noch auf sha256 mit Salz umbauen.

Grüße
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

Hallo CoolTux,

du hast oben geschrieben, dass man mit dem Hilfsmodul auch Passwörter auslesen kann. Geht das, wenn man nur einen Hash speichert?

Jetzt sehe ich, dass der Pseudocode aus deinem Beitrag auch fast so in meinen Modulen zu finden ist. Damit bietet sich der Umstieg auf dein Hilfsmodul schon mal an  :) Stellt sich nur die Frage, wie das nun funktioniert. Muss ich mir mal in Ruhe anschauen bzw. hat jemand jemand einen Link, wo das mit der XOR-Verknüpfung erklärt wird?

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

CoolTux

Hallo Ulf,

Nimm bitte nicht den Code. Ich werde das ganze noch mal umschreiben. Muss nur dazu kommen.


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

vuffiraa

Es ging nicht um das Übernehmen des Code, der ist ja schon länger z.B. aus dem FRITZBOX Modul bekannt.

Ich meine der ganze Algorithmus gehört eher in die Kategorie obfuscation und ist keine sichere Verschlüsselung. Der Algorithmus ist umkehrbar und das ist auch Bestandteil des Code und damit dokumentiert. Die Datei uniqueID reicht alleine aus, um die Passwörter zu entschlüsseln. Momentan macht da ein anderer Hash-Algorithmus auch keinen Unterschied.  Gehasht wird nicht das Passwort, sondern der Schlüssel, mit dem es in die Datei geschrieben wird.
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

CoolTux

Jepp ich weiß. Daher wird das auch alles anders geschrieben.
Muss nur Zeit finden.
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,

Also entweder wurde ich falsch verstanden oder ich habe das Konzept mit salt und sha Hash nicht kapiert.
Alles was ich die letzten Tage raus gefunden habe ist, das meine Art der Denkweise nicht funktioniert. Aus einem gesalzenden sha265 Hash kann man kein Plaintextpassword mehr generieren. Man kann nur die validieren und zwar mit einem neu erstellten salt hash welcher durch eine passwordeingabe erfolgt und einen bereits abgespeicherten salt hash.

Was ich will ist ein Plaintext Password verschlüsselt abspeichern um es wieder aus zu lesen und zu entschlüsseln damit es wieder Plaintext wird.

Ich bin der Meinung das mir die allowed Implementierung dabei nicht hilft.



Grüße
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

Ok vielleicht habe ich es doch falsch verstanden. Ich muss erstmal noch was testen.
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

Ok ich habe mich bedeppert angestellt  :-[
Zu mindest sha256 funktioniert jetzt. kommen wir nun zum salt.
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