Wegen dem Blog post über Passwort länge und Hash verfahren... hab ich mich mal nach einer scrypt Implementierung in Python umgesehen...
Es gibt ein paar:
https://pypi.python.org/pypi?%3Aaction= ... mit=search
Die aktuellste scheint https://pypi.python.org/pypi/pylibscrypt/ zu sein. Aber ein wenig im Code umschauen auf https://github.com/jvarho/pylibscrypt und auf einige Sternchen-Imports gestoßen. Deswegen mal nachgefragt: https://github.com/jvarho/pylibscrypt/issues/14
Außerdem scheint es keine sauberen unittests zu geben...
https://pypi.python.org/pypi/pyscrypt/ bzw. https://github.com/ricmoo/pyscrypt ist eine pure Python Implementierung.
In der FAQ steht u.a.: It is written in pure Python. It is not meant to be fast, more of a reference solution.
Dann gibt es https://pypi.python.org/pypi/scrypt/ bzw. http://bitbucket.org/mhallin/py-scrypt das nutzt die C-Implementierung: http://www.tarsnap.com/scrypt.html
Aber das Python Projekt scheint eingeschlafen zu sein. Letzter nennenswerter commit is von 19.10.2012... Im Bug Tracker gibt es so einige offene Fehler...
Also ist pylibscrypt noch der beste Kandidat? Oder hab ich was übersehen?!?
scrypt in Python...
Aktualität ist hier anders als bei anderen Projekten erstmal vollkommen irrelevant. Sobald der Algorithmus einmal implementiert ist, gibt es schliesslich nichts mehr wirklich was zu tun. Sieht man auch an den Issues die offen sind, die sich im wesentlich auf Warnungen beim kompilieren, Fehler auf obskuren Systemen o.ä. beziehen. Selbst bei den Segfaults bei pyscrypt, stellt sich ja die Frage inwieweit es überhaupt ein Problem von pyscrypt ist und nicht eins von der C library für die py-scrypt eigentlich nur ein Binding ist.
Implementationen in Python kannst du vollkommen vergessen, die sind einfach zu langsam als dass man die ernsthaft für irgendwas benutzen könnte. Du musst ohnehin davon ausgehen dass ein Angreifer mehr Performance hat als du, da kann man sich nicht erlauben mit sowas diesen Nachteil noch zu vergrößern.
Übrigens zum Thema Sternchen-Importe:
Implementationen in Python kannst du vollkommen vergessen, die sind einfach zu langsam als dass man die ernsthaft für irgendwas benutzen könnte. Du musst ohnehin davon ausgehen dass ein Angreifer mehr Performance hat als du, da kann man sich nicht erlauben mit sowas diesen Nachteil noch zu vergrößern.
Übrigens zum Thema Sternchen-Importe:
Ich würde sagen bei pylibscrypt haben wie diesen "defensible use case".PEP 8 hat geschrieben: Wildcard imports ( from <module> import * ) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools. There is one defensible use case for a wildcard import, which is to republish an internal interface as part of a public API (for example, overwriting a pure Python implementation of an interface with the definitions from an optional accelerator module and exactly which definitions will be overwritten isn't known in advance).