Jak zaszyfrować hasło do przechowywania na lokalnym komputerze?

0

Moj program ma wysyłać dane przez FTP do serwera, będzie przechowywał dane logowania lokalnie.
Jak przechowywać hasło lokalnie w rejestrze czy pliku żeby było "bezpiecznie" ?
Hashowanie nie wchodzi w gre bo musi być odwracalne.

0

zaszyfruj je jakimś prostym szyfrem - 99,9% ludzi nie będzie się chciało rozszyfrowywać hasła a pozostały 0,1% i tak sobie poradzi jak się zaweźmie co byś nie zrobił

0

Do typowo domowych zastosowań możesz skorzystać z czegokolwiek (choć sensowny algorytm byłby mile widziany).

Jeśli jesteś już troszkę ”dinozaurem”, to zapewne pamiętasz algorytm stosowany w Gadu Gadu w wersji 7 i starszych. Opis bez problemu znajdziesz w sieci, a implementacja funkcji szyfrującej i przywracającej to góra pół godziny na spokojnie.

0

FYI ftp jest stare i rozmija się z pojęciem bezpieczeństwo. Nieważne jak bardzo zabezpieczysz hasło ftp doprowadzi do jego wycieku.
Jeśli nie jest to jakiś system legecy lepiej zainteresuj się ssh. Jest dużo gotowych rozwiązań do tego i prawie na pewno serwer go obsługuje.

Może opisz lepiej jakie masz wymagania co do stopnia bezpieczeństwa. Przed kim chcesz chronić hasło?
Przed członkiem rodziny? Kolegą z akademika? Czy może obawiasz się włamania?

0

No ale jak użyje algorytmu do szyfrowania hasła to i tak trzeba szyfrować jakimś kluczem chodzi więc o zamaskowanie tego klucza w kodzie maksymalnie bo tylko tyle można zrobić.
Co do GG to pamiętam jedynie deszyfratory, nowe wersje nie wiem jak przechowywały hasło ale chyba nie powstały deszyfratory?
Rozwodzenie się na FTPs, FTP, SSH nie jest przedmiotem tematu, chodzi o przechowanie hasła lokalnie.

0
Qla napisał(a):

No ale jak użyje algorytmu do szyfrowania hasła to i tak trzeba szyfrować jakimś kluczem chodzi więc o zamaskowanie tego klucza w kodzie maksymalnie bo tylko tyle można zrobić.

Pierwszy post tego wątku zrozumiałem tak, że przesyłasz jakieś dane na serwer FTP, a dane do logowanie chcesz przechować w formie zaszyfrowanej na lokalnym komputerze. Natomiast sugestia użycia protokołu SSH nie dotyczy szyfrowania hasła, a przesyłanych przez sieć danych.

Co do GG to pamiętam jedynie deszyfratory, nowe wersje nie wiem jak przechowywały hasło ale chyba nie powstały deszyfratory?

Aby napisać deszyfrator, najpierw należy poznać algorytm szyfrujący. Skoro więc napisano deszyfratory – a tym samym poznano algorytm szyfrowania – to i można bez problemu napisać funkcję szyfrującą.

Z tego co jeszcze pamiętam, późniejsza wersja od 7 (zapewne 8 – o tę ”ciężką” z ładniejszym interfejsem chodzi) przechowywała hash hasła w pliku XML, znajdującym się w katalogu z lokalnymi danymi użytkownika. Hash był jawny (w końcu do przechowywania użyto zwykłego pliku tekstowego), ale zmienił się algorytm szyfrowania.

Tak więc szyfrogram możesz przechować – na wzór GG – w tekstowym pliku konfiguracyjnym, używając starszej wersji algorytmu szyfrującego.


Gdzieś na płytkach ze starymi backupami powinienem mieć plik tekstowy ze szczegółowym objaśnieniem całego procesu szyfrowania i deszyfrowania. Jeśli chcesz to jutro go poszukam (dziś już mi się nie chce) i go tu podeślę – o ile go znajdę. ;)

0

ok dzięki z ciekawości zobaczę jak masz to gdzieś w archiwum.
Jednak obawiam się, że @abrakadaber ma rację.

0

Czemu się obawiasz? Zgadzam się z tym o czym napisał, dlatego właśnie zaproponowałem prosty algorytm szyfrujący, spełniający Twoje wymagania. Zrozumienie jak on działa nie zajmie dużo czasu, podobnie jeśli chodzi o implementację – to tylko dwie proste funkcje.

0

jeśli Twoja sytuacja wygląda tak:

  • osoba A wysyła dane do B w taki sposób, że tylko osoba B może to przeczytać

to najlepiej będzie pasowało tak:

  • osoba A trzyma klucz publiczny osoby B, losuje dowolne hasło, używa go do zaszyfrowania danych i szyfruje je (hasło) kluczem publicznym osoby B i wysyła je razem z danymi do osoby B. Hasło może przeczytać tylko osoba B jako że posiada klucz prywatny.

konkretniej (na chwilę obecną najlepsze znane mi dane: ):

  • para klucz publiczny i prywatny (do szyfrowania hasła), to może być np RSA albo coś opartego na krzywych eliptycznych (nazwy algortymów zaczynają się od EC*). Najlepiej w formie certyfikatu. Padding ustaw na OAEP jeśli masz do wyboru, jeśli nie masz to PKCS1 ujdzie. Min długość klucza dla RSA 2048 bit.
  • szyfrowanie danych za pomocą AES - np. AES128 lub AES256 (większy numer przy algorytmie nie zawsze znaczy lepiej) - nie używaj nic w stylu 3DES.
  • losowe hasło - użyj generatora z jakiejś biblioteki z crypto - w żadnym wypadku nie używaj jakiegoś słabego algorytmu

jeszcze lepiej - użyj gotowca np.: CMS (np. EnvelopedCms w .NET) albo gpg (ma opcje szyfrowania dokumentów) - jeśli gdziekolwiek przekazujesz parametry to staraj się rozumieć co przekazujesz.

Jeśli Twoje dane są tylko lokalnie to osoba która ma dostęp do danego komputera z założenia ma dostęp do wszystkiego co każda apka.

1

Na Windowsie masz DPAPI https://msdn.microsoft.com/en-us/library/ms995355.aspx
W .NET ta klasa: http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx
Na Linuksie jest GnomeKeyring lub KWallet.

Sugestii o „prostym szyfrze” lub wręcz pisaniu własnego szyfrowania nie słuchaj.

0

DPAPI nic nie daje, można dywagować co lepsze czy jakiś szyfr kodem i ukrycie czy użycie standardów.
DPAPI daję ochronę jedynie na poziomie uprawnień użytkownika, czyli że drugi niezalogowany nie zdobędzie łatwo hasła.
Natomiast zalogowany to bułka z masłem to już większe zabezpieczenie dają sztuczki z własnymi algorytmami w kodzie żeby chwilę utrudnić życie dla debuggującego aplikację.

0

Mówienie o ochronie hasła, który jest wysyłane zwykłym tekstem to trochę śmieszne jest, wystarczy odpalić program: http://www.nirsoft.net/utils/password_sniffer.html i całe to kodowanie, jak najmocniejsze by nie było można o kant tyłka potłuc...

0
Panczo napisał(a):

Mówienie o ochronie hasła, który jest wysyłane zwykłym tekstem to trochę śmieszne jest, wystarczy odpalić program: http://www.nirsoft.net/utils/password_sniffer.html i całe to kodowanie, jak najmocniejsze by nie było można o kant tyłka potłuc...

Ale oprócz Ciebie nikt o tym nie mówi przecież, tu jest mowa o przechowywaniu hasła lokalnie.
Wiadomo, że hasło będzie leciał FTPs em.

0

To jest problem z cyklu: "jaki mocny zamek założyć na rozlatujące się drzwi", wiec nie ma się nad czym zastanawiać tylko wybrać jakiś sposób np. tutaj dla delphi jest kilka https://stackoverflow.com/questions/6798188/delphi-simple-string-encryption i nie zaprzątać sobie tym głowy...

0

Oczywiście że implementacja własnego algorytmu szyfrującego ma niewiele wspólnego z bezpieczeństwem.

Z tego co widzę, OP nie pracuje nad korpo-molochem, a wydłubuje sobie coś swojego, więc nie ma szczególnej presji na silne zabezpieczenia. Równie dobrze możnaby zasugerować zapisanie hasła plaintekstem w zwykłym pliku tekstowym na pulpicie – nie miałoby to większego znaczenia (nie żebym do tego zachęcał).

IMO w tym przypadku nawet trzymanie hashu hasła w pliku XML, znajdującym się w katalogu z lokalnymi danymi użytkownika spokojnie by wystarczyło. Nie wiem do czego ma służyć odszyfrowywanie hasła. Jeśli ten projekt ma być rozpowszechniany, to konkretne zabezpieczenia są potrzebne, a jeśli nie, to co za różnica.

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