Diskuze: Zašifrování přihlašovacích údajů pro desktop aplikaci
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, nijak moc bezpečně to udělat nejde, ale jde docela dobře házet
klacky pod nohy.
Několik věcí bude společné pro všechny přístupy:
Symetrický algoritmus je takový, co používá stejný klíč pro
šifrování a dešifrování. To znamená, že nějakým způsobem musíš
získat klíč (o tom později). Potom vezmeš tvé heslo, zašifruješ a
uložíš na disk - zpátky obráceně.
Až do teď to není příliš zrádné, problémy začnou v momentě, kdy
chceš získat klíč.
Máš minimálně 3 možnosti (od nejhorší po použitelnou):
1. fixní klíč v kódu
Prostě do kódu na tvrdo zadáš klíč, kterým se bude šifrovat. Heslo
pořád bude zašifrované, ale v momentě, kdy ten klíč v tvém kódu někdo
objeví (nemusí mít kód!, stačí zkompilované .exe, jen je to těžší),
automaticky je prolomena ochrana úplně všech hesel na všech počítačích,
co ten program používají.
Tato technika je zcela nepoužitelná (ačkoliv lákavě jednoduchá)
2. dynamicky generovaný klíč
V podstatě stejné řešení jako v bodu 1, ale klíč není v kódu aplikace a
tudíž je pro každý počítač rozdílný. Problém je, že ten klíč musí
být v čitelné podobně pořád někde uložen na počítači a proto by si ho
mohl přečíst i útočník. Klíč se dá ale schovat na různá
neočekávaná místa, do registrů a pod.
Ten klíč se dá třeba vygenerovat při prvním spuštění programu, nebo se
může měnit při každém spuštění a hesla se přešifrovat.
Tohle je relativně bezpečné, ale jakmile někdo přijde na to, kam se klíč
ukládá a jak, zase je to zcela neefektivní.
3. ochrana uživatelským heslem
Heslo není nikde uloženo na počítači, ale odvodí se z hesla napsaného
uživatelem. Samotné heslo ale nelze použít k šifrování, musí se z něj
bezpečně vytvořit klíč - C# na to má přímo dedikovanou
třídu: https://msdn.microsoft.com/….110%29.aspx?…
Nevýhoda je, že to je jen tak silné, jak silné heslo si zadá uživatel.
Výhoda je, klíč není na počítači nikde uložen, takže si ho útočník
nemůže jen tak někde přečíst.
Pokud chceš dobré zabezpečení za cenu uživatelského nepohodlí (vždy je třeba zadat heslo), použij 3. možnost, pokud je zadávání hesla příliš nepohodlné a na tom FTP serveru není nic mission-critical, můžeš přemýšlet i o 2. možnosti, je "good enough".
Také bych si přihřál svou polívčičku a doporučil ti mou knihovnu na AES šifrování v C#: https://www.nuget.org/…/csharp-aes/ , co umí pobrat jak klíč, tak uživatelské heslo.
Díky za tipy, zvolím asi druhou možnost, mělo by jít o once setup věc a uživatel by o ní ani neměl vědět.
Zobrazeno 3 zpráv z 3.