客户端签名密钥如何存储才能保证安全?

2023-08-22 11:23:53 +08:00
 szandy6

客户端请求 API 时,一般要带上签名信息,签名参数用的密钥( secret key)怎么存储才能保证安全,还是说有其他更好的方案,比如放在服务端,大家一般是怎么做的。

1776 次点击
所在节点    问与答
30 条回复
mdn
2023-08-23 09:45:03 +08:00
@edwardhodges #20 客户端加签名在没有被破解的情况下都是 信任的客户端,token 无法证明是客户端请求的 API
edwardhodges
2023-08-23 10:09:41 +08:00
@mdn 是不是想复杂了。这个跟客户端没有什么关系吧,举个例子,token 根据手机号登录验证后获取,然后根据当前用户的 token 来请求业务服务器。业务服务器根据这个 token 判断是哪个用户,然后业务服务器再来调用比如 openai 的接口。就是说使用 secret key 调用三方 api 的行为是发生在自己服务器的。 而客户端的验证方式就是传统的验证方式,所有 app 都是这么进行的。 客户端就是被破解了又怎么样,最多知道了 api 接口(客户端里面没有保存三方的 secret key 这些信息),那又怎么样。
CodeCodeStudy
2023-08-23 10:15:18 +08:00
@yinmin #9 非对称加密太慢了,不应直接用非对称加密数据,而是用非对称加密对称加密的密钥,然后用对称加密数据
mdn
2023-08-23 11:07:48 +08:00
@edwardhodges #22 客户端加签名,想要防止某些用户绕过客户端直接请求接口,比如签到等功能,token 用户自己也能看到,签名需要用户破解
IvanLi127
2023-08-23 13:43:42 +08:00
签名是防谁篡改负载?防非法用户篡改用登录凭据,防网络链路爱咋存咋存,防合法用户那得靠硬件了。
msg7086
2023-08-23 14:16:24 +08:00
@tool2d #11
> 分不清哪个是黑客签名,哪个是真客户端签名。

要不然呢?难道你还能分清你对面的是客户端还是黑客?
EchoAI
2023-08-23 14:24:34 +08:00
@edwardhodges #22 客户端被破解了,不仅知道了 API ,用户的 token 也能被拿到,还省得去破解密钥了,直接使用 token 请求 API 就可以了。
tool2d
2023-08-23 14:31:58 +08:00
@msg7086 你普通 ssh 连接,服务器可以设置客户端指纹的白名单。就算黑客有密码和密钥,只要客户端指纹不对,服务器也是可以拒绝请求的。

客户端被挟持发请求,和黑客第三方 IP 发起恶意请求,对服务器来说,还是有区别的。
edwardhodges
2023-08-23 14:46:44 +08:00
又看了下讨论,如果想把请求绝对限制在自己指定的客户端里,理论上只能增加难度,无法绝对的。不清楚大家的需求,感觉这个需求本身意义就不大吧。 使用加固混淆等方式,增加客户端 app 被破解的难度,所有请求必须使用信任机构颁发的证书的 https ,不在客户端存放重要的信息,验证流程通过服务器来校验。这些操作下来,理论上已经很安全了吧。
msg7086
2023-08-23 15:46:42 +08:00
@tool2d 客户端可以视作开源,黑客直接伪造指纹就行了。
有些时候是不需要从头开始搞的,拿现成的代码来植入点东西跑可能会更方便。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/967318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX