Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加密种子的最佳方法是什么?_Java_Security_Encryption - Fatal编程技术网

Java 加密种子的最佳方法是什么?

Java 加密种子的最佳方法是什么?,java,security,encryption,Java,Security,Encryption,我已经为一个简单的问题挣扎了好几个小时了。我正在开发一个桌面应用程序(钱包),它需要一个种子短语来运行。 当然,种子需要用密码加密并存储到配置文件中。我发现Jaspyt可以轻松加密字符串,但显然Jaspyt的PBEStringencryptor不安全/不推荐使用。因为只有一个密码,所以用盐腌制它没有任何意义(会吗?)。 我在stackoverflock上发现了许多其他方法,但我一直说专家们出现并声称方法x是多么不安全 总结一下我的问题:既然我只处理一个种子短语,那么使用Jasypt的String

我已经为一个简单的问题挣扎了好几个小时了。我正在开发一个桌面应用程序(钱包),它需要一个种子短语来运行。 当然,种子需要用密码加密并存储到配置文件中。我发现Jaspyt可以轻松加密字符串,但显然Jaspyt的PBEStringencryptor不安全/不推荐使用。因为只有一个密码,所以用盐腌制它没有任何意义(会吗?)。 我在stackoverflock上发现了许多其他方法,但我一直说专家们出现并声称方法x是多么不安全


总结一下我的问题:既然我只处理一个种子短语,那么使用Jasypt的Stringencryptor就足够了,还是应该使用另一种方法呢?

我不是Java开发人员,但根据描述,在您的情况下,我将使用所需密码对种子进行非对称加密,然后再将其存储到配置文件中

您可以使用Rivest-Shamir-Adleman(RSA)、椭圆曲线密码(ECC)来命名一些算法


干杯

您努力寻找一个安全解决方案的原因可能是没有一个安全的解决方案能够正常工作

让我重申一下我认为您正试图解决的问题:

  • 您的应用程序需要一个“秘密”才能运行
  • 您不能信任该用户。(如果可以的话,理论上你可以让用户在每次使用系统时提供秘密。)
  • 由于以下一个或多个原因,您不能依靠操作系统访问控制来确保“机密”的安全:

    • 操作系统不足或有缺陷
    • 您不信任操作员/管理员
    • 你不能确定系统没有被黑客入侵,或者
    • 系统没有物理安全保护。(如果有人能够在足够长的时间内对硬件进行未被发现的物理访问,他们就可以绕过操作系统的安全性。)
  • 鉴于上述假设,没有安全的解决方案。无论您的应用程序代码做什么,都有可能让具有足够操作系统级权限(正确分配或恶意获取)的人监视您的代码并截获该秘密

    那么解决方案是什么呢

    • 如果您可以假设平台是安全的,并且操作员是可信的,那么有一些技术方法可以确保机密的安全。。。来自非特权用户

    • 对于某些类型的安全攻击,有一些缓解措施。例如,您可以使用保存机密,这样就不需要将其存储在文件系统中

    • 否则。。。在(安全的)基础设施上运行软件,而不是在用户的PC或客户的服务器上运行

    种子需要使用密码加密并存储到配置文件中

    看来你是对的,加密种子最合理的方法是使用某种基于密码的加密(PBE…)

    因为只有一个密码,所以用盐腌制它没有任何意义(会吗?)

    您正在存储加密的种子值本身,因此在这种情况下,您可以使用一些应用程序范围的静态salt

    PBEStringencryptor应该是不安全的/不推荐使用的。 使用Jasypt的Stringencryptor就足够了吗

    我不知道Jasyp是不安全的,它更多地取决于使用的参数(有参考吗?)。我通常使用纯Java和标准PBKDF2。然而,Jasyp在没有深入了解的情况下正确地完成了加密。密码学的问题是,仅仅使用一组错误的参数或使用错误的方式很容易完全破坏安全性。如果您刚刚开始,使用PBEStringencryptor可能是更安全的选择


    有人提到使用硬件模块(如智能卡、TPM等)可能会更安全,但便携性较差

    我是否正确地认为,在我的情况下,这句话没有好处?种子短语无论如何都是独一无二的,我也可以只使用AES对其进行加密。安全问题远不止于此。(而且……不……如果你在种子词组中加盐,没有什么真正的区别。)你需要退后一步,了解大局。弄清楚你要保护什么(和谁)。只有当你理解上下文时,才考虑机制……我看了一下Jasypt的StrongTextEncryptor,它使用的算法是“PBewithmd5和Tripledes”。从我收集到的信息来看,TripleDES不应该再使用了。@m-malkon关于原语的内容-3DES被认为是过时的,但没有被破坏。MD5今天严重损坏。然而,PBE密钥生成器的目的是通过混合盐和密码来创建高熵密钥。我读过一篇比我声誉更高的人的帖子,说PBewithmD5和Tripledes仍能安全地达到目的(我现在找不到参考资料)。但是,您不必强制使用Jasyp,您可以简单地使用任何当前值(pbkdf2、argon2、.pbeaes/sha256)。更重要的是,您可以使用具有适当密钥长度的pbe密钥生成器