Encryption 在客户端使用私钥解码服务器消息安全吗?

Encryption 在客户端使用私钥解码服务器消息安全吗?,encryption,Encryption,通常,这个故事类似于“客户端使用公钥加密-服务器使用非常安全存储的私钥解密” 嗯,我有相反的问题。 在一个移动应用程序中,我使用的是一个web服务库,它的API需要从我的个人服务帐户中获取2个密钥。任何有权访问这2个密钥的人基本上都可以使用它们调用同一服务的API,就好像它来自我的应用程序一样。因此,我绝对不想将这些密钥嵌入应用程序中,因为反编译可能很容易破坏他们 所以我想我应该将这些密钥存储在服务器端,然后用公钥加密后发送到应用程序。然后,应用程序将使用存储在应用程序本身中的私钥对它们进行解密

通常,这个故事类似于“客户端使用公钥加密-服务器使用非常安全存储的私钥解密”

嗯,我有相反的问题。 在一个移动应用程序中,我使用的是一个web服务库,它的API需要从我的个人服务帐户中获取2个密钥。任何有权访问这2个密钥的人基本上都可以使用它们调用同一服务的API,就好像它来自我的应用程序一样。因此,我绝对不想将这些密钥嵌入应用程序中,因为反编译可能很容易破坏他们

所以我想我应该将这些密钥存储在服务器端,然后用公钥加密后发送到应用程序。然后,应用程序将使用存储在应用程序本身中的私钥对它们进行解密

我知道它仍然不安全,但至少,一个简单的中间人攻击或二进制反编译分析不会尖叫“这里的服务API密钥,来获取它们!“这里的意图只是让某人更难掌握这些钥匙


您认为这是一个好主意吗?您还有其他选择吗?

处理您的私钥的安全方法是将它们保留在服务器上,并且永远不要将它们发布到客户端

对于每个批准的操作,创建一个服务器终结点(例如AWS Lambda)。服务器终结点知道私钥,但应用程序只知道终结点的位置。这将功能限制为仅允许您批准的内容,但终结点本身可以被发现,并可供其他人使用,而无需通过您的应用程序

端点可以使用一些身份验证,例如JWT承载令牌(请参阅),以确保它们仅由应用程序使用,但这需要服务器端了解谁在应用程序中注册

或者,如果私钥不能用于您不希望应用程序用户执行的操作,那么是否值得保护它们


有很好的理由让事情变得困难但不安全,例如,创建我提到的所有端点的成本与有人滥用私钥的风险。不幸的是,这意味着有人同意妥协,我不能就最佳妥协向您提供建议。

如何通过身份验证从服务获取密钥呃?实际上不会有身份验证,我不确定是否或如何实现此身份验证…应用程序的用户通过登录凭据进行身份验证,但这不应依赖于用户。如果没有应用程序的身份验证,二进制反编译分析将尖叫“这里有服务API密钥,来获取它们!“我认为我仍会将密钥存储在服务器上,以便在发现可疑活动时禁用并替换密钥。谢谢您的回答:)