[ 
https://issues.apache.org/jira/browse/NIFI-1257?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15127422#comment-15127422
 ] 

ASF GitHub Bot commented on NIFI-1257:
--------------------------------------

GitHub user alopresto opened a pull request:

    https://github.com/apache/nifi/pull/201

    NIFI-1257 and 1259

    NIFI-1257
    NIFI-1259
    
    Added the mechanics for additional strong `Key Derivation Functions` (KDF) 
including `PBKDF2`, `Bcrypt`, and `Scrypt` as well as `keyed ciphers` (raw key; 
no KDF). Integrated with `EncryptContent` processor and added new property and 
property descriptors. Dependent properties not available until NIFI-1121 is 
implemented. 
    
    Explanation of KDFs available here: [Apache NiFi 
Wiki](https://cwiki.apache.org/confluence/display/NIFI/Key+Derivation+Function+Explanations)

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/alopresto/nifi NIFI-1257-cherrypick

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/nifi/pull/201.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #201
    
----
commit ab566da624914d553188495a906a523ce7cbe209
Author: Andy LoPresto <[email protected]>
Date:   2015-12-22T18:12:02Z

    NIFI-1257:
    
    Added first skeleton of KeyDeriver functionality but re-evaluating to 
handle OpenSSL and NiFi legacy PBE consistently with modern KDFs.

commit aaef4ec6e5551392fdf441fe2bca5f6a924206ea
Author: Andy LoPresto <[email protected]>
Date:   2015-12-22T19:02:27Z

    NIFI-1257 Skeleton of key deriver mechanics and moving existing classes 
into crypto package.
    
    Added variable substitution with defaults to logback-test.xml. (+11 
squashed commits)
    Squashed commits:
    [5aa2ae2] NIFI-1257:
    
    Minor formatting changes in logback-test.xml.
    [af12eb5] NIFI-1257:
    
    Added CipherFactory.
    [3e04f5b] NIFI-1257:
    
    Improved Javadoc in NiFi legacy cipher provider and OpenSSL cipher provider.
    [bfdc1d7] NIFI-1257:
    
    Added PBKDF2 cipher provider implementation and Java & Groovy unit test 
skeletons.
    [20adeef] NIFI-1257:
    
    Added KeyedCipherProvider interface.
    [302a864] NIFI-1257:
    
    Moved OpenPGP encryptor unit tests to proper package.
    [ce5c231] NIFI-1257:
    
    Added test logback file with variable substitution expressions.
    [f2475eb] NIFI-1257:
    
    Added Groovy unit test support to allow faster development cycle.
    [4004cfd] NIFI-1257:
    
    Added OpenSSL PKCS#5 v1.5 EVP_BytesToKey cipher provider and unit test.
    [332b9dc] NIFI-1257:
    
    Moved crypto classes into new package.
    Began refactor from KeyDeriver to CipherProvider.
    [5277efc] NIFI-1257:
    
    Added variables with default value to logback-test.xml.

commit 07c1e1219153ee3ab5a030f68f0647ad41bdd3b9
Author: Andy LoPresto <[email protected]>
Date:   2016-01-13T20:25:34Z

    NIFI-1257 Committed state before refactor to inherit from shared 
CipherProvider interface. (+5 squashed commits)
    Squashed commits:
    [634802c] NIFI-1257 Added new keyed encryption methods and added boolean 
field for compatibility with new KDFs.
    [b74d23c] NIFI-1257 Added parseKeyLengthFromAlgorithm utility method.
    Added unit tests.
    [f3cd3b6] NIFI-1257 Moved cipher algorithm parsing utility method to common 
util class.
    [b0e785e] NIFI-1257 Applied contrib-check fixes for line length.
    [94a6ecf] NIFI-1257 Added Apache License to various tests.

commit 106de28eeda3838413226185dfe52e0c83bbf04a
Author: Andy LoPresto <[email protected]>
Date:   2016-01-14T02:00:34Z

    NIFI-1257 Implemented PBKDF2 cipher provider.
    
    Added default constructor with strong choices for PBKDF2 cipher provider. 
(+12 squashed commits)
    Squashed commits:
    [19f94a0] NIFI-1257 Implemented NiFiLegacyCipherProvider and added unit 
tests.
    [efcb5f6] NIFI-1257 Added convenience methods in OpenSSLPKCS5 provider that 
ignore desired key lengths (all OpenSSL algorithms specify key length in 
algorithm).
    [0381a06] NIFI-1257 Moved BC provider loading in test to single static 
invocation (decreases test time by ~40%).
    [b5a8682] NIFI-1257 Added ASF license to openssl_pbkdf2.rb.
    [87cfca0] NIFI-1257 Test cleanup.
    [cb3598b] NIFI-1257 Added key length parameter to PBKDF2 cipher provider.
    [aa50006] NIFI-1257 Added PRF resolution to PBKDF2 cipher provider.
    [9dfb6b0] NIFI-1257 Changed PBKDF2 and OpenSSLPKCS5 implementations to 
accept EncryptionMethod instead of individual algorithm and provider 
combinations.
    [d6156bd] NIFI-1257 Added test resource to generate PBKDF2-derived key and 
encrypt content using OpenSSL via Ruby.
    [6cee174] NIFI-1257 Removed duplicated test.
    [5ff87a4] NIFI-1257 Temporarily commented out other implementations while 
interface changes.
    [2f1ac0c] NIFI-1257 Added RandomIVPBECipherProvider to allow for 
non-deterministic IVs.

commit 3a835c4c9a8390a41090b7a66e905a3985b39977
Author: Andy LoPresto <[email protected]>
Date:   2016-01-17T06:43:25Z

    NIFI-1257 Added Bcrypt implementation.
    Added unit tests.
    Added jBcrypt dependency to pom because BC Bcrypt is OpenBSD-based, not 
compatible with standard Bcrypt as defined by the Niels Provos paper.
    Added Ruby script in resources for external compatibility testing.

commit a7c9a4a63facb82d5037c47332230c8b9200ca40
Author: Andy LoPresto <[email protected]>
Date:   2016-01-19T03:52:18Z

    NIFI-1257 Added Javadoc, unit tests, and utility methods.
    
    Updated PBKDF2 IV check to invalid length, rather than just non-zero check. 
(+15 squashed commits)
    Squashed commits:
    [0c66002] NIFI-1257 Added isKeyedCipher boolean method for EncryptionMethod.
    [5d64dfa] NIFI-1257 Added TODO for invalid IV length check.
    [5c73364] NIFI-1257 Added test for empty PRF in PBKDF2 constructor.
    Added key length check to PBKDF2 cipher provider.
    [57ade68] NIFI-1257 Ignored tests for weak iteration count/work factor but 
added warning message in constructors.
    Changed default PRF to SHA-512.
    Added salt and key length check to PBKDF2 cipher provider.
    [362828f] NIFI-1257 Added pass-through of IllegalArgumentExceptions in 
cipher initialization.
    [9f019ed] NIFI-1257 OpenSSL cipher provider ignores requested key length.
    [6db634b] NIFI-1257 Added check for salt length and encryption method 
presence.
    [e6426a9] NIFI-1257 Added utility method for algorithm-specific key length 
check.
    Added unit tests.
    [3503b35] NIFI-1257 Added unit test validating salt format for Bcrypt.
    [9ffd358] NIFI-1257 Implemented key length check in Bcrypt cipher provider.
    Added unit tests.
    [5dc8801] NIFI-1257 Improved Javadoc on CipherUtility.
    [a3eb290] NIFI-1257 Added utility method to check key length validity for 
cipher families.
    Added unit tests.
    [51ce74f] NIFI-1257 Added unit tests to enforce strong default values for 
Bcrypt work factor and PBKDF2 iteration counts.
    [b8dfd4e] NIFI-1257 Corrected license language for jBcrypt in 
nifi-standard-nar and nifi-assembly LICENSE files.
    [8a85b33] NIFI-1257 Added license info for jBcrypt into nifi-standard-nar 
and nifi-assembly LICENSE files.

commit 28243e9663e53fc8232bff21a65f1bd7654e32e0
Author: Andy LoPresto <[email protected]>
Date:   2016-01-21T03:48:45Z

    NIFI-1257 Reduced code duplication by invoking KeyedCipherProvider from 
BcryptCipherProvider after key derivation. (+4 squashed commits)
    Squashed commits:
    [1c2f06f] NIFI-1257 Fixed bug in Base64 section of Bcrypt salt regular 
expression.
    [632104a] NIFI-1257 Added unit test for generateSalt.
    [8cc990f] NIFI-1257 Reduced code duplication by invoking 
KeyedCipherProvider from PBKDF2CipherProvider after key derivation.
    Added unit test for invalid IV.
    [75c4690] NIFI-1257 Defined interface for KeyedCipherProvider.
    Implemented AES implementation for KeyedCipherProvider.
    Added unit tests.
    Added Ruby script to test/resources for external compatibility check.

commit 3f0b3ca30423000c50075414d4ca02bb21bc69cd
Author: Andy LoPresto <[email protected]>
Date:   2016-01-22T03:35:43Z

    NIFI-1257 Implemented Scrypt cipher provider.
    
    Refactored Scrypt internals and added unit tests.
    
    Added unit test for Scrypt check with correct and incorrect passwords.
    Changed check to remove hard-coded derived key length. (+3 squashed commits)
    Squashed commits:
    [c1d7637] NIFI-1257 Added unit test for Scrypt check with invalid passwords 
and hashes.
    [f89b2fb] NIFI-1257 Implemented minimum safe parameters calculator and unit 
test.
    Updated salt format regex.
    [f553bce] NIFI-1257 Moved memory calculation helper to Scrypt. (+2 squashed 
commits)
    Squashed commits:
    [13c1b52] NIFI-1257 Cleaned up unit tests and javadoc.
    
    Resolved failing PBKDF2 tests and copied multiple run average logic to 
Bcrypt tests. (+6 squashed commits)
    Squashed commits:
    [b16a5b3] NIFI-1257 Updated default iteration count for PBKDF2 cipher 
provider.
    [b083b66] NIFI-1257 Refactored parameter encoding to separate method.
    [5369fbb] NIFI-1257 Updated Javadoc.
    [90feb2a] NIFI-1257 Added check for all-zero IV (common security 
vulnerability) in AES cipher provider.
    Added unit test.
    [7cf6c78] NIFI-1257 Updated Javadoc to be consistent across implementations.
    [c0424d6] NIFI-1257 Deprecated no-salt cipher generator for Bcrypt to be 
consistent with Scrypt implementation.
    Updated unit tests.
    [06bed9a] NIFI-1257 Implemented Scrypt cipher provider.
    
    Added unit tests for empty salt. (+7 squashed commits)
    Squashed commits:
    [130b477] NIFI-1257 Added salt translator from mcrypt format to Java format.
    Added unit tests for salt formatting and validation.
    [c43ba44] NIFI-1257 Implemented ScryptCipherProvider and added unit test 
skeleton with internal consistency and external compatibility tests.
    [9db678f] NIFI-1257 Updated Bcrypt unit test to accept new interface method 
contract.
    [897ad03] NIFI-1257 Added sanity test for Scrypt primitive key derivation 
compatibility with external Ruby library.
    [4adc3fe] NIFI-1257 Exposed Scrypt parseSalt method as public to allow 
ScryptCipherProvider to accept formatted salt externally.
    [391cd8b] NIFI-1257 Updated scrypt Ruby script to be consistent with bcrypt 
and pbkdf2 scripts in key and IV data handling.
    [d167917] NIFI-1257 Exposed desired key length as parameter on Scrypt 
underlying implementation. (+2 squashed commits)
    Squashed commits:
    [7f1feb5] NIFI-1257 Standardized default salt generation to byte[] and 
added method contracts in top-level PBECipherProvider interface.
    [673f35f] NIFI-1257 Scrypt implementation.
    
    Added default salt length constant and accessor in Scrypt.
    Changed reference to UTF-8 to be enum instead of freeform requiring runtime 
resolution and redundant exception handling. (+11 squashed commits)
    Squashed commits:
    [b48ac88] NIFI-1257 Removed salt validation check in Scrypt (spec allows 
for empty salt) and replaced with logger warnings. Moved unit test to 
ScryptCipherProvider unit test as enforcement will be moved higher up.
    [611abf6] NIFI-1257 Made convention & style changes in scrypt code.
    [9005573] NIFI-1257 Added salt validation and unit test for Scrypt.
    [ff12568] NIFI-1257 Added validation check for password and relevant unit 
test.
    [6b42e8f] NIFI-1257 Added validation check for N, r, p in Scrypt and 
relevant unit tests.
    [8ab7e45] NIFI-1257 Added ruby script to test external compatibility for 
Scrypt implementation.
    [b720b30] NIFI-1257 Combined ScryptUtil (application-facing interface) into 
Scrypt class to reduce unnecessary complexity.
    Updated unit test references.
    [7739349] NIFI-1257 Moved high-memory test vector into separate unit test 
with Assume statement limiting execution depending on heap size to allow faster 
execution.
    [badd2ab] NIFI-1257 Enabled high-memory test vector for Scrypt test.
    [765cd38] NIFI-1257 Added surefire block to groovy unit test profile to 
enforce 3072 MB heap for Scrypt test.
    [637f80b] NIFI-1257 Added local Java implementation of Scrypt KDF (and 
underlying PBKDF2 KDF) from Will Glozer.
    Added unit tests (including test vectors from paper).

commit f875ecac6c8bf2704a2d662587b7b635e2ee7e39
Author: Andy LoPresto <[email protected]>
Date:   2016-01-29T22:52:12Z

    NIFI-1257 Cleaned up interfaces and refactored shared code/unit and 
regression tests.
    
    Refactored shared stream handling code. (+1 squashed commit)
    Squashed commits:
    [4c6de17] NIFI-1257 Added logic to Encryptor to read and write IV to/from 
cipher stream.
    Added unit tests to cover all PBE KDFs. (+1 squashed commit)
    Squashed commits:
    [f333fa0] NIFI-1257 Added methods to read and write IV to/from cipher 
stream. (+12 squashed commits)
    Squashed commits:
    [4ece756] NIFI-1257 Resolved all tests in nifi-standard-processors module.
    [8163f07] NIFI-1257 Refactored implementation-specific logic out of 
PasswordBasedEncryptor to support all KDFs.
    Regression tests for legacy still pass.
    [a52da26] NIFI-1257 Added salt read/write logic to NifiLegacy and OpenSSL 
cipher providers.
    Added common salt read/write logic to RandomIVPBECipherProvider.
    Changed RandomIVPBECipherProvider from interface to abstract class.
    Updated strong KDF implementations.
    [1407afe] NIFI-1257 Added common cipher processing code to CipherUtility.
    [442495b] NIFI-1257 Added regression tests for PasswordBasedEncryptor with 
legacy OpenSSL compatibility before integrating cipher provider logic.
    [d0410c0] NIFI-1257 Added regression test for PasswordBasedEncryptor before 
integrating cipher provider logic.
    [e586933] NIFI-1257 Removed legacy unit test (superseded by Groovy unit 
test).
    [170314a] NIFI-1257 Removed unnecessary EncryptionMethod enumerations from 
unit test.
    [196d560] NIFI-1257 Added ASF 2.0 license to CipherProfiderFactory unit 
test.
    [36e95ba] NIFI-1257 Removed unnecessary KeyDeriver interface.
    [9c4eb07] NIFI-1257 Added default (NONE) KDF enum value.
    Renamed CipherFactory to CipherProviderFactory.
    Added unit test for registered KDF resolution from factory.
    [f006985] NIFI-1257 Added CipherProvider marker interface which PBE and 
keyed cipher providers share.

commit d45dc69b3981ed6194a90aedbf603122d5c47c18
Author: Andy LoPresto <[email protected]>
Date:   2016-01-30T06:03:25Z

    NIFI-1257 Added IV read/write to KeyedCipherProvider and changed from 
interface to abstract class. (+3 squashed commits)
    Squashed commits:
    [0ee5175] NIFI-1257 Moved null checks for encryption method and password to 
constructor to de-duplicate and catch earlier.
    [6ed4142] NIFI-1257 Moved stream handling code to CipherUtility to allow 
reuse in KeyedCipherProvider.
    [a78b5db] NIFI-1257 Added null checks for encryption method and password.

commit 48b3463319a8fc620a9229a28253e4c99f4afc8e
Author: Andy LoPresto <[email protected]>
Date:   2016-01-30T07:27:46Z

    NIFI-1257 Added processor logic to invoke keyed cipher.
    Added unit tests. (+5 squashed commits)
    Squashed commits:
    [28b2224] NIFI-1257 Fixed contrib-check issues.
    [143b88f] NIFI-1257 Added helper method on KDF enum to indicate strength of 
KDF.
    Added EncryptContent processor property for raw hex key (always visible 
until NIFI-1121).
    Added validations for KDF (keyed and PBE) and hex key.
    Added unit tests for EncryptContent processor validations.
    [3a8367b] NIFI-1257 Added utility method to return list of valid key 
lengths for algorithm.
    Added unit tests.
    [04d6d16] NIFI-1257 Added description to allowable values for KDF and 
encryption method in EncryptContent processor.
    [98595d8] NIFI-1257 Added KeyedEncryptor and unit tests.

commit 3c410d8f33b3ceaf5dfd79db355cf087edec80c8
Author: Andy LoPresto <[email protected]>
Date:   2016-02-02T01:25:28Z

    NIFI-1257 Fixed casing of Scrypt.java.

----


> Provide additional KDFs for EncryptContent
> ------------------------------------------
>
>                 Key: NIFI-1257
>                 URL: https://issues.apache.org/jira/browse/NIFI-1257
>             Project: Apache NiFi
>          Issue Type: Improvement
>          Components: Core Framework
>    Affects Versions: 0.4.0
>            Reporter: Andy LoPresto
>            Assignee: Andy LoPresto
>            Priority: Critical
>              Labels: encryption, security
>             Fix For: 0.5.0
>
>
> Currently, the two key derivation functions (KDF) supported are NiFi Legacy 
> (1000 iterations of MD5 digest over a password and optional salt) and OpenSSL 
> PKCS#5 v1.5 (a single iteration of MD5 digest over a password and optional 
> salt). 
> Both of these are very weak -- they use a deprecated cryptographic hash 
> function (CHF) with known weakness and susceptibility to collisions (with 
> demonstrated attacks) and a non-configurable and tightly coupled iteration 
> count to derive the key and IV. 
> Current best practice KDFs (with work factor recommendations) are as follows:
> * PBKDF2 with variable hash function (SHA1, SHA256, SHA384, SHA512, or 
> ideally HMAC variants of these functions) and variable iteration count (in 
> the 10k - 1M range). 
> * bcrypt with work factor of 12 - 16
> * scrypt with work factor of (2^14 - 2^20, 8, 1)
> The salt and iteration count should be stored alongside the hashed record 
> (bcrypt handles this natively). 
> Notes:
> * http://wildlyinaccurate.com/bcrypt-choosing-a-work-factor/
> * http://blog.ircmaxell.com/2012/12/seven-ways-to-screw-up-bcrypt.html
> * 
> http://security.stackexchange.com/questions/17207/recommended-of-rounds-for-bcrypt
> * 
> http://security.stackexchange.com/questions/3959/recommended-of-iterations-when-using-pkbdf2-sha256/3993#3993
> * 
> http://security.stackexchange.com/questions/4781/do-any-security-experts-recommend-bcrypt-for-password-storage/6415
>  
> * 
> http://web.archive.org/web/20130407190430/http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html
> * 
> https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2015/march/enough-with-the-salts-updates-on-secure-password-schemes/
> * http://www.tarsnap.com/scrypt.html
> * http://www.tarsnap.com/scrypt/scrypt.pdf



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to