gpt4 book ai didi

java - 存储公钥和主 key 的安全方法是什么?

转载 作者:行者123 更新时间:2023-12-01 11:57:55 25 4
gpt4 key购买 nike

我使用 AES 和 RSA 加密和解密来实现客户端和服务器的安全通信。我被告知要在 Javascript 中硬编码公钥以用于登录目的,并在 Java 中硬编码关联的私钥。注册过程也是如此,但登录和注册的 key 对会不同。

现在棘手的部分是,我必须在每个用户登录后为他生成一个 key 对,并为该特定用户使用该 key 对,直到他注销或 session 超时。假设我有 1000 多个用户,我必须在每次创建新 session 时生成 key ,并为该用户维护相同的 key 对,直到注销或超时。

这些是我对如何存储公钥和私钥的想法

1) 在将公钥和私钥保存到文件之前,我们必须定义文件的名称。我们可以使用登录用户的用户名将其添加到保存的文件中,例如 - Dan.Public.key 和 Dan.Private.key ,如果是其他用户 - Ken.Public.key, Ken.Public.key (Dan 和 Ken 是用户名)

即使用户“Dan”注销或他的 session 超时,一旦他再次登录,我的过滤器也会创建一个新的私钥和公钥,并将 key 再次保存到 Dan.Public.key 和 Dan.Private.key,因此它会自动覆盖同一用户最后使用的 key 文件。通过像这样定义文件名,我可以为任意数量的用户管理它,而不必担心安全性(当然,我必须完美配置谁可以访问 key 文件夹)。谈到我的实时问题,我的应用程序是 API 调用,因此根本没有 session 。管理 session 的唯一方法是通过生成 UUID 来处理它,并使用它来维护用户的 session 并保留用户的日志。

如果我必须为每次调用获取公钥和私钥,首先我必须检查数据库以查找与当前 UUID 关联的相应用户名。从长远来看,这是一个非常糟糕的方式。另外,我可以使用 UUID 而不是用户名来为 key 文件命名,但这很快就会损坏我的服务器,因为由于唯一的 UUID,不会覆盖已保存的文件(无法覆盖上次使用的 key 文件) ,因为每个新的 UUID 都是唯一的)

2) 我可以简单地将公钥和私钥与生成的 UUID 一起存储到数据库中,因此我可以使用 .add(Restrictions.eq("UUID_USER", UUID));但是我担心直接存储在数据库中的安全性。

注意:到目前为止我还不知道如何在数据库中存储公钥和私钥。

我使用了 PBKDF2WithHmacSHA256 ,迭代次数为 100000+ ,盐为 16 字节,以防止即使黑客获取数据库也泄露密码。比较密码存储的高安全性和直接在数据库中将字符串私钥和公钥相当转储的想法,我感觉这两个安全级别之间存在很大差距。

我读过一些有关在 keystore 中存储 key 的内容,但我不知道它是如何工作的。如果我选择将 key 存储在数据库中,我可以在java中对这些 key 使用某种硬编码加密和解密吗?但这会减慢每次点击的处理时间,如果登录更多用户,这对服务器来说将是重量级的在同一时间。在考虑密码学编码时,我什至不处于中等水平,但我不想为一部分实现高安全系统,而为另一部分实现0安全系统。如果有人以前开发过此类应用程序,请分享您如何处理公钥和私钥存储的方式。

最佳答案

我假设用户 key 用于签署从客户端发送到服务器的数据或加密从服务器发送到客户端的数据。

您确实不应该将用户的私钥存储在服务器上(或为此生成)。最好在客户端生成 key 对,并将公钥用服务器的公钥加密后发送到服务器。

服务器(和开发人员/操作人员)永远不会收到用户私钥,也无法冒充用户。每次用户登录时,都会生成一个新的 key 对,并覆盖数据库中的公钥。

请注意,这并不能完全保护您免受攻击,因为基于网络的攻击者可能只是注入(inject)额外的 JavaScript 来窃取用户私钥或指示客户端将所有信息直接发送给攻击者。解决这个问题的唯一方法是使用 SSL/TLS。

关于java - 存储公钥和主 key 的安全方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com