Java Language
Sicherheit & Kryptographie
Suche…
Einführung
Sicherheitspraktiken in Java können in zwei große, vage definierte Kategorien unterteilt werden. Java-Plattformsicherheit und sichere Java-Programmierung.
Die Sicherheitspraktiken der Java-Plattform betreffen die Verwaltung der Sicherheit und Integrität der JVM. Dazu gehören Themen wie das Verwalten von JCE-Providern und Sicherheitsrichtlinien.
Sichere Java-Programmierverfahren beziehen sich auf die besten Möglichkeiten, sichere Java-Programme zu schreiben. Dazu gehören Themen wie die Verwendung von Zufallszahlen und Kryptografie sowie die Vermeidung von Sicherheitslücken.
Bemerkungen
Während Beispiele klar gemacht werden sollten, sind einige Themen, die behandelt werden müssen:
- Das Konzept / die Struktur des JCE-Anbieters
- Listenpunkt
Die JCE
Die Java Cryptography Extension (JCE) ist ein in die JVM integriertes Framework, mit dem Entwickler Kryptografie in ihren Programmen einfach und sicher verwenden können. Dies geschieht durch die Bereitstellung einer einfachen, tragbaren Schnittstelle für Programmierer, während ein System von JCE-Providern verwendet wird, um die zugrunde liegenden kryptographischen Operationen sicher zu implementieren.
Schlüssel und Schlüsselverwaltung
Während das JCE kryptografische Operationen und die Schlüsselgenerierung sichert, ist es Sache des Entwicklers, die Schlüssel tatsächlich zu verwalten. Weitere Informationen müssen hier bereitgestellt werden.
Eine allgemein anerkannte bewährte Methode für die Handhabung von Schlüsseln zur Laufzeit besteht darin, sie nur als byte
Arrays und niemals als Zeichenfolgen zu speichern. Dies liegt daran, dass Java-Zeichenfolgen nicht veränderbar sind und nicht manuell im Speicher gelöscht oder gelöscht werden können. Während ein Verweis auf eine Zeichenfolge entfernt werden kann, bleibt die genaue Zeichenfolge im Speicher, bis der Speicherbereich des Speichers gesammelt und erneut verwendet wird. Ein Angreifer verfügt über ein großes Fenster, in dem er den Speicher des Programms ablegen und den Schlüssel leicht finden kann. Im Gegensatz dazu sind byte
Arrays veränderbar, und ihr Inhalt kann überschrieben werden. Es ist eine gute Idee, Ihre Schlüssel zu löschen, sobald Sie sie nicht mehr benötigen.
Häufige Java-Schwachstellen
Benötigt Inhalt
Bedenken hinsichtlich der Vernetzung
Benötigt Inhalt
Zufälligkeit und Du
Benötigt Inhalt
Für die meisten Anwendungen ist die Klasse java.utils.Random
eine perfekte Quelle für "zufällige" Daten. Wenn Sie ein zufälliges Element aus einem Array auswählen oder eine zufällige Zeichenfolge generieren oder einen temporären "eindeutigen" Bezeichner erstellen müssen, sollten Sie wahrscheinlich Random
.
Viele kryptografische Systeme sind jedoch für ihre Sicherheit auf Zufälligkeit angewiesen, und die von Random
bereitgestellte Random
einfach nicht hoch genug. Für jede kryptografische Operation, die eine zufällige Eingabe erfordert, sollten SecureRandom
stattdessen SecureRandom
verwenden.
Hashing und Validierung
Weitere Informationen werden benötigt.
Eine kryptografische Hashfunktion ist ein Mitglied einer Klasse von Funktionen mit drei wesentlichen Eigenschaften. Konsistenz, Einzigartigkeit und Irreversibilität.
Konsistenz: Bei gleichen Daten liefert eine Hash-Funktion immer den gleichen Wert. Das heißt, wenn X = Y ist, ist f (x) für die Hashfunktion f immer gleich f (y).
Eindeutigkeit: Keine zwei Eingaben für eine Hash-Funktion führen zu derselben Ausgabe. Das heißt, falls X! = Y, f (x)! = F (y) für beliebige Werte von X und Y.
Irreversibilität: Es ist unpraktisch schwierig, wenn nicht unmöglich, eine Hash-Funktion "umzukehren". Das heißt, wenn nur f (X) gegeben ist, sollte es nicht möglich sein, das ursprüngliche X zu finden, bevor jeder mögliche Wert von X durch die Funktion f (rohe Kraft) gesetzt wird. Es sollte keine Funktion f1 geben, so dass f1 (f (X)) = X ist.
Vielen Funktionen fehlt mindestens eines dieser Attribute. Zum Beispiel ist bekannt, dass MD5 und SHA1 Kollisionen haben, dh zwei Eingänge, die den gleichen Ausgang haben, so dass ihnen die Eindeutigkeit fehlt. Einige Funktionen, die derzeit als sicher gelten, sind SHA-256 und SHA-512.