mokry
17.01.2013, 23:52:12
Witam,
Piszę pewien projekt, w którym użytkownicy będą podawać hasła do pewnych usług. Niestety, aplikacja musi się co jakiś czas logować na usługi użytkownika i takie hasło musi być zapisane w bazie danych tak, aby możliwe było jego odczytanie. A zatem hash'owanie hasła do md5/sha1/etc. odpada.
I tutaj pytanie:
Jaki macie propozycje na trzymanie tych haseł w bazie danych w sposób jaknajbardziej bezpieczny?
Jakie sposoby i zabezpieczenia tego hasła proponujecie?
Nie wiem czy dobrze rozumiem, ale chcesz, żeby admin mógł mieć wgląd na hasła? to nie do końca jest dobry pomysł, sądze że lepszym rozwiazaniem było by poprostu nadanie adminowi takich uprawnień, że miałby dostep do kont bez logowania sie tam a nie przechowywanie haseł plaintexem
binprogrammer
18.01.2013, 00:09:24
Jeżeli admin może odczytać hasło to haker też

hasha ci nikt nie odczyta a takie rot13 to w podstawówce na kartce możesz rozpisać
Crozin
18.01.2013, 00:14:29
1. Jesteś pewien, że rzeczywiście musisz się logować na konto użytkownika w obcym serwisie? Nie podałeś żadnych szczegółów, więc nie da się tego jednoznacznie stwierdzić. Może wszystko czego potrzebujesz to OAuth?
2. Prawdopodobnie nie pozostaje Ci nic innego jak Blowfish czy jakikolwiek inny
powolny algorytm jednostronny i
maksymalnie utrudnienie wykradnięcia Twojego klucza prywatnego potrzebnego do odczytania danych.
@up
hash już w dzisieszych czasach nie jest wcale tak bezpieczny jak pare lat temu( dlatego zaczeto dodawac do haseł unkalne sole) poczytaj sobie o kolizjach itd, ale i tak to lepsze zabezpieczenie niż jak sie go nie ma wcale
Crozin
18.01.2013, 04:42:46
@com: Jaki to ma w ogóle związek z tematem?
mokry
18.01.2013, 08:56:31
Nie do końca się rozumiemy. Administrator sam w sobie (jako osoba) nie będzie potrzebował, aby odczytać hasło. Nigdzie w aplikacji nawet nie będzie możliwości odczytania hasła via WWW.
Natomiast sama aplikacja, która będzie cyklicznie komunikować się z serwisami zewnętrznymi będzie musiała odszyfrowywać hasło i logować się na zewnętrzne konta użytkowników i sprawdzać jedną rzecz w celu ewentualnej akcji.
Nie chce zbytnio zdradzać szczegółów, zarówno ze względów bezpieczeństwa, jak i pewnej innowacyjności w sferze usług.
Rozwiązanie na bezpieczne zaszyfrowanie hasła z mojego punktu widzenia to na razie:
1. Zaszyfrowanie (zaciemnienie) hasła jakimiś metodami w stylu base64 wraz z unikalnymi saltami przetrzymywanymi w plikach na serwerze.
2. Zarówno logika kodowania/dekodowania oraz salty użytkowników trzymane poza public_html
Jakieś inne propozycje na zwiększenie bezpieczeństwa?
Crozin
18.01.2013, 13:45:03
1. Jeżeli aplikacja może odszyfrować hasło to i administrator/osoba nieupoważniona z dostępem do danych może to zrobić. Stąd te wszystkie posty.
2. base64 to nie jest żadne szyfrowanie czy zaciemnianie danych, a jedynie przygotowanie ich do transportu w pewnych środowiskach.
3. W ogóle co to za pomysł by jakakolwiek część aplikacji poza plikami statycznymi znajdowała się w public_html?
4. Jak już wspomniałem w pierwszym poście: rozwiązanie pokroju AES-a/Blowfisha/czegokolwiek takiego i w miarę bezpieczne składowanie klucza do nich (patrz: link z pierwszego psota). Możesz dodatkowo hasła użytkowników uzupełnić jawną, indywidualną solą, którą dodasz tuż przed, i usuniesz tuż po (od)szyfrowaniu danych. W przypadku gdyby ktoś wykradł same dane (bez klucza) spowolni go to n-krotnie przy atakach słownikowych/bruteforce (gdzie n to liczba zaszyfrowanych haseł). W przypadku wykradnięcia danych i klucza, jesteś właściwie bezradny.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.