Kryptografie

Co je kryptografie?

Kryptografie zajišťuje to, aby byla vaše data nebo komunikace zabezpečená. Neboli zabraňuje třetí straně číst vaši soukromou komunikaci. Toto zabezpečení funguje pomocí šifrování, které používá klíč k tomu, aby vaše zpráva či data byla zašifrovaná. Takže pokud třetí strana nemá správný klíč, tak vaši zprávu nebude schopna nikdy dešifrovat.

Historie kryptografie

Samotné slovo kryptografie pochází z řeckého slova kryptos, které znamená skrytý.

Úplné začátky kryptografie sahají až do starodávného egypta, kde se používaly hieroglyfy. Takovéto hieroglyfy se skládaly z znaků a obrázku.

Ale první použití šifry, kde byl potřeba klíč k rozluštění zprávy, vytvořil Julius Caesar. Tato šifra je jedna z nejznámějších, ale i nejjednodušších. Nejjednodušších z toho důvodu, jelikož se jedná o posunutí písmen v abecedě. Neboli klíčem je číslo o kolik písmen v abecedě se posunute. V tuto chvíli je jednoduché uhodnout klíč pomocí metody pokus a omyl. Teď si vysvětlíme pár termínů a to transpozice, steganografie a one-time pad.

Transpozice

Transpozice je metoda šifrování, při níž se pozice znaků či skupin znaků posouvají podle pravidelného systému. A to tak, aby text, který je zašifrován vytvářel pravidelnou změnu v pořadí znaků nebo jejich skupin originálního textu. Teď si ukážeme jeden z příkladů transpozice a to column cipher.

Column cipher

Řekněme, že zpráva, kterou chceme zašifrovat bude ahoj už jsem doma. Nejdříve si vybereme náhodné slovo například jako cyber. Teď si očíslujeme písmena v cyber, podle toho kolikáté jsou v abecedě. Poté co si to očíslujeme nám vznikne 25134. Dále si naši zprávu rozdělíme do sloupců podle počtu písmen v cyber. Neboli by další krok měl vypadat následovně.

2 5 1 3 4
A H O J U
Z J S E M
D O M A x

Malé x v tomto případě představuje nulu. Ale to, že jsem použil x neznamená, že se používá vždy. Toto doplnění můžete jakkoliv náhodně zvolit. Tak a teď už nám stačí seřadit skupiny písmen podle číslování. Takto tedy vypadá finální produkt této šifry.

OSM AZD JEA UMx HJO

Příklad, který jsme si ukázali byla teda pravidelná sloupcová transpoziční šifra. Jak tedy vypadá nepravidelná si teď ukážeme. V nepravidelném případě sloupce nedoplňujeme sloupce a necháme je prázdné. Takto by teda měl vypadat krok po určení a očíslovní písmen v klíči.

2 5 1 3 4
A H O J U
Z J S E M
D O M A

Tak teď jsme na prázdné místo doplňovali nic, a proto by finální výsledek měl vypadat nějak takto.

OSM AZD JEA UMH JO

Neboli se vždy doplní do skupin ve stejné počtu.

Steganografie

O steganografii můžeme říci, že se jedná o metodu pomocí, které skrýváme naši zprávu v jiné zprávě nebo v jiném objektu podle daného postupu.

Slovo steganografie pochází z řeckého steganographia. Toto slovo se skládá z steganós, což znamená skrytý a ze slova graphia, což znamená písmo. Ve steganografii se zpráva zamaskuje a tváři se jako úplně neco jiného nebo jako součástí něčeho jako jsou například články, obrázky nebo jiný skrytý text. Takže můžeme říci, že se steganografie zabývá ukrytím dané zpravy zatímco kryptografie se zabývá samotnou ochranou naší zprávy.

První zmínky steganografie se objevili v starodávném Řecku, kde Hérodotos popsal dva způsoby v jeho dějinách. Jedním způsobem bylo, že Histiaeus oholil jednomu služebníkovi hlavu a na jeho pleš napsal zprávu. Poté počkal až jeho služebníku dorostou vlasy zpět a poté ho poslal se zprávou, že až dorazí ať řekne jeho příteli, aby mu oholil hlavu. Druhým způsobem bylo, že Démaratus poslal napsal přímo na dřevěnou podložku voskové tabulky před tím než na ni nanesl povrch z čelího vosku.

Teď si ukážeme jednoduchý moderní příklad jak můžeme skrýt text v obrázku pomocí toolu steghide.

Instalace steghide
user:~$ sudo apt update
[sudo] password for user:
user:~$ sudo apt-get install steghide
File encryption

Na tento příklad budeme potřebovat nějaký textový file a obrázek. Jak můžete vidět já mám tetový file text a obrázek cyberdrill.

user:~$ ls
cyberdrill.jpg text

Tak a teď použíjeme command steghide. Jak můžete vidět na příkladu, tak program se vás zeptá na passphrase. Tento passphrase si zapamatujte, jelikož ho budete potřebovat při extrahování souboru z obrázku. Nebo také můžete stisknout Enter aniž by jste zadávali passphrase.

user:~$ steghide embed -ef text -cf cyberdrill.jpg
Enter passphrase:
Re-Enter passphrase:
embedding "text" in "cyberdrill.jpg"... done

V tuto chvíli jste skryli soubor text do obrázku cyberdrill.

File Extraction

Teď víme, že v obrázku cyberdrill je ukrytý file se zprávou. Aby jsme zjistili jaký je obsah této zprávy použijeme zase tool steghide, ale teď s extract místo embed. Jak můžete vidět tak zde máme je obrázek cyberdrill.

user:~$ ls
cyberdrill.jpg

Tak poté co spustíme příkaz steghide extract, tak se nás to zeptá na passphrase. V tomto případě jsem použil cyber. Jakmile program dokončí extrahování, tak můžeme vidět že se nám objevil nový soubor pod názvem text. A můžeme si ho dokonce vypsat.

user:~$ steghide extract -sf cyberdrill.jpg
Enter passphrase:
wrote extracted data to "text".
user:~$ ls
cyberdrill.jpg text
user:~$ cat text
ahoj

One-Time Pad

One-time pad je šifrovací technika, kterou nelze prolomit, ale vyžaduje použití jednorázového předem sdíleného klíče. Takovýto klíč není menší než vaše zpráva. Tak a teď si jednoduše vysvětlíme jak funguje one-time pad technika. Aby byla naše zpráva zašifrovaná, tak se vezme náhodný klíč, který se poté spáruje s naší zprávou. V tuto chvílí co je náš text spárován s klíčem, tak se každý bit nebo znak naší zprávy zašifruje pomocí kombinace bitů či znaků z klíče pomocí modulárního sčítání.

První, kdo popsal systém one-time padu byl Frank Miller a to, aby zabezpečil telegrafické zprávy. Poté Gilbert Vernam vynalezl a nechal si také patentovat šifru, která byla založena na technologii teleprinter. Neboli každý znak ve zprávě byl kombinován se znakem na děrné pásce.

Teď si popíšeme na jednoduchém případě jak one-time pad funguje. Představte si, že chcete poslat zprávu svému příteli. Aby vše fungovalo jak má, tak oba musíte mít dva identické bloky papíru s náhodnou posloupností písmen. Tak teď už máte skoro vše co je třeba jediné co vám chybí je mít domluveno jakou stránku z daného bloku budete používat. Takže vezmete svojí zprávu a danou stránku z bloku a začnete kombinovat jedno písmeno z bloku a jedno z vaší zprávy. V tomto případě kombinujete klíč neboli stránku z bloku a vaši zprávu pomocí modulárního sčítání. V podstatě se jedná o standardní Vigenérovu šifru. Takže se sčítají pomocí modulo 26. Řekněme, že chceme zašifrovat slovo cyberdrill pomocí této skupiny FRXJWMATKC. Takovéto sečtení vypadá následovně.

C[3] Y[24] B[2] E[5] R[16] D[4] R[16] I[9] L[12] L[12]
F[6] R[16] X[23] J[10] W[22] M[13] A[1] T[20] K[11] C[3]
_________________________________________________
[9][40][25][15][38][17][17][29][23][15]
KEY + ZPRÁVA
_________________________________________________
[9][14][25][15][12][17][17][3][23][15]
MODULO 26
_________________________________________________
I[9] N[14] Z[25] O[15] L[12] Q[17] Q[17] C[3] X[23] O[15]
INZOLQQCXO

Takže zašifrovaná zpráva je INZOLQQCXO.

Jestli budete chtít takovou zprávu rozšifrovat, tak budete potřebovat klíč, který je v tomto případě FRXJWMATKC. Ale teď místo sčítání použijeme odčítání.

    I[9] N[14] Z[25] O[15] L[12] Q[17] Q[17] C[3] X[23] O[15]
-   F[6] R[16] X[23] J[10] W[22] M[13] A[1] T[20] K[11] C[3]
______________________________________________________
[3][-2][2][5][-10][4][16][-17][12][12]
ZPRÁVA - KEY
______________________________________________________
[3][24][2][5][16][4][16][9][12][12]
MODULO 26
______________________________________________________
C[3] Y[24] B[2] E[5] R[16] D[4] R[16] I[9] L[12] L[12]
CYBERDRILL

Jak můžete vidět tak jsem se z šifrované zprávy INZOLQQCXO dostali na naši originální CYBERDRILL.

Základní termíny

Kryptologie

Kryptologie je věda, která se zabývá tvorbou a prolamováním šifer. Jinak řečeno kryptologie je studium kódů ať už se jedná o jejich vytváření nebo řešení. Do kryptologie můžeme zahrnout jak kryptografii tak i kryptoanalýzu.

Kryptografie

O kryptografii jsme si již dříve něco řekli, ale pro zopakování. Kryptografie je nějaká studie o technikách či metodách zabezpečení zprávy. Jak jsme si již řekli samotné slovo kryptografie pochází z řeckého slova kryptos, které znamená skrytý.

Kryptoanalýza

Můžeme říci, že kryptoanalýze je úplným opakem kryptografie. Neboli kryptoanalýze je věda, která se zabývá získánim zašifrovaných dat aniž bychom měli přístup ke klíči. Samotné slovo kryptoanalýza pochází z řeckého kryptos což znamená skrytý a z analýein, které po překladu je uvolnit.

Ciphertext

V kryptografii je ciphertext neboli šifrovaný text výsledkem šifrování. Díky algoritmu, pomocí kterého šifrujeme naši zprávu nám vzniká ciphertext. Takže ve výsledku ciphertext je zašifrovaná nebo zakódovaná informace, která má podobu naší zpravý, kterou chceme posílat. Tento zašifrovaný text není srozumitelný jak pro člověka tak i pro počítač bez příslušné šifry nebo klíče.

Plaintext

V kryptografii je plaintext neboli prostý (otevřený) text je nezašifrovaný text. Neboli tak jak daný text napíšeš tak i zůstane bez jakéhokoliv šifrování. Když se bavíme o plaintextu tak se může říct, že se jedná o vstup, který čeká než bude zašifrovaný.

Keyspace

V kryptografii je keyspace množina všech platných, dostupných nebo rozdílných klíčů, které jsou dané kryptosystémem. Kryptosystémy mají často zavedené pravidla o omezení klíčů. Když si vezmeme jednoduchou Caesarovu šifru. Tam je daný posun podle velikosti zadaného čísla. Ano můžeme říci, že když dáme posun o 100 míst, tak se dané písmeno změní na to, které je na pozici 100. Ale dobře víme, že naše abeceda, která je bez háčku a čárek se skládá max z 26 písmen. Takže když odečteme zbytečný trojnásobek 26 neboli 78, tak nám vyjde, že se dané písmeno posune o 22 pozic.

Key

V kryptografii je key nějaký řetězec čísel nebo písmen, pomocí kterého můžeme zakódovat nebo dekódovat zprávu. Podle toho jakou používáme metodu tak se nám také mění použitý klíč. Neboli u Caesarovi šifry je klíčem číslo, zatímco u Vigenerovi šifry se jedná o náhodný text v délce zprávy, kterou chceme zašifrovat.

Confidentiality

Confidentiality chrání před jakýmkoliv neoprávněným přístupem nebo zneužitím informací. Takové informace jsou často uloženy v nějakých systémech a může se jednat o různé obchodní informace, které by mohl někdo zneužít.

Integrity

Integrity chrání před jakoukoli neoprávněnou změnou informací. Toto zaručuje přesnost a správnost dat. Aby jsme si zajistili integritu, tak je potřeba kontrolovat nejen přístup na daných úrovních v systému, ale také, aby uživatelé mohli měnit pouze ty informace, ke kterým mají přístup.

Authenticity

Authenticity vám slouží k tomu, abyste se ujistili o tom. že komunikujete právě s tím s kým chcete. K jejímu dosažení lze použít různé techniky jako pomocí předem sdílených klíčů.

Symetrické šifrování

V symetrickém šifrování máme algoritmy také známé jako symmetric-key algorithms. Takovéto algoritmy používají stejné klíče jak pro šifrování tak i pro dešifrování. Takovéto klíče jsou často identické.

Typy symetrického šifrování

Když šifrujeme pomocí symetrického klíče, tak se často používají proudové nebo blokové šifry.

Proudové šifry

Proudová šifra používá symetrické klíče, kde se čísla zprávy, kterou chceme zašifrovat kombinují s náhodným proudem čísel šifry. V tomto případu se každá číslice naší zprávy šifruje postupně s příslušnou číslicí z klíče. Tímto vzniká proud zašifrovaných číslic v šifrovaném textu.

Blokové šifry

Bloková šifra v kryptografii je algoritmus, který pracuje s skupinou bitů, které mají danou pevnou délku. Tuto skupinu bloků můžeme také nazvat bloky. Tyto bloky jsou často určeny jako základní komponenty při návrzích mnoha kryptografických programů. Také jsou často používaný k šifrování velkého množství dat. Jako příklady blokových šifer jsou AES, DES a 3DES.

Data Encryption Standard(DES)

Tento algoritmus používá k šifrování symetrický klíč. I přestože díky své délce, která je 56 bitů je nebezpečný, tak měl velký vliv na vývoj kryptografie. Tento standard byl poté nahrazen AES.

Advanced Encryption Standard(AES)

AES je normovaný algoritmus používaný pro šifrování dat. Jak jsme si již řekli jedná se o symetrickou blokovou šifru, která dešifruje a šifruje stejným klíčem data, která jsou rozděleny do bloků pevných délek. Tento standard nahradil dříve používanou DES.

Triple Data Encryption Standard(3DES)

3DES je jako předcházející dva algoritmy bloková šifra, která používá symetrické klíče. Ale pozor zde se na každý blok aplikuje třikrát algoritmus DES. Bohužel jak už jsme si řekli před tím tak délka DES je 56 bitů, která není bezpečná. I proto DES a 3DES bylo nahrazeno bezpečnějším AES.

Asymetrické šifrování

Asymetrické šifrování narozdíl od Symetrického používá dvojici klíčů. A to tato dvojice se vždy skládá z veřejného klíče a soukromého klíče. Když se jedná o veřejných klíč, tak je jedno kdo ho vidí naproti tomu u soukromého klíče je je úplně naopak. Ten nesmí znát nikdo jiný než vlastník. Neboli veřejný klíč se může šířit jak chce, ale soukromý klíč by měl zůstat znám jen vlastníkovi.

Takže když máte veřejný klíč, tak jeho pomocí můžete zašifrovat danou zprávu. Ale tato zpráva bude dešifrována jen pomocí soukromého klíče příjemce. Neboli můžeme říci, že veřejný klíč slouží jen pro zašifrování zprávy a soukromý pro její dešifrování. Takže v tomto případě když si posíláte zprávu, která je nějak zašifrovaná, tak při tom není třeba sdělovat jak tuto zprávu dešifrovat, čímž se vyhýbáme výměně klíčů. A toto je právě jedna z výhod asymetrického šifrování.

Ale aby bylo možné pomocí jednoho klíče zašifrovat zprávu a pomocí druhého dešifrovat, tak tyto klíče musí být nějakým způsobem matematicky svázané. Kdyby jsme to to hodili do rovnice s tím že veřejný klíč je například e a dešifrovací klíč je d. Tak by to mohlo vypadat následovně.

Šifrování

c = f(m, e)

Dešifrování

m = g(c, d)

Neboli c - zašifrovaná zpráva se rovná funkci, která vezme váš m - plaintext a e - veřejný klíč. V druhém případě neboli dešifrování to je tak, že m - plaintext dosáhneme díky funkci, která vezme c - zašifrovanou zprávu a d - soukromý klíč a pomocí klíče dešifruje zašifrovanou zprávu.

Zástupci asymetrického šifrování

Zde si ukáže dva zástupce asymetrického šifrování a to RSA a DSA

RSA

RSA toto jméno se skládá z iniciálu tří autorů a to Ronalda Lorina Rivesta, Adia Shamira a Leonarda Maxe Adlemana neboli RSA. Jedná se o úplně první algoritmus, který byl vhodný jak pro šifrování tak i pro podepisování. Tento algoritmus je v současnosti nejvíce rozšířeným. I díky své minimální délce klíče se počítá za bezpečný. Tato délka je v nynější době 2048 bitů.

Digital Signature Algorithm(DSA)

DSA je americký vládní standard pro digitální podpis. Tento algoritmus byl navržen americkým institutem NIST. A to aby mohli použít jejich Digital Signature Standard. Tento algoritmus je velmi podobný algoritmu ElGama a je založen na problematice výpočtu diskrétního logaritmu.

Vytváření klíčů

Aby byl vytvořen klíč, tak je třeba dosáhnout dvou fází. První fázi je vybrání správných parametru. Takže se začne vybráním hashovací funkce jako je SHA-1. Více o hashování si můžete přečíst v kapitole Crackování hesel. Dále se rozhoduje o parametrech, které určují délku klíče. Tyto parametry jsou L a N. Délka N musí být alespoň stejně velká, jako delka použité hashovací funkce. A dále L, to se vybere prvočíslo p, které splňuje podmínku, že p - 1 je násobek q. A poté nám zbývá už jen vybrat g. Vybere se g, jehož multiplikativní modulo p je rovno q. Soukromý klíč x se vybírá náhodně v rozsahu mezi 0<x<q. A veřejný klíč y se poté spočítá pomocí y = g^x modulo(p).

Encrypting a Decrypting v terminále

Instalace GPG

Aby jste nainstalovali tool gpg, tak budete potřebovat tyto dva příkazy.

user:~$ sudo apt-get install gnupg
user:~$ sudo apt-get install kgpg

Generování klíčů

Jak můžete vidět pomocí gpg, tady generujeme klíč.

user:~$ gpg --full-generate-key
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:

(1) RSA and RSA (default)

(2) DSA and Elgamal

(3) DSA (sign only)

(4) RSA (sign only)

Your selection?

Zde můžete vidět, že se nás to ptá jaký typ klíče chceme. Ja v tomto případě budu pokračovat s možností 1(default).

Your selection? 1

RSA keys may be between 1024 and 4096 bits long.

What keysize do you want? (3072)

Requested keysize is 3072 bits

Please specify how long the key should be valid.

0 = key does not expire

<n> = key expires in n days

<n>w = key expires in n weeks

<n>m = key expires in n months

<n>y = key expires in n years

Key is valid for? (0)

Dále se nás to zeptalo na délku klíče. Zde stačí stisknout enter automatický request bude 3072 bitů. Dále se vás to zeptá na to, jak dlouho bude tento klíč platný.


Key is valid for? (0) 1y

Key expires at Mon Feb 13 18:36:39 2023 CET

Is this correct? (y/N) y



GnuPG needs to construct a user ID to identify your key.



Real name: Useros User

Email address: [email protected]

Comment:

You selected this USER-ID:

"Useros Use <[email protected]>"



Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

Dále můžete vidět, že jsem se rozhodl o platnosti jednoho roku. Dále se vás to zeptá na váš Email a Jméno. Dokonce můžete vložit jakýsi komentář, pokud chcete.

Teď se vás to zeptá na passphrase. Tento passphrase si zapamatujte.

A pozor tento daný passphrase musí být alespoň 8 znaků dlouhý a mít v sobě jedno číslo. Já zde použiju cyberdr1ll. To že jste byl úspěšný poznáte na první pohled.

Zdostupnění veřejného klíče

Bez ohledu na to, zda jste odesílatel nebo příjemce, budeme se zabývat jedním způsobem, jak zpřístupnit svůj veřejný klíč druhé straně a to odesláním veřejného klíče příjemci jako soubor.

Vzpomínáte si na e-mail, který jste použili k vytvoření páru klíčů? Já v tomto případě použil [email protected]. Poté co spustíte následující příkaz tak se vám vytvoří soubor s veřejným klíčem.

user:~$ gpg --armor --output mypubkey.gpg --export [email protected]

user:~$ ls

mypubkey.gpg

Váš veřejný klíč by měl vypadat nějak takto.

-----BEGIN PGP PUBLIC KEY BLOCK-----



mQGNBGIJQ+YBDACtisCbAF4weHpsf/XTAhSPeXrHBNtThZXWFlJXzpvvFmw4RCI7

mxY2IlUN7ymiWfzR0KFldJHFnl441hi17cL8RB6gsJ+1AzKJ64dAYYTE87SHp/Cd

0+NWSVyZGZN+EKYB/H59rakKZvTbucx3qG/EF0OvDfVVK64eUcVeivpBY/IaVbYR

UV+sIvQBKkGtqxAFX29AMl8UxHxvUbO5Fds4zBQq8WUkHTLR8rmhU1tPCZgWgo3J

………………………………………………………Zbytek veřejného klíče……………………………………………………



………………………………………………………Konce veřejného klíče ……………………………………………………

Tak a teď můžete poslat tento soubor vaše příteli nebo někomu s kým chcete komunikovat.

Encrypting Files

Tak a teď budeme posílat soubor Userovi. Soubor jménem tajnaZprava.

Volba --encrypt říká to, že soubor bude zašifrován. Volba --sign říká, aby byl soubor podepsán vašimi údaji. Volba --armor říká, aby se vytvořil soubor ASCII. Za parametrem -r recipient neboli příjemce musíme dát email osoby, které soubor posíláte.

user:~$ gpg --encrypt --sign --armor -r [email protected] tajnaZprava
user:~$ ls
mypubkey.gpg tajnaZprava tajnaZprava.asc

A jak můžete vidět tak po spuštění se nám vytvořil soubor tajnaZprava.asc. Tento soubor je zcela nečitelný a dešifrovat jej může jen ten kdo má vaše klíče. V tomto případě má tyto klíče Useros.

Decrypting Files

Řekněme, že nám Useros poslal zašifrovaný soubor s názvem tajnaZprava.asc. Tento soubor můžeme jednoduše dešifrovat pomocí volby --decrypt. Tím pádem přesměrujeme soubor dešifrovanou zprávu do souboru jménem desifrovano.txt. Všeho docílíme pomocí tohoto příkazu.

user:~$ gpg --decrypt tajnaZprava.asc > desifrovano.txt

gpg: encrypted with 3072-bit RSA key, ID 1B2BD303F450FAF8, created 2022-02-13

"Useros User <[email protected]>"

gpg: Signature made Sun Feb 13 19:29:38 2022 CET

gpg: using RSA key 3F79768343C3777FC2EF837ED938A2BC13F83A5D

gpg: Good signature from "useros <[email protected]>" [ultimate]

user:~$ ls

desifrovano.txt mypubkey.gpg tajnaZprava tajnaZprava.asc

user:~$ cat desifrovano.txt

Hele toto je tajna zprava

Jak vidíte vše se nám podařilo dešifrovat. A dokonce jsme si pomocí příkazu cat mohli přečíst obsah dešifrovaného souboru desifrovano.txt.

results matching ""

    No results matching ""