[
https://issues.apache.org/jira/browse/OFBIZ-5659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14036527#comment-14036527 ]
Adam Heath commented on OFBIZ-5659:
-----------------------------------
Ok, what fun. This functionality was *not* broken by the kek stuff I did. In EntityExpr, there is a method encryptConditionFields. That checks for lhs being a String, and if so, wilil attempt to encrypt the rhs.
However, if you look at the constructors for EntityExpr, lhs can never be a string. It will normally be an EntityFieldValue.
encryptConditionFields was added by David way back in 2005, so this particular feature has been broken for a very long time. In fact, at the time when this method was added, the code would have never had a chance of running *at all*.
> Person.socialSecurityNumber can't be used for findByAnd
> -------------------------------------------------------
>
> Key: OFBIZ-5659
> URL:
https://issues.apache.org/jira/browse/OFBIZ-5659> Project: OFBiz
> Issue Type: Bug
> Components: framework
> Affects Versions: SVN trunk, Release Branch 12.04, Release Branch 13.07
> Reporter: Adam Heath
> Assignee: Adam Heath
>
> In EntityCrypto, a random salt of bytes, with a random length between 5 and 16 characters, is added to each to-be-encrypted list of bytes. This entire array is then encrypted, and stored.
> Because the salt prefix is random each time, including when subsequent findByAnd calls are used, the database has no chance to do an equality test, so never finds the record.
> This was done, so that the same exact value stored for different rows would encrypt to a different value; this was thought to be better for security. It's based on how one-way password hashes work.
> My planned fix, is simple enough. Just change the salt length to 0. This will allow newly stored values to be looked up(with = or !=, but not with LIKE). Existing values already stored will be fixed by iterating over all of them, then restoring in place.
> However, what I would really like to see, is this encrypted+salt feature configurable *per field*. That will take a bit more time.
> ps: There is *no* test on lookups for Person.socialSecurityNumber; not even a test for a lookup on an encrypted field. I'll obviously be adding that.
--
This message was sent by Atlassian JIRA
(v6.2#6252)