V první řadě bych se zeptal, jestli se chcete dozvědět, jak to funguje, nebo jestli chcete šifrování a autentizaci. Radši bych totiž sáhl po hotovém řešení, jako třeba GnuPG. V kryptografii je dost případů, kdy člověk neví, že neví. A nejhorší na tom je, že to narozdíl od mnoha jiných případů není na první pohled vidět – vše funguje vpořádku. Až na to, že pak někdo zjistí, že toho funguje víc, než by mělo.
Dále je potřeba si ujasnit, jestli vůbec potřebujete asymetrickou kryptografii. Pokud ne, vyhněte se těmto komplikacím. Asymetrická kryptografie je pomalejší, takže se typicky kombinuje se symetrickou. Pak je ale nutné zvládnout správně použít obojí. Asymetrická kryptografie je také méně odolná kvantovým počítačům. V neposlední řadě tu bude asi komplikovanější password-based encryption.
Je dobře, že přemýšlíte nad autentizací – ověřením, že jste skutečně autorem obsahu. V asymetrické kryptografii na to slouží podpis, v symetrické tzv. MAC. Rozdíl je podobný jako u šifrování – na ověření MACu potřebujete stejný klíč jako na jeho vytvoření. A co se týče pořadí, šifrování a autentizace – vězte, že se u symetrických šifer používají jiné postupy než u asymetrických.
Ano, i u symetrické kryptografie potřebujete autentizovat. Pokud útočník nemá klíč, sice nemůže vytvořit zprávu from scratch, ale může (někdy i celkem snadno) zkoušet upravovat existující – vizte malleability. To někdy vede k zajímavým útokům, možná si vybavíte POODLE na SSL3.
Pokud se to budete snažit implementovat. Vlastními silami, čeká vás spousta dalších úskalí, například:
* Jaký zvolit mode of operation?
* Jak zvolit inicializační vektor?
* Když potřebujete náhodná čísla (což se stane velmi snadno), jak je správně vygenerovat?
* Když spočítám MAC pro ověření, jak ji správně porovnat? (Vizte timing attack.)
* U šifrování heslem: Jak správně odcodit klíč z hesla?
* Když potřebujeme dva klíče (jeden pro MAC a druhý pro šifru), lze použít tvakrát tentýž, nebo dva různé? Kde je vezmu?
* Seznam nemusí být kompletní.
Jinak i pokud použijete hotové řešení, nabízí se pár otázek:
* Pokud jde o soubor, jehož obsah se může měnit, jak si můžete být jisti, že máte tu poslední verzi?
* Pokud takovýchto souborů máte více, nemůže je útočník třeba prohodit?
* Pokud takovýchto souborů máte více a nějak spolu souvisejí, že jak zjistíte, že třeba jeden zmizel nebo jeden je starší a další novější?
* Seznam nemusí být kompletní.