2009-09-27 17 views
5

Piszę aplikację, która musi odczytać nazwę użytkownika i hasło i zapisać je, aby program mógł je ponownie przeczytać później. Przechowywanie w niektórych zmiennych brzmi jak głupi pomysł.Zapisywanie haseł w aplikacji

Znaleziono KDE library, ale ma zbyt dużą zależność i jestem zbyt początkującym programistą, aby zrozumieć, jak z niego korzystać.

Jakie są najczęstsze metody przechowywania haseł i jak mogę rozwiązać swój problem?

Odpowiedz

7

To zależy od tego, co zamierzasz zrobić z tymi informacjami.

Jeśli zamierzasz użyć nazwy i hasła, aby uzyskać dostęp do niektórych usług zewnętrznych (ale użytkownik będzie musiał ponownie wprowadzić informacje przy następnym uruchomieniu programu), to przechowywanie ich w niektórych zmiennych jest OK. Rozsądne może być przechowywanie ich w postaci zaszyfrowanej (przynajmniej przechowuj hasło zaszyfrowane), aby nie było widoczne w zrzutach głównych lub ich odpowiednikach. Kiedy hasło jest potrzebne, odszyfrujesz go, użyjesz go, a następnie zapisujesz, gdzie odszyfrowana wersja była przechowywana (zapping to). (Uwaga: hashowanie nie jest odpowiednie w tym kontekście, musisz być w stanie zobaczyć hasło i nie możesz cofnąć hasza.) Możesz zdecydować o przechowywaniu informacji poza programem (w pliku dyskowym), ale nie wydaje się konieczne. Zauważ, że plik binarny nadal będzie zawierał klucz szyfrujący (i algorytm szyfrowania), a zaszyfrowane dane są bardziej losowe niż średnia zawartość twojego programu, więc naprawdę ukrywanie zaszyfrowanego hasła jest w rzeczywistości bardzo trudne (niedopuszczalne). Możesz jednak zmusić go do zatrzymania wszystkich, ale najbardziej zdeterminowanych napastników.

Jeśli zamierzasz przechowywać nazwę użytkownika i hasło jako stały zapis, abyś mógł sprawdzić, czy ten sam użytkownik uzyskuje dostęp do informacji w przyszłości, musisz użyć pamięci zewnętrznej do programu; użyjesz prostej bazy danych, która może być tak prosta jak zwykły plik tekstowy, jeśli zapewnisz rozwiązanie wszelkich problemów związanych z współbieżnością. W takim przypadku będziesz mieszał hasło z solą, a będziesz przechowywać nazwę użytkownika, sól i hashowane hasło w taki sposób, że przy nazwie użytkownika możesz łatwo znaleźć pozostałe dwie wartości.


Noc Walker komentarze:

używam tego hasła w celu uzyskania dostępu jakąś bazę internetową, więc muszę to zapisane w mojej aplikacji po jej wprowadzeniu po raz pierwszy. Czy jesteś pewien, że zwykły plik tekstowy jest tak pomysłowy?

To zależy od tego, jak myślisz "przechowywane w mojej aplikacji". Nie można modyfikować pliku wykonywalnego lub przynajmniej nie należy tego próbować. Musisz więc traktować go jako trwały zapis przechowywany w jakimś pliku oddzielonym od pliku wykonywalnego aplikacji. Z drugiej strony napotykasz na inny problem z tego, co opisałem - nie uwierzytelniasz użytkownika za pomocą informacji; musisz odszyfrować informacje na żądanie, aby wysłać je do innych aplikacji.

Po pierwsze oznacza to, że sole i skróty nie mają znaczenia; musisz odwrócić operację maskowania i nie możesz cofnąć hasza.

Następnie należy zdecydować, w jaki sposób zidentyfikować użytkownika aplikacji po ponownym pojawieniu się. Czy użytkownik będzie zobowiązany do podania hasła, aby uzyskać dostęp do własnych danych, lub po prostu będzie polegał na uprawnieniach systemu operacyjnego lub innym systemie.

Jeśli użytkownik musi wprowadzić hasło do aplikacji, aby rozpocząć pracę, można rozważyć użycie tego hasła (lub jego skrótu, w odróżnieniu od hasła używanego do rozpoznania hasła do aplikacji) w celu zaszyfrowania nazwy użytkownika/kombinacja hasła dla zewnętrznej aplikacji. Następnie możesz zapisać nazwę użytkownika i, dla zachowania argumentu, zakodowaną wersję szyfrowanego hasła Base-64 do pliku tekstowego; jest to tak samo bezpieczne jak hasło aplikacji, które jest przechowywane w oryginalnym, pospolitym formacie hash. Gdy użytkownik wróci, musi podać swoją nazwę użytkownika i hasło do aplikacji, a także sprawdzić poprawność tej kombinacji w odniesieniu do przechowywanych wartości, a następnie użyć hasła do odszyfrowania hasła do zewnętrznej aplikacji.

Jeśli użytkownik nie wprowadzi hasła, oznacza to, że użytkownik ma więcej ograniczeń co do tego, co można zrobić. Musisz mieć możliwość określenia klucza w jakiś sposób na podstawie dostępnych informacji, które mogą być używane do przechowywania zaszyfrowanego hasła użytkownika w pliku w ograniczonej lokalizacji, takiej jak podkatalog poniżej katalogu domowego bez dostępu grupowego lub publicznego:

mkdir ~/.appname 
chmod 700 ~/.appname 
cp /dev/null ~/.appname/app.key 
...store the encrypted information... 
chmod 500 ~/.appname 
chmod 400 ~/.appname/app.key 

to mniej zadowalające, ponieważ nawet jeśli połączyć stały klucz z nazwą użytkownika, powiedzmy, są szanse, że ktoś może pracować, co to klucz (a technologia szyfrowania) i inżynierii wstecznej go. (Tajność zaszyfrowanych danych zależy od kluczy, kiedy klucz jest określany przez program, jest również możliwy do ustalenia przez określonego agresora.) Najlepiej jak dotąd polegać na użytkowniku, aby podać klucz (lub hasło lub fraza) w czasie wykonywania, a następnie aplikacja nie robi nic, że atakujący może wykorzystać w trybie offline przechowywania

+0

Używam tego hasła, aby uzyskać dostęp do niektórych internetowych baz danych, więc potrzebuję go przechowywanego w mojej aplikacji po jej pierwszym wprowadzeniu. Czy jesteś pewien, że zwykły plik tekstowy jest tym inteligentnym pomysłem? –

+0

, więc widzę, że trwały rekord to najlepszy pomysł do tej pory. aplikacja nie ma żadnych innych haseł i nie robi liczników, że inni użytkownicy będą używać tej aplikacji. Jedyną rzeczą jest próba uratowania hasła + nazwy użytkownika od innych osób. –

+0

Tak, przechowywanie informacji w stałym pliku będzie konieczne. Użyj osobnego pliku dla każdego użytkownika aplikacji; przechowuj zaszyfrowane hasło w kodowaniu Base-64 (dzięki czemu masz zwykły plik tekstowy). Wyprowadź klucz używany do szyfrowania z hasha kryptograficznego, który uważasz za najbardziej niezawodny charakter użytkownika (być może połączenie jego nazwy użytkownika i numeru identyfikacyjnego użytkownika, a także pewny tekst) i przechowuj go w bezpiecznym miejscu lokalizacja, którą możesz wymyślić. Bezpieczeństwo jest mniejsze niż perfekcyjne - to, co możesz sobie wyobrazić, by napastnicy mogli odkryć. –

0

jaki to rodzaj aplikacji? Istnieje wiele metod, ale jeśli ich ASP.Net jest powszechne szyfrowanie w pliku web.config.

+0

Jest to wieloplatformowa aplikacja C++ (nie jakiś aplet sieciowy) –

5

Zwykle przechowujesz nazwę użytkownika i zaszyfrowaną wersję hasła. Zobacz ten artykuł wikipedia: hash functions, a to question.

+2

Hash hasła nie pomoże, jeśli będziesz musiał użyć aktualnego hasła później, aby zalogować się do zdalnego systemu lub coś podobnego. –

+0

Absolutnie ..... – Peter

1

Co o MySQL lub SQLite Hash hasło i przechowywać je w trwałe bazy danych, nie

1

powszechne.? metoda przechowywania haseł do późniejszego wykorzystania jest przechowywanie ich w niektórych zaszyfrowanych pamięci podręcznej.Ten bufor jest zaszyfrowany za pomocą jakiegoś hasła głównego.Użytkownik powinien wprowadzić główne hasło za każdym razem, gdy potrzebujesz hasła z pamięci podręcznej KeePassX to mała aplikacja open source, która używa hasła głównego do przechowuj dane osobowe (nazwy użytkowników, str Asswords itp.) Posiada interfejs światła, jest platformą i jest publikowany zgodnie z warunkami Powszechnej Licencji Publicznej GNU. Możesz to sprawdzić jako próbkę i użyć jej części.

0

W witrynie spotep.com przechowujemy tylko nazwę użytkownika i kod skrótu nazwy użytkownika w połączeniu z hasłem. Zaletą tego jest to, że hasła similair (często banalne) nie skutkują tym samym hashcode (który jest przechowywany w ciasteczku, a zatem bardzo niebezpieczny).

+0

fajna strona, ale tęskniłeś za wieloma seriami tam caprica, battlestar galactica, synowie anarchii itd ... –

+0

Hmm, nie, nie? –

1

Proponuję przechowywanie haszowanego hasła w SQLite. Następnie za każdym razem, gdy musisz sprawdzić hasło, skopiuj je, a następnie porównaj z zapisaną wartością. Dzięki temu przechowywane hasła są bezpieczne, więc nikt (nawet ty) nie wie, co to jest.

1

Możesz wypróbować QSettings, która zapewnia stałe ustawienia aplikacji niezależne od platformy. Rozwiązania takie jak mysql byłyby przesadą, gdyby nie setki haseł do przechowywania.

Powiązane problemy