Szukaj…


Wprowadzenie

Praktyki bezpieczeństwa w Javie można podzielić na dwie szerokie, niejasno zdefiniowane kategorie; Bezpieczeństwo platformy Java i bezpieczne programowanie w języku Java.

Praktyki bezpieczeństwa platformy Java dotyczą zarządzania bezpieczeństwem i integralnością JVM. Obejmuje takie tematy, jak zarządzanie dostawcami JCE i politykami bezpieczeństwa.

Bezpieczne praktyki programowania Java dotyczą najlepszych sposobów pisania bezpiecznych programów Java. Obejmuje takie tematy, jak używanie liczb losowych i kryptografii oraz zapobieganie lukom w zabezpieczeniach.

Uwagi

Chociaż należy wyraźnie podać przykłady, niektóre tematy, które należy omówić, to:

  1. Koncepcja / struktura dostawcy JCE
  2. Element listy

JCE

Java Cryptography Extension (JCE) to platforma wbudowana w JVM, aby umożliwić programistom łatwe i bezpieczne korzystanie z kryptografii w swoich programach. Robi to, zapewniając programistom prosty, przenośny interfejs, a jednocześnie korzysta z systemu dostawców JCE w celu bezpiecznego wdrożenia podstawowych operacji kryptograficznych.

Klucze i zarządzanie kluczami

Podczas gdy JCE zabezpiecza operacje kryptograficzne i generowanie kluczy, to do dewelopera należy zarządzanie ich kluczami. Więcej informacji należy podać tutaj.

Jednym z powszechnie akceptowanych najlepszych sposobów postępowania z kluczami w czasie wykonywania jest przechowywanie ich tylko jako tablic byte , a nigdy jako ciągów znaków. Wynika to z tego, że ciągi Java są niezmienne i nie można ich ręcznie „wyczyścić” ani „wyzerować” w pamięci; podczas gdy odwołanie do ciągu można usunąć, dokładny ciąg pozostanie w pamięci, dopóki jego segment pamięci nie zostanie zużyty i ponownie użyty. Osoba atakująca miałaby duże okno, w którym mogłaby zrzucić pamięć programu i łatwo znaleźć klucz. Przeciwnie, tablice byte są zmienne i mogą zostać zastąpione ich zawartością; dobrym pomysłem jest wyzerowanie kluczy, gdy tylko ich nie potrzebujesz.

Typowe luki w zabezpieczeniach Java

Potrzebuje treści

Obawy związane z siecią

Potrzebuje treści

Losowość i Ty

Potrzebuje treści

W większości aplikacji klasa java.utils.Random jest doskonałym źródłem „losowych” danych. Jeśli musisz wybrać losowy element z tablicy, wygenerować losowy ciąg znaków lub utworzyć tymczasowy „unikalny” identyfikator, prawdopodobnie powinieneś użyć Random .

Jednak wiele systemów kryptograficznych opiera się na losowości ze względu na swoje bezpieczeństwo, a losowość zapewniana przez Random po prostu nie jest wystarczająco wysokiej jakości. W przypadku każdej operacji kryptograficznej, która wymaga losowego wprowadzania danych, należy zamiast tego użyć SecureRandom .

Hashowanie i walidacja

Potrzebne więcej informacji.

Kryptograficzna funkcja skrótu należy do klasy funkcji o trzech istotnych właściwościach; spójność, niepowtarzalność i nieodwracalność.

Spójność: biorąc pod uwagę te same dane, funkcja skrótu zawsze zwraca tę samą wartość. To znaczy, jeśli X = Y, f (x) zawsze będzie równe f (y) dla funkcji skrótu f.

Wyjątkowość: Żadne dwa dane wejściowe funkcji skrótu nigdy nie będą dawały tego samego wyniku. To znaczy, jeśli X! = Y, f (x)! = F (y), dla dowolnych wartości X i Y.

Nieodwracalność: „Odwrócenie” funkcji skrótu jest niepraktycznie trudne, jeśli nie niemożliwe. Oznacza to, że biorąc pod uwagę tylko f (X), nie powinno być możliwości znalezienia oryginalnego X bez podania każdej możliwej wartości X przez funkcję f (siła brutalna). Nie powinno być takiej funkcji f1, że f1 (f (X)) = X.

Wiele funkcji nie ma co najmniej jednego z tych atrybutów. Na przykład wiadomo, że MD5 i SHA1 mają kolizje, tj. Dwa wejścia, które mają takie same dane wyjściowe, więc brakuje im wyjątkowości. Niektóre funkcje uważane obecnie za bezpieczne to SHA-256 i SHA-512.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow