Sollten Programmierer, die Websites / Webanwendungen erstellen, die Kryptografie verstehen? Ich habe keine Ahnung, wie die meisten kryptografischen Algorithmen funktionieren, und ich verstehe die Unterschiede zwischen md5 / des / aes / etc wirklich nicht. Hat jemand von Ihnen einen Bedarf für ein tiefgreifendes Verständnis der Kryptographie gefunden?
Ich habe es nicht gebraucht, aber ich frage mich, ob mir vielleicht etwas fehlt. Ich habe Salt + MD5-Hash verwendet, um Passwörter zu verschlüsseln, und ich fordere Webserver auf, SSL zu verwenden. Darüber hinaus kann ich nicht sagen, dass ich viel anderes verwendet habe, und ich kann auch nicht mit Sicherheit sagen, wie sicher diese Methoden sind. Ich benutze sie nur, weil andere Leute behaupten, sie seien sicher.
Haben Sie jemals eine Notwendigkeit gefunden, Kryptographie in der Webprogrammierung zu verwenden, abgesehen von diesen zwei einfachen Beispielen?
quelle
Antworten:
Webprogrammierer sollten wissen, dass sie niemals selbst versuchen sollten, Kryptografie zu implementieren.
Dies bedeutet insbesondere, dass kein Nicht-Sicherheitsexperte eines der kryptografischen Grundelemente direkt berühren sollte. Sie sollten nicht auf der Ebene von AES, SHA-1 usw. denken. Stattdessen sollten sie übergeordnete Funktionen zum Verschlüsseln und Signieren von Nachrichten und zum "Hash" von Passwörtern verwenden.
Warum? Weil die Leute sonst in die Irre geführt werden und denken, dass:
Nur um auf der gleichen Seite zu sein, ist keiner der oben genannten Punkte in Ordnung . Wenn Sie das nicht verstehen, sollten Sie Crypto nicht mit einer 10-Fuß-Stange berühren! (AES-256 ist eine großartige Verschlüsselung, aber nur, wenn Sie sie richtig verwenden. "Es kommt nicht auf die Größe an, sondern darauf, was Sie damit machen." :-))
Über welche übergeordneten Funktionen spreche ich? Ich persönlich empfehle die Verwendung einer OpenPGP-Bibliothek (für Daten in Ruhe) oder einer SSL-Bibliothek (für Daten in Bewegung). Diese Protokolle spezifizieren streng die korrekte Verwendung von asymmetrischen, symmetrischen und Hash-Algorithmen. Zum Beispiel mit OpenPGP:
EME-PKCS1-v1_5
) aufgefüllt . Die Polsterung ist für RSA extrem wichtig. ( Einige halten die Verwendung von v1.5-Padding für in Ordnung. Andere halten OAEP für besser. )Zusammenfassung: Wenn Sie kein Sicherheitsexperte sind und auf der Ebene von AES, SHA-1 oder (himmlisch verboten) MD5 denken, machen Sie es falsch . Verwenden Sie eine Bibliothek, die von Sicherheitsexperten (wie Bouncy Castle) geschrieben wurde und Protokolle implementiert, die von Sicherheitsexperten (wie OpenPGP für die Verschlüsselung oder bcrypt oder scrypt für das Kennwort-Hashing) entwickelt wurden, anstatt Ihre eigenen Protokolle zu erstellen.
Ich bin kein Krypto-Experte, aber ich weiß genug, um nicht zu versuchen, meine eigenen Ad-hoc-Protokolle zu entwerfen. Um es klar zu machen: Dieser gesamte Beitrag ist aus Cryptography 101-Material . Wenn dieser Beitrag für Sie also keinen 100% igen Sinn ergibt, sollten Sie auf keinen Fall in die Nähe der Kryptografie gelangen.
quelle
Sie müssen nichts anderes als die Grundlagen der Kryptografie kennen (was ist ein Hash, was ist ein Salt, ungefähr wie schwer es ist, diese oder jene Verschlüsselung zu knacken usw.), aber Sie müssen einiges über Sicherheit in wissen Allgemeines.
Die wichtigsten Sicherheitsbereiche, die Sie als Webentwickler unbedingt beachten müssen:
quelle
Ich erinnere mich, dass ich diesen Vortrag mit dem Titel Was jeder Ingenieur über Sicherheit wissen muss und wo man es lernen kann gesehen habe. Der Sprecher ist Neil Daswani und es ist ein Google Tech Talk, den er gehalten hat.
Gilt jedoch nicht nur für Webprogrammierer. Vielleicht sollte die Frage mit dem Titel "Was sollten Programmierer über Sicherheit wissen?" Umbenannt werden. da sie nicht mehr als die Grundlagen der Kryptographie wissen müssen (so interessant es auch ist)
quelle
Crypto ist in vielen Situationen nützlich. Ein Beispiel, das wir verwendet haben, ist das Verschlüsseln eines Sitzungscookies, das von einem Win / IIS-Host erstellt und für die Verwendung auf einem LAMP-Host festgelegt wurde.
Wenn Sie eine Verschlüsselung implementieren möchten (im Gegensatz zu md5 / sha1-Hashing), sind einige grundlegende Begriffe wichtig - beispielsweise der Unterschied zwischen symmetrischer und asymmetrischer Verschlüsselung. Zusammen mit dem Verständnis des Unterschieds zwischen den beiden sollten Sie ein Verständnis dafür entwickeln, was Sie als Webentwickler tun müssen, um Entschlüsselungsschlüssel ordnungsgemäß zu speichern und zu sichern. Beispiel: Wenn Sie eine Anwendung entwickeln, die auf einem Host bereitgestellt werden soll, auf dem Sie keine vollständige administrative Kontrolle haben, z. B. auf einem freigegebenen Host, oder auf einem Server, auf dem alle Administratoren bekannt und vertrauenswürdig sind.
quelle
Meiner Meinung nach sollten Sie alles über Kryptografie wissen, was jemand wissen wird, der Ihren Code angreift. Sie sollten Hashes, Salt, die Nicht-Zufälligkeit des Zufalls, die wichtigsten Verschlüsselungsalgorithmen (RSA, 3DES, AES usw.) und SHA-1 / MD-5 / et al. Verstehen. Sie müssen sie nicht auswendig lernen, aber Sie sollten zumindest wissen, wie effektiv ein Hash-Algorithmus ist und wie er gestärkt werden kann. Sie sollten wissen, was Kollisionen und Fehlalarme sind. Sie sollten nicht in der Lage sein, die Verschlüsselungsalgorithmen zu rezitieren, aber Sie sollten mit deren Benchmarks vertraut sein, welche für welche Szenarien ideal sind. Sie sollten in der Lage sein, symmetrische und asymmetrische Verschlüsselung zu beschreiben und zu erläutern, wann sie verwendet werden sollen. Sie sollten wissen, was PKI ist und wie sie verwendet wird. Sie sollten wissen, was eine Zertifizierungsstelle ist und wie sie mit Ihren Servern interagiert.
Es ist nicht so wichtig, alles genau zu kennen, wie den Hintergrund zu kennen. Was sind die Benchmarks für bestimmte Dinge (wie schnell, wie stark, wie schwach usw.)?
Diese Empfehlungen gelten für Informationen auf Senior- oder Architektenebene. Wenn Sie nur ein Netzaffe sind, der ein Ruder rudert, müssen Sie nichts davon wissen. Ihr Architekt sollte dieses Zeug kennen. Wenn Sie für die Site verantwortlich sind, sie entwerfen, implementieren usw., sollten Sie mit all diesen Konzepten vertraut sein und in der Lage sein, sich auf intelligente Weise darüber auszutauschen. Sie müssen nicht in der Lage sein, es zu lehren, sondern nur Informationen darüber zu akzeptieren und zu verbreiten.
quelle
Sie sollten bcrypt (Blowfish) verwenden, um Kennwörter anstelle von MD5 zu speichern. Es ist ein viel langsamerer Algorithmus , was bedeutet, dass es für einen Hacker viel schwieriger ist, zu erraten und zu überprüfen. Außerdem nimmt bcrypt einen Arbeitsfaktor als Parameter, was bedeutet, dass er mit der Einführung neuer Computer noch langsamer werden kann, sodass er zukunftssicher ist.
Weitere Informationen finden Sie unter So speichern Sie ein Kennwort sicher .
quelle
Als eine ziemlich allgemeine Antwort auf diese Art von Fragen denke ich immer, dass Sie versuchen sollten, ein grundlegendes Verständnis von allem zu haben, das in einem entfernten Zusammenhang mit dem steht, was Sie tun. Natürlich benötigen Sie genaue Kenntnisse darüber, woran Sie gerade arbeiten. Es ist sehr schwer vorherzusagen, wie sich ein bestimmtes Gebiet entwickeln wird, was "in Mode" sein wird oder was Sie in Zukunft brauchen werden, so dass ein breites Gebiet an Dingen, von denen Sie zumindest "gehört" haben, erhalten bleibt Viele Türen öffnen sich.
Nach meiner persönlichen Erfahrung in der Webprogrammierung fand ich grundlegende Begriffe der asymetrischen Kryptographie und solche, die hilfreich waren, um zu verstehen, was unter der Haube vor sich geht. Ich hätte ohne sie überleben können, aber ich muss sagen, ich mag Kryptographie und Mathematik, warum nicht.
quelle