it-swarm.com.de

Ist es sicher, Ihren Benutzern mitzuteilen, welche Art von Hashing-Algorithmus Sie verwenden?

Auf der Benutzerregistrierungsseite können Sie beispielsweise sicher mitteilen, dass Ihr Kennwort mithilfe des (beliebigen) Algorithmus als Einweg-Hash gespeichert wird.

45
user49637

Wenn es nicht sicher ist, ist Ihre Hash-Funktion reiner Junk, und Sie sollten sie nicht verwenden.

Bei jeder anständigen Sicherheitsanalyse wird davon ausgegangen, dass der Angreifer bereits die gesamte von Ihnen verwendete Software kennt, weil:

  • Es gibt nicht so viele Möglichkeiten.
  • Aufgrund des Anwendungsverhaltens und der Ausgabe kann viel erraten werden.
  • Ein Angreifer, der einen Blick auf Ihre Datenbank werfen könnte, verfügt möglicherweise auch über eine Kopie Ihrer PHP - Skripte und damit weiß.
  • Selbst in Fällen, in denen der Angreifer Ihre Hash-Funktion nicht kennt, ist es sehr schwierig, zu quantifizieren einen solchen Mangel an Wissen: zu in welchem ​​Umfang weiß der Angreifer nicht?
  • Insbesondere kann sich der Angreifer auch mit einem von ihm gewählten Passwort als Benutzer registrieren und dann den resultierenden Hash beobachten, wodurch er jede mögliche Hash-Funktion schnell testen kann.

Wenn Sie die verwendete Hash-Funktion explizit angeben, erhalten Sie möglicherweise den Ruf eines "kompetenten Website-Eigentümers", der technisch versierten Kunden Vertrauen schenken würde.

72
Tom Leek

Rein technisch gesehen ist es sicher, Ihren Benutzern mitzuteilen, welchen Algorithmus Sie verwenden - solange der Algorithmus gut ist. Dies ist keine geheime Information, und der Versuch, sie zu verbergen, wäre ziemlich dumm.

Wenn Sie jedoch eine große Ankündigung machen, dass Sie beispielsweise bcrypt verwenden, kann dies nach hinten losgehen. Ihre Benutzer könnten versucht sein, noch schwächere Passwörter zu wählen, vorausgesetzt, Ihr magischer Hash-Algorithmus schützt sie in beiden Fällen. Tatsächlich gab es auf dieser Website mehrere Fragen, bei denen die Leute tatsächlich glaubten, dass die Verwendung von bcrypt die Kennwortstärke völlig irrelevant macht. Dies ist natürlich nicht der Fall. Sie müssen also sehr vorsichtig sein, um Ihren Benutzern kein falsches Sicherheitsgefühl zu vermitteln.

Lange Rede, kurzer Sinn: Es ist in Ordnung, jedem zu sagen, der interessiert ist und (hoffentlich) versteht, dass er noch ein gutes Passwort benötigt. Aber ich würde keine große Nachricht in das Registrierungsformular einfügen. Menschen können daraus die falschen Schlussfolgerungen ziehen.

15
Fleche

Ich würde sagen, dass es sicher ist, solange der von Ihnen verwendete Hashing-Algorithmus sicher ist. Andernfalls kann dies einen Anreiz darstellen, Ihre Datenbank zu durchsuchen.

Als Benutzer muss ich zugeben, dass mir die Transparenz der Websites, auf denen ich mich registriere, in Bezug auf die Speicherung der Anmeldeinformationen nichts ausmacht. Weniger technisch orientierte Benutzer sind jedoch möglicherweise überrascht und/oder verfehlen Ihren Standpunkt. Stellen Sie daher sicher, dass sich Ihre Zielgruppe um diese Informationen kümmert.

In jedem Fall hängt die Stärke Ihres Passwortschemas überhaupt nicht davon ab, dass es geheim ist: Es beruht darauf, dass die Kryptografie einer Peer-Review unterzogen wird. Daher sollte es keine Rolle spielen, anzugeben, welchen Algorithmus Sie verwenden.

6
executifs

Es ist sicher, wenn Ihre Hash/Key-Stretching-Algorithmen sicher sind, aber es ist nicht notwendig und wahrscheinlich keine gute Idee. Ich würde vorschlagen, den Benutzern vage mitzuteilen, wie Ihre Passwörter gespeichert sind (z. B. "Tastendehnung, die mehrere Iterationen einer Einwegfunktion enthält"), aber nicht Erwähnen Sie den genauen Algorithmus.

Die Hashing-Methode (oder sogar die gesamte Authentifizierungsmethode) geheim zu halten, ist eine Instanz von Sicherheit durch Dunkelheit, die normalerweise verpönt wird. Meistens kommt dieses Stirnrunzeln jedoch von einem Missverständnis, ähnlich wie die Leute Hoares Zitat über vorzeitige Optimierung oft als "nicht optimieren" falsch interpretieren.
Sicherheit darf nicht nur von Dunkelheit abhängen , aber Dunkelheit am richtigen Ort kann sicherlich zur Sicherheit beitragen.

Ein kryptografischer Algorithmus muss zuverlässig funktionieren, auch wenn der Angreifer alle Details des Algorithmus kennt und davon ausgegangen wird, dass er dies tut. Aus diesem Grund werden kryptografische Algorithmen normalerweise vollständig offengelegt und niemand wird einem "geheimen" kryptografischen Algorithmus vertrauen.

Ihre Sicherheitsstrategie muss ebenfalls eine vollständige Offenlegung als Worst-Case-Szenario voraussetzen, und Ihr System muss in diesem Fall weiterhin zuverlässig funktionieren.
Das heißt aber nicht, dass Sie unbedingt müssen jedes Detail offenlegen.

Wenn Sie Ihren Benutzern auf hoher Ebene vage mitteilen, wie Ihre Strategie zur Kennwortspeicherung aussieht, kann dies einen guten Eindruck auf den Benutzer hinterlassen, bringt Sie jedoch nicht auf etwas Besonderes (einschließlich möglicher Haftungsprobleme, auf die schroeder in einem Kommentar oben hingewiesen hat). Dunkelheit kann sowohl eine Möglichkeit sein, einen Angreifer abzuschrecken als auch zu verzögern.

Ein bisschen Unklarheit über den genauen Algorithmus ist beides ähnlich dem Anbringen eines großen, markanten Türriegels an Ihrer Vordertür mit einem versteckten, geschützten Schlossschlitz und dem Anbringen Ihr Geld in den Safe, bevor Sie Ihr Hotelzimmer verlassen.
Ein großer Riegel mit einem versteckten, geschützten Schlitz ist wahrscheinlich nicht viel sicherer als ein billiges Schloss, da Sie die Tür einfach mit einem Vorschlaghammer niederschlagen oder trotzdem einen Felsbrocken durch die Gartentür werfen können. Es sagt jedoch einem potenziellen Einbrecher, dass Sie vorsichtig sind und dass andere Sicherheitsmaßnahmen von denen er nichts weiß wahrscheinlich sind und es wahrscheinlich weniger schwierig ist, in ein anderes Haus einzubrechen. Unter diesem geschützten Schloss befindet sich möglicherweise nicht einmal ein Riegel, und es wird weiterhin seinen Zweck erfüllen.
Ein Hotelsafe nimmt normalerweise 4 Nummern an (und gelegentlich vergaß der Hotelmanager auch, den Notfallcode von 0000 Zu ändern). Mit Fingerabdrücken kann ein Dieb den Safe in weniger als 3 Minuten öffnen. Das ist also in der Tat nicht sehr sicher. 3 Minuten sind jedoch eine Ewigkeit für einen Einbrecher eines Hotelzimmers. Jede weitere Minute birgt das Risiko, erwischt zu werden. Sie bleiben selten länger als insgesamt 3 Minuten in einem Zimmer. Was bedeutet, dass der unsichere Safe buchstäblich sicher ist, verglichen mit Ihrem Geld und Ihrer Rolex auf dem Tisch, einfach weil die Objekte etwas verdeckt und zurückgehalten sind.

Ähnlich verhält es sich mit einem Online-Angreifer. Obwohl es unwahrscheinlich ist, dass Sie das Eindringen während des Vorgangs entdecken, steht dem Eindringling dennoch weniger Zeit zur Verfügung, da er nicht nur die Kennwortdatenbank herunterladen, sondern auch den "geheimen" Hashing-Algorithmus und die Salze herausfinden muss . Es mag nicht viel Zeit sein, aber es kostet dich nichts. Warum verschenken?

Wenn Sie einem Angreifer mitteilen, dass Sie MD5 zum Hashing Ihrer Kennwörter verwenden, weiß er sofort, dass er Ihre gesamte Benutzerdatenbank in weniger als 2 Sekunden knacken kann, und Sie sind höchstwahrscheinlich nicht sehr auf dem neuesten Stand der Sicherheit bedeutet, dass Sie ein sehr attraktives Ziel sind. Wenn Sie einem Angreifer mitteilen, dass Sie ein "Key-Stretching-System mit vielen Iterationen" verwenden, kann er sich vorstellen, dass es wahrscheinlich ein erheblicher Arbeitsaufwand ist, auch nur ein einziges Kennwort zu knacken. Außerdem ist es zusätzliche Arbeit, herauszufinden, welchen Algorithmus Sie genau verwenden.
Wenn Ihre Site nur eines auf einer Liste von 20 interessanten Angriffszielen ist, ist sie gerade an den unteren Rand der Liste gerückt.

1
Damon

Wenn der Hash sicher ist und, was noch wichtiger ist, wie er in der Site/Anwendung verwendet wird, sicher ist, sollten Sie in der Lage sein, den gesamten Code, auf dem die Site/App ausgeführt wird, als Open Source zu verwenden, und Sie sollten nicht weniger sicher sein.

Also, ja, WENN die Implementierung sicher ist, ist die Offenlegung sicher. Das ist ein großes WENN .

0
Lie Ryan