Frage:
Ist es sicher, Ihren Benutzern mitzuteilen, welche Art von Hashing-Algorithmus Sie verwenden?
user49637
2014-06-20 19:23:27 UTC
view on stackexchange narkive permalink

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

Wenn Ihre Benutzerbasis nicht aus denselben Personen besteht, die security.stackexchange.com bevölkern, können Sie auch sagen: "Ihr Passwort wird als mit Einhornbohnen bestreutes Flibbity Jibbity gespeichert." Andererseits würde ich sofort nervös werden, wenn ich jemanden lese, der stolz den Hash-Algorithmus verkündet, den er verwendet, ohne das Salzen zu erwähnen.
Ihr Passwort wird jetzt in supersicherem ROT-13 gespeichert
Abgesehen von technischen Problemen wäre ich besorgt über mögliche Verbindlichkeiten. Wenn Sie proklamieren, eine bestimmte Technologie für die Sicherheit zu verwenden, und dann festgestellt wird, dass Sie sie nicht in einer Instanz verwendet haben, die zu einem Ereignis geführt hat, haben Ihre Kunden einen bestimmten Haftungsanspruch. Aus diesem Grund sagen Unternehmen im Allgemeinen, was sie tun werden und nicht, wie sie es tun werden, es sei denn, der Prozess ist der Schlüssel.
Ja es ist in Ordnung. Ich beanspruche seinen Teil einer "Bill of Rights des Benutzers" (zusammen mit dem Recht auf Privatsphäre, dem Recht auf Werbung und dem Recht, vergessen zu werden). Alle Websites sollten ihre Datensicherheitspraktiken offenlegen. Es ermöglicht Ihnen, eine fundierte Entscheidung zu treffen. Websites, die schlechte Datenpraktiken bereitstellen, werden sich entweder verbessern oder wohin und sterben.
Zusätzlich zu dem Kommentar von @DigitalChris, Salz nicht zu erwähnen, würde ich, wenn ich die Aussage sehen würde, dass die Site beispielsweise SHA-256 verwendet, davon ausgehen, dass sie nur eine Runde SHA-256 anstelle von PDKDF2 oder bcrypt verwenden.
Ich lasse mein Auto unverschlossen. Ist das "sicher"? Es ist unmöglich zu sagen, wenn ich nicht auch sage *, weil die Bedrohung, über die ich mir Sorgen mache, ein Dieb ist, der mein Cabriodach aufschneidet, um die zwei Dollar in Vierteln im Handschuhfach zu stehlen *. Sie fragen, ob eine Aktion sicher ist, ohne zu sagen, was die Bedrohung ist. Sagen Sie uns die Bedrohung!
Siehe [Kerckhoffs Prinzip] (https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle).
Die Kommentare "Unbekanntes 'Salz' / Schlüssel" und "Unbekannte Bedrohung" sind wichtig. Wenn die Gefahr besteht, dass eine Tabelle mit Hash-Passwörtern extrahiert werden kann, kann der Angreifer den Algorithmus normalerweise einfach / trivial bestimmen, indem er sein eigenes Hash-Passwort überprüft, ... mit Ausnahme eines fehlenden Schlüssels. Wem würde also das Wissen über den Algorithmus verborgen bleiben? Sicher nicht von einem glaubwürdigen Angreifer. Wenn der Algorithmus sicher ist, kann er sicher offengelegt werden.
@user49637: ROT-13 allein ist nicht sicher. Wenden Sie es viermal hintereinander an.
@TomZych Oder noch besser, ROT-65 viermal hintereinander. Es ist eine größere Anzahl, also ist es offensichtlich viel sicherer!
Fünf antworten:
Tom Leek
2014-06-20 19:37:10 UTC
view on stackexchange narkive permalink

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 Software kennt, die Sie verwenden verwenden, weil:

  • Es gibt nicht so viele Möglichkeiten.
  • Aufgrund des Anwendungsverhaltens und der Ausgabe kann viel erraten werden.
  • Ein Angreifer Wer einen Blick auf Ihre Datenbank werfen könnte, könnte auch eine Kopie Ihrer PHP-Skripte haben und somit weiß .
  • Selbst in Fällen, in denen der Angreifer Ihre Hash-Funktion nicht kennt, ist dies der Fall Es ist sehr schwierig, einen solchen Mangel an Wissen zu quantifizieren: Inwieweit weiß der Angreifer nichts?
  • Insbesondere kann sich der Angreifer auch als registrieren Benutzer mit einem von ihm gewählten Kennwort und beobachten dann den resultierenden Hash, sodass er jede potenzielle Hash-Funktion schnell testen kann.

Wenn Sie die verwendete Hash-Funktion explizit angeben, können Sie dies jedoch tun ein Ruf als "kompetenter Websitebesitzer", der Vertrauen schaffen würde an technisch versierte Kunden.

Unabhängig davon, ob Sie den Ruf eines "kompetenten Website-Eigentümers" haben, hilft Ihnen die Kenntnis des verwendeten Hash-Algorithmus bei der Auswahl Ihrer eigenen Sicherheitsstufe für die Website. Wenn jemand sha1 verwendet, möchten Sie wahrscheinlich, dass 80 Entropiebits sicher sind. Scrypt mit 5000 Runden, vielleicht weniger. Wenn jemand angibt, dass er nur mit den ersten 16 Zeichen eines MD5-Hashs übereinstimmt, wissen Sie, dass Sie dieser Site niemals etwas Wichtiges mitteilen müssen.
Die Dokumentation zum Open Web Application Security Project (OWASP) gibt eine klare Botschaft, dass Sicherheit durch Dunkelheit niemals gut genug ist. Ein wirklich starkes Sicherheitssystem ist eines, bei dem der Angreifer alles über Ihr System wissen kann, aber dennoch nicht einbrechen kann.
Fleche
2014-06-21 14:51:44 UTC
view on stackexchange narkive permalink

Aus rein technischer Sicht 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, die 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.

executifs
2014-06-20 19:32:32 UTC
view on stackexchange narkive permalink

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, hinsichtlich der 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 Kennwortschemas nicht davon ab überhaupt geheim - es beruht darauf, dass die Kryptographie einer Peer-Review unterzogen wird. Daher sollte es keine Rolle spielen, anzugeben, welchen Algorithmus Sie verwenden.

Man kann jedoch feststellen, dass es zufällig keinen mathematischen Beweis dafür gibt, dass eine Hash-Funktion tatsächlich existieren kann, geschweige denn, dass eine konkrete Hash-Funktion "sicher" ist. Kryptographie ist im Allgemeinen NICHT "mathematisch bewiesen". Die Kryptographie beruht stattdessen auf der kombinierten Gehirnleistung von Kryptographen, ein Prozess, der nur in einem vollständigen Offenlegungskontext gut (oder überhaupt) funktioniert. Daher kann man sagen, dass die Stärke eines Schemas nicht nur nicht davon abhängt, dass das Schema geheim ist; es beruht positiv darauf, dass das Schema nicht geheim ist.
Vielen Dank für den Hinweis. Ich habe meine Antwort aktualisiert, um diesen Fehler meinerseits zu korrigieren.
Damon
2014-06-22 17:05:54 UTC
view on stackexchange narkive permalink

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. "Key Stretching, das mehrere Iterationen einer Einwegfunktion enthält" ), aber das nicht zu erwähnen exakter Algorithmus.

Das Hashing der Hashing-Methode (oder sogar der gesamten Authentifizierungsmethode) ist eine Instanz von Sicherheit durch Dunkelheit , die normalerweise verpönt wird. Meistens ist dieses Stirnrunzeln jedoch auf ein Missverständnis zurückzuführen, ähnlich wie die Leute Hoares Zitat zur vorzeitigen Optimierung häufig als "nicht optimieren" falsch interpretieren.
Sicherheit darf nicht von Dunkelheit allein abhängen. Dunkelheit am richtigen Ort kann jedoch 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 weiterhin zuverlässig funktionieren In diesem Fall.
Dies bedeutet jedoch nicht, dass Sie unbedingt jedes Detail offenlegen müssen.

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

Ein bisschen Unklarheit über den genauen Algorithmus ist beides , wenn Sie einen großen, markanten Türriegel mit einem versteckten, geschützten Schlossschlitz an Ihrer Vordertür anbringen um Ihr Geld in den Safe zu legen, 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 einem potenziellen Einbrecher jedoch, 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 dient weiterhin seinem Zweck.
Ein Hotelsafe nimmt normalerweise 4 Nummern an (und gelegentlich hat der Hotelmanager vergessen, den Notfallcode von 0000 code zu ändern > auch). Fingerabdrücke ermöglichen es einem Dieb trivial, den Safe in weniger als 3 Minuten zu ö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. Dies bedeutet, dass der unsichere Safe im wahrsten Sinne des Wortes 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 Insgesamt bedeutet dies, 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.

Lie Ryan
2014-06-21 18:29:36 UTC
view on stackexchange narkive permalink

Wenn der Hash sicher ist und, was noch wichtiger ist, die Verwendung in der Site / Anwendung 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.

Ja, WENN die Implementierung sicher ist, ist die Offenlegung sicher. Das ist eine große WENN .



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...