The following topics are covered:
SunPKCS11 ProviderSUN ProviderSunRsaSign ProviderSunJSSE ProviderSunJCE ProviderSunJGSS ProviderSunSASL ProviderXMLDSig ProviderSunPCSC ProviderSunMSCAPI ProviderSunEC ProviderOracleUcrypto ProviderNote: TheStandard NamesDocumentation contains more information about the standardnames used in this document.
The Java platform defines a set of APIs spanning major securityareas, including cryptography, public key infrastructure,authentication, secure communication, and access control. TheseAPIs allow developers to easily integrate security mechanisms intotheir application code. TheJavaCryptography Architecture (JCA) and itsProvider Architecture isa core concept of the Java Development Kit (JDK). It is assumedreaders have a solid understanding of this architecture.
This document describes the technical details of the providersshipped as part of Oracle's Java Environment.
Reminder: Cryptographic implementations in the JDK aredistributed through several different providers ("Sun", "SunJSSE","SunJCE", "SunRsaSign") for both historical reasons and by thetypes of services provided. General purpose applicationsSHOULDNOT request cryptographic services from specific providers.That is:
getInstance("...","SunJCE"); // not recommended// ... versus ...getInstance("..."); // recommendedOtherwise, applications are tied to specific providers that may notbe available on other Java implementations. They also might not beable to take advantage of available optimized providers (forexample, hardware accelerators via PKCS11 or native OSimplementations such as Microsoft's MSCAPI) that have a higherpreference order than the specific requested provider.
By default, an application can use cryptographic algorithms of any strength.However, due to import regulations in some locations, you may have to limit thestrength of those algorithms. The JDK provides two different sets of jurisdictionpolicy files, "limited" and "unlimited", in the directory<java-home>/jre/lib/security/policythat determine the strength of cryptographic algorithms. Information aboutjurisdiction policy files and how to activate them is available inAppendix C: Cryptographic Strength Configuration.
Consult your export/import control counsel or attorney to determine the exactrequirements for your location.
For the "limited" configuration, the following table lists the maximum key sizesallowed by the "limited" set of jurisdiction policy files:
| Algorithm | Maximum Keysize |
|---|---|
| DES | 64 |
| DESede | * |
| RC2 | 128 |
| RC4 | 128 |
| RC5 | 128 |
| RSA | * |
| all others | 128 |
Thejavax.crypto.Cipher.getInstance(String transformation) factory method generatesCiphers using transformations of the formalgorithm/mode/padding. If the mode/padding are omitted, the SunJCE and SunPKCS11 providers use ECB as the default mode and PKCS5Padding as the default padding for many symmetric ciphers.
It is recommended to use transformations that fully specify the algorithm, mode, and padding instead of relying on the defaults.
Note: ECB works well for single blocks of data and can beparallelized, but absolutely should not be used for multiple blocks of data.
SunPKCS11 ProviderThe Cryptographic Token Interface Standard (PKCS#11) providesnative programming interfaces to cryptographic mechanisms, such ashardware cryptographic accelerators and Smart Cards. When properlyconfigured, theSunPKCS11 provider enablesapplications to use the standard JCA/JCE APIs to access nativePKCS#11 libraries.TheSunPKCS11 provider itselfdoes not contain cryptographic functionality, it is simply aconduit between the Java environment and the native PKCS11providers. TheJava PKCS#11 ReferenceGuide has a much more detailed treatment of this provider.
SUN ProviderJDK 1.1 introduced theProvider architecture. Thefirst JDK provider was namedSUN, and contained twotypes of cryptographic services (MessageDigests andSignatures). In later releases, other mechanisms wereadded (SecureRandom number generators,KeyPairGenerators,KeyFactorys, and soon.).
United States export regulations in effect at the time placedsignificant restrictions on the type of cryptographic functionalitythat could be made available internationally in the JDK. For thisreason, theSUN provider has historically containedcryptographic engines that did not directly encrypt or decryptdata.
The following algorithms are available in theSUNprovider:
| Engine | Algorithm Names |
|---|---|
AlgorithmParameterGenerator | DSA |
AlgorithmParameters | DSA |
CertificateFactory | X.509 |
CertPathBuilder | PKIX |
CertPathValidator | PKIX |
CertStore | Collection LDAP |
Configuration | JavaLoginConfig |
KeyFactory | DSA |
KeyPairGenerator | DSA |
KeyStore | JKS |
MessageDigest | MD2 MD5 SHA-1 SHA-256 SHA-384 SHA-512 |
Policy | JavaPolicy |
SecureRandom | SHA1PRNG |
Signature | NONEwithDSA SHA1withDSA |
TheSUN provider uses the following defaultkeysizes (in bits) and enforces the following restrictions:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| DSA | 1024 | Keysize must be a multiple of 64, ranging from 512 to 1024(inclusive). |
AlgorithmParameterGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| DSA | 1024 | Keysize must be a multiple of 64, ranging from 512 to 1024(inclusive). |
CertificateFactory/CertPathBuilder/CertPathValidator/CertStoreImplementationsAdditional details on theSUN providerimplementations forCertificateFactory,CertPathBuilder,CertPathValidator andCertStore are documented inAppendix B of the PKIProgrammer's Guide.
SunRsaSign ProviderTheSunRsaSign provider was introduced in JDK 1.3as an enhanced replacement for the RSA signatures in theSunJSSE provider.
The following algorithms are available in theSunRsaSign provider:
| Engine | Algorithm Names |
|---|---|
KeyFactory | RSA |
KeyPairGenerator | RSA |
Signature | MD2withRSA MD5withRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
TheSunRsaSign provider uses the following defaultkeysize (in bits) and enforces the following restriction:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| RSA | 1024 | Keysize must range between 512 and 65536 bits, the latter ofwhich is unnecessarily large. |
SunJSSE ProviderThe Java Secure Socket Extension (JSSE) was originally releasedas a separate "Optional Package" (also briefly known as a "StandardExtension"), and was available for JDK 1.2.n and1.3.n. TheSunJSSE provider was introduced aspart of this release.
In earlier JDK releases, there were no RSA signature providersavailable in the JDK, thereforeSunJSSE had to provideits own RSA implementation in order to use commonly availableRSA-based certificates. JDK 5 introduced theSunRsaSign provider, which provides all thefunctionality (and more) of theSunJSSE provider.Applications targeted at JDK 5.0 and later should request instancesof theSunRsaSign provider instead. For backwardcompatibility, the RSA algorithms are still available through thisprovider, but are actually implemented in theSunRsaSign provider.
The following algorithms are available in theSunJSSE provider:
| Engine | Algorithm Name(s) |
|---|---|
KeyFactory |
|
KeyManagerFactory |
|
KeyPairGenerator |
|
KeyStore |
|
Signature |
|
SSLContext |
|
TrustManagerFactory |
|
Footnote 1 The PKCS12KeyStore implementation does not support theKeyBag type.
TheSunJSSE supports the followingprotocol parameters:
| Protocol | Enabled by Default for Client | Enabled by Default for Server |
|---|---|---|
| SSLv3Footnote 1 | No | No |
| TLSv1 | Yes | Yes |
| TLSv1.1Footnote 2 | No | Yes |
| TLSv1.2Footnote 2 | No | Yes |
| SSLv2HelloFootnote 3 | No | Yes |
Footnote 1SSLv3 was disabled by default since Java SE 7u75.
Footnote 2AlthoughSunJSSE in the Java SE 7release supports TLS 1.1 and TLS 1.2, neither version is enabled bydefault for client connections. Some servers do not implementforward compatibility correctly and refuse to talk to TLS 1.1 orTLS 1.2 clients. For interoperability,SunJSSE doesnot enable TLS 1.1 or TLS 1.2 by default for clientconnections.
Server connections have no such interoperability problem. TLS1.1 and TLS 1.2 are enabled by default for server connections.
Footnote 3The SSLv3, TLSv1, and TLSv1.1 protocols allowyou to send SSLv3, TLSv1, and TLSv1.1 hellos encapsulated in anSSLv2 format hello.
SunJSSE supports a large number of cipher suites.The two tables that follow show the cipher suites supported bySunJSSE in preference order and the release in which they wereintroduced.
The first table lists the cipher suites that are enable bydefault. The second table shows cipher suites that are supported bySunJSSE but disabled by default.
| Cipher Suite | J2SE v1.4 | J2SE v1.4.1, v1.4.2 | J2SE 5.0 | Java SE 6 | Java SE 7 |
|---|---|---|---|---|---|
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 | XFootnote 1 | ||||
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 | XFootnote 1 | ||||
TLS_RSA_WITH_AES_256_CBC_SHA256 | XFootnote 1 | ||||
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 | XFootnote 1 | ||||
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 | XFootnote 1 | ||||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 | XFootnote 1 | ||||
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 | XFootnote 1 | ||||
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA | X | X | |||
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | X | X | |||
TLS_RSA_WITH_AES_256_CBC_SHA | X | X | X | X | |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA | X | X | |||
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA | X | X | |||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA | X | X | X | X | |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA | X | X | X | X | |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | XFootnote 1 | ||||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | XFootnote 1 | ||||
TLS_RSA_WITH_AES_128_CBC_SHA256 | XFootnote 1 | ||||
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 | XFootnote 1 | ||||
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 | XFootnote 1 | ||||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 | XFootnote 1 | ||||
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 | XFootnote 1 | ||||
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA | X | X | |||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | X | X | |||
TLS_RSA_WITH_AES_128_CBC_SHA | X | X | X | X | |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA | X | X | |||
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA | X | X | |||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA | X | X | X | X | |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA | X | X | X | X | |
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | X | X | |||
TLS_ECDHE_RSA_WITH_RC4_128_SHA | X | X | |||
SSL_RSA_WITH_RC4_128_SHA | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_RC4_128_SHA | X | X | |||
TLS_ECDH_RSA_WITH_RC4_128_SHA | X | X | |||
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA | X | X | |||
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA | X | X | |||
SSL_RSA_WITH_3DES_EDE_CBC_SHA | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA | X | X | |||
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA | X | X | |||
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA | X | X | X | X | |
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA | X | X | X | X | X |
SSL_RSA_WITH_RC4_128_MD5 | X | X | X | X | X |
TLS_EMPTY_RENEGOTIATION_INFO_SCSV2 | 1.4.2u28+ | u26+ | u22+ | X |
Footnote 1Cipher suites with SHA384 and SHA256 are available only for TLS 1.2or later.
Footnote 2TLS_EMPTY_RENEGOTIATION_INFO_SCSV is a newpseudo-cipher suite to support RFC 5746. See theTransportLayer Security (TLS) Renegotiation Issue section of the JSEEReference Guide for more information.
| Cipher Suite | J2SE v1.4 | J2SE v1.4.1, v1.4.2 | J2SE 5.0 | Java SE 6 | Java SE 7 |
|---|---|---|---|---|---|
TLS_DH_anon_WITH_AES_256_CBC_SHA256 | X | ||||
TLS_ECDH_anon_WITH_AES_256_CBC_SHA | X | X | |||
TLS_DH_anon_WITH_AES_256_CBC_SHA | X | X | X | X | |
TLS_DH_anon_WITH_AES_128_CBC_SHA256 | X | ||||
TLS_ECDH_anon_WITH_AES_128_CBC_SHA | X | X | |||
TLS_DH_anon_WITH_AES_128_CBC_SHA | X | X | X | X | |
TLS_ECDH_anon_WITH_RC4_128_SHA | X | X | |||
SSL_DH_anon_WITH_RC4_128_MD5 | X | X | X | X | X |
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA | X | X | |||
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA | X | X | X | X | X |
TLS_RSA_WITH_NULL_SHA256 | X | ||||
TLS_ECDHE_ECDSA_WITH_NULL_SHA | X | X | |||
TLS_ECDHE_RSA_WITH_NULL_SHA | X | X | |||
SSL_RSA_WITH_NULL_SHA | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_NULL_SHA | X | X | |||
TLS_ECDH_RSA_WITH_NULL_SHA | X | X | |||
TLS_ECDH_anon_WITH_NULL_SHA | X | X | |||
SSL_RSA_WITH_NULL_MD5 | X | X | X | X | X |
SSL_RSA_WITH_DES_CBC_SHA | X | X | X | X | XFootnote 1 |
SSL_DHE_RSA_WITH_DES_CBC_SHA | X | X | X | XFootnote 1 | |
SSL_DHE_DSS_WITH_DES_CBC_SHA | X | X | X | X | XFootnote 1 |
SSL_DH_anon_WITH_DES_CBC_SHA | X | X | X | X | XFootnote 1 |
SSL_RSA_EXPORT_WITH_RC4_40_MD5 | X | X | X | X | XFootnote 2 |
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 | X | X | X | X | XFootnote 2 |
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA | X | X | X | XFootnote 2 | |
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA | X | X | X | XFootnote 2 | |
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA | X | X | X | X | XFootnote 2 |
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA | X | X | X | X | XFootnote 2 |
TLS_KRB5_WITH_RC4_128_SHA | X | X | X | ||
TLS_KRB5_WITH_RC4_128_MD5 | X | X | X | ||
TLS_KRB5_WITH_3DES_EDE_CBC_SHA | X | X | X | ||
TLS_KRB5_WITH_3DES_EDE_CBC_MD5 | X | X | X | ||
TLS_KRB5_WITH_DES_CBC_SHA | X | X | XFootnote 1 | ||
TLS_KRB5_WITH_DES_CBC_MD5 | X | X | XFootnote 1 | ||
TLS_KRB5_EXPORT_WITH_RC4_40_SHA | X | X | XFootnote 2 | ||
TLS_KRB5_EXPORT_WITH_RC4_40_MD5 | X | X | XFootnote 2 | ||
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA | X | X | XFootnote 2 | ||
TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 | X | X | XFootnote 2 |
Footnote 1RFC 5246 TLS 1.2forbids the use of these suites. These can be used in theSSLv3/TLS1.0/TLS1.1 protocols, but cannot be used in TLS 1.2 andlater.
Footnote 2RFC 4346 TLS 1.1forbids the use of these suites. These can be used in theSSLv3/TLS1.0 protocols, but cannot be used in TLS 1.1 andlater.
Cipher suites that use AES_256 require installation of the JCEUnlimited Strength Jurisdiction Policy Files. SeeImport Limits on Cryptographic Algorithms.
Cipher suites that use Elliptic Curve Cryptography (ECDSA, ECDH,ECDHE, ECDH_anon) require a JCE cryptographic provider that meetsthe following requirements:
The provider must implement ECC as defined by the classes andinterfaces in the packagesjava.security.spec andjava.security.interfaces. ThegetAlgorithm() method of elliptic curve key objectsmust return the string "EC".
The provider must support theSignature algorithmsSHA1withECDSA and NONEwithECDSA, theKeyAgreementalgorithm ECDH, and aKeyPairGenerator and aKeyFactory for algorithm EC. If one of thesealgorithms is missing, SunJSSE will not allow EC cipher suites tobe used.
The provider must support all the SECG curves referenced inRFC 4492specification, section 5.1.1 (see also appendix A). Incertificates, points should be encoded using the uncompressed formand curves should be encoded using thenamedCurvechoice, that is, using an object identifier.
If these requirements are not met, EC cipher suites may not benegotiated correctly.
Prior to the Java SE 7 release, the SSL/TLS implementation didnot check the version number in PreMasterSecret, and the SSL/TLSclient did not send the correct version number by default. Unlessthe system propertycom.sun.net.ssl.rsaPreMasterSecretFix is set totrue, the TLS client sends the active negotiatedversion, but not the expected maximum version supported by theclient.
For compatibility, this behavior is preserved for SSL version3.0 and TLS version 1.0. However, for TLS version 1.1 or later, theimplementation tightens checking the PreMasterSecret versionnumbers as required byRFC 5246. Clients alwayssend the correct version number, and servers check the versionnumber strictly. The system property,com.sun.net.ssl.rsaPreMasterSecretFix, is not used inTLS 1.1 or later.
SunJCE ProviderAs described briefly inTheSUN Provider, US export regulations at the timerestricted the type of cryptographic functionality that could bemade available in the JDK. A separate API and referenceimplementation was developed that allowed applications toencrypt/decrypt data. The Java Cryptographic Extension (JCE) wasreleased as a separate "Optional Package" (also briefly known as a"Standard Extension"), and was available for JDK 1.2.x and 1.3.x.During the development of JDK 1.4, regulations were relaxed enoughthat JCE (and SunJSSE) could be bundled as part of the JDK.
The following algorithms are available in the SunJCEprovider:
| Engine | Algorithm Names |
|---|---|
AlgorithmParameterGenerator | DiffieHellman |
AlgorithmParameters | AES Blowfish DES DESede DiffieHellman OAEP PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 RC2 |
Cipher | See theCipher table. |
KeyAgreement | DiffieHellman |
KeyFactory | DiffieHellman |
KeyGenerator | AES ARCFOUR Blowfish DES DESede HmacMD5 HmacSHA1 HmacSHA256 HmacSHA384 HmacSHA512 RC2 |
KeyPairGenerator | DiffieHellman |
KeyStore | JCEKS |
Mac | HmacMD5 HmacSHA1 HmacSHA256 HmacSHA384 HmacSHA512 |
SecretKeyFactory | DES DESede PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBKDF2WithHmacSHA1 |
The following table listscipher algorithms available in the SunJCE provider.
| Algorithm Name | Modes | Paddings |
|---|---|---|
| AES | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB128, OFB,OFB8..OFB128 | NOPADDING, PKCS5PADDING, ISO10126PADDING |
| AESWrap | ECB | NOPADDING |
| ARCFOUR | ECB | NOPADDING |
| Blowfish, DES, DESede, RC2 | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB64, OFB,OFB8..OFB64 | NOPADDING, PKCS5PADDING, ISO10126PADDING |
| DESedeWrap | CBC | NOPADDING |
| PBEWithMD5AndDES, PBEWithMD5AndTripleDES1PBEWithSHA1AndDESede, PBEWithSHA1AndRC2_40 | CBC | PKCS5Padding |
| RSA | ECB | NOPADDING, PKCS1PADDING, OAEPWITHMD5ANDMGF1PADDING,OAEPWITHSHA1ANDMGF1PADDING, OAEPWITHSHA-1ANDMGF1PADDING,OAEPWITHSHA-256ANDMGF1PADDING, OAEPWITHSHA-384ANDMGF1PADDING,OAEPWITHSHA-512ANDMGF1PADDING |
1 PBEWithMD5AndTripleDES is a proprietaryalgorithm that has not been standardized.
The SunJCE provider uses the following default keysizes (inbits) and enforces the following restrictions:
KeyGenerator
| Algorithm Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| AES | 128 | Keysize must be equal to 128, 192, or 256. |
| ARCFOUR (RC4) | 128 | Keysize must range between 40 and 1024 (inclusive). |
| Blowfish | 128 | Keysize must be a multiple of 8, ranging from 32 to 448(inclusive). |
| DES | 56 | Keysize must be equal to 56. |
| DESede (Triple DES) | 168 | Keysize must be equal to 112 or 168. A keysize of 112 will generate a Triple DES key with 2intermediate keys, and a keysize of 168 will generate a Triple DESkey with 3 intermediate keys. Due to the "Meet-In-The-Middle" problem, even though 112 or 168bits of key material are used, theeffective keysize is 80or 112 bits respectively. |
| HmacMD5 | 512 | No keysize restriction. |
| HmacSHA1 | 512 | No keysize restriction. |
| HmacSHA256 | 256 | No keysize restriction. |
| HmacSHA384 | 384 | No keysize restriction. |
| HmacSHA512 | 512 | No keysize restriction. |
| RC2 | 128 | Keysize must range between 40 and 1024 (inclusive). |
NOTE: The various Password-Based Encryption (PBE)algorithms use various algorithms to generate key data, andultimately depends on the targeted Cipher algorithm. For example,"PBEWithMD5AndDES" will always generate 56-bit keys.
KeyPairGenerator
| Algorithm Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| Diffie-Hellman (DH) | 2048Footnote 1 | Keysize must either be a multiple of 64, ranging from 512 to 1024 (inclusively), or 2048.Footnote 1 |
AlgorithmParameterGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| Diffie-Hellman (DH) | 2048Footnote 1 | Keysize must either be a multiple of 64, ranging from 512 to 1024 (inclusively), or 2048.Footnote 1 |
| DSA | 1024 | Keysize must be a multiple of 64, ranging from 512 to 1024(inclusively). |
Footnote 1Diffie-Hellman key pair generation supports key sizes up to 2048 bits since Java SE 7u91. Prior to Java SE 7u91, the default key size was 1024.
SunJGSS ProviderThe following algorithms are available in theSunJGSS provider:
| OID | Name |
|---|---|
1.2.840.113554.1.2.2 | Kerberos v5 |
1.3.6.1.5.5.2 | SPNEGO |
SunSASL ProviderThe following algorithms are available in theSunSASL provider:
| Engine | Algorithm Names |
|---|---|
SaslClient | CRAM-MD5 DIGEST-MD5 EXTERNAL GSSAPI PLAIN |
SaslServer | CRAM-MD5 DIGEST-MD5 GSSAPI |
XMLDSig ProviderThe following algorithms are available in theXMLDSig provider:
| Engine | Algorithm Names |
|---|---|
KeyInfoFactory | DOM |
TransformService | http://www.w3.org/TR/2001/REC-xml-c14n-20010315 -(CanonicalizationMethod.INCLUSIVE)http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments -( CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS)http://www.w3.org/2001/10/xml-exc-c14n# -( CanonicalizationMethod.EXCLUSIVE)http://www.w3.org/2001/10/xml-exc-c14n#WithComments -( CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS)http://www.w3.org/2000/09/xmldsig#base64 -( Transform.BASE64)http://www.w3.org/2000/09/xmldsig#enveloped-signature -( Transform.ENVELOPED)http://www.w3.org/TR/1999/REC-xpath-19991116 -( Transform.XPATH)http://www.w3.org/2002/06/xmldsig-filter2 -( Transform.XPATH2)http://www.w3.org/TR/1999/REC-xslt-19991116 -( Transform.XSLT) |
XMLSignatureFactory | DOM |
SunPCSC ProviderThe SunPCSC provider enables applications to use theJava Smart Card I/OAPI to interact with the PC/SC Smart Card stack of theunderlying operating system. On some operating systems, it may benecessary to enable and configure the PC/SC stack before it isusable. Consult your operating system documentation fordetails.
On Solaris and Linux platforms, SunPCSC accesses the PC/SC stackvia thelibpcsclite.so library. It looks for thislibrary in the directories/usr/$LIBISA and/usr/local/$LIBISA, where$LIBISA isexpanded tolib on 32-bit platforms,lib/64 on 64-bit Solaris platforms, andlib64 on 64-bit Linux platforms. The system propertysun.security.smartcardio.library may also be set tothe full filename of an alternatelibpcsclite.soimplementation. On Windows platforms, SunPCSC always calls intowinscard.dll and no Java-level configuration isnecessary or possible.
If PC/SC is available on the host platform, the SunPCSCimplementation can be obtained viaTerminalFactory.getDefault() andTerminalFactory.getInstance("PC/SC"). If PC/SC is notavailable or not correctly configured, agetInstance()call will fail with aNoSuchAlgorithmException andgetDefault() will return a JRE built-in implementationthat does not support any terminals.
The following algorithms are available in theSunPCSC provider:
| Engine | Algorithm Names |
|---|---|
TerminalFactory | PC/SC |
SunMSCAPI ProviderThe SunMSCAPI provider enables applications to use the standardJCA/JCE APIs to access the native cryptographic libraries,certificates stores and key containers on the Microsoft Windowsplatform. The SunMSCAPI provider itself does not containcryptographic functionality, it is simply a conduit between theJava environment and the native cryptographic services onWindows.
The following algorithms are available in theSunMSCAPI provider:
| Engine | Algorithm Names |
|---|---|
Cipher | RSARSA/ECB/PKCS1Padding only |
KeyPairGenerator | RSA |
KeyStore | Windows-MY The keystore type that identifies the native Microsoft WindowsMY keystore. It contains the user's personal certificates andassociated private keys. Windows-ROOTThe keystore type that identifies the native Microsoft WindowsROOT keystore. It contains the certificates of Root certificateauthorities and other self-signed trusted certificates. |
SecureRandom | Windows-PRNG The name of the native pseudo-random number generation (PRNG)algorithm. |
Signature | MD5withRSA MD2withRSA NONEwithRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
The SunMSCAPI provider uses the following default keysizes (inbits) and enforce the following restrictions:
KeyGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| RSA | 1024 | Keysize ranges from 512 bits to 16,384 bits (depending on theunderlying Microsoft Windows cryptographic service provider). |
SunEC ProviderThe SunEC provider implements Elliptical Curve Cryptography(ECC). ECC is emerging as an attractive public-key cryptosystem formobile/wireless and other environments. Compared to traditionalcryptosystems like RSA, ECC offers equivalent security with smallerkey sizes, which results in faster computations, lower powerconsumption, as well as memory and bandwidth savings.
Applications can now use the standard JCA/JCE APIs to access ECCfunctionality without the dependency on external ECC libraries(viaSunPKCS11), as was the case in the JDK 6 release.
The following algorithms are available in theSunECprovider:
| Engine | Algorithm Name(s) |
|---|---|
AlgorithmParameters | EC |
KeyAgreement | ECDH |
KeyFactory | EC |
KeyPairGenerator | EC |
Signature | NONEwithECDSA SHA1withECDSA SHA256withECDSA SHA384withECDSA SHA512withECDSA |
The SunEC provider uses the following default keysizes (in bits)and enforces the following restrictions:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| EC | 256 | Keysize must range from 112 to 571 (inclusive). |
OracleUcrypto ProviderThe Solaris-only security providerOracleUcrypto (introduced in JDK 7u4) leverages the Solaris Ucrypto library to offload and delegate cryptographic operations supported by the Oracle SPARC T4 basedon-core cryptographic instructions. TheOracleUcryptoprovider itself does not contain cryptographic functionality; it issimply a conduit between the Java environment and the SolarisUcrypto library.
If the underlying Solaris Ucrypto library does not support aparticular algorithm, then the OracleUcrypto provider will notsupport it either. Consequently, at runtime, the supportedalgorithms consists of the intersection of those that the SolarisUcrypto library supports and those that theOracleUcrypto provider recognizes.
Note that theOracleUcrypto provider is includedonly in Oracle's JDK. It is not part of OpenJDK.
The following algorithms are available in theOracleUcrypto provider:
| Engine | Algorithm Name(s) |
|---|---|
Cipher | AES RSA AES/ECB/NoPadding AES/ECB/PKCS5Padding AES/CBC/NoPadding AES/CBC/PKCS5Padding AES/CTR/NoPadding AES/GCM/NoPadding AES/CFB128/NoPadding AES/CFB128/PKCS5Padding RSA/ECB/PKCS1Padding RSA/ECB/NoPadding |
Signature | MD5withRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
MessageDigest | MD5 SHA SHA-256 SHA-384 SHA-512 |
TheOracleUcrypto provider does not specify anydefault keysizes or keysize restrictions; these are specified bythe underlying Solaris Ucrypto library.
OracleUcrypto Provider Configuration FileTheOracleUcrypto provider has a configuration filenameducrypto-solaris.cfg that resides in the$JAVA_HOME/lib/security directory. Modify thisconfiguration file to specify which algorithms to disable bydefault. For example, the following configuration file disables AESwith CFB128 mode by default:
## Configuration file for the OracleUcrypto provider#disabledServices = { Cipher.AES/CFB128/PKCS5Padding Cipher.AES/CFB128/NoPadding}TheApple provider implements ajava.security.KeyStore that provides access to the Mac OS X Keychain.
The following algorithms are available in theApple provider:
| Engine | Algorithm Name(s) |
|---|---|
KeyStore | KeychainStore |