User Authentication

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Aufbau:
Mein RPi ist mit einem WLAN verbunden, welches nicht auf das LAN zugreifen kann. Per NAT ist der Port 443 auf die interne IP des RPi weitergeleitet. Als Webserver habe ich ein SSL-ChrryPy (über BuiltinSSLAdapter) laufen und per Openssl mir die Zertifikate selbst erstellt. Als Web-Rahmenwerk dient mir bottle. Bis jetzt habe ich eine sqlite3 Datenbank, in welcher das Passwort als SHA-224 Hash steht. Ab hier beginnen meine Zweifel, denn...
...der User ``DasIch`` sagt in diesem Beitrag (http://www.python-forum.de/viewtopic.ph ... in#p266584), dass PWs „weder im plaintext, noch verschlüsselt“ in einer DB stehen dürfen.

Code: Alles auswählen

import hashlib
from passlib.hash import sha256_crypt
from passlib.context import CryptContext

# So, wie es zZ. ist
pw = hashlib.sha224('lackschuh').hexdigest()
print pw == pw


pw_hash = sha256_crypt.encrypt("lackschuh")
print sha256_crypt.verify('lackschuh', pw_hash)

# So, wie es sein sollte?
myctx = CryptContext(schemes=["sha256_crypt", "md5_crypt", "des_crypt"])
#hash1 = myctx.encrypt("lackschuh")
#print hash1
hash1 = '$5$rounds=110000$COypvqzGtFKXjBXq$mmnvlDsxrxiiwCfwMo2PEvHriNGt.6E9FRRLKsUJKF6'
print myctx.verify("lackschuh", hash1)
Speichere ich nun einfach den Salt – im obigen Fall die hash1 Zeichenkette und prüfe dann auf True, False?

Als Alternative hätte ich mir noch gedacht, mittels den Modulen ``spwd``, ``pwd`` und ``crypt`` die zuvor auf dem RPi angelegten User ohne root-Rechten auslesen zu lassen und das PW mit dem PW request vom Webinterface zu vergleichen. So würde ich mir die sqlite DB sparen.
Was ist da eher weiterzuverfolgen bzw. was sind die Nachteile?

Also mir geht es nicht um NSA sichere Anwendung, sondern eher ums Thema Sicherheit allgemein. (..zugegeben auch um Bequemlichkeit)
BlackJack

@lackschuh: Wenn in der DB ein Hash steht dann ist das ja weder das Password im Klartext noch verschlüsselt.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

@BlackJack
Ist das nun gut, schlecht oder egal?

Und das Auslesen der "Unix shadow password database" ist das Blödsinn, welcher ich besser gleich wieder vergessen soll, oder wäre dies eine Alternative? Ich rechne ja nicht damit, dass ich bzw. die Seite attackiert werde (wobei ausschließen will ich es auch nicht)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lackschuh hat geschrieben:@BlackJack
Ist das nun gut, schlecht oder egal?
Das ist an sich gut, aber nicht genug an sich. Denn wenn es gehasht ist kann man immer noch die Rückrichtung mittels Rainbow-Tables nachschlagen. Da würden sich eher Key-Derivation-Funktionen wie PBKDF2, bcrypt oder scrypt anbieten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten