Takékryptování, zašifrování, data encryptionZákladní

Definice

Šifrování je převod čitelných dat na nečitelnou podobu pomocí kryptografického algoritmu a klíče, aby obsah dokázala obnovit jen oprávněná strana. Chrání důvěrnost při ukládání i přenosu dat, ale samo neřeší identitu protistrany, integritu zprávy ani bezpečné zacházení s klíči.

Kategorie: KyberbezpečnostAktualizováno

Proč šifrování stojí na klíči

Šifrování chrání obsah tím, že čitelný text, soubor nebo síťový paket převede na šifrový text. Algoritmus určuje matematický postup, klíč určuje konkrétní tajemství. Moderní kryptografie nepočítá s tím, že algoritmus zůstane utajený. Bezpečnost má stát hlavně na síle klíče, správném režimu použití a kvalitní implementaci.

Šifrový text bez klíče nemá být prakticky čitelný ani pro útočníka, který zná použitý algoritmus. Slovo „prakticky“ je důležité: kryptografie neříká, že prolomení je logicky nemožné, ale že by při současných možnostech stálo nepřiměřeně mnoho času a prostředků.

Dvě rodiny: sdílený klíč, nebo pár klíčů

Symetrické šifrování používá stejný tajný klíč pro zašifrování i dešifrování. Hodí se pro velké objemy dat, například soubory, zálohy nebo datové proudy. Typickým zástupcem je AES v bezpečném režimu, často s autentizací zprávy.

Asymetrické šifrování pracuje s veřejným a soukromým klíčem. Veřejný klíč lze sdílet, soukromý klíč musí zůstat pod kontrolou vlastníka. V praxi se asymetrie často používá k bezpečné dohodě symetrického klíče nebo k práci s digitálními podpisy, protože samotné asymetrické operace bývají nákladnější.

Šifrování dat na cestě a dat v klidu

Pro přenos mezi klientem a serverem se běžně používá TLS, například u HTTPS. TLS řeší nejen šifrování přenášených dat, ale také vyjednání parametrů spojení a ověření identity serveru pomocí certifikátu. Bez správného ověření certifikátu by šifrované spojení mohlo vést k nepravé protistraně.

V úložišti se šifrují databázová pole, celé disky, objektová úložiště nebo zálohy. Šifrování dat v klidu omezuje dopad ztraceného notebooku, uniklé zálohy nebo chybně nastaveného bucketu. Klíče ale nesmí ležet vedle šifrovaných dat ve stejné podobě a se stejnými právy, jinak ochrana výrazně slábne.

Kde šifrování končí

Šifrování samo nepozná, zda zprávu někdo změnil. Proto se používají režimy autentizovaného šifrování, například AES-GCM nebo ChaCha20-Poly1305, které kromě důvěrnosti chrání i integritu. Šifrování také neřeší slabé heslo, napadený koncový počítač, škodlivý JavaScript v prohlížeči ani chybnou autorizaci v aplikaci.

Praktická pravidla pro vývojáře

  • Nepíš vlastní šifru. Použij ověřenou knihovnu a její doporučené rozhraní.
  • Odděl klíče od dat. Klíče patří do KMS, HSM, tajemství orchestrace nebo jiného řízeného úložiště.
  • Rozlišuj šifrování a hashování. Hesla se typicky nešifrují, ale ukládají se jako pomalé solené hashe.
  • Plánuj rotaci klíčů. Systém má umět přejít na nový klíč bez ztráty dat a bez dlouhého výpadku.

Příklady z praxe

  1. Šifrované pole v databázi

    Interní aplikace ukládá citlivý identifikátor zákazníka do databáze. Hodnota se před zápisem zašifruje pomocí AES-GCM, takže únik samotné databázové tabulky neodhalí původní text. K dešifrování je potřeba klíč a zároveň správný autentizační tag, který odhalí neoprávněnou změnu šifrového textu.

    const crypto = require("node:crypto");
    
    // V produkci má klíč přijít z KMS nebo správce tajemství, ne vzniknout při startu procesu.
    const key = crypto.randomBytes(32);
    
    function encrypt(plainText) {
      const iv = crypto.randomBytes(12);
      const cipher = crypto.createCipheriv("aes-256-gcm", key, iv);
      const ciphertext = Buffer.concat([
        cipher.update(plainText, "utf8"),
        cipher.final()
      ]);
    
      return {
        iv: iv.toString("base64"),
        tag: cipher.getAuthTag().toString("base64"),
        ciphertext: ciphertext.toString("base64")
      };
    }
    
    console.log(encrypt("CZ6508001234"));
  2. Přihlášení přes TLS

    Uživatel se přihlašuje do administrace přes HTTPS. Prohlížeč ověří certifikát serveru, TLS vyjedná klíče pro dané spojení a přihlašovací údaje cestují sítí v šifrované podobě. Správce Wi-Fi sítě vidí cílovou doménu a objem provozu, ale nemá vidět samotné heslo ani obsah odpovědi serveru.

Časté omyly

MýtusKdyž používáme HTTPS, databázi už šifrovat nemusíme.
Ve skutečnostiHTTPS chrání hlavně přenos dat mezi klientem a serverem. Databáze, zálohy, exporty a logy mohou být ohrožené jinými cestami, proto může šifrování v úložišti nebo na úrovni aplikace stále dávat smysl.
MýtusHashování je druh šifrování.
Ve skutečnostiHashování není šifrování, protože nemá běžnou operaci zpětného dešifrování. Hash slouží k otisku dat, kontrole integrity nebo ukládání hesel, zatímco šifrování chrání data, která má někdo oprávněný později znovu přečíst.
MýtusVlastní šifra bude bezpečnější, protože ji útočník nezná.
Ve skutečnostiVlastní neověřená šifra obvykle skrývá chyby, které odborná analýza rychle odhalí. Bezpečné systémy používají veřejně zkoumané algoritmy a tají klíče, ne návrh algoritmu.

Časté dotazy

Stačí pro hesla v databázi šifrování?
Šifrování není správný běžný způsob ukládání hesel, protože šifrované heslo lze při znalosti klíče znovu získat v původní podobě. Hesla se typicky ukládají jako pomalý hash se solí, například pomocí algoritmů navržených pro ukládání hesel. Šifrování se hodí tam, kde aplikace potřebuje původní hodnotu později znovu přečíst, například u tajného tokenu pro externí službu.
Proč je ztracený šifrovací klíč tak velký problém?
Ztracený šifrovací klíč může znamenat nevratnou ztrátu dat, protože správně zašifrovaný obsah nelze bez klíče prakticky obnovit. Únik stejného klíče má opačný problém: útočník může číst všechna data, která jsou tímto klíčem chráněna. Správa klíčů proto zahrnuje zálohování, omezení přístupu, audit, rotaci a oddělení klíčů od samotných šifrovaných dat.
Může administrátor cloudu číst šifrovaná data?
Administrátor cloudu nemusí umět číst šifrovaná data, pokud jsou klíče pod kontrolou zákazníka a cloudová služba k nim nemá přístup v použitelné podobě. U běžného server-side encryption však poskytovatel často zajišťuje i práci s klíči, takže ochrana míří hlavně proti ztrátě médií a některým provozním incidentům. Rozhodující je model správy klíčů, ne samotné tvrzení, že data jsou šifrovaná.
Má smysl šifrovat data i přes HTTPS?
Šifrování dat i přes HTTPS dává smysl, pokud mají být data chráněna také po doručení na server, v databázi, v logách nebo v zálohách. HTTPS chrání přenos mezi klientem a serverem, ale po ukončení TLS spojení aplikace obvykle pracuje s čitelnými daty. Šifrování na aplikační úrovni nebo v úložišti snižuje dopad dalších typů úniku.

Zdroje

  1. Advanced Encryption Standard (AES)(otevře se v novém okně)NIST, 2023
  2. The Transport Layer Security (TLS) Protocol Version 1.3(otevře se v novém okně)RFC Editor, 2018
  3. An Interface and Algorithms for Authenticated Encryption(otevře se v novém okně)RFC Editor, 2008
  4. Cryptographic Storage Cheat Sheet(otevře se v novém okně)OWASP

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.