ipex-llm icon indicating copy to clipboard operation
ipex-llm copied to clipboard

[Security] AES related code refine

Open qiyuangong opened this issue 2 years ago • 8 comments

SDL no longer recommend AES 128/192. Need to change to 256 for AES default key length.

Note: AES-256 is required because use of AES-128 or AES-192 exposes the implementation to pre-computation attacks, reducing the security below the target of 128-bits of security.

qiyuangong avatar Jun 29 '22 04:06 qiyuangong

https://github.com/intel-analytics/BigDL/blob/main/scala/orca/src/main/scala/com/intel/analytics/bigdl/orca/inference/EncryptSupportive.scala#L38

qiyuangong avatar Jun 29 '22 06:06 qiyuangong

https://github.com/intel-analytics/BigDL/blob/main/scala/ppml/src/main/scala/com/intel/analytics/bigdl/ppml/crypto/BigDLEncrypt.scala#L58

Need to refine these hard coded value

qiyuangong avatar Jun 29 '22 07:06 qiyuangong

Default Hmac for AES-256 CBC is SHA256. Default Hamc for AES GCM is "". https://docs.oracle.com/javase/8/docs/api/javax/crypto/Mac.html

qiyuangong avatar Jul 05 '22 01:07 qiyuangong

Issue addressed by #4968 and #5023

qiyuangong avatar Jul 18 '22 13:07 qiyuangong

https://github.com/intel-analytics/BigDL/blob/main/scala/orca/src/main/scala/com/intel/analytics/bigdl/orca/inference/EncryptSupportive.scala#L27 Change to 32

qiyuangong avatar Jul 19 '22 01:07 qiyuangong

https://github.com/intel-analytics/BigDL/blob/main/python/dllib/src/bigdl/dllib/utils/encryption_utils.py#L29 change to 256 https://github.com/intel-analytics/BigDL/blob/main/python/dllib/src/bigdl/dllib/utils/encryption_utils.py#L43 change to 32

qiyuangong avatar Jul 19 '22 01:07 qiyuangong

Get bytes from string is not a good idea. Entropy is less than pure bytes. https://github.com/intel-analytics/BigDL/blob/main/scala/ppml/src/main/scala/com/intel/analytics/bigdl/ppml/crypto/BigDLEncrypt.scala#L56

Need to byte->base64->byte.

qiyuangong avatar Aug 04 '22 01:08 qiyuangong

Remove magic numbers in code. May them changeable, add default value.

    val signingKey = Arrays.copyOfRange(secret, 0, 16)
    val encryptKey = Arrays.copyOfRange(secret, 16, 48)
    val r = new SecureRandom()
    initializationVector = Array.tabulate(16)(_ => (r.nextInt(256) - 128).toByte)

qiyuangong avatar Aug 08 '22 07:08 qiyuangong