A kérdés bővebben

Jelenleg nem megoldott olyan infrastruktura használata, ami saját felügyelet alatt van és amelyen keresztül biztoságosan tudnánk adatokat cserélni. A levelező pőrogramunk webes alapú, így digitális aláírást sem lehet biztonságosan használni titkosításra, és a fájlok mérete is sokszor túl nagy.

Többnyire publikus csatornákon át kellene a fájlcserét megoldani, vagy futár vinné azokat adathordozón, ha a fel- és letöltés túl sok időt venne igénybe.

Milyen titkosítást használhatnánk, ami ingyenes, megbízható, és minden rendszer alatt használható? Ha parancssoros a program, az sem okoz gondot.

Válasz

Több lehetőség is van.

Sokan használják a TrueCrypt alkalmazást ilyen célra, de az fix kötetmérettel dolgozik, emiatt vagy alkalmanként nem férne el rá az adat, vagy túl sok adatot kellene mozgatni akkor is, ha az nem szükséges.
Bár a fenti alkalmazás kezelése nem bonyolult, én mégis inkább az OpenSSL használatát javasolnám.

OpenSSL jelszóval

Az adatok kényességétől függ, hogy a jelszavas, vagy a kulcsos titkosítást választjuk. Az egyszerűbb a jelszavas titkosítás, ám ennek hátránya, hogy mindkét fél ugyanazt a jelszót kell, hogy használja, és a jelszón túl más nehézség nincs a feltörés útjában.

openssl aes-256-cbc -a -salt -in nyers.txt -out titkos.txt

A parancs kiadása után az OpenSSL kér egy jelszót (a megadáskor meg kell ismételni ellenőrzési céllal), majd ennek használatával titkosítja az adott fájlt.

A fájl az

openssl aes-256-cbc -d -a -in titkos.txt -out eredeti.txt

paranccsal fejthető vissza (a jelszó ismeretében, amit az OpenSSL megkérdez). A kiindulási nyers.txt és a végleges eredeti.txt teljesen azonos tartalmú, titkosítatlan fájlok.

OpenSSL kulcspárokkal

Ez a művelet bonyolultabb, ám sokkal biztonságosabb. Először is mindkét félnek szüksége van egy saját kulcspárra, amely privát és publikus kulcsokból áll. A kulcsoknak van lejárati ideje, ám ez a felhasználásukat nem korlátozza, de ettől függetlenül jó, ha nem állítunk be túl rövid időt, és a lejárat után csak az azokkal titkosított fájlok visszafejtésére használjuk, titkosításra már nem. Ilyenkor érdemes új kulcspárokat csinálni.

Az egyik fél így hozhat létre magának kulcspárokat (az első parancssor nagyon hosszú, de egyetlen parancssor):

openssl req -new -batch -subj /countryName=HU/stateOrProvinceName=Hungary/localityName=Budapest/organizationName="Saját"/organizationalUnitName=Teszt/commonName="'A' kulcs"/ -days 6350 -newkey rsa:4096 -keyout a_priv.key -out a_pub.csr

openssl x509 -req -days 3650 -in a_pub.csr -signkey a_priv.key -out a_pub.crt

Az első parancs létrehoz egy a_priv.key privát kulcsot, és egy a_pub.csr kulcsaláírási kérelmet. Ezt a kérelmet a második parancs önmagával, azaz a privát kulccsal hitelesíti, és az eredményt az a_pub.crt fájlba teszi. A továbbiakban csak a .key és .crt fájlokra lesz szükség.
Látható, hogy a kulcsok lejárati ideje 10 év, és a kulcshossz 4096 bites.

A kérelem (első parancs) alkalmával az OpenSSL kérni fog (kétszer) egy titkos jelszót, ezt annak kell ismernie, aki ezt létrehozza, másnak nem szükséges.

A másik fél ugyanígy hozzon létre magának kulcspárt a saját adataival, saját jelszóval (pl. b_priv.key és b_pub.crt).

Ezt követően a publikus kulcsokat át kell adni egymásnak - lehetőleg személyesen, vagy az előző OpenSSL módszerrel, jelszóval titkosítva.

Tehát az egyik félnél lesz az a_priv.key és a b_pub.crt, a másik fél pedig a b_priv.key és az a_pub.crt fájlokkal fog rendelkezni. Ezeket a kulcsokat mindkét fél tartsa biztonságos helyen, ahol nem eshet baja - akár TrueCrypt-tel titkosított saját köteten, vagy páncélszekrényben pendrive-on -, de a lényeg, hogy harmadik fél kezébe ne kerülhessen.

A titkosítás menete

A fájlokat minden esetben a publikus kulccsal titkosítjuk, így ahhoz nem kell jelszó. Visszafejteni a fájlt azonban már csak a privát kulcs tulajdonosa fogja tudni, annak a jelszónak az ismeretében, amely a privát kulcshoz tartozik (könnyen belátható, hogy a kulcsok megszerzése önmagában itt még nem elegendő, a jelszót is ismerni kell).

Az előző példában szereplő fájl titkosítása így megy:

openssl smime -encrypt -binary -aes-256-cbc -in nyers.txt -out titkos.txt -outform DER b_pub.crt

Ez a parancs gyakorlatilag ugyanazt a metódust használja, amit a digitális aláírással titkosított email, annyi különbséggel, hogy az alapértelmezett PEM formátum helyett (a példában látható módon) a DER formátumot is használhatjuk, amivel is a kimeneti fájl nem szöveges, base64 kódolású lesz, hanem bináris, így lényegesen kevesebb helyet foglal, mint az előző módszer esetében, amely csak PEM formátumba konvertálva tud titkosítani.

A visszafejtés menete

Ha az előző paranccsal titkosított fájlt a célszemély megkapta, akkor ő azt a saját privát kulcsával, és az azt létrehozó parancs végrehajtásakor megadott jelszóval tudja visszafejteni:

openssl smime -decrypt -binary -in titkos.txt -inform DER -out eredeti.txt -inkey b_priv.key

A parancs rákérdez a jelszóra, és ha az megfelelő, akkor az így visszakapott eredeti.txt fájl tartalma meg fog egyezni a kiindulási nyers.txt tartalmával.

Megjegyzés

Természetesen Windows alatt openssl.exe a parancs, és minden rendszer alatt meg kell győződni arról, hogy a végrehajtható program elérési útvonala a PATH változóban felsorolt utakon van, vagy a program neve elé be kell írnunk annak elérési útvonalát is, pl. így:

C:\OpenSSL\openssl.exe