Asymetrické šifry

Asymetrická kryptografie je také známá jako kryptografie s veřejným klíčem. Je to skupina kryptografických metod, ve kterých se pro šifrování a dešifrování používají odlišné klíče, což je základní rozdíl oproti symetrické kryptografii, která používá k šifrování i dešifrování jediný klíč.

Umožňuje tak zajistit nejen důvěrnost (znemožnit čtení nepovolané osobě), ale též zajistit autenticitu (identifikaci autora zprávy pomocí veřejného klíče, viz elektronický podpis) a nepopiratelnost zprávy (zprávu mohl vytvořit jen vlastník privátního klíče).

Šifrovací klíč pro asymetrickou kryptografii sestává z dvou částí:

  • jedna část se používá pro šifrování zpráv (a příjemce zprávy ani tuto část nemusí znát),

  • druhá pro dešifrování (a odesilatel šifrovaných zpráv ji zpravidla nezná).

Ten, kdo šifruje, nemusí s dešifrujícím příjemcem zprávy sdílet žádné tajemství, čímž eliminují potřebu výměny klíčů.

Nejběžnější verzí asymetrické kryptografie je využívání tzv. veřejného a soukromého klíče. Veřejný (šifrovací) klíč majitel klíče volně uveřejní, a kdokoli jím může šifrovat jemu určené zprávy. Privátní (dešifrovací) klíč (tj. soukromý), majitel drží v tajnosti a pomocí něj může tyto zprávy dešifrovat. Tím je zajištěna důvěrnost.

Pokud majitel privátního klíče zašifruje nějakou zprávu tímto svým soukromým klíčem, je možné tuto zprávu dešifrovat pouze za pomocí druhého z páru klíčů, tedy veřejným klíčem majitele. Tim je zajištěna autenticita a nepopiratelnost zprávy.

Princip asymetrického šifrování a podepisování

Populární asymetrické algoritmy

  • RSA, ECC, ElGamal, DHKE, ECDH, DSA, ECDSA, EdDSA, Schnorr signatures, ...

RSA

RSA (iniciály autorů Rivest, Shamir, Adleman) je šifra s veřejným klíčem. Jedná se o první algoritmus, který je vhodný jak pro podepisování, tak šifrování. Používá se i dnes, přičemž při dostatečné délce klíče je považován za bezpečný.

Bezpečnost RSA je postavena na předpokladu, že rozložit velké číslo na součin prvočísel (faktorizace) je velmi obtížná úloha. Z čísla n = pq je tedy v rozumném čase prakticky nemožné zjistit činitele p a q, neboť není znám žádný algoritmus faktorizace, který by pracoval v polynomiálním čase vůči velikosti binárního zápisu čísla n. Naproti tomu násobení dvou velkých čísel je elementární úloha.

Video

RSA pomocí SSH

Spustíme příkaz pro generování klíče:

$ ssh-keygen -t rsa -C "sysadmin@eduxo.lab"

Program velmi rychle vygeneruje klíče a ptá se, kam mají být uloženy. Doporučuji ponechat standardní cestu. Stačí tedy stisknout enter.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sysadmin/.ssh/id_rsa):

Aby nebylo možné klíče jednoduše z našeho počítače zkopírovat a zneužít, jsou chráněny šifrováním. Pokud tedy někdo soubor získá, bude mu k ničemu. Přestože je možné nechat privátní klíč nezašifrovaný, rozhodně to nedoporučuji. Nechávejte tedy passphrase prázdné a zvolit libovolný řetězec znaků:

Enter passphrase (empty for no passphrase):

Výstup:

Your identification has been saved in /home/sysadmin/.ssh/id_rsa.
Your public key has been saved in /home/sysadmin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Z+06txb2wj0YH3ZlwU5F10IX0Z+m2U4eV7+bIyVPqnQ

Tím jsme ukončili tvorbu klíčů. Oba jsou uloženy ve vašem domovském adresáři a v podadresáři .ssh. Mají logické názvy id_rsa a id_rsa.pub. Veřejná část je označena příponou .pub a ta jediná smí opustit váš počítač.

Vygenerovaný privátní klíč si nyní můžeme zobrazit:

$ cat /home/sysadmin/.ssh/id_rsa

Výstup:

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA7wh7vY0zJylX0knuswMJMXVLiHl3sNPqPcW/n8K37FS+B7RHDSmN
...
y0dugaCrXkQMTOFfOUnSahBYIag2CAzIo8wyUheITEvHwpp9C0ICwCNzC32WL8kbDba06b
qtyA7ncDcNCp1eDRXwAAACFqYXJvc2xhdi50aWhsYXJpa0BjaWNobm92YWJybm8uY3o=
-----END OPENSSH PRIVATE KEY-----

Vygenerovaný veřejný klíč si nyní můžeme zobrazit:

$ cat /home/sysadmin/.ssh/id_rsa.pub

Výstup:

ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDvCHu9jTMnKVfSSe6zAwkxdUuIeXew0+o9x
b+fwrfsVL4HtEcNKY1Eldxnf8+FJ+4viJnSOKbxdVLjOSPme8pTO4vtjoBK3cNh9v
2SvjjSEtA3A/w/lcq0YYUhegv9Csp2DuK89fqx5xcVhOM+D1o32AMLqFTNsKXJHpD
8JaxAJMoKNznnuxONviHEJHrpVS1kuJW5MeRMgZijJu/TE6CkX9GARGKrqjvAFTZx
1DcljHF86NvHMRQHnKS6jy/dJOYFEPwPwaw8lvdbCtpiUHw5eLm3ZjiNOm3NV/hhg
QVkOlv01Y4+L20gK5oLRmBgC2j7QmOj7rTZYhkMx/EiyJLp
sysadmin@eduxo.lab

RSA pomocí OpenSSL

Začneme tím, že si spustíme příkaz pro generování 2048 bitového RSA klíče:

$ openssl genrsa -aes256 -out private.pem 2048

Vygeneruje se nám 2048-bitový klíč RSA, zašifruje se heslem, které poskytnete, a zapíše je do souboru. Dále musíme extrahovat soubor veřejného klíče.

$ openssl rsa -aes256 -in private.pem -outform PEM -pubout -out public.pem

Tím jsme ukončili tvorbu klíčů. Oba jsou uloženy ve vašem domovském adresáři a mají logické názvy private.pem a public.pem. Veřejná část nese název public.pem a ta jediná smí opustit váš počítač.

Vygenerované soubory si nyní můžeme zobrazit:

$ cat /home/sysadmin/private.pem

Výstup:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,D82E72AE4C5EFD54B71DAC71FD2EB9B8

mHGq1onejJ1XjEvVxpiQOkLuAyEpdw7ggvUJWh2+Zuv1vnmURJYPgIaZb26IkzQv
E3uP/N/M42gqVdlu17qccUE7+3xRu8R8/BcE3M1Fr3mmwhfb0VzjpUE/kv3QEQQB
...
FBdFJ8SdQli5nMl1oq1YeFB0FxbF3UeRQkKtCoDyLHDP0XbfNkqyLf+yDGs3fPp/
k+hll8EqU69jQP0ey/rPaPtTGz2G0hhZoYsYaVhyMbQukK/doRhtpKFo+Kp6RI27
-----END RSA PRIVATE KEY-----
$ cat /home/sysadmin/public.pem

Výstup:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAypz/qK2fQrPs3xUYoJCZ
6ddAp4ZhnlbcjFKfKgzHX2K4dYYvMQC4oa0HdV8UEdqcxQWH4kSHRRQ26CAWHO1k
5jEL9hrEv2fNK1Qgqrl/qQYLg4YbyAmFJLsOggDFuoMX8Fu9KoImIXkb2Pxrt9Yt
A2vYgVePUb0TrHsisWM75lMbzQBkIzXJsc1G+bcd7r0Jt3ILx3jyIgmpQS3bcc5T
CCiBo6uMJmsyYFdQLzXWfm3hGwnYQ/mBvSaAjunwvDshtgGa0V3pw3+lDspPEHHl
cFfSuA5rft+NueSMm3C115v1vLy2kyK++FBnaoUKmCoJZ3o+wFn0UszLFUa9x/f4
YQIDAQAB
-----END PUBLIC KEY-----

Použité zdroje