Przede wszystkim nie nazwałbym siebie ekspertem bezpieczeństwa, ale byłem w stanie odpowiedzieć na to pytanie. To, co odkryłem, nieco mnie zaskoczyło: nie ma czegoś takiego jak całkowicie bezpieczny system . Myślę, że całkowicie bezpieczny system to taki, w którym wszystkie serwery są wyłączone :)
Ktoś pracujący ze mną w tym czasie opisał projektowanie bezpiecznego systemu pod względem podnoszenia poprzeczki dla intruzów. Tak więc każda warstwa zabezpieczenia zmniejsza szansę na atak.
Na przykład, nawet jeśli możesz doskonale zabezpieczyć klucz prywatny, system nie jest całkowicie bezpieczny. Ale prawidłowe stosowanie algorytmów bezpieczeństwa i aktualizowanie poprawek podnosi poprzeczkę. Ale tak, superkomputer wystarczająco mocny i mający wystarczająco dużo czasu może przerwać szyfrowanie. Jestem pewien, że wszystko to jest zrozumiałe, więc odzyskam pytanie.
Pytanie jest jasne, więc najpierw spróbuję zająć się każdym z twoich punktów:
Powiedzmy, że klucz jest chroniony przez model bezpieczeństwa systemu plików; ale co z (złośliwymi) superużytkownikami lub platformami, które nie zapewniają takiej wierności?
Tak, jeśli używasz czegoś takiego jak Windows Key Store lub klucz prywatny TLS zaszyfrowany hasłem, jesteś narażony na użytkowników, którzy mają hasło (lub dostęp) do kluczy prywatnych. Ale myślę, że zgodzisz się, że podnosi poprzeczkę. Listy ACL systemu plików (jeśli są poprawnie zaimplementowane) zapewniają całkiem dobry poziom ochrony. Jesteś w stanie osobiście zweryfikować i poznać swoich superużytkowników.
Lub klucz jest zapisany na stałe w plikach binarnych oprogramowania, ale zawsze można go było zdekompilować, a co z oprogramowaniem open source lub interpretowanym kodem?
Tak, widziałem na stałe klucze w plikach binarnych. Ponownie podnosi to nieco poprzeczkę. Ktoś atakujący ten system (jeśli jest to Java) musi zrozumieć, że Java wytwarza kod bajtowy (itp.) I musi wiedzieć, jak go zdekompilować. Jeśli używasz języka, który zapisuje bezpośrednio w kodzie maszynowym, możesz zauważyć, że podnosi to poprzeczkę nieco wyżej. Nie jest to idealne rozwiązanie bezpieczeństwa, ale może zapewnić pewien poziom ochrony.
Jeśli klucz zostanie wygenerowany, taki algorytm musiałby być deterministyczny (przypuszczalnie), a następnie ten sam problem dotyczy ziarna.
Tak, zasadniczo algorytm staje się informacją klucza prywatnego do utworzenia klucza prywatnego. Musiałby więc być chroniony.
Myślę więc, że zidentyfikowałeś podstawowy problem z jakąkolwiek polityką bezpieczeństwa, zarządzaniem kluczami . Posiadanie zasad zarządzania kluczami jest kluczowe dla zapewnienia bezpiecznego systemu. I jest to dość szeroki temat .
Pytanie brzmi, jak bezpieczny musi być Twój system (a zatem klucz prywatny)? Jak wysoko w twoim systemie trzeba podnieść poprzeczkę?
Teraz, jeśli chcesz zapłacić, są ludzie, którzy opracowują rozwiązania tego problemu. Skończyło się na użyciu HSM (Hardware Security Module) . Jest to zasadniczo serwer odporny na manipulacje, który zawiera klucz sprzętowy. Tego klucza można następnie użyć do utworzenia innych kluczy używanych do szyfrowania. Chodzi o to, że (jeśli jest poprawnie skonfigurowany), klucz nigdy nie opuszcza HSM. HSM dużo kosztują . Ale w niektórych firmach (powiedzmy, ochrona danych kart kredytowych) koszt naruszenia jest znacznie wyższy. Więc jest równowaga.
Wiele HSM korzysta z kart kluczowych od konserwacji i administrowania funkcjami. Kworum kart kluczowych (powiedzmy 5 z 9) musi zostać fizycznie umieszczone na serwerze w celu zmiany klucza. To podnosi poprzeczkę całkiem wysoko, pozwalając na naruszenie tylko w przypadku zmowy kworum superużytkowników.
Mogą istnieć rozwiązania programowe, które zapewniają podobne funkcje do HSM, ale nie wiem, czym one są.
Wiem, że to tylko sposób na odpowiedź na pytanie, ale mam nadzieję, że to pomoże.