Z mojego rozumienia, klasa Random
generuje losowe wartości oparte na "losowym algorytmie Psuedo", więc w rzeczywistości nie są one przypadkowe, co-tak-kiedykolwiek. opierają się na konkretnej implementacji algorytmu matematycznego, więc wyniki są przewidywalne.
Więc jeśli próbowałem złamać ten algorytm, dla naruszenia bezpieczeństwa, nie, że chciałbym, muszę znać pewne informacje: Wiem, co to jest algorytm, to jest publicznie dostępne za pośrednictwem platformy .Net, co to jest wartości wejściowe (nasiona)?
Znowu nie można po prostu zakodować tych wartości wejściowych, muszą one być oparte na czymś, więc co z tego?
W twoim przykładzie spróbujesz, jak rozumiem, wygenerować wszystkie możliwe wartości początkowe. To, jak powiedziałeś, zajmuje dużo czasu!
Ale dlaczego miałbym to zrobić? najbardziej inteligentnym podejściem jest próba odgadnięcia, co używasz do generowania wartości wejściowych? Czy używasz czasu? Kiedy odzyskiwane są hasła? Kiedy wygenerowano to hasło? Jaki podzbiór wartości to daje? Jak dużą liczbę używasz?
Jeśli możesz przetestować 6 milionów nasion dziennie, to ile wartości przy zastosowaniu pewnej logiki zawęzi zestaw możliwych wartości do? Jeśli to będzie 6 milionów, mogę złamać twoje hasło w ciągu 24 godzin.
To powiedziawszy, jeśli możesz sprawić, że twój podzbiór nasion będzie wystarczająco duży i nieprzewidywalny, będzie to trudne. Więc pytanie, jak wiele rzeczy w bezpieczeństwie, sprowadza się, jak bezpieczne musi to być? Nic nie jest w 100%!
Dlaczego po prostu nie pokazać im odpowiedzi Eric Lipperta i pytania, które łączysz? Pokazuje nawet przykład generowania przypadkowych liczb kryptograficznych - jeśli próbujesz przekonać biznesowe umysły, wystarczy wspomnieć o kryptograficznym słowie :-P –
Myślę, że masz logikę w niewłaściwy sposób. Jeśli istnieje aplikacja, która ma krytyczne znaczenie dla bezpieczeństwa, obciążenie spoczywa na tych, którzy proponują rozwiązanie, które zademonstruje, że rozwiązanie spełnia wymagania bezpieczeństwa. Wątpię, by ktokolwiek mógł to zrobić dla klasy losowej .NET. PRNG używane w aplikacjach kryptograficznych mają zdefiniowane właściwości bezpieczeństwa, więc można pokazać, że spełniają określone wymagania. –