[
https://issues.apache.org/jira/browse/RANGER-3174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17986586#comment-17986586
]
Vikas Kumar edited comment on RANGER-3174 at 6/27/25 5:35 PM:
--------------------------------------------------------------
With this commit, now KMS will start supporting P{_}BKDF2WithHmacSHA256
algorithm if FIPS is enabled{_}. This algorithm is FIPS complaint and being
provided by many SecurityProviders.
Currently I have kept this if FIPS is enabled, means, if keyStoreType is
*"bcfks"*
So if FIPS is enabled, then following will happen:
# All new keys material will be encrypted/decrypted using PBKDF2WithHmacSHA256
algorithm.
# Any older keys (including MasterKey) will be re-encrypted using
PBKDF2WithHmacSHA256 on KMS service start. This is an one time operation. Here
re-encryption means, decrypting the older keys using older algorithm and
re-encryption it using the current PBKDF2WithHmacSHA256 algorithm.
Please note that key material is not changing, only it is being re-encrypted
before storing into DB. hence, there is no risk of data loss.
h2. How was this patch tested?
# basic mvn build and UnitTest cases.
# {*}Manual testing in docker setup{*}. I used following steps to prepare
docker container for this testing:
** I used *bc-fips-2.0.0.jar* as SecurityProvider for PBKDF2WithHmacSHA256
*
** Copied **
{code:java}
bc-fips-2.0.0.jar jar to the
/usr/lib/jvm/java-8-openjdk-arm64/jre/lib/ext/{code}
*
** Updated
{code:java}
java.security file at /etc/java-8-openjdk/security/java.security{code}
to contain following content:
{code:java}
security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
org.bouncycastle.fips.approved_only=true{code}
*
** *For rangerkms.jceks* (that contains MasterKey password and DB password) :
created corresponding keystore in bcfks formart named rangerkms.localbcfks
*
** *dbks-site.xml* : Updated following properties in this file:
{code:java}
Key: ranger.ks.jpa.jdbc.credential.provider.path
Value:
localbcfks://file/opt/ranger/kms/ews/webapp/WEB-INF/classes/conf/rangerkms.localbcfks
Key: ranger.keystore.file.type
Value: bcfks
{code}
*Scenarios Tested:*
# *Fresh setup:* Masterkey and Zone keys got created using latest algorithm.
And basic encryption/decryption was working fine.
# *Cluster having old keys with older algorithm:*
** Here created one zone key (zonekey1) and one encryption Zone and copied one
test file inside the zone key
** Means, file got encrypted using DEK , and this DEK was encrypted using
corresponding zone keys . This zone keys was encrypted using PBEWithMD5AndDES.
** Then, created a new ranger-kms docker image with new changes. And started
the container.
** Here Masterkey and all zone keys got re-encypted using new algorithm.
** Files kept inside encryptionZone was accessible after keys re-encryption.
** Also, basic key life cycle like create/rotate/delete was also working.
PR: [https://github.com/apache/ranger/pull/593]
was (Author: JIRAUSER295683):
With this commit, now KMS will start supporting P{_}BKDF2WithHmacSHA256
algorithm if FIPS is enabled{_}. This algorithm is FIPS complaint and being
provided by many SecurityProviders.
Currently I have kept this if FIPS is enabled, means, if keyStoreType is
*"bcfks"*
So if FIPS is enabled, then following will happen:
# All new keys material will be encrypted/decrypted using PBKDF2WithHmacSHA256
algorithm.
# Any older keys (including MasterKey) will be re-encrypted using
PBKDF2WithHmacSHA256 on KMS service start. This is an one time operation. Here
re-encryption means, decrypting the older keys using older algorithm and
re-encryption it using the current PBKDF2WithHmacSHA256 algorithm.
Please note that key material is not changing, only it is being re-encrypted
before storing into DB. hence, there is no risk of data loss.
h2. How was this patch tested?
# basic mvn build and UnitTest cases.
# {*}Manual testing in docker setup{*}. I used following steps to prepare
docker container for this testing:
** I used *bc-fips-2.0.0.jar* as SecurityProvider for PBKDF2WithHmacSHA256
** Copied **
{code:java}
bc-fips-2.0.0.jar jar to the
/usr/lib/jvm/java-8-openjdk-arm64/jre/lib/ext/{code}
{{}}
** Updated
{code:java}
java.security file at /etc/java-8-openjdk/security/java.security{code}
to contain following content:
{code:java}
security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
org.bouncycastle.fips.approved_only=true{code}
** *For rangerkms.jceks* (that contains MasterKey password and DB password) :
created corresponding keystore in bcfks formart named rangerkms.localbcfks
** *dbks-site.xml* : Updated following properties in this file:
{code:java}
Key: ranger.ks.jpa.jdbc.credential.provider.path
Value:
localbcfks://file/opt/ranger/kms/ews/webapp/WEB-INF/classes/conf/rangerkms.localbcfks
Key: ranger.keystore.file.type
Value: bcfks
{code}
*Scenarios Tested:*
# *Fresh setup:* Masterkey and Zone keys got created using latest algorithm.
And basic encryption/decryption was working fine.
# *Cluster having old keys with older algorithm:*
** Here created one zone key (zonekey1) and one encryption Zone and copied one
test file inside the zone key
** Means, file got encrypted using DEK , and this DEK was encrypted using
corresponding zone keys . This zone keys was encrypted using PBEWithMD5AndDES.
** Then, created a new ranger-kms docker image with new changes. And started
the container.
** Here Masterkey and all zone keys got re-encypted using new algorithm.
** Files kept inside encryptionZone was accessible after keys re-encryption.
** Also, basic key life cycle like create/rotate/delete was also working.
PR: [https://github.com/apache/ranger/pull/593]
> Weak Cryptographic Algorithm and hash function used for PBE encryption
> ----------------------------------------------------------------------
>
> Key: RANGER-3174
> URL: https://issues.apache.org/jira/browse/RANGER-3174
> Project: Ranger
> Issue Type: Improvement
> Components: kms
> Reporter: Vicky Zhang
> Assignee: Vikas Kumar
> Priority: Major
> Fix For: 3.0.0
>
> Time Spent: 50m
> Remaining Estimate: 0h
>
> PBEWithMD5AndTripleDES is used in the file
> /kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStore.java line 310
> *Security impact*:
> MD5 is a deprecated hash algorithm and DES also not recommend for symmetric
> encryption. The use of a broken or risky cryptographic algorithm is an
> unnecessary risk that may result in the exposure of sensitive information.
> Useful resources: [https://cwe.mitre.org/data/definitions/327.html]
> *suggestions*:
> According to the
> [https://tools.ietf.org/html/rfc2898.|https://tools.ietf.org/html/rfc2898,]
> PBKDF2 is highly recommended while doing PBE encryption
> *Please share with us your opinions/comments if there is any:*
> Is the bug report helpful?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)