接口加密问题

查看 131|回复 11
作者:XuYijie   
亲爱的同僚们,我目前在学习接口加密,就是请求参数和返回值加密,假如使用 rsa 的话:服务端生成一个密钥对,前端生成一个密钥对,互相交换公钥,就可以使用彼此的公钥和自己的私钥进行加密解密了,问题是前端的私钥存在哪里呢?放在代码里,本地存储里,cookie 里,都有被盗取的风险吧,难道是不存储密钥,每次调用接口都要临时生成秘钥吗?
FengMubai   
是的, 一次一密. 客户端私钥只存在于内存里
XuYijie
OP
  
@FengMubai 好的,没做过要求加密的项目,不敢往那方面想,听说 rsa 密钥生成挺消耗性能的
soar0712   
服务器生成 rsa 公私钥对,公钥是公开的,前端 js 生成 aes key ,用 aes 加密明文数据,用服务器的公钥加密 aeskey ,将加密后的数据和加密后的 aeskey 都传给服务器,服务器用私钥解数据拿到 aeskey ,再用 aeskey 解密密文,最后拿到明文数据
soar0712   
@soar0712 这只是最基础的加密逻辑,还需要加上时间戳校验、哈希校验什么的,也就是防重放那一套逻辑
ren2881971   
不是这样的 如果加密数量量比较大的话,非对称加密的性能很差。
一般都是通过密钥协商出来一个对称密钥对通信中的数据进行加密。比如:
在客户端侧:客户端私钥+服务端公钥进行密钥协商
在服务端侧:服务端私钥+客户端私钥进行密钥协商。
协商出来的这两个密钥是一致的,你就可以当作是对称密钥来用。 在协商过程中。双方的私钥不见面,而且也不涉及到对称密钥传输的问题。
HTTPS 或者说 TLS 就是大致这么做的。
但听你的需求,你好像是想做信源加密。那你做数字信封就好。就是用服务端的公钥对数据加密密钥做加密,然后数据加密密钥对数据做加密,如果有防篡改的需求,也可以做个签名。
ren2881971   
一般单向 TLS/SSL 认证就够用啦,它来帮你做信道保护。
你用数字信封做个信源加密就好。 客户端生成个随机数作为数据加密密钥就够了。
XuYijie
OP
  
@ren2881971 我纠结的是,客户端这边存放密钥的安全性问题,特别是 web 项目,协商出来的密钥一放到前端那不是 f12 就能找到
Kathy1989   
放环境变量 env 里
FengMubai   
@XuYijie #2 所以一般用 aes 加密, 用服务端公钥把 aes 密钥加密后发出去
您需要登录后才可以回帖 登录 | 立即注册

返回顶部