Bezpieczeństwo danych - program przechowywujący hasła

0

Witam
Chciałbym napisać program, który przechowywałby różnego rodzaju hasła. Program działałby na zasadzie.

  1. Utworzenie konta użytkownika - podanie loginu, hasła.
  2. Zalogowanie się do tego konta
  3. Zapisanie danych do bazy.

I teraz mam pytań kilka. Otóż, chciałbym się dowiedzieć jak takie rzeczy realizuje się profesjonalnie.
Hasło do zalogowania zrobie tak:

  1. Pierwsze logowanie - utworzenie konta. Podanie loginu i hasła. Zahaszowanie hasła (Md5). Zapis haszu do pliku (a może rejestr?)
  2. Przy ponownym logowaniu użytkownik wpisuje hasło - program haszuje je i porównuje hasze. Jeśli te same daje dostęp, jeśli nie odrzuca użytkownika (3 próby)

I pytanie. Czy tak to się robi? Czy to jest bezpieczne (program ma przechowywać hasła, piny itp.. , zatem logowanie musi być bezpieczne).
Druga sprawa, równie ważna. Gdzie i w jakiej formie zapisywać dane. Bo cóż z tego, że zaszyfruje dosęp do danych w programie, jeżeli ktoś może odczytać je poza programem.
Zatem wypadałoby je zaszyfrować... czy może wystarczy użyć typu rekordowego.

Jeśli ktoś pisał podobną aplikację proszę o podzielenie się wiedzą.
Chciałbym, aby mój program był zabezpieczony (w miarę)... bo już nie mogę spamiętać tych haseł i innych numerków ;)
Dzięki
Pozdr

0

Mechanizm logowania, który zaproponowałeś jest dobry i bardzo często stosowany. Tylko zaznaczę, że plik jest lepszym rozwiązaniem niż rejestr.

A co do przechowywania danych - typ rekordowy to żadne zabezpieczenie. Możesz użyć go, tak samo jak pliku tekstowego, ale pod warunkiem, że dane były by jakoś zaszyfrowane, oczywiście z możliwością odszyfrowania. Na przykład można by wykorzystać klucz publiczny i prywatny i jakiś ogólnodostępny algorytm szyfrowania asymetrycznego. Kluczem publicznym byłoy powiedzmy jakiś ciąg znaków, na przykład generowany losowo na podstawie czasu przy pierwszym starcie aplikacji, kluczem prywatnym - hasło użytkownika, które ten będzie podawał przy logowaniu. Oprócz sprawdzenia czy hash hasła jest prawidłowy to należało by także potem używać hasła w postaci jawnej jako klucza prywatnego (do odszyfrowania).

Zaszyfrowane tym jakimś asymetrycznym algorytmem dane możesz przechowywać czy to w pliku tekstowym, czy rekordowym, czy na przykład XML. Plik ten oczywiście najlepiej by było gdyby był przechowywany w systemie na partycji NTFS i żeby tylko użytkownik miał do niego prawa dostępu.

Nie jestem jednak pewien czy MD5 będzie wystarczającym zabezpieczeniem hasła użytkownika - choć do ochrony w warunkach domowych się może i nada - bo obecne techniki używania tabelek rainbow czy poleganie na kolizjach w MD5 mogą drastycznie obniżyć bezpieczeństwo.

0
Ktos napisał(a)

A co do przechowywania danych - typ rekordowy to żadne zabezpieczenie. Możesz użyć go, tak samo jak pliku tekstowego, ale pod warunkiem, że dane były by jakoś zaszyfrowane, oczywiście z możliwością odszyfrowania. Na przykład można by wykorzystać klucz publiczny i prywatny i jakiś ogólnodostępny algorytm szyfrowania asymetrycznego. Kluczem publicznym byłoy powiedzmy jakiś ciąg znaków, na przykład generowany losowo na podstawie czasu przy pierwszym starcie aplikacji, kluczem prywatnym - hasło użytkownika, które ten będzie podawał przy logowaniu. Oprócz sprawdzenia czy hash hasła jest prawidłowy to należało by także potem używać hasła w postaci jawnej jako klucza prywatnego (do odszyfrowania).

Oki, dzięki... będę musiał poczytać o tych kluczach... bo się zgubiłem. Co do algorytmu, to chyba użyję któregoś z tych zaimplementowanych tutaj: http://www.cityinthesky.co.uk

Ktos napisał(a)

Zaszyfrowane tym jakimś asymetrycznym algorytmem dane możesz przechowywać czy to w pliku tekstowym, czy rekordowym, czy na przykład XML. Plik ten oczywiście najlepiej by było gdyby był przechowywany w systemie na partycji NTFS i żeby tylko użytkownik miał do niego prawa dostępu.

Co do przechowywania danych to jeszcze nie wiem... może zwykły plik *.ini, szyfrowany jakimś algorytmem - byłoby najprościej... jak uważasz?

Ktos napisał(a)

Nie jestem jednak pewien czy MD5 będzie wystarczającym zabezpieczeniem hasła użytkownika - choć do ochrony w warunkach domowych się może i nada - bo obecne techniki używania tabelek rainbow czy poleganie na kolizjach w MD5 mogą drastycznie obniżyć bezpieczeństwo.

Tak, słyszałem o tych tablicach... ale myślę, że do domowych zastosowań wystarczy.
Dzięki za porady! Liczę na więcej ;)

0

Może być i INI. Obojętne. Ja bym jednak nie szyfrował całego pliku, a tylko hasła w nim umieszczone.

0

W którymś Ekspercie jest program Szyfrator. Możesz go pobrać z tąd

Jest tam szyfrowanie kluczem zapisanym do pliku, a także kluczem sprzętowym ;-)
Oczywiście jest to rozwiązanie którego szukasz, właśnie na piny, hasła, itp [soczek]

0

Mam fajną procedurkę szyfrującą plik tekstowy algorytmem Vigenera. Jeżeli użyjesz dość długiego klucza to będzie Ok. Mozna też powtórzyć szyfrowanie szyfrowania. Jak chcesz to prześlę Vigenera na maila.

0

Tylko weźcie pod uwagę, że program musi mieć w sobie w postaci jawnej (obojętnie jakbyś tego hasła nie zapisał w pewnym momencie i a musi być "gołe") klucze publiczne i prywatne i jeśli ktoś się uprze to i tak je zdobędzie i cały system o kant d*** rozbić.
Do hashowania MD5 spokojnie wystarczy, do szyfrowania możesz mieć np. RC5 - też go nikt nie złamie (brutalnie).
Czyli najsłabszym ogniwem jest tu Twój program a konkretniej to "schowane" w nim hasło. To nad tym powinieneś pomyśleć, bo to hasło raczej musi być stałe żeby dało się odszyfrować raz zaszyfrowane dane

0

ja na przykład zrobiłem w programie do edycji tekstu automatyczne zapisywanie sesji co daną liczbę sekund. Dane są przy zapisywaniu szyfrowane, a haslem jest nr GUID generowany przy pierwszym uruchomieniu programu. Wygenerowany GUID jest zapisywany w rejestrze, wiec jak ktos wykradnie danej osobie plik z sesja nie odczyta jej dopóki nie dostanie sie do rejestru windowsa tejże osoby xD

1 użytkowników online, w tym zalogowanych: 0, gości: 1