GNU Cryptoのインストール

私は仕事ではJava使いではないのですが、昔からJavaが好きで自宅ではよく勉強のために使っています。ということで、これから『Javaでセキュリティ』をキーワードに何か書いてみたいなぁと考えています。


9月にJ2SDK 5.0がリリースされました。J2SDK 5.0ではセキュリティ機能についても様々なエンハンスが行われているようです。


セキュリティでもっともコアな部分の1つは暗号だと思います。しかし、J2SDK標準ではこの暗号機能には少し制約があります。制約といっても通常は特に不便は感じないと思いますが、サポートされているアルゴリズムが少し物足りないという感じです。これを拡張するためにはGNU Cryptoを使用するという方法があります。

  1. GNU Cyptoをhttp://www.gnu.org/software/gnu-crypto/#downloadingからダウンロードして適当なフォルダに解凍。
  2. CLASSPATHgnu-crypt.jarを追加します。
  3. ${JRE_HOME}\lib\security\java.securityに以下の行を追加してセキュリティプロバイダとして登録。
    security.provider.7=gnu.crypto.jce.GnuCrypto


Security.getProviders、Provider.getServicesを使って、利用可能なセキュリティプロバイダとそれぞれが提供するサービスをチェックしてみましょう。Provider name: GNU-CRYPTOのところが追加されたGNU Cryptoですが、そのサービスの多いことが目立つと思います。

>java SecurityProviderFinder
Count of Security provider : 7
--- [1] Security Provider Information ---
Provider name: SUN
Service algorithm: SHA1PRNG, SHA1withDSA, NONEwithDSA, DSA, MD2, MD5, SHA, SHA-256, SHA-38
4, SHA-512, DSA, DSA, DSA, X.509, JKS, PKIX, PKIX, LDAP, Collection, com.sun.security.Inde
xedCollection,

--- [2] Security Provider Information ---
Provider name: SunRsaSign
Service algorithm: RSA, RSA, MD2withRSA, MD5withRSA, SHA1withRSA, SHA256withRSA, SHA384wit
hRSA, SHA512withRSA,

--- [3] Security Provider Information ---
Provider name: SunJSSE
Service algorithm: RSA, RSA, MD2withRSA, MD5withRSA, SHA1withRSA, MD5andSHA1withRSA, SunX5
09, NewSunX509, SunX509, PKIX, SSL, SSLv3, TLS, TLSv1, PKCS12,

--- [4] Security Provider Information ---
Provider name: SunJCE
Service algorithm: RSA, DES, DESede, DESedeWrap, PBEWithMD5AndDES, PBEWithMD5AndTripleDES,
 PBEWithSHA1AndRC2_40, PBEWithSHA1AndDESede, Blowfish, AES, AESWrap, RC2, ARCFOUR, DES, DE
Sede, Blowfish, AES, RC2, ARCFOUR, HmacMD5, HmacSHA1, HmacSHA256, HmacSHA384, HmacSHA512,
DiffieHellman, DiffieHellman, DiffieHellman, DiffieHellman, DES, DESede, PBE, PBEWithMD5An
dDES, PBEWithMD5AndTripleDES, PBEWithSHA1AndDESede, PBEWithSHA1AndRC2_40, Blowfish, AES, R
C2, OAEP, DiffieHellman, DES, DESede, PBE, PBEWithMD5AndDES, PBEWithMD5AndTripleDES, PBEWi
thSHA1AndDESede, PBEWithSHA1AndRC2_40, HmacMD5, HmacSHA1, HmacSHA256, HmacSHA384, HmacSHA5
12, HmacPBESHA1, JCEKS,

--- [5] Security Provider Information ---
Provider name: SunJGSS
Service algorithm: 1.2.840.113554.1.2.2,

--- [6] Security Provider Information ---
Provider name: SunSASL
Service algorithm: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, CRAM-MD5, GSSAPI, DIGEST
-MD5,

--- [7] Security Provider Information ---
Provider name: GNU-CRYPTO
Service algorithm: HAVAL, MD2, MD4, MD5, RIPEMD128, RIPEMD160, SHA-160, SHA-256, SHA-384,
SHA-512, TIGER, WHIRLPOOL, ARCFOUR, MD2PRNG, MD4PRNG, MD5PRNG, RIPEMD128PRNG, RIPEMD160PRN
G, SHA-160PRNG, SHA-256PRNG, SHA-384PRNG, SHA-512PRNG, TIGERPRNG, HAVALPRNG, WHIRLPOOLPRNG
, ICM, UMAC-KDF, DSS, RSA, DSS/RAW, RSA-PSS/RAW, ANUBIS, ARCFOUR, BLOWFISH, DES, KHAZAD, N
ULL, AES, RIJNDAEL, SERPENT, SQUARE, TRIPLEDES, TWOFISH, CAST5, PBEWithHMacHavalAndAES, PB
EWithHMacHavalAndAnubis, PBEWithHMacHavalAndBlowfish, PBEWithHMacHavalAndCast5, PBEWithHMa
cHavalAndDES, PBEWithHMacHavalAndKhazad, PBEWithHMacHavalAndSerpent, PBEWithHMacHavalAndSq
uare, PBEWithHMacHavalAndTripleDES, PBEWithHMacHavalAndTwofish, PBEWithHMacMD2AndAES, PBEW
ithHMacMD2AndAnubis, PBEWithHMacMD2AndBlowfish, PBEWithHMacMD2AndCast5, PBEWithHMacMD2AndD
ES, PBEWithHMacMD2AndKhazad, PBEWithHMacMD2AndSerpent, PBEWithHMacMD2AndSquare, PBEWithHMa
cMD2AndTripleDES, PBEWithHMacMD2AndTwofish, PBEWithHMacMD4AndAES, PBEWithHMacMD4AndAnubis,
 PBEWithHMacMD4AndBlowfish, PBEWithHMacMD4AndCast5, PBEWithHMacMD4AndDES, PBEWithHMacMD4An
dKhazad, PBEWithHMacMD4AndSerpent, PBEWithHMacMD4AndSquare, PBEWithHMacMD4AndTripleDES, PB
EWithHMacMD4AndTwofish, PBEWithHMacMD5AndAES, PBEWithHMacMD5AndAnubis, PBEWithHMacMD5AndBl
owfish, PBEWithHMacMD5AndCast5, PBEWithHMacMD5AndDES, PBEWithHMacMD5AndKhazad, PBEWithHMac
MD5AndSerpent, PBEWithHMacMD5AndSquare, PBEWithHMacMD5AndTripleDES, PBEWithHMacMD5AndTwofi
sh, PBEWithHMacSHA1AndAES, PBEWithHMacSHA1AndAnubis, PBEWithHMacSHA1AndBlowfish, PBEWithHM
acSHA1AndCast5, PBEWithHMacSHA1AndDES, PBEWithHMacSHA1AndKhazad, PBEWithHMacSHA1AndSerpent
, PBEWithHMacSHA1AndSquare, PBEWithHMacSHA1AndTripleDES, PBEWithHMacSHA1AndTwofish, PBEWit
hHMacSHA256AndAES, PBEWithHMacSHA256AndAnubis, PBEWithHMacSHA256AndBlowfish, PBEWithHMacSH
A256AndCast5, PBEWithHMacSHA256AndDES, PBEWithHMacSHA256AndKhazad, PBEWithHMacSHA256AndSer
pent, PBEWithHMacSHA256AndSquare, PBEWithHMacSHA256AndTripleDES, PBEWithHMacSHA256AndTwofi
sh, PBEWithHMacSHA384AndAES, PBEWithHMacSHA384AndAnubis, PBEWithHMacSHA384AndBlowfish, PBE
WithHMacSHA384AndCast5, PBEWithHMacSHA384AndDES, PBEWithHMacSHA384AndKhazad, PBEWithHMacSH
A384AndSerpent, PBEWithHMacSHA384AndSquare, PBEWithHMacSHA384AndTripleDES, PBEWithHMacSHA3
84AndTwofish, PBEWithHMacSHA512AndAES, PBEWithHMacSHA512AndAnubis, PBEWithHMacSHA512AndBlo
wfish, PBEWithHMacSHA512AndCast5, PBEWithHMacSHA512AndDES, PBEWithHMacSHA512AndKhazad, PBE
WithHMacSHA512AndSerpent, PBEWithHMacSHA512AndSquare, PBEWithHMacSHA512AndTripleDES, PBEWi
thHMacSHA512AndTwofish, PBEWithHMacTigerAndAES, PBEWithHMacTigerAndAnubis, PBEWithHMacTige
rAndBlowfish, PBEWithHMacTigerAndCast5, PBEWithHMacTigerAndDES, PBEWithHMacTigerAndKhazad,
 PBEWithHMacTigerAndSerpent, PBEWithHMacTigerAndSquare, PBEWithHMacTigerAndTripleDES, PBEW
ithHMacTigerAndTwofish, PBEWithHMacWhirlpoolAndAES, PBEWithHMacWhirlpoolAndAnubis, PBEWith
HMacWhirlpoolAndBlowfish, PBEWithHMacWhirlpoolAndCast5, PBEWithHMacWhirlpoolAndDES, PBEWit
hHMacWhirlpoolAndKhazad, PBEWithHMacWhirlpoolAndSerpent, PBEWithHMacWhirlpoolAndSquare, PB
EWithHMacWhirlpoolAndTripleDES, PBEWithHMacWhirlpoolAndTwofish, PBKDF2WithHMacHaval, PBKDF
2WithHMacMD2, PBKDF2WithHMacMD4, PBKDF2WithHMacMD5, PBKDF2WithHMacSHA1, PBKDF2WithHMacSHA2
56, PBKDF2WithHMacSHA384, PBKDF2WithHMacSHA512, PBKDF2WithHMacTiger, PBKDF2WithHMacWhirlpo
ol, BlockCipherParameters, HMAC-MD2, HMAC-MD4, HMAC-MD5, HMAC-RIPEMD128, HMAC-RIPEMD160, H
MAC-SHA160, HMAC-SHA256, HMAC-SHA384, HMAC-SHA512, HMAC-TIGER, HMAC-HAVAL, HMAC-WHIRLPOOL,
 TMMH16, UHASH32, UMAC32, GKR, ANONYMOUS, PLAIN, CRAM-MD5, SRP, ANONYMOUS, PLAIN, CRAM-MD5
, SRP-MD5, SRP-SHA-160, SRP-RIPEMD128, SRP-RIPEMD160, SRP-TIGER, SRP-WHIRLPOOL,

これから少しでもGNU Cryptoを使用したプログラミングを紹介していければと考えています。
GNUだけにGPLですので、商用利用にはご注意を。