/ / Uwierzytelnianie przy użyciu losowych cyfr w haśle - c #, java, uwierzytelnianie, szyfrowanie, hasła

Uwierzytelnianie przy użyciu losowych cyfr w haśle - c #, java, uwierzytelnianie, szyfrowanie, hasła

To pytanie jest raczej projektem niż wiedzą techniczną.

Zastanawiam się, jaki byłby najlepszy sposóbwdrożyć mechanizm uwierzytelniania, w którym użytkownicy proszeni są o wprowadzenie / wybranie znaków z określonych pozycji w całym haśle. dawny. prośba o wpisanie / wybranie trzeciego, piątego i dziewiątego znaku, a następnie sprawdzenie, czy wprowadził / wybrał prawidłowe znaki z oryginalnego hasła.

O ile mi wiadomo, hasła są solone iszyfrowane przy użyciu nieodwracalnego algorytmu przed ich zapisaniem. Gdy użytkownik wprowadzi całe hasło, jest ono ponownie solone, szyfrowane i porównywane z zapisaną wartością. Ale w powyższym przypadku, w którym wprowadzane / wybierane są tylko niektóre znaki, w jaki sposób można sprawdzić całe hasło?

Poniżej znajdują się dwa (niebezpieczne) sposoby na wdrożenie powyższego

  • Rozbicie oryginalnego hasła na poszczególne znaki, a następnie solenie i szyfrowanie ich. Następnie porównanie wartości wprowadzonej przez użytkownika przeciwko konkretnemu charakterowi.
  • Łamanie oryginalnego hasła na predefiniowany zestaw kombinacji, takich jak 2, 3 i 7 znaków razem, a następnie solenie i szyfrowanie ich. Później porównując z wprowadzoną przez użytkownika wartością.

Myślę jednak, że dzięki powyższym implementacjom łatwo jest złamać hasło zamiast złamać hasło, które jest zaszyfrowane jako całość.

Jaki byłby najbezpieczniejszy sposób na wdrożenie tego?


AKTUALIZACJA: Właśnie odkryłem, że ten temat został szczegółowo omówiony tutaj i wspomina o użyciu HSM i szyfrowanie symetryczne.

Odpowiedzi:

3 dla odpowiedzi № 1

Rozkładanie hasła na różne częściże haker może samodzielnie zaatakować, znacznie zmniejsza złożoność hasła. Zasadniczo pozwalasz hakerowi zagrać w „20 pytań” hasłem: „Czy poszczególne cyfry to 500? Nie, a co powiesz na 750?”

Ponadto dla większości typowych użytkowników aplikacji zadanie to jest trudne, trudne i denerwujące.

Nie sugerowałbym tego.

Masz rację, że solone hashed (nieszyfrowane) hasło jest zwykle przechowywane. Jeśli używasz funkcji mieszania zamiast szyfrowania, potrzebujesz mechanizmu, aby osobno wiedzieć, jakie są te konkretne cyfry hasła. ty powinien być solonym / mieszającym. Kilka głośnych witryn miało zaatakowanych wiele kont użytkowników, ponieważ używali szyfrowania, a hakerzy znaleźli klucz szyfrowania.


0 dla odpowiedzi nr 2

Robiąc to, obniżasz entropięhasło daje ci. Weźmy na przykład 8-znakowe hasło. Załóżmy teraz, że twoje hasło jest wybierane losowo, a my próbujemy brutalnie wymusić je, wypróbowując każdą kombinację. Wzór na to jest (n + r-1!) / R! (N-1)! znaki (r = 8) (wielkie i małe litery oraz cyfry n = (26 * 2 + 10)) wszystkie kombinacje 8361453670 różne kombinacje.

Teraz powiedzmy, że poprosisz ich, aby ci dalipierwsza, trzecia i szósta postać, którą skutecznie zmniejszyłeś liczbę do wyboru (r) do 3, ponieważ do brutalnej siły w każdej kombinacji potrzebuję tylko 3 znaków. Całkowita liczba kombinacji, które masz teraz, to 41664, który jest o wiele łatwiejszy do złamania. W rzeczywistości nie zajmie to dużo czasu.

Nigdy nie powinieneś zmniejszać entropii, w rzeczywistości zalecam, aby hasła składały się z co najmniej 10 znaków z literami cyfr i symboli.

Co do twojego pytania o „nieodwracalneszyfrowanie, „masz” na myśli skrót. Hasła powinny być przechowywane w stanie mieszanym i solonym, aw rzeczywistości powinny używać powolnego skrótu, takiego jak BCrypt, SCrypt lub PBKDF2. Ale aby móc robić to, co mówisz, będziesz musiał zaszyfrować hasło za pomocą szyfrowania odwracalnego. Jest to nie-nie, ponieważ klucz może zostać skradziony, w którym to przypadku twoje hasła mogą być również w postaci zwykłego tekstu.

Najlepszym sposobem przechowywania haseł jest nieprzechowuj je (użyj otwartego identyfikatora lub czegoś innego, jeśli możesz, abyś nie musiał ponosić odpowiedzialności). Drugim najlepszym podejściem do przechowywania haseł jest przechowywanie ich tak, jakbyś je stracił. Solone + mieszane z bardzo wolnym algorytmem, który da ci wystarczająco dużo czasu, aby ostrzec użytkowników i dać im wystarczająco dużo czasu na zmianę hasła.


-2 dla odpowiedzi nr 3

Hasła są zwykle przechowywane w postaci zaszyfrowanejformat. Jest szyfrowany określoną solą. Sól mówi algorytmowi szyfrowania o niektórych wektorach inicjujących. To szyfrowanie jest jednym ze sposobów. Nie ma możliwości jego odszyfrowania.

W ten sposób niezwykle trudno jest zbudować tęczową tabelę haseł, ponieważ musiałbyś to zrobić przy każdej kombinacji soli. Zobacz następujące WIKI .. http://en.wikipedia.org/wiki/Rainbow_table

Proponowana metoda poważnie obniżyłaby bezpieczeństwo, które można uzyskać od dobrego hasła.