sql >> Databáze >  >> RDS >> PostgreSQL

postgresql des encrypt

Crypt a DES jsou staré šifry a neměly by se používat

Obyčejný starý DES je zastaralý algoritmus. S AES128 to opravdu užitečně srovnávat nelze; je to jako stěžovat si, že hash SHA256 je větší než hash MD5 – ano, je, ale pouze jeden z nich může útočníka na chvíli zpomalit. DES byl široce považován za slabý dokonce i v roce 1999 a nikdy by se neměl používat v nových aplikacích. Nepoužívejte jej.

Nemyslím si, že je dobrý nápad hledat způsob šifrování, který „poskytne co nejmenší velikost dat“ – protože šifrovat data pomocí DES je v podstatě ztráta času. Proč nepoužít ROT13 (caesar cypher)? "Zašifrovaný" výsledek má stejnou velikost jako vstup, škoda, že šifrování může prolomit i 3leté dítě.

šifrovat je podobného ročníku. Starý algoritmus šifrování UNIX je ... starší ... a zcela nevhodný pro jakoukoli novou aplikaci. Hashe by měly být minimálně SHA256, opravdu.

Krypt je jednosměrný hash

Co se týče neschopnosti přijít na to, jak dešifrovat zašifrovaná data:šifrovat není šifrovací algoritmus, je to kryptografická hašovací funkce nebo "jednosměrný hash". Jednosměrné hashe jsou vhodné pro ověření, že data jsou nemodifikovaná, ve srovnání s uloženým salt hash pro ověření hesla, pro použití při ověření odpovědi na výzvu atd. Zašifrovaná data nelze dešifrovat.

Řeďte se velikostí

Použijte slušnou kryptografickou funkci a žijte s nárůstem velikosti. bf nebo aes128 jsou asi nejslabší, které můžete rozumně použít.

Osobně preferuji šifrování/dešifrování v aplikaci, ne v DB. Pokud je to provedeno v DB, klíče mohou být odhaleny pomocí pg_stat_statements , v protokolech pomocí log_statement nebo chyby atd. Je lepší, aby klíč nikdy nebyl na stejném místě jako uložená data.

Většina programovacích jazyků má dobré kryptografické rutiny, které můžete použít.

Je těžké nabídnout další rady, protože jste ve skutečnosti nevysvětlili, co šifrujete, proč, jaké jsou vaše požadavky, jaké jsou hrozby atd.

Hesla?

Pokud ukládáte hesla, pravděpodobně to děláte špatně.

  • Pokud je to možné, svěřte ověření někomu jinému:

    • OAuth nebo OpenID pro Internet

    • SSPI, Kerberos/GSSAPI, Active Directory, vazba LDAP, SASL, HTTP DIGEST atd. pro intranet

  • Pokud opravdu musíte provést ověření sami, přidejte do hesel sůl a výsledek hashujte. Uchovávejte hash a sůl. Když musíte porovnat hesla, osolte nový prostý text od uživatele stejnou solí, jakou jste použili pro uložený hash, hashujte nové heslo + sůl a zjistěte, zda je hash stejný jako to, co jste uložili. Pokud ano, dali správné heslo.

  • Téměř jistě nepotřebujete obnovit hesla s čistým textem. Místo toho implementujte bezpečné obnovení hesla. Pokud opravdu, opravdu musíte, použijte k jejich zašifrování slušně bezpečný algoritmus, jako je aes, a pečlivě si promyslete ukládání a správu klíčů. Viz další příspěvky na SO o ukládání/správě klíčů pomocí pgcrypto.

Viz také:



  1. Rodič / dítě ve stejné tabulce

  2. ColumnNotFound problém s Magic in play scala

  3. Chyba SQLAlchemy bez zadání hesla

  4. Seznam tabulek a sloupců v jednom příkazu