密码学是一种广泛采用的技术,以确保机密性。不考虑实施缺陷,它有一个关键点:密钥存储。如果密钥被盗,整个系统将受到损害。
编辑:
让我指定上下文以使问题不那么广泛:
也许问题可以集中在这种情况上,但正如所指出的,秘密密钥存储的问题是横向于所采用的技术。然而,一些图书馆可能提供特殊功能,可以某种方式促进工作。 一个明确的观点是,必须在安全性和实际需要之间找到权衡。为了完成分析,很明显所需的安全级别取决于要保护的信息的价值。将我们的思想转变为强制执行超级安全策略(需要付出很多努力)以保持客户的鞋码大小是毫无意义的。
在这里,我必须保护一个电子邮件密码(将存储在数据库中)。我认为这些信息平均至关重要。
我在这里寻找的是合理努力的最佳解决方案。
所以问题非常清楚:你会在哪里存储这些信息?
.war
包里吗?如何防止未经授权的访问来源?您的策略的动机将不胜感激。 谢谢
答案 0 :(得分:11)
即使这与 Java Web应用程序没有任何关系,我也可以自由地写一个答案:我认为问题只存在于所有平台的微小差异中。
基本上有3个密钥存储候选者,其中前两个是你提到的:
你已经把手指放在前2的弱点上,所以不需要重复,我完全同意。
这也是我使用第三位候选人的动机。原因是:
答案 1 :(得分:7)
无论你总是需要在哪里存储密钥。即使您决定手动提供密钥(这很愚蠢),密钥也会驻留在内存中,有人可以找到它。
存储位置取决于您的选择。但它不应该是纯文本。因此,如果将密钥存储在数据库中,则在应用程序中使用硬编码的辅助密钥。因此,如果入侵者只能访问数据库,那么加密的主密钥就会受到保护。
我会去进行应用程序配置以将二级密钥存储在容器中。这样,只有您的应用程序才能访问此属性。因此,攻击者必须控制您的应用程序或容器才能访问该密钥。
假设以下情况:
让攻击者更难。您可以将文件放在文件系统中。如其他答案中所述,为其添加适当的FS权限。但另外使用java Security Manager限制所有java类的访问权限,除了真正需要读取它的那个。同样限制对jar和类文件的修改也是一个好主意。
你拥有的锁越多,你就越安全。与标准门锁一样。锁应该来自不同的供应商,并且具有不同的机制。但最后,熟练的盗贼无论如何都会进入。
答案 2 :(得分:0)
文件系统正常,选择用户权限并使用战争授权权限。有很多安全漏洞只能打开对数据库或战争内容的访问权限