it-swarm-eu.dev

Proč bychom neměli válcovat sami?

Proč bychom neměli vytvářet vlastní bezpečnostní schémata?

Vidím tady spoustu otázek týkajících se uživatelského šifrování a vlastních bezpečnostních mechanismů, zejména ohledně hashování heslem.

S ohledem na to hledám kanonickou odpověď s následujícími vlastnostmi:

  • Pro nováčka snadné pochopit.
  • Jasné a explicitní v proč válcování vlastní je špatný nápad.
  • Poskytuje silné příklady.

Povinné xkcd.

255
Polynomial

Můžete si to udělat sami, ale pravděpodobně uděláte velkou bezpečnostní chybu, pokud nejste odborníkem na bezpečnost/kryptografii nebo nechali svůj systém analyzovat více odborníků. Jsem více ochoten vsadit na veřejně známé šifrovací schéma s otevřeným zdrojovým kódem, které všichni vidí a analyzují. Více očí znamená větší pravděpodobnost, že současná verze nemá větší zranitelnost, na rozdíl od něčeho, co bylo vyvinuto in-house neodborníky.

Od Phil Zimmermanna (tvůrce PGP) Úvod do kryptografie (Strana 54) :

Když jsem byl na vysoké škole na počátku 70. let, vymyslel jsem, co jsem věřil, že je brilantní šifrovací schéma. Do proudu prostého textu byl přidán jednoduchý tok pseudonáhodných čísel, aby se vytvořil ciphertext. Zdálo by se, že to znemožňuje jakoukoli frekvenční analýzu ciphertext, a bylo by to nepřekonatelné i pro nejnaléhavější vládní zpravodajské agentury. Cítil jsem se tak samolibý ohledně svého úspěchu.

O několik let později jsem toto stejné schéma objevil v několika úvodních kryptografických textech a tutoriálech. Jak milé. Ostatní kryptografové mysleli na stejné schéma. Program byl bohužel představen jako jednoduché zadání domácích úkolů o tom, jak používat elementární kryptoanalytické techniky k jeho triviálnímu prolomení. Tolik pro můj skvělý systém.

Z této pokorné zkušenosti jsem se dozvěděl, jak snadné je při navrhování šifrovacího algoritmu upadnout do falešného pocitu bezpečí. Většina lidí si neuvědomuje, jak nesmírně obtížné je navrhnout šifrovací algoritmus, který vydrží dlouhodobý a rozhodný útok vynalézavého oponenta.

(Tato otázka má více diskuse o výše uvedené nabídce.)

Pokud nejste přesvědčeni o „Don't Roll Your Own [Cryptography/Security]“, pak nejspíš nejste odborník a existuje mnoho chyb, které pravděpodobně uděláte.

Je vaše aplikace robustní proti:

  • Útoky načasování . Například v nanosekundách trvá naprosto špatné klíče a částečně špatné klíče, aby selhaly stejné množství času v agregátu? V opačném případě lze tyto informace o časování využít k nalezení správného klíče/hesla.

  • Trivial Brute Force Attacks ; např. to lze provést během několika sekund až let (když se obáváte, že dojde k jeho zlomení během několika let). Možná by vaše představa o bezpečnosti mohla mít šanci na zlomek v 1 miliardě (1 000 000 000) (co když se někdo s bot bot několikkrát miliardkrát pokusí?). Mým nápadem je zaměřit se na něco jako 1 v ~ 2128 (34 000 000 000 000 000 000 000 000 000 000 000 000 000), což je zhruba deset miliónů miliard miliardkrát bezpečnější a zcela mimo sféru hádání.

  • Paralelní útoky na uživatelské účty; např. můžete hash hesla se stejným (nebo horší ne) 'solí' na všech hashe hesel v databázi, jako to, co se stalo s únikem LinkedIn hash.

  • Zaútočte na jakýkoli konkrétní účet jednoduše. Možná existuje jedinečná náhodná sůl s každým heslem s jednoduchým hashem (např. MD5/SHA1/SHA2), ale jak můžete vyzkoušet miliardy možných hesel na libovolném hashe každou sekundu, tak pomocí běžných seznamů hesel, slovníkových útoků atd. Může útočníkovi zabere většinu účtů jen několik sekund. Použijte silné kryptografické hashe jako bcrypt nebo PBKDF2, abyste se vyhnuli nebo zesílili pravidelné hashe pomocí vhodného faktoru (obvykle 10(3-8)).

  • Útoky na odhadovaná/slabá „náhodná“ čísla. Možná použijete microtime/MT-Rand nebo příliš málo informací k založení pseudonáhodného čísla jako Debian OpenSSL udělal pár let zpět .

  • Útoky, které obejdou ochranu. Možná jste ve webové aplikaci provedli ověření klienta pomocí hashování/vstupu ve webové aplikaci, což uživatel obměnil skripty. Nebo máte lokální aplikaci, kterou se klient pokouší spustit ve virtuálním stroji nebo se rozebírá, aby jej zpětně analyzoval/změnil paměť/nebo jinak podváděl.

  • Další útoky, včetně (ale nepokouší se být úplný seznam) CSRF , XSS =, injekce SQL , odposlech sítě, opakované útoky , útoky ve střed , přetečení vyrovnávací paměti atd. Nejlepší ochrany velmi rychle shrnuty.

    • CSRF: vyžadují náhodně generované tokeny CSRF na POST akce; XSS: vždy ověřte/unikněte nedůvěryhodnému uživatelskému vstupu před vstupem do databáze a zobrazením uživateli/prohlížeči).
    • SQLi: vždy používejte vázané parametry a omezte počet vrácených výsledků.
    • Odposlech: šifrování citlivého síťového provozu.
    • Přehrát: do každé transakce vložte jedinečné jednorázové příkazy.
    • MitM: Web of Trust/Stejné jako naposledy navštívené stránky/Certifikát vydaný důvěryhodnou CA.
    • Přetečení vyrovnávací paměti: bezpečný programovací jazyk/knihovny/ochrana spustitelného prostoru/atd.).

Jste jen tak silní jako vaše nejslabší využitelné spojení. Také proto, že nemáte vlastní plán, neznamená to, že bude bezpečný, je docela pravděpodobné, že osoba, která vytvořila to, co jste zavedli, nebyla odborníkem nebo vytvořila jinak slabé schéma.

233
dr jimbob

Před mým druhým poschodovým rodinným pokojem je v mém okolí dům s opravdu pěknou palubou. Vypadá to zvětšeně, dokud se nedostanete pod a neuvidíte, jak byl postaven. Zdá se, že se majitel domu rozhodl, že nemusel platit velké peníze staviteli nebo architektovi, aby mu řekl, jak postavit palubu. Postavil ji sám a vypadá to jako chaotická pavučina 2x4 pod ní. To [~ # ~] pravděpodobně [~ # ~] bude v pořádku. Osobně bych raději riskoval život a končetinu na amatérské stavební práci, jako je tato.

Myslím, že pokud chcete vyvinout algoritmus pro šifrování, měli byste tak učinit a mít na to dobrý čas. Nedoporučoval bych používat jej ke skrytí vašich online bankovních výpisů, ale pokud chcete zašifrovat milostné dopisy své přítelkyně do domácího počítače, mělo by to být v pořádku - za předpokladu, že vaše žena není kryptanalystem.

V „The American Black Chamber“ * je příběh o tom, jak námořnictvo vyvíjelo své vlastní šifry. Námořnictvo předvedlo svůj nový kryptosystém, potěšilo se sebou samým, a Yardley, analytik armády, by kód okamžitě porušil a vysvětlil, co udělali špatně. Nabízeli by opravit kód, ale Yardley poukázal na to, že ačkoli dokážou napravit konkrétní slabiny, aniž by rozumně rozuměli, měli vždycky problém. Jejich systém byl vnitřně vadný. Je to trochu jako oprava netěsné střechy. Můžete se navždy oplácet, ale voda se stále ještě dostane do cesty. Pokud se nechcete navlhčit, musí střechu zkonstruovat někdo, kdo o střechách ví něco víc.

Už jsem vám někdy říkal o do-it-yourself chirurgii mozku, kterou jsem provedl na mé pozdní tchýně? Všechno šlo dobře, dokud neodešla a nezemřela. Vážně, málokdo z nás by věřil našemu zdraví amatérskému lékaři; Opravdu chcete svému tajemství věřit amatérskému softwaru? Nerad to přiznávám, ale každých pár měsíců si kupuji losovací lístek. Plně očekávám ztrátu, ale potenciální výplata je obrovská. Dokážu hrát kurzy a možná přijdu dopředu. Pokud to neudělám, dostanu babku. Proč hrát šance na šifrování? Výplata tam není.

S pozdravem/Bob Bryan

  • Doporučeno: Herbert O. Yardley, „The American Black Chamber“ - Kniha je dnes tak zajímavá, jako když byla psána v roce 1931. „Americká černá komora byla naplněna dobrými příběhy, které byly dobře vyprávěny, a upřímnými popisy úspěchů Yardley v kryptanalýza. V roce 1932 to byl bestseller - v zámoří i na domácím trhu. “ Od NSA: Pearl Harbor Review - The Black Chamber
63
Bob Bryan

Bruce Scheier napsal zpět v roce 1998:

Kdokoli, od bezradných amatérů po nejlepší kryptografy, může vytvořit algoritmus, který sám nedokáže zlomit. Není to ani těžké. Těžké je vytvořit algoritmus, který nikdo jiný nedokáže zlomit, a to ani po letech analýzy. A jediný způsob, jak to dokázat, je podrobit algoritmus roky analýzy nejlepšími kryptografy v okolí.

Cory Doctorow nazval tento koncept „Schneierovým zákonem“ v roce 2004 řeč :

Každý člověk může vymyslet bezpečnostní systém tak chytrý, že nedokáže vymyslet, jak jej rozbít.

V návaznosti na toto , znovu od Schneiera:

Když vám někdo podá bezpečnostní systém a řekne: „Věřím, že je to bezpečné,“ musíte se nejprve zeptat: „Kdo sakra jste?“ Ukažte, co jste rozbili, abyste prokázali, že vaše tvrzení o bezpečnosti systému něco znamená.

Phil Zimmerman také napsal ve svých původní PGP papíry :

Když jsem byl na vysoké škole na začátku sedmdesátých let, vymyslel jsem, co jsem věřil, že je geniální šifrovací schéma. Do proudu prostého textu byl přidán jednoduchý tok pseudonáhodných čísel, aby se vytvořil ciphertext. Zdálo by se, že by to znemožnilo jakoukoli frekvenční analýzu ciphertext, a bylo by to nepřekonatelné i pro nejnaléhavější vládní zpravodajské agentury. Cítil jsem se tak samolibý ohledně svého úspěchu. Takže kohout.

O několik let později jsem toto stejné schéma objevil v několika úvodních kryptografických textech a tutoriálech. Jak milé. Ostatní kryptografové mysleli na stejné schéma. Program byl bohužel představen jako jednoduché zadání domácích úkolů o tom, jak používat elementární kryptoanalytické techniky k jeho triviálnímu prolomení. Tolik pro můj skvělý systém.

59
tylerl

Původní příspěvek požadoval příklad:

Babington Plot je dobrý příběh špatného kryptosystému způsobujícího problémy. Marie královna Skotů byla uvězněna její bratrancem královnou Alžbětou I. a komunikovala s lidmi zvenčí pomocí šifrovaných dopisů. Abeceda byla nahrazena kryptoalphabetem squiggles, zkříženými kruhy a trojúhelníky s dalšími písmeny přidělenými pro obyčejná písmena, jako e, t, i a o, takže význam písmen nebyl rychle nalezen pomocí frekvenční analýzy. Přidali také několik nulových znaků, které byly při dešifrování ignorovány, aby odhazovaly analytiky. Problém byl v tom, že královna měla na svém personálu velmi kompetentního kryptoanalyzátora v osobě Thomase Phelippse, který byl schopen dešifrovat zprávy, když byly zachyceny.

Jak se věci vyvíjely, Mary šla spolu se spiknutím, aby ji nechala uniknout a převzala trůn. Když agenti královny zachytili poslední dopis od Marie před tím, než jej předali, přidali zašifrovanou větu požadující jména těch, kdo se do spiknutí zapojili, „aby mohli být řádně odměněni“. Maryův korespondent odpověděl poslušně a královští agenti nechali popravit všechny zúčastněné.

Když byly moje děti malé, poslal bych jim kryptogramy s jejich obědem (s klíčem (pomocí Vernamovy šifry)). Obecně to byly vtipy, ale nikdy nebyly důležité. V takovém případě je vaše role v pořádku. Pokud se chystáte svrhnout královnu Anglie (nebo íránský šáha nebo pomalu reformující Thug-ocraci v Myanmaru), navrhl bych, abyste se ujistili, že to, co používáte, nelze snadno dešifrovat. Jak řekl Bruce Schneier , kdokoli může přijít s kryptosystémem, který nemůže dešifrovat, ale přijít s jedním, který nikdo nemůže dešifrovat, je těžší.

45
Bob Bryan

Uvedu příklad něčeho, co se stalo tady, kde pracuji. Můj spolupracovník byl zodpovědný za navrhování systému pro ukládání hesel (dlouhý příběh, neptejte se) pro firemní FTP účty. Byl jsem požádán o převzetí a první věc, kterou jsem viděl, bylo:

public string Encrypt(string rawText)
{
    // homebrew code here
}
public string Decrypt(string encrypted)
{
    // homebrew code here
}

Okamžitě jsem je vytrhl a nahradil je běžnými kryptografickými voláními knihovny - a když jsem byl vyslýchán, odpověděl jsem:

"Vy nikdy hodíte svou vlastní šifrovací rutinu."

Můj spolupracovník se mnou bojoval celé hodiny. Strávil na tom hodně času, takže je perfektní, takže útočník nemohl možná mít nějaký způsob, jak to zlomit . Na jednom místě dokonce řekli: „Je to bezpečnější než AES256, protože nikdo neví, jak to funguje.“

V tu chvíli jsem věděl dvě věci:

  • Můj spolupracovník byl dokonalým příkladem efektu Dunning Kruger (nedostatek znalostí o předmětu, díky němuž je větší pravděpodobnost, že své vlastní schopnosti přeceňují).
  • Můj spolupracovník musel být napraven. Nejen proto, že se „mýlili“, ale také proto, že odpovídali za architekturu jiných systémů, a nechtěl jsem, aby si udržovaly šifrování domácího vaření.

Takže jsem odložil kód. A místo toho jsem se pokusil rutinu rozbít kódem jednoduše voláním funkce Encrypt () a prozkoumáním výstupu. Jsem nováček - nejsem kryptoanalytik - ale trvalo mi to jen 4 hodiny. Ukázal jsem jim trhlinu, prošel je mými kroky a zopakoval: Nikdy neposílejte své vlastní šifrování. Doufejme, že to vezmou k srdci a už to nikdy neudělají.

Takže se scvrkává na:

  1. Jak jste si jisti, že vaše šifrování je bezpečné, má ne vliv na to, jak skutečně je zabezpečený.
  2. Nikdy nezatáčejte své vlastní šifrování (nelze je opakovat dostatečně často ...)
13
Kevin

V kryptografii nemáte jen jednoho soupeře, který na vás útočí tak, jak očekáváte. To je důvod, proč je těžké o tom přemýšlet, protože musíte myslet na absolutně VŠE.

Ale opravdu nikdo nemůže překonat každého možného protivníka. To nejlepší, co můžeme udělat, je co nejvíce využít našich společných znalostí a existujícího výzkumu a podniknout kroky k tomu, aby odtamtud stavěly, útočný vektor útokovým vektorem.

Takto se přistupuje k mnoha problémům na pokraji lidských schopností, ať už jde o výzkum ve fyzice nebo o hraní šachů na nejvyšší úrovni.

V těchto oblastech práce můžete také ignorovat, na čem ostatní lidé pracují, a vymýšlet své vlastní strategie a teorie, a pokud potkáte svého prvního zkušeného oponenta, budete nejmodernějším způsobem vyhlazováni více způsoby, které můžete spočítat.

TL; DR
Lidé jsou příliš hloupí na to, aby dělali kryptografii sami.

13
mschwaig

Je obecně nemožné zaručit, že někdo, kdo navrhne kryptosystém, neopustí společnost, pro kterou je vytvořen, a že jeho znalosti tohoto návrhu využije na úkor svého bývalého zaměstnavatele, s výjimkou toho, že kryptosystém navrhne tak, aby takové znalosti, které může protivník získat, by mohly být zbytečné.

Pokud má někdo kryptosystém, který je bezpečný i proti útočníkům, kteří vědí všechno kromě klíče a jeden změní klíč na novou náhodně vygenerovanou hodnotu, bude systém zabezpečen proti všem útočníkům, kteří nový klíč nemají. I kdyby útočníci měli dostatek informací, aby mohli kompromitovat systém před změnou klíče, nemohli by jej poté systém rozbít.

Pokud systém nepotřebuje chránit neobvykle hodnotná data, pravděpodobně není příliš těžké navrhnout kryptosystém tak, aby byl dostatečně dobrý, aby bez znalostí zasvěcených osob přesáhl náklady na jeho prasknutí jakoukoli hodnotu, kterou by bylo možné tímto způsobem získat. Ne proto, že navrhování dobrého kryptoměru je snadné, ale protože většina systémů není zvyklá chránit nic, co by pro útočníka mělo velkou hodnotu (i když by zkušený kryptograf mohl snadno systém rozbít za 58 minut, to by nebylo moc riziko, pokud by hodnota takových informací útočníkovi nepřekročila náklady kryptografa).

Navrhnout systém tak, aby byl robustní proti někomu s důvěryhodnými údaji, je však mnohem obtížnější a existuje jen velmi málo lidí s dostatečnými odbornými znalostmi, aby navrhli systém, který by mohl - změnou klíče - být robustní někdo, kdo měl plné vnitřní znalosti o designu a odborné znalosti v kryptografii. Kryptografický odborník bez znalostí zasvěcených osob možná bude muset zkontrolovat stovky nebo tisíce potenciálních chyb, které mohl designér udělat, ale znalost zasvěcených osob může této osobě umožnit okamžitě identifikovat a využít chybu.

1
supercat

Vlastně, Roll Your Own crypto, pak to zahoď.

Protože Crypto Fails volá, je trochu drsné říci, že nemůžete napsat žádný krypto kód. Hlavním problémem je nezachytit tento kód a použít jej kdekoli (v uvolněném softwaru).

Určitě byste to měli dát šanci a použít jako zážitek z učení. Ještě lépe, pokud jste přátelé s kryptanalyzátorem, a můžete získat zpětnou vazbu k tomu, co jste napsali. Pokud stojí za svou sůl, řeknou vám také, abyste tento kód nepoužívali v reálném životě, ale měli by vám být schopni poskytnout nějaké informace, které vám pomohou se učit a růst.

0
NH.