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)
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)