Četl jsem to
Typický proud šifra šifruje holý text jeden bajt po druhém, i když šifra proudu může být navržena tak, aby fungovala po jednom bitu nebo na jednotkách větších než bajt po druhém.
(Zdroj: Kryptografie a zabezpečení sítě , William Stallings.)
Bloková šifra šifruje jeden blok najednou. Blok může mít velikost jednoho bajtu nebo více nebo méně. To znamená, že můžeme blokovat jeden bajt také pomocí proudové šifry jako proudu.
Takže jaký je přesně rozdíl mezi proudovou šifrou a blokovou šifrou?
Komentáře
- IMHO mnoho konceptů / definic není přesně jasných, ale mají hranice v jistém smyslu spíše tekuté. Používají se způsoby jako takovými, protože jsou vhodné v diskurzu, kde obvykle existují vhodné kontexty, které pomohou přesnějšímu porozumění. Proto dochází k propouštění. Předpokládám, že dobrou analogií k problému zde je “ bohatý člověk “ vs. “ chudák „.
- Zdá se, že první odstavec otázky byl doslovně zkopírován z Kryptografie a zabezpečení sítě (William Stallings, oddíl 6.3). Vždy musíte uvést zdroj jakéhokoli materiálu, který kopírujete z externích zdrojů; viz crypto.stackexchange.com/help/referencing .
- Může použít streamovou šifru nebo ‚ zabalit ‚ blokovou šifru. Např. AES SIC lze použít ke generování klíčového proudu. Skutečnost, že klíčový proud je N krát větší než velikost bloku, nemá žádný vliv na délku šifrovacích / prostých textů.
Odpovědět
A bloková šifra je deterministická a vypočítatelná funkce $ k $ -bit klíčů a $ n $ -bit (prostý text) bloky do $ n $ -bit (ciphertext) bloků. (Obecněji platí, že bloky nemusí mít velikost bitů, $ n $ -character-blocks by se sem taky vešly). To znamená, že při šifrování stejný holý blok se stejným klíčem, získáte stejný výsledek. (Normálně také chceme, aby byla funkce invertovatelná, tj. Vzhledem k danému klíči a bloku šifrovacího textu můžeme vypočítat prostý text.)
Chcete-li skutečně zašifrovat nebo dešifrovat zprávu (jakékoli velikosti), nemusíte blokovou šifru nepoužívejte přímo, ale vložte ji do provozního režimu . Nejjednodušším takovým režimem by byl režim elektronické kódové knihy (ECB) , který zprávu jednoduše rozdělí na bloky, použije šifru na každý blok a vydá výsledné bloky. (Toto však obecně není zabezpečený režim.)
Některá schémata raného šifrování, jako je ta, kterou používá Caesar, lze v ECB kategorizovat jako „blokovou šifru s 1 znakovými bloky“ -mode „. Nebo obecně vše, co má knihu kódů .
Obvykle používáme jiné provozní režimy, které zahrnují inicializační vektor a nějaký druh zpětné vazby, takže každý blok každé zprávy je šifrováno jiným způsobem.
A streamová šifra je funkce, která přímo mapuje $ k $ -bit klíče a libovolné délky prostých textů na (stejnou libovolnou délku) ciphertext v takovém tak, že předpony mapy prostého textu k předponám šifrovacího textu, tj. můžeme vypočítat počáteční část šifrovacího textu, než bude známa koncová část prostého textu. (Velikost zpráv může být často omezena na násobky nějaké „velikosti bloku“, ale obvykle s menšími bloky, jako jsou celé bajty apod.)
Pokud se část prostého textu opakuje, odpovídající ciphertext obvykle není stejný – různé části zprávy budou šifrovány různými způsoby.
Takové šifry proudu často fungují tak, že ze skutečného klíče vyprodukují keystream (a možná i inicializační vektor) ) a pak to jednoduše XOR-ing se zprávou – ty se nazývají synchronní šifry proudu . Jiné šifry proudu mohou lišit šifrování budoucích částí zprávy v závislosti na předchozích částech.
Některé provozní režimy blokové šifry skutečně vytvářejí synchronní proudovou šifru, například CTR a OFB režim.
Nikdy byste neměli opakovaně používat klíč (a případně IV) synchronní proudové šifry (která zahrnuje blokové šifry v režimech streamování) pro různé zprávy, protože to může vést ke kompromisům. (A dokonce i pro stejnou zprávu se ukáže, že jste zprávu opakovali.)
Všimněte si, že při skutečném použití budete také chtít MAC, např. ochrana integrity pro vaši zprávu. (Některá schémata jsou narušena například v případě útoku na vybraný šifrovací text a takový MAC tomu zabrání (pokud zprávu předáte dešifrujícímu až po kontrole MAC).)
Komentáře
- Kdy byste si vybrali mezi streamem a blokem? Je rozdíl v zabezpečení? Nebo rychlost šifrování?
- @anoopelias Blokové šifry jsou obecně pomalé ve srovnání se šifry Stream. Také si nejsem jistý, ale myslím si, že proudové šifry jsou dobré při zajišťování bezpečnosti informací, zatímco blokové šifry jsou dobré při zajišťování výpočetní bezpečnosti.
- Pokud jde o poslední odstavec – poskytli byste prosím odkaz na příklad, ve kterém přidání MAC chrání před útokem zvoleného ciphertextu?
odpověď
bloková šifra je matematicky jen klíčovaná rodina pseudonáhodné permutace na množině $ \ {0,1 \} ^ n $ z $ n $ -bitových bloků. (V praxi obvykle vyžadujeme také efektivní způsob výpočtu inverzní permutace.) Bloková šifra sama o sobě není pro praktickou kryptografii příliš užitečná, alespoň pokud náhodou nepotřebujete šifrovat malé zprávy, které se vejdou do jednoho bloku.
Ukázalo se však, že blokové šifry jsou extrémně univerzální stavební bloky pro konstrukci dalších kryptografických nástrojů: jakmile budete mít dobrou blokovou šifru, na základě jediné blokové šifry můžete snadno vytvořit cokoli od proudových šifer po hašovací funkce, ověřovací kódy zpráv, funkce odvozování klíčů, generátory pseudonáhodných čísel, entropické fondy atd.
Ne všechny tyto aplikace nutně potřebují blokovou šifru; například mnoho z nich může být založeno na jakékoli pseudonáhodné funkci , která nemusí být permutací (ale pohodlně existuje „sa lemma , které říká, že pseudonáhodná permutace bude fungovat). Mnoho konstrukcí je také nepřímých; například můžete vytvořit klíčovou derivační funkci z ověřovacího kódu zprávy, který můžete sestrojit z hashovací funkce, kterou můžete — ale na — sestrojit z bloku šifra. Ale přesto, pokud máte blokovou šifru, můžete z ní postavit vše ostatní.
Kromě toho tyto konstrukce obvykle přicházejí s (podmíněnými) bezpečnostními důkazy, které snižují zabezpečení zkonstruovaných funkcí na funkci základní blokové šifry. Nemusíte tedy provádět namáhavý a nespolehlivý úkol dešifrovat každou z těchto funkcí zvlášť —, místo toho se můžete soustředit na blokovou šifru, s vědomím, že jakákoli důvěra v bezpečnost blokové šifry se přímo promítne do důvěry ve všechny funkce na ní založené.
Je zřejmé, že toto vše je velmi výhodné, pokud pracujete na malá vestavěná platforma, kde by mohlo být obtížné a nákladné zahrnout efektivní a bezpečný kód pro mnoho samostatných kryptoprimitiv. Ale i když „nejste na tak omezené platformě, psaní a analýza nízkoúrovňového krypto kódu může být pracné kvůli nutnosti věnovat pozornost věcem jako útoky postranními kanály . Je snazší omezit se na omezený počet nízkoúrovňových stavebních bloků a z nich postavit vše, co potřebujete.
Rovněž i na rychlých platformách se spoustou paměti jako u stolních procesorů může být implementace nízkoúrovňových krypto operací přímo v hardwaru mnohem rychlejší než jejich provádění v softwaru —, ale není praktické to dělat u více než několika z nich . Kvůli své univerzálnosti jsou blokové šifry vynikajícími kandidáty na implementaci hardwaru (jako v AES instrukční sadě pro moderní procesory x86).
A co tedy šifry streamů?
Matematicky streamová šifra — v nejobecnějším slova smyslu — je také klíčovaná rodina invertovatelných pseudonáhodných funkcí, ale na množině $ \ {0,1 \} ^ * $ bitringů s libovolnou délkou spíše než na blocích omezené délky.
(Zde jsou některé jemnosti; například většina konstrukcí šifrových proudů vyžaduje, aby vstup obsahoval jedinečnou hodnotu nonce a nikoli zaručit bezpečnost — ve smyslu nerozeznatelnosti od skutečně náhodné funkce —, pokud je pro dva různé vstupy použita stejná nonce. Také jako neexistuje žádná jednotná distribuce na invertibilních funkcích od $ \ {0,1 \} ^ * $ pro sebe, aby si mohla vybrat náhodné funkce, musíme pečlivě definovat, co to znamená, aby proudová šifra vypadala „k nerozeznání od náhodných“, a tato definice má praktické důsledky pro zabezpečení — například většina šifrovacích proudů uniká přes délku zprávy. Prakticky obvykle také vyžadujeme, aby šifry proudu v ve skutečnosti buďte „streamování“ v tom smyslu, že libovolně dlouhé vstupní bitové toky lze zašifrovat — a dešifrovat — pomocí o Konstantní úložiště a čas lineární v délce zprávy.)
Streamové šifry jsou samozřejmě mnohem užitečnější než blokové šifry: můžete je použít přímo k šifrování zpráv jakékoli délky. Ukázalo se však, že jsou také mnohem méně užitečné jako stavební bloky pro jiné kryptografické nástroje: pokud máte blokovou šifru, můžete snadno přeměnit ji na proudovou šifru , zatímco přeměna libovolné proudové šifry na blokovou šifru je obtížná, ne-li nemožná .
Proč se tedy lidé vůbec obtěžují navrhovat specializované šifry streamů, pak, když blokové šifry zvládnou práci stejně dobře? Důvodem je většinou rychlost: někdy potřebujete k zašifrování spousty dat rychlou šifru a jsou zde opravdu rychlé dedikované streamové šifry. Některé z těchto designů jsou také navrženy tak, aby byly velmi kompaktní pro implementaci, ať už v softwaru nebo hardwaru, nebo v obou, takže pokud opravdu potřebujete pouze stream šifru, můžete Ušetřete na velikosti kódu / obvodu použitím jedné z těchto šifer místo obecné blokové šifry.
Čím však získáte na rychlosti a kompaktnosti, ztratíte na univerzálnosti. xample, nezdá se, že by existoval nějaký jednoduchý způsob, jak vytvořit hashovací funkci ze streamové šifry , takže pokud některou z nich potřebujete (a často protože hash funkce, kromě toho, že jsou samy o sobě užitečné, jsou také běžnými stavebními kameny pro jiné krypto nástroje), budete je muset implementovat samostatně. A hádejte co, většina hashovacích funkcí je založena na blokových šifrách, takže pokud je máte, můžete také pro šifrování znovu použít stejnou blokovou šifru (pokud opravdu nepotřebujete surovou rychlost vyhrazené proudové šifry).
Komentáře
- Zeptal jsem se, zda je nutné mít dva různé výrazy. Podle toho, co jste vysvětlili, je proudová šifra jednoduše speciální případ blokové šifry, tj. Případ pro omezující případ, kde n v množině {0,1} ^ n je 1. Takže bych tvrdil, že neudržuje aktuální rozlišení terminologií.
- @ Mok-KongShen Streamová šifra ve skutečnosti není jen bloková šifra s velikostí bloku 1 (kromě klasických monoalfabetických šifer, u nichž lze předpokládat, že jsou obě). Streamová šifra obvykle převádí bity / bajty / … proudu odlišně, v závislosti na aktuálním vnitřním stavu šifry, zatímco bloková šifra pro stejný vstup má stejný výstup (a proto se obvykle používá v “ provozní režim “ k vytvoření proudové šifry).
- @PauloEbermann. IMHO jste mi odpověděl na otázku CodesinChaos týkající se “ dynamiky a variability „.
- @ Mok-KongShen Ne ‚ t. Jedinou výhodou vyhrazené proudové šifry oproti blokové šifře ve vhodném režimu je výkon. ‚ Nelze ignorovat režimy řetězení, protože nikdo rozumný nepoužívá blokové šifry bez příslušného řetězení.
- @CodesInChaos. Různé aplikace mají různé požadavky na výkon. Šifrovat např. e-mail, ‚ nepotřebuje výkon, který by byl žádoucí pro šifrování například videosouboru.
Odpověď
Bloková šifra sama o sobě mapuje n
bity na n
bity pomocí klíče. tj. je to klíčová pseudonáhodná permutace. Nemůže přijímat delší ani kratší texty.
Chcete-li skutečně zašifrovat zprávu, vždy potřebujete režim zřetězení. ECB je jedním z takových režimů zřetězení (a opravdu špatná) a není to čistá bloková šifra. Dokonce i ECB sestává z „doplňkových zpracovatelských operací“. Tyto režimy zřetězení mohou mít zcela odlišné vlastnosti.
Jeden z nejpopulárnějších režimů zřetězení, režim Counter (CTR), konstruuje synchronní proudovou šifru z blokové šifry.Další režim, CFB konstruuje samočinně synchronizovanou proudovou šifru s vlastnostmi někde mezi vlastnostmi CBC a synchronní proudovou šifrou.
Takže váš předpoklad, že mezi proudem a blockciphery nejsou šifry, opravdu není pravdivý. Cryptographers raději je budovat z dobře pochopeného primitiva blokové šifry, místo toho, abychom vytvořili zcela nový systém.
Nazval bych Vigenère proudovou šifrou, i když s příliš krátkou dobou. Používá kódování 26 znaků namísto kódování 2 symbolů, ale to neznamená, že to není proudová šifra. Podívejte se na Solitaire / Pontifex , kde najdete moderní konstrukci proudové šifry s 26 symboly.
Komentáře
- Pokud neprovedu ‚ t err, “ zřetězení “ šifrování bloků se běžně používá v kontextu “ blokového řetězení „, tj. vzájemného závislosti po sobě jdoucích bloků, aby se analýza obtížnější. IMHO ECB by tedy ze své podstaty neměl žádný řetězový efekt.
- Chybně. Dobrý režim řetězení bude mít tyto vlastnosti, ale špatné režimy stále existují!
Odpovědět
Existují dva základní typy šifrování.
- Symetrické. Pro šifrování a dešifrování používá stejný klíč.
- Asymetrický. K šifrování a dešifrování používá dva různé klíče (veřejný a soukromý).
Bloková šifra a Streamová šifra jsou součástí symetrického šifrování. Stream Cipher generuje rozšířený tok klíčů z klíče daného uživatelem a poté jej XoR prostým textem (pro šifrování) / ciphertext (pro dešifrování).
Zatímco Block Cipher převezme jako vstup blok dat, provede na něm několik kol spolu s mícháním kláves a vytvářením šifrovacího textu. Blokové šifry mají různé provozní režimy, z nichž režim Counter (CTR) funguje podobně jako streamová šifra. Pořadové číslo je vstupováno do blokové šifry a jeho výstup je Xored s Plaintextem, aby se vytvořil Ciphertext. V tomto provozním režimu je vyžadován pouze šifrovací kód blokové šifry. Není potřeba dešifrovací kód, pro dešifrování jednoduše zadáme stejné pořadové číslo pro blokování šifry a Xored jeho výstup pomocí Ciphertext dostaneme prostý text. Někdy se spolu s počitadlem používá podstatné jméno, takže vstupuje bloková šifra rozdělená na dvě části, tj. Pevné podstatné jméno a přírůstkové počítadlo.
Další provozní režim : GCM (poskytuje ověřené šifrování)
Více podrobností najdete ZDE