A Java Cryptography Extension ( rövidítve : JCE ) a Java platform hivatalosan kiadott szabványos kiterjesztése, és a Java Cryptography Architecture (JCA) része. Ez egy olyan csomagkészlet, amely keretet és megvalósítást biztosít olyan kriptográfiai feladatokhoz, mint az adatok titkosítása és visszafejtése, a vezérlőkulcsok generálása és hitelesítése, valamint a Message Authentication Code (MAC) algoritmusok megvalósítása [1] .
A Java Cryptographic Extension ugyanazon alapul, mint a Java Cryptographic Architecture (JCA), és a JCA részének tekintendő. A tény az, hogy az amerikai törvények tiltják bizonyos típusú kriptográfiai szoftverek (különösen a szimmetrikus titkosítás és egy közös kulcsanyag kifejlesztése) exportját az Egyesült Államokon és Kanadán kívülre, vagy megengedik a csonka kulcsokkal történő exportálást. A szabványos JCA osztályok csak olyan hash függvényeket, kulcsgenerátorokat és egyéb funkciókat tartalmaznak, amelyekre ez a korlátozás nem vonatkozik, és biztonságosan exportálhatók a Java 2 platform részeként. Az USA kriptográfiai exportkorlátozásainak hatálya alá tartozó erős titkosítási algoritmusokat azonban be kell szerezni más forrásokból, ezért külön termékként szállítjuk - JCE.
A Java Cryptographic Extension úgy lett megtervezve, hogy más kriptográfiai könyvtárak is csatlakoztathatók legyenek az új algoritmusok zökkenőmentes biztosításához [2] .
Jelenleg a JDK 1.2-ben a kriptográfiai kiterjesztés három csomagban található:
javax.crypto - felület és osztályok a szimmetrikus titkosításhoz
javax.crypto.interfaces – Diffie-Hellman kulcslevezető interfészek
javax.crypto.spec - osztályok a kriptográfiai algoritmusok kulcsainak és paramétereinek kezelésére
A JCA-hoz hasonlóan a JCE sem függ meghatározott algoritmusok megvalósításától. Az SPI segítségével a különböző gyártók különböző implementációi egyidejűleg integrálhatók a Java programozási környezetbe. Az 1.4-es verziótól kezdődően a Java tartalmazza a JCE-t és a JCA-t, azonban más implementációk is gond nélkül csatlakoztathatók mind statikusan, mind dinamikusan.
A Java Cryptographic Extension a következő funkciókat kínálja:
A Java Cryptographic Extension különféle közönség számára készült biztonsági funkciókkal rendelkezik.
A beépített JCE biztonsági funkciók megvédik a felhasználót a rosszindulatú szoftverektől (beleértve a vírusokat is), megőrzik a felhasználói fájlok és felhasználói információk titkosságát, és hitelesítik az egyes kódszolgáltatók kilétét. A felhasználó szükség esetén kérelmeket is benyújthat biztonsági ellenőrzésre.
A fejlesztők használhatják a JCE-módszereket, hogy biztonsági funkciókat építsenek be programjaikba, beleértve a kriptográfiai szolgáltatásokat és a biztonsági ellenőrzéseket. A JCE lehetővé teszi saját hozzáférési jogainak meghatározását és integrálását (bizonyos erőforrásokhoz való hozzáférés szabályozása) és kriptográfiai biztonsági szolgáltatások megvalósítását. Ezenkívül a JCE osztályokat úgy tervezték, hogy kezeljék saját privát/privát kulcspárjaikat, és hitelesítsék a nyilvános kulcsokat olyan személyektől, akikben a fejlesztő megbízik.
A JCE eszközök kezelik a kulcstárolót (kulcsok és tanúsítványok adatbázisa); digitális aláírásokat generálni a JAR-fájlokhoz, valamint ellenőrizni az ilyen aláírások hitelességét és az aláírt tartalom integritását; lehetővé teszi olyan privát fájlok létrehozását és módosítását, amelyek meghatározzák a telepítés biztonságát. [2]
A különböző JCE implementációk közé tartozik a Cryptix JCE csomag, a Bouncy Castle csomag és az IAIK JCE csomag.
A Cryptix JCE csomag a leghíresebb ingyenes kiterjesztés. A munkálatok 1995-ben kezdődtek. Ez volt az első elérhető kriptográfiai könyvtár Java számára. Akkor a kriptográfia nem volt széles körben elérhető, és ez a projekt fontos szerepet játszott az információk védelmében a Java platformon történő programok fejlesztése során. A Cryptix legújabb verziója 2005. április 28-án jelent meg. Ugyanebben az évben a Cryptix támogatása megszűnt.
A Cryptix JCE csomag tartalma:
A Cryptix JCE-hez hasonlóan a Bouncy Castle csomag is ingyenes. A Bouncy Castle első hivatalos kiadása 2000 májusában jelent meg, és körülbelül 27 000 kódsort tartalmazott. A projekt folyamatosan nőtt, és 2012-re a Bouncy Castle Java kódja meghaladta a 300 000 sort [1] .
Magába foglalja
és a következő tulajdonságokkal rendelkezik
A Grazi Műszaki Egyetem Alkalmazott Információfeldolgozási és Kommunikációs Intézete (IAIK) által megvalósított kereskedelmi csomag. [négy]
A következő példa a bájttömb titkosításának megvalósítását mutatja be az AES algoritmus használatával. A program megírásához a BouncyCastle csomag eszközeit használtuk. [5]
BufferedBlockCipher titkosítás = new PaddedBufferedBlockCipher ( new CBCBlockCipher ( new AESFastEngine () ) ); SecureRandom srr = new SecureRandom (); bájt [] AESkey = új bájt [ 16 ] ; srr . nextBytes ( AESkey ); bájt [] AESinitV = új bájt [ 16 ] ; srr . nextBytes ( AESinitV ); ParametersWithIV piv = new ParametersWithIV ( new KeyParameter ( AESkey ), AESinitV ); titkosítás . init ( igaz , piv ); bájt [] eredmény = új bájt [ titkosítás . getOutputSize ( toEncrypt . length ) ] ; int len = titkosítás . processBytes ( toEncrypt , 0 , toEncrypt . long , result , 0 ); próbálkozzon { cipher . doFinal ( eredmény , len ); } catch ( CryptoException ce ) { result = "Rejtjelhiba" . getBytes (); ce . printStackTrace (); }