Dostęp do szyforwanych plików przy pomocy haseł

0

Mam za zadanie:
Napisać prostą aplikację. W której użytkownik po zalogowaniu będzie miał dostęp do swoich plików.
Wszystkie dane muszą być przechowywane na dysku komputera.
Użytkowników może być wielu....

Pytanie:
Przy pomocy czego to najprościej zrealizować?

Dla każdego z użytkowników mógłbym stworzyć po jednym SecretKey i za pomocą jego szyfrować wszystkie pliki. Pytanie, jak go przechowywać i autoryzować do niego dostęp?

0

Nie przechowuj haseł w bazie.
Trzymaj tylko ich skróty hashujące (SHA-1 lub lepiej SHA-2).

Użytkownik łącząc się będzie podawał hasło.
Prześlij to hasło na serwer używając bezpiecznego połączenia (np. HTTPS).
Teraz wylicz skrót podanego hasła. Jeżeli zgadza się ze skrótem z bazy to najprawdopodobniej jest OK (jest minimalna szansa kolizji). Jeżeli nie, to poinformuj użytkownika o błędzie.
Następnie odszyfruj plik i wyślij go użytkownikowi (po HTTPS)

Użytkownik powinien mieć coś w rodzaju sesji, aby nie musiał podawać hasła przy każdym pliku.
Gdy czas sesji wygaśnie, to hasło powinno zostać usunięte z serwera.

0

kolego napisałem wyraźnie ze dane przechowuję w plikach na dysku:)

0
ksdob napisał(a)

kolego napisałem wyraźnie ze dane przechowuję w plikach na dysku:)

W zasadzie niewiele to zmienia.
Nadal program powinien przechowywać tylko hash hasła.
Odpada tylko komunikacja przez HTTPS.

0

http://forums.sun.com/thread.jspa?threadID=5403375

to chyba będzie fajne rozwiązanie :)

0
ksdob napisał(a)

http://forums.sun.com/thread.jspa?threadID=5403375

to chyba będzie fajne rozwiązanie :)

To jest bardzo słabe rozwiązanie, gdyż masz w programie wpisane hasło do pliku z kluczami (KEYSTORE_PASSWORD).
Każda osoba mająca dostęp do programu może bez problemu wydobyć to hasło.

W zasadzie są dwa rozwiązania:

  1. Opisane przeze mnie powyżej.
  2. Daemon działający z prawami administratora i odblokowujący bazy kluczy w zależności od tego, który użytkownik jest zalogowany, np. GNOME Keyring/Seahorse
    http://en.wikipedia.org/wiki/GNOME_Keyring
    http://live.gnome.org/Seahorse
0

No tak ale każdy klucz storujesz z osobna z hasłem użytkownika:

    KeyStore.ProtectionParameter passwordProtection = new KeyStore.PasswordProtection("entrypassword".toCharArray());

Zobacz tutaj:

http://www.j2ee.me/javase/6/docs/api/java/security/KeyStore.html#getEntry%28java.lang.String,%20java.security.KeyStore.ProtectionParameter%29

Metoda:
getEntry(String, KeyStore.ProtectionParameter)

UnrecoverableKeyException - if the entry is a PrivateKeyEntry or SecretKeyEntry and the specified protParam does not contain the information needed to recover the key (e.g. wrong password)

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