Szyfrowanie danych użytkownika jego hasłem - odzyskiwanie hasła

0

Witam.

Chciałbym stworzyć aplikację (webową, ale to chyba nie ma znaczenia) do przechowywania zdjęć.
Zdjęcia mają być zaszyfrowane.
Co najważniejsze: musi to być zrobione w taki sposób aby danych nie mogła odtworzyć również osoba mająca bezpośredni dostęp do bazy danych czy zasobu plikowego (nie wiem jeszcze jak będą przechowywane zdjęcia).

Pomyślałem o szyfrowaniu hasłem użytkownika (tzn tym samym którym będzie sie autoryzował przy logowaniu do aplikacji).

Nie mam pomysłu jak obsłużyć sytuację "zapomniałem hasła".

Jest jakiś sposób?
Ew. jak w zupełnie inny sposób podejść w ogóle do tematu?

Z góry dzięki za podpowiedzi.

Pozdrawiam.

3

Generuj użytkownikowi token który zapiszesz mu na dysku i tylko tym tokenem będzie można odszyfrować dane. Token zgubiony = dane stracone.

3

Możesz się bawić w secret sharing, jeśli chcesz, ale ostatecznie sprawa się sprowadzi do tego, że odzyskiwanie hasła bez proszenia użytkownika o sekret jest równoważne z możliwością odszyfrowania danych użytkownika bez interakcji z nim. Zatem tautologicznie wręcz — jeśli zależy Ci na tym, by trzeba było udziału użytkownika w odszyfrowywaniu danych, to potrzebny będzie udział tego użytkownika, i jak ten straci hasło/token/sekret/cokolwiek, to pozamiatane.

0

Dostęp do danych po stronie serwera:
Jeżeli ma się logować przez www, to i tak musisz jego hasło trzymać w formie hash'a, więc możesz tego hasha użyć jako klucza symetrycznego.

Zmiana/reset hasła
Troche trudniejsze, ale też wykonania.
Generujesz losowy klucz o żądanej długości do szyfrowania zdjęć, zapisujesz po stronie serwera, po zaszyfrowaniu hashem, albo w inny bezpieczny sposób.
Użytkownik loguje się do serwisu, pobiera klucz w wersji zaszyfrowanej, po stronie klienta odszyfrowujesz go za pomocą hasła i możesz wyświetlać zdjęcia.
Zmiana hasła, to wysłanie nowego hasła przez użytkownika, po stronie serwera odszyfrowanie klucza starym hashem, zaszyfrowanie nowym, odesłanie zaszyfrowanego klucza użytkownikowi.

Wady tego rozwiązania to: trzymanie klucza na serwerze i przesyłanie hasła siecią. Moim zdaniem albo szyfrować porządnie hasłem użytkownika, które nie jest przesyłane do serwera (zamiast można przesłać jego HMAC z dodanym jawnym ciągiem znaków. Tylko wtedy ani właściciel serwera tego nie odszyfruje, ani nie da się zresetować hasła.

1

Nie mam pomysłu jak obsłużyć sytuację "zapomniałem hasła".

Jest jakiś sposób?
Ew. jak w zupełnie inny sposób podejść w ogóle do tematu?

Przypomina mi to trochę problem typu, zapewnić komuś wsteczne bezpieczeństwo ale ma też mieć możliwość odszyfrować stare wiadomości :D

Jak dla mnie reset hasła to utracenie dostępu do istniejących zaszyfrowanych danych - problem się rozwiązuje. Inaczej musiałbyś jednak dać komuś dostęp...Chyba że przy rejestracji użytkownikowi generujesz jakiś klucz, który jest potem szyfrowany kluczem użytkownika. Do szyfrowania nie służy "klucz logowania" ale ten drugi klucz, który użytkownik musi zbekapować.

Jeżeli będzie musiał odzyskać dostęp, to po jego odzyskaniu system zapyta o ten drugi klucz. Jak go użytkownik wprowadzi, to odzyskuje dostęp do danych i następuje jego ponowne zaszyfrowanie nowym hasłem.

0

A jeśli byśmy przesyłali użytkownikowi listę haseł którą można odszyfrować tylko aktualnym hasłem? Wtedy mamy informację że zdjęcia przed konkretną datą należy odszyfrować hasłem "A", a późniejsze hasłem "B". Zmiana hasła spowoduje aktualizację listy haseł i zaszyfrowanie jej zaktualizowanym hasłem

0

Przy założeniu że użytkownik pamięta najnowsze hasło, to to nawet nie jest takie złe rozwiązanie — w porównaniu z re-szyfrowaniem wszystkiego od nowa przy zmianie hasła oszczędza sporo cykli procesora.

Z oczywistych powodów nie będzie to działać przy przywracaniu hasła, gdy użytkownik zapomni swoje najnowsze.

Należy też rozważyć, czy nie uznać tego za problem bezpieczeństwa — jeśli użytkownik ma ileś-tam zdjęć zaszyfrowanych starym hasłem, to hasło mu wyciekło, więc je szybko zmienia, ale jego obecne dane dalej są zaszyfrowane tym samym starym hasłem, to ta zmiana nie poprawia znacząco jego sytuacji…

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