The following topics are covered:
SunPKCS11ProviderSUN ProviderSunRsaSignProviderSunJSSEProviderSunJCEProviderSunJGSSProviderSunSASLProviderXMLDSigProviderSunPCSCProviderSunMSCAPIProviderSunEC ProviderOracleUcryptoProviderApple ProviderNote:Java Cryptography Architecture (JCA) Standard Algorithm Name Documentation for JDK 8 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 bothhistorical reasons and by the types of services provided. General purposeapplicationsSHOULD NOT request cryptographic services fromspecific providers.That is:
getInstance("...","SunJCE"); // not recommendedversus
getInstance("..."); // recommendedOtherwise, applications are tied to specific providers that maynot be available on other Java implementations. They also might notbe able 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(Stringtransformation) factory method generatesCiphers using transformations of the formalgorithm/mode/padding. If the mode/padding areomitted, theSunJCE andSunPKCS11 providers useECB as the default mode and PKCS5Padding as the default padding for manysymmetric ciphers.
It is recommended to use transformations that fully specify thealgorithm, mode, and padding instead of relying on thedefaults.
Note: ECB works well for single blocks of dataand can be parallelized, but absolutely should not be used formultiple blocks of data.
The following table lists the default preference order of theavailableSecureRandom implementations.
| OS | Algorithm Name | Provider Name |
|---|---|---|
| Solaris | 1. PKCS11* | SunPKCS11 |
| 2. NativePRNG** | Sun | |
| 3. SHA1PRNG** | Sun | |
| 4. NativePRNGBlocking | Sun | |
| 5. NativePRNGNonBlocking | Sun | |
| Linux | 1. NativePRNG** | Sun |
| 2. SHA1PRNG** | Sun | |
| 3. NativePRNGBlocking | Sun | |
| 4. NativePRNGNonBlocking | Sun | |
| macOS | 1. NativePRNG** | Sun |
| 2. SHA1PRNG** | Sun | |
| 3. NativePRNGBlocking | Sun | |
| 4. NativePRNGNonBlocking | Sun | |
| Windows | 1. SHA1PRNG | Sun |
| 2. Windows-PRNG*** | SunMSCAPI |
* TheSunPKCS11 provider is available on all platforms, but isonly enabled by default on Solaris as it is the only OS with anative PKCS11 implementation automatically installed andconfigured. On other platforms, applications or deployers mustspecifically install and configure a native PKCS11 library, andthen configure and enable theSunPKCS11 provider to use it.
** On Solaris, Linux, and macOS, if theentropy gatheringdevice injava.security is set tofile:/dev/urandom orfile:/dev/random,then NativePRNG is preferred to SHA1PRNG. Otherwise, SHA1PRNG ispreferred.
*** There is currently no NativePRNG on Windows. Access to theequivalent functionality is via theSunMSCAPI provider.
If there are noSecureRandom implementationsregistered in the JCA framework,java.security.SecureRandom will use the hardcodedSHA1PRNG.
SunPKCS11 ProviderThe Cryptographic Token Interface Standard (PKCS#11) provides nativeprogramming 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 DKS |
MessageDigest | MD2 MD5 SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 SHA-512/224 SHA-512/256 |
Policy | JavaPolicy |
SecureRandom | SHA1PRNG (Initial seeding is currently done via a combinationof system attributes and thejava.security entropygathering device)NativePRNG ( nextBytes() uses/dev/urandom,generateSeed() uses/dev/random)NativePRNGBlocking ( nextBytes() andgenerateSeed() use/dev/random)NativePRNGNonBlocking ( nextBytes() andgenerateSeed() use/dev/urandom) |
Signature | NONEwithDSA SHA1withDSA SHA224withDSA SHA256withDSA Note: For signature generation, if the security strength ofthe digest algorithm is weaker than the security strength of the key used tosign the signature (for example, using (2048, 256)-bit DSA keys with theSHA1withDSA signature), then the operation will fail with the error message:"The security strength of SHA1 digest algorithm is not sufficient for this keysize." |
The following table lists OIDs associated with SHA MessageDigests:
| SHA Message Digest | OID |
|---|---|
| SHA-224 | 2.16.840.1.101.3.4.2.4 |
| SHA-256 | 2.16.840.1.101.3.4.2.1 |
| SHA-384 | 2.16.840.1.101.3.4.2.2 |
| SHA-512 | 2.16.840.1.101.3.4.2.3 |
| SHA-512/224 | 2.16.840.1.101.3.4.2.5 |
| SHA-512/256 | 2.16.840.1.101.3.4.2.6 |
The following table lists OIDs associated with DSASignatures:
| DSA Signature | OID |
|---|---|
| SHA1withDSA | 1.2.840.10040.4.3 1.3.14.3.2.13 1.3.14.3.2.27 |
| SHA224withDSA | 2.16.840.1.101.3.4.3.1 |
| SHA256withDSA | 2.16.840.1.101.3.4.3.2 |
TheSUN provider uses the following defaultkeysizes (in bits) and enforces the following restrictions:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| DSA | 2048 | Keysize must be a multiple of 64, ranging from 512 to 1024(inclusive), or 2048. |
AlgorithmParameterGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| DSA | 2048 | Keysize must be a multiple of 64, ranging from 512 to 1024(inclusive), or 2048. |
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 |
|---|---|
AlgorithmParameters | RSASSA-PSS |
KeyFactory | RSA RSASSA-PSS |
KeyPairGenerator | RSA RSASSA-PSS |
Signature | MD2withRSA MD5withRSA RSASSA-PSS SHA1withRSA SHA224withRSA SHA256withRSA SHA384withRSA SHA512withRSA SHA512/224withRSA SHA512/256withRSA |
TheSunRsaSign provider uses the following defaultkeysize (in bits) and enforces the following restriction:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| RSA and RSASSA-PSS | 2048 | Keysize must range between 512 and 16384 bits. If the key size exceeds 3072,then the public exponent length cannot exceed 64 bits. |
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 | RSA |
KeyManagerFactory | SunX509: A factory for PKIX: A factory for |
KeyPairGenerator | RSA |
KeyStore | PKCS12Footnote 1 |
Signature | MD2withRSA MD5withRSA SHA1withRSA |
SSLContext | SSLv3 TLSv1 TLSv1.1 TLSv1.2 |
TrustManagerFactory | SunX509: A factory for PKIX: A factory for |
Footnote 1 The PKCS12KeyStore implementation does not support theKeyBag type.
The following table lists theprotocol parameters that theSunJSSE provider supports:
| Protocol | Enabled by Default for Client | Enabled by Default for Server |
|---|---|---|
| SSLv3 | No | No |
| TLSv1Footnote 1 | No | No |
| TLSv1.1Footnote 1 | No | No |
| TLSv1.2 | Yes | Yes |
| TLSv1.3 | Yes | Yes |
| SSLv2HelloFootnote 2 | No | Yes |
Footnote 1 -TLS 1.0 and 1.1 are versions of the TLS protocol that are no longerconsidered secure and have been superseded by more secure and modern versions(TLS 1.2 and 1.3). These versions have now been disabled by default. If youencounter issues, you can, at your own risk, re-enable the versions by removingTLSv1 or TLSv1.1 from thejdk.tls.disabledAlgorithms SecurityProperty in thejava.security configuration file.
Footnote 2 -The SSLv3, TLSv1, TLSv1.1 andTLSv1.2 protocols allow you to send SSLv3, TLSv1, TLSv1.1 andTLSv1.2 ClientHellos encapsulated in an SSLv2 format hello by usingthe SSLv2Hello pseudo-protocol. The following table illustrateswhich connection combinations are possible when usingSSLv2Hellos:
| Client | Server | Connection |
|---|---|---|
| enabled | enabled | Y |
| disabled | enabled | Y (most interoperable:SunJSSE default) |
| enabled | disabled | N |
| disabled | disabled | Y |
Note: The protocols available by default in a JDK releasechange as new protocols are developed and old protocols are found to be lesseffective than previously thought. The JDK uses two mechanisms to restrict theavailability of these protocols:
jdk.tls.disabledAlgorithms Security Property: This disables categories of protocols and cipher suites. For example, if this Security Property containsSSLv3, then the SSLv3 protocol would be disabled. SeeDisabled and Restricted Cryptographic Algorithms for information about this Security Property.The following are the currently implemented SunJSSE cipher suites for thisJDK release, sorted by order of preference. Not all of these cipher suites areavailable for use by default.
Prior to the JDK 7 release, the SSL/TLS implementation did notcheck the version number in PreMasterSecret, and the SSL/TLS clientdid not send the correct version number by default. Unless thesystem propertycom.sun.net.ssl.rsaPreMasterSecretFixis set totrue, the TLS client sends the activenegotiated version, but not the expected maximum version supportedby the client.
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 theSunJCEprovider:
| Engine | Algorithm Names |
|---|---|
AlgorithmParameterGenerator | DiffieHellman |
AlgorithmParameters | AES Blowfish DES DESede DiffieHellman OAEP PBE PBES2 PBEWithHmacSHA1AndAES_128 PBEWithHmacSHA224AndAES_128 PBEWithHmacSHA256AndAES_128 PBEWithHmacSHA384AndAES_128 PBEWithHmacSHA512AndAES_128 PBEWithHmacSHA1AndAES_256 PBEWithHmacSHA224AndAES_256 PBEWithHmacSHA256AndAES_256 PBEWithHmacSHA384AndAES_256 PBEWithHmacSHA512AndAES_256 PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBEWithSHA1AndRC2_128 PBEWithSHA1AndRC4_40 PBEWithSHA1AndPC4_128 RC2 |
Cipher | See theCipher table. |
KeyAgreement | DiffieHellman |
KeyFactory | DiffieHellman |
KeyGenerator | AES ARCFOUR Blowfish DES DESede HmacMD5 HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 RC2 |
KeyPairGenerator | DiffieHellman |
KeyStore | JCEKS |
Mac | HmacMD5 HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 HmacPBESHA1 PBEWithHmacSHA1 PBEWithHmacSHA224 PBEWithHmacSHA256 PBEWithHmacSHA384 PBEWithHmacSHA512 |
SecretKeyFactory | DES DESede PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBEWithSHA1AndRC2_128 PBEWithSHA1AndRC4_40 PBEWithSHA1AndRC4_128 PBKDF2WithHmacSHA1 PBKDF2WithHmacSHA224 PBKDF2WithHmacSHA256 PBKDF2WithHmacSHA384 PBKDF2WithHmacSHA512 PBEWithHmacSHA1AndAES_128 PBEWithHmacSHA224AndAES_128 PBEWithHmacSHA256AndAES_128 PBEWithHmacSHA384AndAES_128 PBEWithHmacSHA512AndAES_128 PBEWithHmacSHA1AndAES_256 PBEWithHmacSHA224AndAES_256 PBEWithHmacSHA256AndAES_256 PBEWithHmacSHA384AndAES_256 PBEWithHmacSHA512AndAES_256 |
The following table listscipher algorithms available in theSunJCE provider.
| Algorithm Name | Modes | Paddings |
|---|---|---|
| AES | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB128, OFB,OFB8..OFB128 | NoPadding, PKCS5Padding, ISO10126PaddingFootnote 1 |
| AES | GCM | NoPadding |
| 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, PBEWithMD5AndTripleDESFootnote 2, PBEWithSHA1AndDESede, PBEWithSHA1AndRC2_40, PBEWithSHA1AndRC2_128, PBEWithSHA1AndRC4_40, PBEWithSHA1AndRC4_128, PBEWithHmacSHA1AndAES_128, PBEWithHmacSHA224AndAES_128, PBEWithHmacSHA256AndAES_128, PBEWithHmacSHA384AndAES_128, PBEWithHmacSHA512AndAES_128, PBEWithHmacSHA1AndAES_256, PBEWithHmacSHA224AndAES_256, PBEWithHmacSHA256AndAES_256, PBEWithHmacSHA384AndAES_256, PBEWithHmacSHA512AndAES_256 | CBC | PKCS5Padding |
| RSA | ECB | NoPadding, PKCS1Padding, OAEPWithMD5AndMGF1Padding, OAEPWithSHA1AndMGF1Padding, OAEPWithSHA-1AndMGF1Padding, OAEPWithSHA-224AndMGF1Padding, OAEPWithSHA-256AndMGF1Padding, OAEPWithSHA-384AndMGF1Padding, OAEPWithSHA-512AndMGF1Padding OAEPWithSHA-512/224AndMGF1Padding, OAEPWithSHA-512/2256ndMGF1Padding |
Footnote 1Though the standard doesn't specify or require the padding bytes to be random,the Java SE ISO10126Padding implementation pads with random bytes (until thelast byte, which provides the length of padding, as specified).
Footnote 2PBEWithMD5AndTripleDES is a proprietary algorithm that has not beenstandardized.
TheSunJCE 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. |
| HmacSHA224 | 224 | 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) | 2048 | Keysize must be a multiple of 64, ranging from 512 to 2048(inclusive). |
AlgorithmParameterGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| Diffie-Hellman (DH) | 2048 | Keysize must be a multiple of 64, ranging from 512 to 2048(inclusive). |
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 NTLM PLAIN |
SaslServer | CRAM-MD5 DIGEST-MD5 GSSAPI NTLM |
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 ProviderTheSunPCSC 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, theSunPCSCimplementation 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 ProviderTheSunMSCAPI provider enables applications to use the standardJCA/JCE APIs to access the native cryptographic libraries,certificates stores and key containers on the Microsoft Windowsplatform. TheSunMSCAPI 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 RSASSA-PSS SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA SHA1withECDSA SHA224withECDSA SHA256withECDSA SHA384withECDSA SHA512withECDSA |
TheSunMSCAPI provider uses the following default keysizes (inbits) and enforce the following restrictions:
KeyGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| RSA | 2048 | Keysize ranges from 512 bits to 16,384 bits (depending on theunderlying Microsoft Windows cryptographic service provider). |
SunECProviderTheSunEC provider implements Elliptical Curve Cryptography(ECC). Compared to traditional cryptosystems such as RSA, ECC offersequivalent security with smaller key sizes, which results in fastercomputations, lower power consumption, and memory and bandwidth savings.Applications can use the standard JCA/JCE APIs to access ECC functionalitywithout the dependency on external ECC libraries (throughSunPKCS11).
The following algorithms are available in theSunECprovider:
| Engine | Algorithm Name(s) |
|---|---|
AlgorithmParameters | EC |
KeyAgreement | ECDHFootnote 1 |
KeyFactory | EC |
KeyPairGenerator | ECFootnote 1 |
Signature | NONEwithECDSAFootnote 1 SHA1withECDSAFootnote 1 SHA224withECDSAFootnote 1 SHA256withECDSAFootnote 1 SHA384withECDSAFootnote 1 SHA512withECDSAFootnote 1 |
Footnote 1This algorithm won't be available from the SunEC provider through theJCA/JCE APIs if you delete theSunEC provider's native library.SeeEffect ofRemoving SunEC Provider's Native Library.
TheSunEC provider uses a native library to provide someECC functionality. If you don't want to use this native library, thendelete the following files (depending on your operating system):
$JAVA_HOME/lib/libsunec.so$JAVA_HOME/lib/libsunec.dylib%JAVA_HOME%\bin\sunec.dllIf you delete the native library, then the algorithms with a footnotein the previous table won't be available from theSunECprovider through the JCA/JCE APIs.
Note: Other installed providers (for example,SunPCKS11) may still provide these algorithms.
Libraries and tools (for example, JSSE, XML Digital Signature, andkeytool) that use these algorithms may have reduced functionality.For example, JSSE may no longer be able to generate EC keypairs,use EC-based peer certificates, or perform ECDH/ECDHE key agreements forSSL/TLS connections. Ciphersuites such as TLS_*_ECDSA and TLS_ECDHE_* maybe unavailable. SSL/TLS connections can still use alternate algorithms tosecure connections, such as RSA-/DSA-based certificates and key agreementsbased on DH/DHE (RFC 2631) or FFDHE (RFC 7919).
Even if the native library is removed, the rest of the algorithms (thealgorithms without a footnote) are still available from the SunECprovider, as they are not implemented in the native library code.
TheSunEC 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). |
TheSunEC provider includes implementations of variouselliptic curves for use with the EC, Elliptic-Curve Diffie-Hellman (ECDH),and Elliptic Curve Digital Signature Algorithm (ECDSA) algorithms. Some ofthese curves have been implemented using modern formulas and techniquesthat are valuable for preventing side-channel attacks. The others arelegacy curves that might be more vulnerable to attacks and should not beused. The tables below list the curves that fall into each of thesecategories.
In the following tables, the first column, Curve Name, lists the namethat SunEC implements. The second column, Object Identifier, specifies theEC name's object identifier. The third column, Additional Names/Aliases,specifies any additional names or aliases for that curve. All strings thatappear in one row refer to the same curve. For example, the stringssecp256r1,1.2.840.10045.3.1.7,NIST P-256, andX9.62 prime256v1 refer to the samecurve. You can use the curve names to create parameter specifications forEC parameter generation with theECGenParameterSpec class.
The following table lists the elliptic curves that are provided by theSunEC provider and are implemented using modern formulas andtechniques. These curves are recommended and should be preferred over thecurves listed in the sectionLegacy Curves Retained for Compatibility.
| Curve Name | Object Identifier | Additional Names/Aliases |
|---|---|---|
| secp256r1 | 1.2.840.10045.3.1.7 | NIST P-256, X9.62 prime256v1 |
| secp384r1 | 1.3.132.0.34 | NIST P-384 |
| secp521r1 | 1.3.132.0.35 | NIST P-521 |
It is recommended that you migrate to newer curves.
The following table lists elliptic curves that are provided by theSunEC provider and are not implemented using modern formulasand techniques. These curves remain available for compatibility reasons toafford legacy systems time to migrate to newer curves. Theseimplementations will be removed or replaced in a future version of the JDK.
| Curve Name | Object Identifier | Additional Names/Aliases |
|---|---|---|
| secp112r1 | 1.3.132.0.6 | N/A |
| secp112r2 | 1.3.132.0.7 | N/A |
| secp128r1 | 1.3.132.0.28 | N/A |
| secp128r2 | 1.3.132.0.29 | N/A |
| secp160k1 | 1.3.132.0.9 | N/A |
| secp160r1 | 1.3.132.0.8 | N/A |
| secp160r2 | 1.3.132.0.30 | N/A |
| secp192k1 | 1.3.132.0.31 | N/A |
| secp192r1 | 1.2.840.10045.3.1.1 | NIST P-192, X9.62 prime192v1 |
| secp224k1 | 1.3.132.0.32 | N/A |
| secp224r1 | 1.3.132.0.33 | NIST P-224 |
| secp256k1 | 1.3.132.0.10 | N/A |
| sect113r1 | 1.3.132.0.4 | N/A |
| sect113r2 | 1.3.132.0.5 | N/A |
| sect131r1 | 1.3.132.0.22 | N/A |
| sect131r2 | 1.3.132.0.23 | N/A |
| sect163k1 | 1.3.132.0.1 | NIST K-163 |
| sect163r1 | 1.3.132.0.2 | N/A |
| sect163r2 | 1.3.132.0.15 | NIST B-163 |
| sect193r1 | 1.3.132.0.24 | N/A |
| sect193r2 | 1.3.132.0.25 | N/A |
| sect233k1 | 1.3.132.0.26 | NIST K-233 |
| sect233r1 | 1.3.132.0.27 | NIST B-233 |
| sect239k1 | 1.3.132.0.3 | N/A |
| sect283k1 | 1.3.132.0.16 | NIST K-283 |
| sect283r1 | 1.3.132.0.17 | NIST B-283 |
| sect409k1 | 1.3.132.0.36 | NIST K-409 |
| sect409r1 | 1.3.132.0.37 | NIST B-409 |
| sect571k1 | 1.3.132.0.38 | NIST K-571 |
| sect571r1 | 1.3.132.0.39 | NIST B-571 |
| X9.62 c2tnb191v1 | 1.2.840.10045.3.0.5 | N/A |
| X9.62 c2tnb191v2 | 1.2.840.10045.3.0.6 | N/A |
| X9.62 c2tnb191v3 | 1.2.840.10045.3.0.7 | N/A |
| X9.62 c2tnb239v1 | 1.2.840.10045.3.0.11 | N/A |
| X9.62 c2tnb239v2 | 1.2.840.10045.3.0.12 | N/A |
| X9.62 c2tnb239v3 | 1.2.840.10045.3.0.13 | N/A |
| X9.62 c2tnb359v1 | 1.2.840.10045.3.0.18 | N/A |
| X9.62 c2tnb431r1 | 1.2.840.10045.3.0.20 | N/A |
| X9.62 prime192v2 | 1.2.840.10045.3.1.2 | N/A |
| X9.62 prime192v3 | 1.2.840.10045.3.1.3 | N/A |
| X9.62 prime239v1 | 1.2.840.10045.3.1.4 | N/A |
| X9.62 prime239v2 | 1.2.840.10045.3.1.5 | N/A |
| X9.62 prime239v3 | 1.2.840.10045.3.1.6 | N/A |
OracleUcrypto ProviderThe Solaris-only security providerOracleUcryptoleverages the Solaris Ucrypto library to offload and delegatecryptographic 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 theOracleUcrypto 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 macOS Keychain.
The following algorithms are available in theAppleprovider:
| Engine | Algorithm Name(s) |
|---|---|
KeyStore | KeychainStore |