请问如何保存密钥比较安全?

2020-05-13 20:27:17 +08:00
 sudoy

大家好,我用 Python 的 Tkinter 写了个桌面程序,这个程序调用快递公司的 API,所以有 API 密钥。目前直接把密钥保存在.env 文件里面,然后 os.getevn()获取。请问有什么更安全的办法保存这些密钥?谢谢🙏

3854 次点击
所在节点    Python
24 条回复
z7356995
2020-05-13 21:00:21 +08:00
那就把密钥再加密一下,,读取时读过来再解密
msg7086
2020-05-13 21:13:42 +08:00
没有太好的办法。程序所在的电脑上是可以破解拿到 API 秘钥的。
systemcall
2020-05-13 21:22:42 +08:00
你的电脑如果可以保证使用那个程序的时候会偷隐私的东西没有打开的话,可以上智能卡。
便宜点的方法,我见过刷磁卡的,也见过拿扫码枪扫条码的,都可以与电脑本身隔离,前提是电脑在读密钥的时候是安全的。
sudoy
2020-05-13 21:53:41 +08:00
直接把密钥写在到代码里面,编译成二进制( exe ),这样应该安全吧。其实主要是担心不小心把软件传给别人,另外原本想设置成环境变量,但是又太明显
Juszoe
2020-05-13 21:56:28 +08:00
每次启动的时候输入密钥,只保存在内存中
doyel
2020-05-13 21:58:39 +08:00
自建私有 sync 工具
baobao1270
2020-05-13 21:59:22 +08:00
密钥保存在服务器上,桌面端请求服务端,服务端再去调用快递 API 把结果返回客户端。

#4 如果不加壳的话,string 是明文储存在 PE 文件里的
Juszoe
2020-05-13 22:04:59 +08:00
又看了一眼,原来是桌面程序,密钥肯定要存到你的服务器上,而不是让用户自己调用快递公司的 API
sudoy
2020-05-13 23:03:25 +08:00
谢谢大家回复!可能我讲的不够清楚,这个是个桌面软件,做成 exe 直接运行的,是给公司内部使用。我想达到的目的就是:1 )密钥只在所安装的电脑上保存,这样为了防止哪天不小心把软件拷贝到别的电脑,连密钥也带过去。这点环境变量可以解决,因为拷贝文件夹的时候环境变量拷贝不走。2 )保存在本地电脑的时候加密一下,别人就算看到这个密钥,也没法拿去别的电脑直接用。我能想到的办法是,把密钥加密然后设置成环境变量。每次启动软件的时候,用户需要输入一个密码,这个密码用来解密环境变量里面的密钥,然后读取到缓存以供软件使用。
jimmyismagic
2020-05-13 23:05:53 +08:00
加密一下,启动时输入密码解密,放在内存中,可以设置一下超时时间,比如 30 分钟要重新输入密码
sudoy
2020-05-13 23:11:49 +08:00
@jimmyismagic 多谢
crab
2020-05-13 23:14:43 +08:00
如果是限制电脑加入 cpuid mac 地址 硬盘 id 主板这类作为 key 解密。
namelosw
2020-05-13 23:15:04 +08:00
最好写个简单的 Web server 配合这个桌面程序,然后 key 在服务端才比较万无一失。

内存这种东西也是可以 Debug 出来的。比如你想知道桌面微信里面存的什么,用 LLDB 就能拆出来你自己加密的 key,然后用 Alfred 就能解了。

我没试过 Python 程序,但是想象应该比二进制的只能更简单,或者一样。

当然毕竟内网如果你觉得用户都比较傻,弄个 Base64 啥的糊弄鬼子也不是不行……
namelosw
2020-05-13 23:17:05 +08:00
@namelosw 噗,口误,刚设置了个 Alfred workflow,结果 Charles 就说成 Alfred 了。
weizhen199
2020-05-13 23:27:47 +08:00
KeePass 配合 onedrive gd 这种?
herexf
2020-05-13 23:34:04 +08:00
@weizhen199 你是没看上下文吧,哈哈
learningman
2020-05-13 23:35:25 +08:00
@sudoy 最不安全了。。。
disk
2020-05-13 23:52:17 +08:00
密钥拿电脑的 mac 地址或主板 cpu 序列号什么的作为密码加密下再存就行了。纯本地防君子不防小人,不能要求太多。
Kobayashi
2020-05-13 23:52:27 +08:00
已知方法:1 )如果是分享代码的话。自己保存在本地,.gitignore 忽略 .env ,代码里放个 .env.example. 2 )部署类似,但是使用 AWS secret manager 。这种情况还可能需要 aws key 。
yousabuk
2020-05-14 00:48:37 +08:00
最厉害的招式是什么?
没有招式

什么样的招式不会被破解?
没有招式

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

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

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

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

© 2021 V2EX