Bezpieczeństwo - hasło w aplikacji

0

Cześć, mam taki problem. Aplikacja zapisuje w rejestrze systemowym (lub w jakimś pliku) dane wrażliwe - dane służące do połączenia z bazą danych.
Takie dane muszą być w jakiś sposób zaszyfrowane. Jednak szyfrowanie jakie znam wymaga hasła - do zakodowania i zdekodowania danych.

I teraz sprawa wygląda tak:

  1. Użytkownik wypełnia dane połączeniowe
  2. Klika OK

Program musi teraz te dane zaszyfrować. Oczywiście nie będzie się pytał użytkownika o hasło szyfrujące, bo to bez sensu. Musiałby przy każdym uruchomieniu pytać się o takie hasło. W związku z tym hasło musi być gdzieś zapisane w aplikacji na stałe. I teraz pytanie - jak to zrobić najlepiej? No bo hasło w formie stringa odpada. Tym bardziej jako stała.

Poczytałem trochę i wpadłem na klasę SecureString. Dodaje się do niej znaki po kolei i są jakoś szyfrowane w pamięci, a potem od razu usuwane. Wpadłem więc na taki pomysł:

LinkedList<char> list = new LinkedList<char>();
list.AddLast('H');
list.AddLast('a');
list.AddLast('s');
list.AddLast('ł');
list.AddLast('o');

SecureString str = new SecureString();
foreach(char ch in list)
    str.AppendChar(ch);

Czyli rozsiać hasło po stercie i złożyć je w SecureStringu.

Tak naprawdę nie wiem, jak to zadanie powinno być wykonane poprawnie. Oczywiście, gdybym pisał program dla Pentagonu, to użytkownik po prostu musiałby za każdym razem wpisywać hasło ;) Natomiast to jest zwykły program dla zwykłych ludzi. Jednak chcę mu zapewnić jakieś bezpieczeństwo. Czy mój pomysł jest dobry? Czy takie rzeczy robi się inaczej?

A może kombinuje i wystarczy hasło w zwykłym stringu i do tego jakikolwiek obfuscator?

0

Do jakiej bazy to hasło?

Jak to baza na twoim serwerze to nie trzymaj po stronie klienta żadnego hasła, tylko wystaw api.
W jaki sposób byś nie zaszyfrował/zobfuskował hasła to jeśli aplikacja będzie potrafiła je odczytać to przy odrobinie wysiłku każdy też będzie mógł to zrobić.

0

Proponowałbym odrzucić pomysł z przechowywaniem hasła w programie w jakiejkolwiek formie. Załóżmy, że dajesz mi ten program, ja sobie go odpalam w ILSpy i ... mam dokładnie taki sam kod jak powyżej. Jeżeli klucz jest taki sam dla każdego użytkownika to w tym momencie mogę sobie odszyfrować każdy plik do jakiego będę miał dostęp. Można by było wygenerować losowy ciąg i zapisać go do pliku. Teraz, żeby cokolwiek odszyfrować potrzeba także tego pliku z hasłem. Mój pomysł też jest słaby ale przynajmniej hasła będą różne dla różnych maszyn. Możesz także rzucić okiem na to:

https://stackoverflow.com/questions/12657792/how-to-securely-save-username-password-local

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