Jsem v kryptografii začátečník. Navrhl jsem algoritmus šifrování a dešifrování založený na hesle, který k šifrování zprávy používá náhodnou sůl a heslo. Používám SHA-512 pro hašování, maticové operace pro míchání, bitové XOR pro míchání dat a načítání. Délka soli a ciphertextu je 256 písmen.
Pokud vím, lavinový efekt znamená, že dojde k mírné změně některého z následujících:
- šifra
- heslo
- sůl
musí drasticky změnit výstup.
Pokud v mé implementaci změním sůl nebo šifru, nevidím žádné velké změny v mém výstup. Pokud však dojde k mírné změně hesla, výstup se drasticky změní.
Takže moje otázky:
- Je moje chápání lavinového efektu obecně správné? Pokud ne, co by to mělo být?
- Co mohu udělat, abych co nejlépe vytvořil lavinový efekt v mé (nebo jakékoli) šifře? mám snížit délku soli méně a vytvořit menší ciphertext, abych vytvořil lavinový efekt? Pokud ne, jak toho mohu dosáhnout?
Komentáře
- Ze zvědavosti, na co ten hash používáte?
- Vítejte na serveru Cryptography Stack Exchange. @Avinash, vaše otázka byla přenesena sem, protože je zde více tématická než přetečení zásobníku. Zaregistrujte si zde svůj účet, abyste mohli komentovat a přijmout odpověď.
- Pokud chcete nějaké konstruktivní odpovědi, měli byste ukázat, jak vaše šifra aktuálně funguje (nejlépe v matematických vzorcích). Pak se můžeme podívat, jak to vylepšit.
- Odstranil jsem ‚ komentáře v duchu “ don ‚ t navrhněte si vlastní šifru “ – zde na kryptoměně ‚ s naprosto přijatelné vyzkoušet, i když byste měli pochopit, že je to samozřejmě na vaše vlastní riziko 🙂 I ‚ jsem také otázku trochu upravil, abych se více zaměřil na lavinový efekt v nepřítomnosti příslušných šifrových konstrukcí. Pokud má někdo pocit, že je to zbytečné, můžete se vrátit zpět nebo vylepšit, co jsem ‚ udělal.
Odpovědět
Neobtěžujte se změnou skutečného šifrovacího algoritmu. Přečtěte si o principu Kerckhoffs : měli byste měňte pouze věci jako klíč a IV, nikoli skutečný algoritmus.
Chcete-li otestovat lavinu, otočte jeden klíč do klíče. To by mělo ve vašem výstupu změnit zhruba polovinu bitů.
Pro návrh šifry již byla navržena Applied Cryptography . Kromě toho se musíte podívat na zavedení Diffusion and Confusion do vašeho algoritmu. Také stojí za to studovat stávající algoritmy, abyste zjistili, jak postupují ve věcech. Začal jsem návrhem své vlastní jednoduché Feistelské šifry , takže mnoho okolní struktury je již pro vás hotové. Také zjednodušuje design v tom, že funkce F nemusí být invertovatelná. To vám v této oblasti poskytuje mnohem větší flexibilitu.
Varování, že nepoužíváte svůj vlastní design pro nic jiného než pro výuku, je dobré.
Komentáře
- Mnohokrát děkuji ….
- Cypher / cipher je věc ve Velké Británii / USA.
Odpověď
Myslím, že je úžasné, že vytváříte vlastní algoritmus šifrování a dešifrování. Tímto způsobem se o kryptografii dozvíte hodně. Zatím každý, kdo staví šifrovací šifrovací a dešifrovací algoritmus vytváří něco tak děsně chybného – velmi poučného – poprvé.
terminologie
Pokud správně rozumím vaší otázce, máte dokonale rozumná otázka ohledně lavinového efektu, ale většina lidí na tomto webu je tak zmatená vaší nestandardní terminologií, že nedokáže ani rozumět tomu, co žádáte.
Pokud správně rozumím vaší otázce, „budujete systém šifrování a dešifrování, který bere jako vstup prostý text, ukládá data jako šifrované soubory a později umožňuje někomu se správným heslem dešifrovat uložené soubory a obnovit dešifrovaný holý text bit-for-bit shodný s původním vstupem v holém textu.
Jak jste pravděpodobně již víte, že typický šifrovací program vytváří šifrované soubory, které začínají inicializačním vektorem (IV), který byl nově vytvořen kryptograficky bezpečným generátorem náhodných čísel, když byl vytvořen šifrovaný soubor.Šifrovací program poté rozdělí vstupní soubor na bloky prostého textu některé pevné blockize , použije nějaký režim blokové šifry provozu v „šifrovacím režimu“ ke zpracování každého bloku (a šifrovacího klíče) prostřednictvím blokové šifry , aby nakonec skončil šifrovaným blokem stejná velikost bloku, která je připojena k šifrovanému souboru. Na konci jsou často fádní bity související s „polstrováním“ a „ověřováním zpráv“.
Poté dešifrovací program rozdělí šifrovaný soubor na šifrované bloky stejné pevné velikosti bloku, každý blok napájí ( a šifrovací klíč) prostřednictvím blokové šifry pomocí stejného provozního režimu blokové šifry v „dešifrovacím režimu“ k obnovení bloku prostého textu a zřetězení všech bloků holého textu dohromady k obnovení souboru bit-za-bit shodného s původním souborem prostého textu .
Používám SHA-512 k hašování
OK, SHA-512 je vynikající hashovací algoritmus. Pokud toto používáte jako součást vnitřní kulaté funkce nebo chcete-li generovat podklíče z hlavního šifrovacího klíče, fungovalo by to; zdá se to zbytečně komplikované.
Pokud používáte SHA-512 jako funkce odvození klíče (KDF) ke generování hlavního šifrovacího klíče z hesla, mnoho lidí by řeklo, že to není dostatečně komplikované.
maticové operace pro míchání
To je trochu neobvyklé, ale mohlo by to fungovat.
bitový XOR pro míchání dat a načítání.
Prakticky všechny moderní šifrovací algoritmy používají mnoho bitových operací XOR. Mnoho moderních šifrovacích algoritmů je navrženo tak, aby ve vnitřní smyčce (kruhová iterace) používaly pouze modulární sčítání, rotaci s pevnou velikostí rotace a XOR (ARX).
Jsem docela hezký, že funkce vnitřního kola používá pouze XOR nebo pouze rotace nebo pouze modulární přidání budou fatálně nezabezpečené bez ohledu na to, kolik kulatých iterací je použito.
(Nevím dost, abych řekl cokoli o zabezpečení vaší konkrétní kombinace operací XOR a matic).
Délka sůl a šifrový text má 256 písmen.
Předpokládám, že jste chtěl říct „Délka inicializačního vektoru (IV) a každého bloku šifrovacího textu je 256 písmen . „
„ Sůl „se používá v jednosměrném kryptografickém hašování – viz Můžete mi pomoci pochopit, co kryptografický “ sůl “ je? . „IV“ se používá v obousměrné kryptografii – šifrování i dešifrování. „Sůl“ i „IV“ jsou čerstvě vygenerované náhodné hodnoty, o nichž se předpokládá, že jsou veřejně známé, ale terminologie naznačuje, že budou použity v různých druzích systémů.
Docela každý stanoví délku IV rovná velikosti bloku, takže je to skvělé.
Chápu, že prakticky všechny šifry vyvinuté před vyhlášením soutěže AES z roku 1997 používaly velikost bloku 64 bitů (8 bajtů) nebo méně. Někteří kryptografové zjevně si myslel, že to není dost, ale pokud vím, všichni si nyní myslí, že velikost bloku 128 bitů (16 bajtů) je adekvátní.
Funguje velikost bloku 256 bajtů; zdá se to zbytečně velké.
lavinový efekt
Při spuštění každého bloku holého textu blokovou šifrou (v nějakém šifrovacím režimu) znamená lavinový efekt to, že jedna bitová změna některou z následujících možností:
- data v bloku prostého textu
- heslo
- IV
musí změnit výstupní blok šifrovacího textu drasticky (asi polovina bitů).
Při spouštění každého bloku šifrovacího textu blokovou šifrou (v nějakém dešifrovacím režimu) znamená lavinový efekt změnu jednoho bitu v některém z následujících:
- blok šifrovacích textů
- heslo
- IV
musí drasticky změnit výstupní blok „prostého textu“ (o polovina bitů).
Pokud ve své implementaci změním sůl nebo šifru, nevidím ve svém výstupu žádné velké změny.
Hádám, že jste chtěl říci jednu ze dvou věcí:
- „pokud změním jeden bit poblíž začátek o V zašifrovaném souboru (tj. v IV nebo v nějakém časném bloku šifrovacího textu) nevidím žádné velké změny ke konci svého výstupního holého souboru.
Tento nedostatek ke změně dochází vždy při použití (zabezpečeného) Cipher Block Chaining (CBC) nebo některého jiného provozního režimu. Není to tedy nutně problém.
To však může být problém, pokud jste si mysleli, že používáte režim (secure) Propagating Cipher Block Chaining (PCBC), kde tento nedostatek změn naznačuje chyba v implementaci.
Tento nedostatek změn je také očekávaným výsledkem při použití (nezabezpečeného) režimu elektronického číselníku (ECB).
Bez ohledu na to, jaký provozní režim zvolíte, dešifrovací program měl by vytisknout velká strašidelná varování, že soubor selhal při kontrole autentizace MAC, kdykoli je poškozen jeden bit šifrovaného souboru.
- „pokud změním jeden bit v jediný šifrovaný blok šifrovaného textu v zašifrovaném souboru, nevidím žádné velké změny v odpovídajícím bloku prostého textu v mém výstupním souboru otevřeného textu. “
Ano, znamená to vážnou chybu – algoritmus blokové šifry nemá dobrý lavinový efekt. To je známka toho, že algoritmus nemá dostatečné promíchání. To obecně znamená, že systém je zranitelný vůči útoku vybraného ciphertextu a podobným útokům.
Co mohu udělat, abych co nejlépe vytvořil lavinový efekt v mé (nebo jakékoli) šifře? mám snížit délku soli méně a vygenerovat menší ciphertext, abych vytvořil lavinový efekt?
Předpokládám, že jsi se chtěl zeptat „mám zmenšit velikost IV a velikost bloku k vytvoření lavinového efektu? „
To obecně není nutné.
Nejběžnější přístupy k vytvoření lavinového efektu jsou uvedeny ve Wikipedii bloková šifra článek:
Neznám žádnou blokovou šifru, která po jediném kole způsobí úplnou lavinu. Lidé, kteří navrhují blokové šifry, se snaží vybrat dostatečný počet kol, aby bloková šifra odolávala všem standardním kryptografickým útokům , což je více než dostačující k vytvoření úplné laviny .
Lidé, kteří navrhují blokovou šifru, obvykle vyberou jedno obecné schéma návrhu blokové šifry a nechají program blokové šifry iterovat jej znovu a znovu přes vybraný počet kol. Některá z nejpopulárnějších obecných návrhových schémat blokové šifry jsou:
- substitučně-permutační síť
- šifra Feistel
- šifra Lai-Massey
Každý z nich vyžaduje nějakou interní nelineární funkci. Rané blokové šifry často používají v každém kole nějakou komplikovanou vnitřní funkci, která téměř dosáhne laviny v jednom kole. Moderní šifry často používají velmi jednoduchou a rychlou vnitřní funkci v každém kole (několik funkcí ARX) s dostatečnou nelinearitou, aby po velkém počtu kol nakonec dosáhly laviny.
Komentáře
- Postranní poznámka: Šifra khazad má po jednom kole plnou difúzi. I ‚ jsem vyrobil hračky, které to také dělají, je to ‚ určitě možné a objevování způsobů, jak to udělat, je zábava.