Kormányablak, Ügyfélkapu, magyarorszag.hu, kormany.hu
KORMÁNYABLAK, ÜGYFÉLKAPU - A ZÁRT AJTÓK MÖGÖTT...
(nem hivatalos e-kormányzati témájú oldal)
  
BEMUTATKOZÁS 
E-KÖZIGAZGATÁS 
IT BIZTONSÁG 
  
































  Mottó:
98 percent of PRISM
production is based on
Yahoo, Google and Microsoft.
/PRISM, Edward Snowden által
kiszivárogtatott dokumentumok/
2013. július 22.  
 Rejtelmek: CMS envelopedData 
   
Minden információ útja az NSA-hoz vezet! Nosztalgiáztunk az ECHELON-ról, a PRISM kapcsán pedig már meg sem lepődünk azon, hogy a - Microsoft által felvásárolt - Skype-on átküldött üzeneteinket sokkal többen olvassák a kelleténél... (ld. a The H és a német heise Security esetét az URL-lel, a jelszóval és a Microsoft robotjával)

Mit lehet tenni ez ellen? Ha a kommunikációs csatorna által nyújtott bizalmasság nem megfelelő, akkor már a csatornában való elküldés előtt kell gondoskodnunk a védelemről. Erre alkalmas lehet akár szimmetrikus, akár aszimmetrikus kriptográfiai algoritmuson alapuló rejtjelezés is, a való életben azonban ezeket együtt szokták alkalmazni (ld. XML encryption, PGP, CMS, SSL/TLS): a szimmetrikus kulcs rejtjelezi az adatot, az aszimmetrikus kulcs pedig a szimmetrikus kulcsot. A Cryptographic Message Syntax (CMS) - IETF RFC 5652 és elődei - az egyik legelterjedtebb formátum a különböző kriptográfiai transzformáción átesett adatok tárolására. Nézzük meg, hogy miképp működik a CMS-alapú rejtjelezés!

A CMS szabványban több kriptográfiai művelethez kapcsolódó formátum is meghatározásra került: elektronikus aláírás, lenyomatképzés, de jelen esetben a rejtjelezés az érdekes. Ebből viszont kettő is van: az encryptedData nem tartalmaz a rejtjelezett adaton kívül semmit, így pl. a kulcsokat is más módon kell átküldeni a címzettnek, az envelopedData viszont önleíró (ennek a fontosabb ASN.1 részletei láthatók alább).

A CMS szabvány leírása szerint az "EncryptedContent" tartalmazza a szimmetrikus kulccsal rejtjelezett adatot, az "EncryptedKey" tárolja a címzett aszimmetrikus nyilvános kulcsával rejtjelezett szimmetrikus kulcsot és a "parameters" az egyéb szükséges paramétereket (itt pl. a CBC-módú AES-hez az IV-t).

A játszadozáshoz először is szükség lesz egy kulcspárra (ami a jelen esetben RSA lesz) és az arra épülő tanúsítványra. OpenSSL segítségével gyorsan le lehet gyártani ezeket...
  • openssl req -new -out test.csr -newkey rsa:2048 -sha256
  • openssl rsa -in privkey.pem -out test.private.key -passin pass:1234
  • openssl x509 -in test.csr -out test.cer -req -signkey test.private.key -days 3652 -sha256
  • openssl pkcs12 -export -in test.cer -inkey test.private.key -out test.p12
  • openssl pkcs12 -in test.p12 -out test.pem
  • openssl rsa -in test.pem -pubout -out test.public.key
Ha a kulcsok kész vannak, akkor ki lehet próbálni őket egy állományon (pl. test.txt). Az OpenSSL cms parancsa erre pont jó is, csak meg kell adni a címzett nyilvános kulcsát, illetve tanúsítványát (test.cer) és a rejtjelező algoritmust (aes-256-cbc). A címzett titkos kulcsát használva hasonló módon végre lehet hajtani a megfejtést is. Ha nem jött elő hiba, és nem írtunk el semmit, akkor nem meglepő, hogy visszakapjuk a test.txt eredeti tartalmát.
  • openssl cms -in test.txt -inform PEM -out test.cms.encrypt.txt -outform DER -encrypt -aes-256-cbc -CAfile test.cer test.cer
  • openssl cms -in test.cms.encrypt.txt -inform DER -out test.cms.decrypt.txt -decrypt -aes-256-cbc -inkey test.private.key
Az OpenSSL cms parancsa vagy más CMS library-k használatával könnyedén lehet ilyen műveleteket végezni magasabb szinten, de érdemes végigbogarászni alacsonyabb szinten is a lépéseket. Próbáljunk meg nagyobb kihívást keresni: fejtsük le a CMS réteget és végezzük el az ellenőrzést eggyel alacsonyabb szinten!

Ahhoz, hogy ezt meg tudjuk tenni, először ki kell nyerni a rejtjelezett szimmetrikus titkos kulcsot (EncryptedKey). Ezután pedig az OpenSSL rsautl parancs paramétereként megadott RSA titkos kulccsal meg kell fejteni.
  • openssl rsautl -in test.cms.encrypt.EncryptedKey.txt -out test.cms.encrypt.DecryptedKey.txt -decrypt -inkey test.private.key

A kinyert, megfejtett szimmetrikus kulcs után a rejtjelezett tartalmat, dokumentumot (EncryptedContent) kell lementeni, illetve a CBC-módú AES algoritmus IV értékét (parameters).
  • openssl enc -aes-256-cbc -in test.cms.encrypt.EncryptedContent.txt -out test.cms.encrypt.DecryptedContent.txt -d -K 6B9724A06C67491E811DC54D22272466681F3BAEBD9DDC7888272FCECD50820D -iv 19F19066C4858A0CD9C3FADAFDF4916D
Ha minden megvan, akkor az OpenSSL enc parancsa segítségével meg lehet fejteni a rejtjelezett dokumentumot, és így visszakapjuk a test.txt eredeti tartalmát.

Természetesen ez, és az ehhez hasonló rejtjelezések is csak akkor nyújtanak bármilyen védelmet, ha a használt függvényekben nincsen "backdoor", nincs véletlenül bennehagyott vagy szándékosan elrejtett hiba (pl. állítólagos FBI-backdoor az OpenBSD-ben), amit a támadók vagy a megfigyelők kihasználhatnak...

Kapcsolódó anyagok:
 vissza 
   
  info@kormanyablak.org
info@ugyfelkapu.info