Openssl šifrování. OpenSSL: Jednoduché šifrování veřejným klíčem. Šifrování jednoho souboru

Nástroje jako OpenSSH a OpenSSL netřeba představovat. To jsou věční přátelé každého správce systému a mnoha pokročilých uživatelů. Ne každý však ví o jejich skutečné síle a schopnostech nashromážděných za roky vývoje. Dnes objevíte spoustu zajímavých způsobů, jak tyto programy používat.

OpenSSH

OpenSSH, které nahradilo děravý Telnet, je stále na prvním místě mezi systémy dálkové ovládání díky své bezpečnosti a snadnému použití. Pochopí ho každý, i ty nejchromovanější konvičky, ale drtivá většina uživatelů využívá minimum jeho možností. Přeskočme příběhy o klíčích, přesměrování portů, proxy a dalších užitečných, ale dobře známých technikách a podívejme se na skutečně zajímavé a nepříliš obvyklé způsoby použití tohoto nástroje.

INFO

S úplný seznam Příkazy OpenSSL lze nalézt pomocí následujících parametrů: list-standard-commands, list-message-digest-commands, list-cipher-commands.

Takže trik číslo jedna je více připojení. OpenSSH je schopen obsluhovat mnoho současných připojení ke stejnému počítači. Uživatelé obvykle jednoduše spustí příkaz a počkají na jeho dokončení, než spustí další. Naštěstí lze tento problém snadno obejít rozdělením jednoho připojení do více relací. Stačí přidat následující řádky do vaší konfigurace ssh (~/.ssh/config):

ControlMaster auto ControlPath ~/.ssh/mux_%h_%p_%r

Ke stejnému serveru můžete vytvořit tolik připojení, kolik uznáte za nutné, a nebudete muset ztrácet čas opětovnou autentizací.


Trik číslo dvě je přes proxy připojení. Řekněme, že nemůžete vytvořit připojení k SSH serveru přímo, ale můžete k tomu použít jiného hostitele, ke kterému máte také SSH přístup. Přidejte do své konfigurace následující řádky:

ForwardAgent ano Hostitel HostName host.com ProxyCommand ssh proxy-host.com \ netcat -q 600 %h %p

Příkaz ssh host vytvoří připojení k serveru host.com prostřednictvím serveru proxy-host.com.

Trik číslo tři jde nad rámec izolace HTTP. Mnoho organizací nejen odřízne nežádoucí provoz, ale také nutí uživatele k přístupu na internet pouze pomocí protokolu HTTP. Tuto nespravedlnost lze snadno obejít pomocí vývrtky (www.agroman.net/corkscrew/), která dokáže tunelovat SSH provoz přes HTTP. Stačí jej nainstalovat na váš počítač a do konfigurace přidat následující řádky (kde proxy.com a 80 jsou adresa externího HTTP proxy a jeho port):

Host * Vývrtka ProxyCommand proxy.com 80 %h %p

Nyní budou všechna připojení procházet přes zadaný HTTP proxy.

Trik číslo čtyři - test šířku pásma sítí. Pro otestování rychlosti připojení není nutné instalovat specializovaný software pv utility a stačí staré dobré SSH:

$ sudo apt-get install pv $ ano | pv | ssh host.com "cat > /dev/null"

Trik číslo pět - vzdálená analýza síťový provoz. Téměř každý systém UNIX má síťový sniffer tcpdump, ale čtení jeho protokolů je docela únavné. Možnosti OpenSSH pomohou zjednodušit analýzu provozu:

$ssh [e-mail chráněný] tcpdump -w – "port !22" \ | wireshark -k -i -

Nyní bude veškerý provoz procházející přes host.com viditelný v grafickém okně wireshark na vašem počítači.

Trik číslo šest – přenos souborů nízkou rychlostí. Někdy je nutné přenést velký počet soubory na vzdálený počítač, ale udělejte to tak, aby proces nenarušoval síť. V tomto případě můžete použít nástroj cstream:

$ sudo apt-get install cstream $ tar -cj /backup | cstream -t 512k | \ssh hostitel "tar -xj -C /backup"

Trik číslo sedm je mít vždy otevřenou SSH relaci. Uživatelé notebooků, jejichž připojení k síti nemusí být konstantní, musí restartovat klienta SSH pokaždé, když se síť objeví, a při ztrátě připojení jej ukončit. Tomu se můžete vyhnout pomocí nástroje autossh, který zachová iluzi trvalého připojení k serveru a obnoví připojení, když je síť dostupná:

$ sudo apt-get install autossh $ autossh -M50000 -t server.example.com\"screen -raAd mysession"

Trik číslo osm je spustit příkaz na několika serverech současně. Komentáře nejsou potřeba:

$ echo "uptime" | pee "ssh host1" "ssh host2" \ "ssh host3"

Trik číslo devět – vzdálené porovnání souborů. Často je nutné porovnat místní a vzdálenou verzi konfigurace, ale kopírování souborů tam a zpět je nepohodlné a časově náročné. V tomto případě můžete použít další příkaz:

$ ssh uživatel@hostitel kočka /cesta/k/vzdálenému/souboru | \diff /cesta/k/local/souboru -

Totéž lze provést pro dva soubory umístěné na různé servery:

$diff<(ssh host1 cat /etc/apt/sources.list) \ <(ssh host2 cat /etc/apt/sources.list)

cpu0: RNG AES

Výsledky benchmarku kryptografických nástrojů zabudovaných do CPU platformy VIA Eden (procesorové instrukce pro práci s blokovým symetrickým šifrovacím algoritmem AES):

% rychlost openssl -elapsed -evp aes-256-cbc typ 16 bajtů 64 bajtů256 bajtů 1024 bajtů 8192 bajtů aes-256-cbc 21780,33 k79591,78 k 198578,071 k 5057k

Trik číslo 10 - současné prohlížení protokolů z několika strojů. Pomocí multitailu a SSH můžete snadno prohlížet protokoly ze dvou serverů současně:

$ sudo apt-get install multitail $ multitail -l "ssh host1 "tail -f \ /var/log/apache2/error.log""" -l "ssh host2 \ "tail -f /var/log/apache2/error. log""

Trik číslo 11 - kopírování souborů z jednoho vzdáleného počítače na druhý přes místní. Pokud dva vzdálené počítače nemohou vzájemně komunikovat, lze mezi nimi přenášet soubory pomocí vašeho počítače jako mezičlánku:

$ ssh root@host1 "cd /adresář && tar -cf – ." |\ ssh root@host2 "cd /dir && tar -xf -"

Trik číslo 12 - zkopírování výstupu vzdáleného příkazu do schránky. Často potřebujete zkopírovat výstup vzdáleného příkazu do schránky, abyste jej mohli vložit do e-mailu, příspěvku na fóru atd. Nejjednodušší způsob, jak toho dosáhnout, je použít nástroj xclip:

$ ssh user@host cat /file.txt | xclip

Trik číslo 13 - synchronizace času pomocí SSH. Pokud zařízení nemá přístup k serveru NTP nebo na něm není nainstalován klient NTP, můžete čas mezi počítači synchronizovat následovně:

# date --set="$(ssh uživatel@datum serveru)"

Trik číslo 14 - instalace balíčků ze vzdáleného počítače na místní. Často je nutné synchronizovat dva stroje, aby měly nainstalovanou stejnou sadu balíčků. To je obtížné pomocí standardních metod, ale pomocí SSH je to stejně snadné jako loupání hrušek:

# ssh remotehost "dpkg --get-selections" | \dpkg --set-selections && dselect install

Trik číslo 15 - vzdálený snímek obrazovky. Obraz X serveru můžete velmi snadno získat ze vzdáleného počítače pomocí standardního grafického balíčku ImageMagick:

# ssh user@host "DISPLAY=:0.0 import -window \ root -format png -" | zobrazení -formát png -

Trik číslo 16 – zrychlení přenosu dat. Pokud se stroje, se kterými je spojení navázáno, nacházejí ve známé zabezpečené síti (například v kanceláři nebo doma), může být přenos dat pomocí SSH poněkud rychlejší, pokud použijete méně silný šifrovací algoritmus. Chcete-li to provést, přidejte do konfiguračního souboru následující řádky:

Hostitel hostitel.com Šifry arcfour256 MAC [e-mail chráněný]

Trik číslo 17 - výstup zvuku ze vzdáleného počítače na místní. Někdy chcete získat zvuk spolu s obrázkem plochy vzdáleného počítače. To se provádí pomocí banálního dd:

$ dd if=/dev/dsp | ssh -c arcfour -C \ uživatel@hostitel dd of=/dev/dsp

Trik číslo 18 – spuštění lokálního skriptu na vzdáleném počítači. Často potřebujete spustit skript na vzdáleném počítači, ale není třeba jej tam kopírovat, stačí spustit následující jednoduchý příkaz:

$ ssh -T uživatel@hostitel< script.sh

OpenSSL

OpenSSL je systém zabezpečení dat a certifikace, který byl vyvinut v reakci na vytvoření protokolu Secure Sockets Layer (SSL) společností Netscape. Na rozdíl od všeobecného přesvědčení OpenSSL vůbec není nástrojem pro implementaci protokolu SSL a může vykonávat mnoho různých funkcí, včetně správy klíčů a certifikátů, výpočtu hashů atd. Zde je jen částečný výčet schopností tohoto kryptografického kombinátu:

  • vytváření a správa klíčů RSA a DSA (příkazy rsa, dsa, dsaparam);
  • vytváření certifikátů formátu x509, generování požadavků na certifikaci, obnova (příkazy x509, req, ověřit, ca, crl, pks12, pks7);
  • symetrické a asymetrické šifrování dat (příkazy enc, rsautl);
  • výpočet hashů (příkaz dgst);
  • práce s S/MIME (příkaz s/mime).

OpenSSL lze také použít k testování SSL serverů a klientů pomocí speciálních příkazů s klient/ů serveru a pro testování rychlosti různých algoritmů (speed command).

O práci s balíkem OpenSSL jsme psali více než jednou, takže nebudeme uvažovat o standardních příkladech jeho použití, jako je vytváření hashů a certifikátů, ale okamžitě přejdeme k vážnějším trikům.


Čas jsou peníze

Jednou ze zajímavých funkcí OpenSSL je, že dokáže porovnávat použité algoritmy a rychlost navazování SSL připojení. K tomu je určen standardní příkaz s_time. Chcete-li vyhodnotit rychlost navázání připojení SSL, musíte jej použít v příkazu openssl:

$ openssl s_time -connect gmail.com:443 \ -www /test.html -nových 103 připojení za 0,75 s; 137,33 připojení/sec. uživatele, přečtených bajtů 42 436 103 připojení za 31 reálných sekund, 412 přečtených bajtů na připojení

Totéž lze provést pomocí nejrobustnějších algoritmů:

$ openssl s_time -ssl3 -cipher HIGH \ -connect gmail.com:443 -www / -nových 99 připojení za 0,73 s; 135,62 připojení/uživatelská sekunda, přečtení bajtů 40 788 99 připojení za 31 reálných sekund, 412 přečtených bajtů na připojení

Tyto dva příkazy umožňují určit maximální propustnost serveru SSL. Ale ještě zajímavějším způsobem je otestovat všechny podporované algoritmy. K tomu se budeme muset uchýlit ke skriptování:

IFS=":" pro c v $(openssl šifry -ssl3 RSA); do echo $c openssl s_time -connect host:443 -www / -new \ -time 10 -cipher $c 2>&1 | grep bytes echo hotovo

Tento příkaz umožňuje měřit rychlost navazování SSL připojení pomocí různých šifrovacích algoritmů, které lze použít například pro vyladění SSL serveru. Pokud ještě neexistuje SSL server jako takový, lze jej snadno emulovat pomocí samotného OpenSSL. Na serveru spustíme server OpenSSL:

Existuje mnoho situací, kdy potřebujete zašifrovat konkrétní soubor nebo složku. Například pokud jsou data přenášena přes otevřené kanály nebo uložena na externím médiu. Mnoho lidí (včetně mě) používá truecrypt, ale hlavním účelem tohoto programu je práce se šifrovanými oddíly, takže to v tomto případě není příliš dobré.

OpenSSL je pro takové úkoly docela vhodné - spolehlivé multiplatformní řešení. OpenSSL podporuje různé šifrovací algoritmy, navíc je standardně nainstalován na mnoha operačních systémech a instalace na jiných je snadná.

Níže jsou uvedeny základy používání symetrického a asymetrického šifrování v OpenSSL a také několik skriptů, které zjednodušují asymetrické šifrování pomocí jednorázového klíče.

Nejjednodušším způsobem ochrany dat pomocí OpenSSL je symetrické šifrování. Následující příkazy zašifrují a dešifrují soubor documents.zip pomocí algoritmu AES s délkou klíče 256 bitů:

Openssl enc -aes-256-cbc -salt -in documents.zip -out documents.enc
openssl enc -d -aes-256-cbc -in documents.enc -out documents.zip

Problém s těmito příkazy může být v tom, že vyžadují heslo. Jsou situace, kdy je to nežádoucí. Například automatické zálohování/šifrování dat podle plánu nebo pokud jsou data šifrována jednou osobou a dešifrována jinou.

Právě pro takové případy bylo vynalezeno šifrování veřejným klíčem. Obecně platí, že budete muset vytvořit veřejný a soukromý klíč. První příkaz vygeneruje soukromý klíč private.pem, druhý vygeneruje veřejný klíč public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

Ve výsledku získáte dvojici klíčů RSA o délce 2048 bitů. Bohužel v systému RSA je velikost šifrovaných dat omezena velikostí klíče, takže nebude možné zašifrovat více než 2Kb dat. Existuje způsob, jak to obejít - informace se nejprve zašifrují symetrickým algoritmem (podobným tomu, který byl použit výše) pomocí jednorázového klíče. Tento jednorázový klíč je poté zašifrován veřejným klíčem. Během dešifrování je jednorázový klíč dešifrován soukromým klíčem. Více podrobností o tom již bylo velmi dobře napsáno v článku o Habrém.

S automatizací šifrování pomůže následující skript, jehož výstupem obdržíte jednorázový klíč a data (encrypt.sh) v zašifrované podobě:

FILENAME="$1"
PUBLICKEY="$2"
SESSIONKEY="$3"
RESULT="$4"

# Vygenerujte náhodný symetrický klíč
PASSIZE=30
if [ -c /dev/urandom ] ; pak
KEY=`head -c 30 /dev/urandom | openssl enc -base64`
jiný
KEY=`openssl rand -base64 30`
fi
export KLÍČ

# Šifrujte symetrický klíč pomocí veřejného klíče
openssl rsautl -encrypt -inkey "$PUBLICKEY" -out "$SESSIONKEY" -pubin<$KEY
EOF

# Zašifrujte soubor
openssl enc -aes-256-cbc -pass env:KEY -v "$FILENAME" -out "$RESULT"

Následující příkaz používá veřejný klíč public.pem k zašifrování souboru documents.zip. Vygeneruje zašifrovaný jednorázový klíč session.key a zašifrovaná data documents.enc:

./encrypt.sh documents.zip public.pem session.key documents.enc

Dešifrovací skript (decrypt.sh):

PRIVATEKEY="$1"
SESSIONKEY="$2"
ENCRYPTED="$3"
DECRYPTED="$4"

# Dešifrujte symetrický klíč pomocí soukromého klíče
KEY=` openssl rsautl -decrypt -inkey "$PRIVATEKEY" -in "$SESSIONKEY" `
export KLÍČ

# Dešifrovat soubor
openssl enc -aes-256-cbc -d -pass env:KEY -in "$ENCRYPTED" -out "$DECRYPTED"

Příkaz decryption používá soukromý klíč private.pem a jednorázový klíč session.key k dešifrování souboru documents.enc. Vygeneruje soubor documents.zip:

./decrypt.sh private.pem session.key documents.enc documents.zip

Jak vidíte, šifrování veřejným klíčem může být téměř stejně jednoduché jako symetrické šifrování. Existuje však ještě jednodušší způsob. K napsání tohoto příspěvku mě přiměl blog SbF₅. Jeho autor (nepochybně zkušenější v bash než já) napsal skript, který archivuje složku, zašifruje ji veřejným klíčem a vygeneruje další skript obsahující vše potřebné: jednorázový klíč, data i samotné příkazy k dešifrování. Kromě toho vám skript může vygenerovat pár klíčů RSA:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh složka public.pem > decrypt-folder.sh
chmod +x decrypt-folder.sh
./decrypt-folder.sh private.pem > folder.tar

V tomto příkladu jsme nejprve vygenerovali pár klíčů. Poté byla složka složky zašifrována do skriptu decrypt-folder.sh a poté dešifrována do archivu folder.tar. Možnou nevýhodou této metody je, že data v decrypt-folder.sh jsou uložena ve formátu BASE64, a proto se jejich velikost zvětšuje.

UPD Přesunuto na blog Information Security.

Existuje mnoho situací, kdy potřebujete zašifrovat konkrétní soubor nebo složku. Například pokud jsou data přenášena přes otevřené kanály nebo uložena na externím médiu. Mnoho lidí (včetně mě) používá truecrypt, ale hlavním účelem tohoto programu je práce se šifrovanými oddíly, takže to v tomto případě není příliš dobré.

OpenSSL je pro takové úkoly docela vhodné - spolehlivé multiplatformní řešení. OpenSSL podporuje různé šifrovací algoritmy, navíc je standardně nainstalován na mnoha operačních systémech a instalace na jiných je snadná.

Níže jsou uvedeny základy používání symetrického a asymetrického šifrování v OpenSSL a také několik skriptů, které zjednodušují asymetrické šifrování pomocí jednorázového klíče.

Nejjednodušším způsobem ochrany dat pomocí OpenSSL je symetrické šifrování. Následující příkazy zašifrují a dešifrují soubor documents.zip pomocí algoritmu AES s délkou klíče 256 bitů:

Openssl enc -aes-256-cbc -salt -in documents.zip -out documents.enc
openssl enc -d -aes-256-cbc -in documents.enc -out documents.zip

Problém s těmito příkazy může být v tom, že vyžadují heslo. Jsou situace, kdy je to nežádoucí. Například automatické zálohování/šifrování dat podle plánu nebo pokud jsou data šifrována jednou osobou a dešifrována jinou.

Právě pro takové případy bylo vynalezeno šifrování veřejným klíčem. Obecně platí, že budete muset vytvořit veřejný a soukromý klíč. První příkaz vygeneruje soukromý klíč private.pem, druhý vygeneruje veřejný klíč public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

Ve výsledku získáte dvojici klíčů RSA o délce 2048 bitů. Bohužel v systému RSA je velikost šifrovaných dat omezena velikostí klíče, takže nebude možné zašifrovat více než 2Kb dat. Existuje způsob, jak to obejít - informace se nejprve zašifrují symetrickým algoritmem (podobným tomu, který byl použit výše) pomocí jednorázového klíče. Tento jednorázový klíč je poté zašifrován veřejným klíčem. Během dešifrování je jednorázový klíč dešifrován soukromým klíčem. Více podrobností o tom již bylo velmi dobře napsáno.

S automatizací šifrování pomůže následující skript, jehož výstupem obdržíte jednorázový klíč a data (encrypt.sh) v zašifrované podobě:

FILENAME="$1"
PUBLICKEY="$2"
SESSIONKEY="$3"
RESULT="$4"

# Vygenerujte náhodný symetrický klíč
PASSIZE=30
if [ -c /dev/urandom ] ; pak
KEY=`head -c 30 /dev/urandom | openssl enc -base64`
jiný
KEY=`openssl rand -base64 30`
fi
export KLÍČ

# Šifrujte symetrický klíč pomocí veřejného klíče
openssl rsautl -encrypt -inkey "$PUBLICKEY" -out "$SESSIONKEY" -pubin<$KEY
EOF

# Zašifrujte soubor
openssl enc -aes-256-cbc -pass env:KEY -v "$FILENAME" -out "$RESULT"

Následující příkaz používá veřejný klíč public.pem k zašifrování souboru documents.zip. Vygeneruje zašifrovaný jednorázový klíč session.key a zašifrovaná data documents.enc:

./encrypt.sh documents.zip public.pem session.key documents.enc

Dešifrovací skript (decrypt.sh):

PRIVATEKEY="$1"
SESSIONKEY="$2"
ENCRYPTED="$3"
DECRYPTED="$4"

# Dešifrujte symetrický klíč pomocí soukromého klíče
KEY=` openssl rsautl -decrypt -inkey "$PRIVATEKEY" -in "$SESSIONKEY" `
export KLÍČ

# Dešifrovat soubor
openssl enc -aes-256-cbc -d -pass env:KEY -in "$ENCRYPTED" -out "$DECRYPTED"

Příkaz decryption používá soukromý klíč private.pem a jednorázový klíč session.key k dešifrování souboru documents.enc. Vygeneruje soubor documents.zip:

./decrypt.sh private.pem session.key documents.enc documents.zip

Jak vidíte, šifrování veřejným klíčem může být téměř stejně jednoduché jako symetrické šifrování. Existuje však ještě jednodušší způsob. K napsání tohoto příspěvku mě přiměl blog SbF₅. Jeho autor (nepochybně zkušenější v bash než já) napsal skript, který archivuje složku, zašifruje ji veřejným klíčem a vygeneruje další skript obsahující vše potřebné: jednorázový klíč, data i samotné příkazy k dešifrování. Kromě toho vám skript může vygenerovat pár klíčů RSA:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh složka public.pem > decrypt-folder.sh
chmod +x decrypt-folder.sh
./decrypt-folder.sh private.pem > folder.tar

V tomto příkladu jsme nejprve vygenerovali pár klíčů. Poté byla složka složky zašifrována do skriptu decrypt-folder.sh a poté dešifrována do archivu folder.tar. Možnou nevýhodou této metody je, že data v decrypt-folder.sh jsou uložena ve formátu BASE64, a proto se jejich velikost zvětšuje.

UPD Přesunuto na blog Information Security.

OpenSSL je výkonná sada nástrojů, které lze použít šifrování souborů a zpráv.

Pokud chcete používat stejné heslo pro oba šifrování prostého textu a pro jeho následné dešifrování, pak musíte použít symetrický šifrovací algoritmus.

Z tohoto článku se dozvíte jak šifrovat a dešifrovat soubory a zprávy pomocí hesla z příkazového řádku v Linuxu pomocí OpenSSL.

Jak na to: Šifrovat soubor

$ openssl enc -aes-256-cbc -salt -in soubor.txt-ven soubor.txt.enc

256bitový AES je kryptografický algoritmus používaný vládou Spojených států k šifrování informací na nejcitlivější úrovni.

Volba -sůl(sůl) je nutné použít VŽDY, pokud je tajný klíč vygenerován na základě hesla.

Bez použití možnosti -sůl, je možné provést vysoce účinný slovníkový útok, který povede k prozrazení zašifrovaných dat. Důvodem je to, že bez přidání „soli“ bude stejné heslo vždy generovat stejný tajný klíč.

Když je použita sůl, je pro ni rezervováno prvních 8 bajtů. Generuje se náhodně, když je soubor zašifrován a čte se ze zašifrovaného souboru během dešifrování.

Jak na to: Dešifrovat soubor

$ openssl enc -aes-256-cbc -d-v soubor.txt.enc-ven soubor.txt

Base64 kódování a dekódování

Kódování Base64 je standardní metoda pro převod 8bitových binárních informací na omezenou podmnožinu znaků ASCII pro bezpečný přenos prostřednictvím e-mailu a dalších systémů, které nepodporují 8bitový formát.

Ve výchozím nastavení je šifrovaný soubor vytvořen v binárním formátu. Pokud jej budete odesílat prostřednictvím e-mailu, IRC atd., musíte jej uložit v kódování Base64. Chcete-li zašifrovat soubor v kódování Base64, musíte přidat možnost -A:

$ openssl enc -aes-256-cbc -salt -A-v soubor.txt-ven soubor.txt.enc

Možnosti Popis
-A Sděluje OpenSSL, že šifrovaná data jsou kódována Base64.

Také možnost -A, musí být při dešifrování uvedeno:

$ openssl enc -aes-256-cbc -d -A-v soubor.txt.enc-ven soubor.txt

Šifrování/dešifrování bez výzvy k zadání hesla

Protože je heslo viditelné, měla by být tato metoda použita pouze tam, kde bezpečnost není důležitá.

Ve výchozím nastavení je uživatel vyzván k interaktivnímu zadání hesla.

Při psaní BASH skriptu možná budete chtít poskytnout neinteraktivní možnost zadání hesla pomocí -k.

Právě pro takové případy bylo vynalezeno šifrování veřejným klíčem.

Zašifrujte soubor pomocí poskytnutého hesla:

$ openssl enc -aes-256-cbc -salt -in soubor.txt -out soubor.txt.enc -k PASS

Dešifrujte soubor pomocí poskytnutého hesla:

$ openssl enc -aes-256-cbc -d -in soubor.txt.enc -out soubor.txt -k PASS

Jak z těchto článků víte, ne každý program, který slibuje šifrování souborů, zajišťuje bezpečnost informací. Jak říká Bruce Schneier: „Existují dva typy kryptografie: kryptografie, která zabrání vaší malé sestře číst vaše soubory, a kryptografie, která zabrání vašim strýcům ve vládě číst vaše soubory. OpenSSL je velmi oblíbená knihovna, kterou mnozí používají pro kryptografii – placené i bezplatné programy. OpenSSL implementuje velké množství algoritmů a režimů šifrování, což vám umožňuje provést výběr sami, a nikoli vývojáři programu.
Kromě samotné knihovny obsahuje balíček OpenSSL sadu konzolových utilit. Tento článek se zaměří na šifrování souborů pomocí symetrických algoritmů.
Chcete-li zašifrovat soubor pomocí OpenSSL, musíte použít příkaz openssl enc. K tomu je k dispozici široký výběr šifrovacích algoritmů, které OpenSSL podporuje – Blowfish, Camellia, DES, RC2, RC4, RC5, IDEA, AES a další. Kromě různých algoritmů jsou k dispozici také různé režimy šifrování - ECB, CBC, CFB, OFB. Některé režimy šifrování lze použít s různou bitovou hloubkou.
Chcete-li zobrazit seznam možností pro příkaz openssl enc, zadejte:

$ openssl enc --help
možnosti jsou
-ve vstupním souboru
-out výstupní soubor
-pass zdroj fráze
-e šifrovat
-d dešifrovat
-a/-base64 kóduje/dekóduje base64 v závislosti na příznaku šifrování
-k přístupová fráze je dalším argumentem
-kfile přístupová fráze je první řádek argumentu souboru
-md dalším argumentem je md, který se má použít k vytvoření klíče
z přístupové fráze. Jeden z md2, md5, sha nebo sha1
Dalším argumentem je -S sůl v hexu
Dalším argumentem je -K/-iv klíč/iv v hex
- vytiskněte iv/klíč (pak ukončete, pokud -P)
-bufsize velikost vyrovnávací paměti
-nopad zakáže standardní odsazení bloku
-engine e use engine e, případně hardwarové zařízení.
Typy šifer
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb
-camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1
-camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb
-camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1
-camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -idea
-idea-cbc -idea-cfb -idea-ecb
-idea-ofb -rc2 -rc2-40-cbc
-rc2-64-cbc -rc2-cbc -rc2-cfb
-rc2-ecb -rc2-ofb -rc4
-rc4-40 -rc5 -rc5-cbc
-rc5-cfb -rc5-ecb -rc5-ofb
-seed -seed-cbc -seed-cfb
-seed-ecb -seed-ofb

Po bloku Cipher Types jsou uvedeny dostupné algoritmy spolu s režimy. Šifrovací algoritmus DES je k dispozici v několika variantách. Kromě standardního DES existuje také trojité 3DES (které je také v několika verzích) a DESX. Nyní zkusme něco zašifrovat.

$ openssl enc -e -in infile.txt -out outfile.bf_cbc -bf-cbc

Tento příkaz zašifruje soubor infile.txt pomocí algoritmu blowfish v režimu CBC a zapíše výsledek do souboru outfile.bf_cbc. Před šifrováním budete požádáni o šifrovací klíč. K dešifrování tohoto souboru musíte použít následující příkaz:

$ openssl enc -d -in outfile.bf_cbc -out dec_file.txt -bf-cbc

Když budete požádáni o zadání klíče, musíte zadat klíč, který byl zadán během šifrování.
Pokud chcete data zkomprimovat, musíte to ze zřejmých důvodů provést před šifrováním.
Nyní pochopíme možnosti příkazového řádku. Volba -e určuje, že soubor by měl být zašifrován (tato volba je standardně povolena) a volba -d by měla být dešifrována. Šifrovací klíč lze zadat při volání openssl enc pomocí volby -k nebo v souboru pomocí volby -kfile.
Pomocí volby -nosalt můžete zakázat používání soli během šifrování (nedoporučuje se, protože snižuje zabezpečení šifry).
Pomocí tohoto nástroje můžete také převést na base64 a naopak, ale tento převod není šifrováním. Přečtěte si více na webových stránkách projektu - http://www.openssl.org/docs/apps/enc.html. Pokud máte nějaké dotazy, ptejte se.

P.S. Po zašifrování informací je nutné původní soubor řádně smazat, aby nezůstaly žádné zbytkové informace. K tomu můžete použít nějaký program, který implementuje Guttmanovu metodu. Také pokud zadáte heslo na příkazovém řádku, ujistěte se, že není uloženo v historii, a pokud je načteno ze souboru, pak že bylo zcela odstraněno.