双重加密

Fem*_*shi -2 java security encryption

我正在使用https://github.com/simbiose/Encryption来加密我的 android 应用程序中的数据。

我想到了双重加密。

String key = "key";
String salt = "someSalt";
byte[] iv = new byte[16];
Encryption encryption = Encryption.getDefault(key, salt, iv);

String encrypted = encryption.encryptOrNull("Some String");

Log.d("Encrypto", "Encryption Level 1 : "+encrypted);

encrypted = encryption.encryptOrNull(encrypted);

Log.d("Encrypto", "Encryption Level 2 : "+encrypted);

String decrypted = encryption.decryptOrNull(encrypted);

Log.d("Encrypto", "Decryption Level 2 : "+decrypted);

decrypted = encryption.decryptOrNull(decrypted);

Log.d("Encrypto", "Decryption Level 1 : "+decrypted);
Run Code Online (Sandbox Code Playgroud)

这很有效,但是否推荐?

  1. 是的,这会增加存储加密字符串的内存使用量,但如果它更安全,使用更多内存就可以了。
  2. 如果我这样做,我会遇到一些问题吗?

主要问题:这是一个好的加密库吗?如果没有请推荐我一个更好的

rus*_*net 5

你真的需要加密数据吗?

https://www.schneier.com/blog/archives/2015/06/why_we_encrypt.html

为什么要双重加密?有更好的方法 - 例如,更长的密钥 - 可以增加对人们对密文进行离线暴力攻击的抵抗力。

通过默默无闻来确保安全”是一个禁忌。回到您需要的基础知识(密钥长度、块大小、加密模式、何时使用对称或非对称密钥)等。

在您编写 Android 应用程序时,我会质疑..

  • 该库是用 Java 编写的,并进行 Java 系统调用。这将很容易反转/挂钩系统调用。当您可以通过挂钩 Android 系统调用来转储密钥时,添加更长的密钥是否有助于强化您的应用程序?
  • 您的 Android Java 代码被反编译为“几乎”源代码或返回 Smali 代码 - 然后修改 - 然后重新编译?
  • 您打算如何分发密钥?运行时还是静态地嵌入到代码中?对于所有应用程序用户来说,它是随机的还是相同的密钥?
  • 您能否利用 Android 硬件来持久保存和保护您的密钥,而不仅仅是软件中的密钥? https://source.android.com/security/keystore/

如果是我的应用程序 && 我关心机密性, 我会使用硬件支持的加密(接受某些较旧的 Android 设备可能不支持它)或使用本机 (C) 加密库。后者为您提供广泛的设备支持,但引入了其他问题(JNI 边界、代码提升)。

总之,引入加密听起来很简单。但是当它只是突出显示一些有趣的东西受到保护时,你真的需要它吗?

PS - 你可能想重新发布这个问题:https : //security.stackexchange.com/