07.04.2007 | Radek | | Programujeme | Žádné komentáře | 

Jak ukládat citlivá data

Pokud na svém webu ukládáte například do databáze nebo i jiného úložiště nějaká citlivá data, jako jsou uživatelská jména nebo hesla, jistě vás napadlo, v jakém formátu je nejlepší tato data ukládat. V základu existují dvě možnosti, jak tato citlivá data ukládat a my si je nyní představíme.


Plain-text


Toto je jedna z možností, jak citlivá data ukládat a já vám s klidným svědomím můžu jen doporučit, abyste ji nepoužívali, neboť tato metoda ukládání dat spočívá v tom, že citlivá data jsou ukládána v prosté textové formě a nejsou nijak šifrována. Z toho vyplívá jisté nebezpečí, že by například šikovný hacker mohl tato data získat a nebyl by pak pro něj problém si je snadno přečíst. A je známo, že mnoho uživatelů používá k různým službám na internetu stejné heslo, měl by tudíž onen hacker v podstatě přístup i k těmto službám.


Hashovaná data


Druhá možno je citlivá data hashovat. Je to jedna z možností, jak citlivá data zabezpečit. Pro hackera není totiž jednoduchou záležitostí z tohoto hashe zrekonstruovat zpět původní data. A pokud vám toho hashování přijde ještě málo, můžete navíc použít tzv. salt – tj. k citlivým datům se přidá ještě náhodně vytvořená posloupnost znaků a pak až se celek zahashuje. A jak se takovýto salted hash používá v ASP.NET aplikacích si ukážeme na následujícím jednoduchém příkladu.


Nejdříve si vytvoříme formulář s jedním textboxem, do kterého zadáme naše heslo, které se nám po stisknutí tlačítka zahashuje a vypíše na obrazovku v tomto zahashovaném tvaru. Navíc si necháme vypsat, jaká salt se při hashování použila a samozřejmě bude také použita při rekonstrukci hesla.


<%@ Page Language=“C#“ AutoEventWireup=“true“
CodeFile=“Hash.aspx.cs“ Inherits=“Hash“ %>
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0
Transitional//EN“
„http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=“http://www.w3.org/1999/xhtml“>
<head runat=“server“>
<title>Používáme HASH</title>
</head>
<body>
<form id=“form1″ runat=“server“>
<div>
Zadejte heslo k hashování:
<asp:TextBox ID=“textHeslo“ runat=“server“ />
<asp:Button ID=“hashujText“ runat=“server“
Text=“Hashuj heslo“ OnClick=“hashujText_Click“ />
<br />
Salt je:
<asp:Label ID=“lblSaltTxt“ runat=“server“ /><br />
Hashované heslo je:
<asp:Label ID=“lblHashTxt“ runat=“server“ />
</div>
</form>
</body>
</html>

A samozřejmě musíme také vytvořit funkci, která nám salted hash vytvoří.


protected void hashujText_Click(object sender, EventArgs e)
{
//Načteme heslo
string heslo = textHeslo.Text
//Vytvoříme salt
byte[] bSalt = new byte[5];
new RNGCryptoServiceProvider().GetBytes(bSalt);
string sSalt = Convert.ToBase64String(bSalt);
//Spojíme text z formuláře se salt
byte[] bText = Encoding.UTF8.GetBytes(heslo + sSalt);
//Vytvoříme hash
byte[] bHash = new SHA256Managed().ComputeHash(bText);
string sHash = Convert.ToBase64String(bHash);
//Vypíšeme hash a salt
lblSaltTxt.Text = sSalt;
lblHashTxt.Text = sHash;
}

A nyní již stačí uložit například do databáze odděleně hashované heslo a salt, která k heslu patří. Pokud nyní například hacker získá hesla z naší databáze a nezíská k nim patřičnou salt, bude pro něj těžké, ne-li nemožné zpětně heslo dekódovat. A to je právě účel použití „saltování“ hashe.


Z našeho ukázkového příkladu je vidět, že na používání salted hashe na citlivá data, jako jsou například hesla, není nic složitého. Jistě touto technikou přispějete k vyšší bezpečnosti vaší webové aplikace a nezbývá, než jen její použití doporučit.





Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *


Novinky a oznámení

15.10.2016 - Do menu byla přidána nová sekce Stream, kde naleznete jak veškěré informace ohledně Fantomasmag TV, což jsou online streamy na Twitch.tv, tak i přímo online stream a chat.

Partnerské weby

Statistika

Naši fanoušci na Facebooku

Další...