最近在研究通信安全方面的东西,看到七牛这篇文章写得不错,转载一下:

安全机制

数据安全性是云存储服务的重中之重。云存储的安全机制主要需要考虑以下几个因素:

  • 如何判断该请求方是否合法,且对目标空间有相应的访问权限。

  • 因为服务的访问协议同时支持HTTP和HTTPS,服务端需要判断收到的请求是否经过篡改。

  • 相比上传新资源,覆盖文件或删除已有资源拥有更高的风险。因此对上传或修改动作,需要确认请求方是否拥有修改或删除的权限。

在使用七牛云存储服务的过程中,需要考虑安全机制的场景主要有如下几种:

  • 上传资源

  • 访问资源

  • 管理和修改资源

这三个场景需要考虑不同的安全因素,因此七牛针对性的提供了三种安全机制:上传凭证、下载凭证和管理凭证。

因为凭证的生成需要用到SecretKey,因此该生成动作不应在不受信任的环境中进行。需要注意的是,开发者绝不能将密钥包含在分发给最终用户的程序中,无论是包含在配置文件中还是二进制文件中都会带来非常大的密钥泄漏风险。

推荐的模型如下所示:

密钥(AccessKey/SecretKey)

密钥用于以上几种凭证的生成。以SecretKey为参数,配合适当的签名算法,可以得到原始信息的数字签名,防止内容在传递过程中被伪造或篡改。

密钥通常为成对创建和使用,包含一个AccessKey和一个SecretKey。其中AccessKey会在传输中包含,而用户必须保管好SecretKey不在网络上传输以防止被窃取。若SecretKey被恶意第三方窃取,可能导致非常严重的数据泄漏风险。因此,如发现SecretKey被非法使用,管理员应第一时间在七牛开发者平台上更换密钥。

在具体描述各种凭证的详细生成过程中我们会看到AccessKey和SecretKey是如何被使用的。

凭证的详细生成 跳转链接: http://developer.qiniu.com/article/developer/security/index.html

使用场景

七牛推荐客户将 AccessKey和一个SecretKey 放在服务端,由服务端生成令牌后颁发给客户端使用。

比如,上传文件的时候:

  1. 业务服务器的服务端生成上传令牌(UploadToken)

  2. 客户端程序(iOS、Android 以及 Web)拿到这个上传令牌之后就可以直接将文件上传到七牛

错误案例

把 AK/SK 放在客户端 SDK 中来做签名生成令牌,随 App 被发布出去。

这样做会被人家反编译之后拿到 AK/SK,之后他们就可以对你的账号进行操作。

实际上 Web 端 js 也是可以做签名的,只是你不可能把明文的 AK/SK 放在 Web 端,这样做更加危险。

将 AK/SK 加密后存放在客户端,等用户启动应用的时候再将 AK/SK 解密出来放在内存中,关闭应用后这对 AK/SK 即消失。

这样的做法也是不科学的,因为你的 AK/SK 在 后台 随时可以更改,特别是在被泄漏之后建议使用一对新的 AK/SK。如果你写死在 App 中将其发布,就只能通过发布新版本的 App 来更新这对 AK/SK。

最后建议

出于安全考虑,建议您根据自己的场景周期性地更换密钥。

原文转自:https://support.qiniu.com/hc/kb/article/112814/

Access Key / Secret key 密钥安全原理架构相关推荐

  1. 申请百度文字识别APIkey和Secret Key+文字验证码识别案例

    1.首先打开百度文字识别官网,输入百度账号登陆 2.找到文字识别,然后进入后点击创建应用 3.应用名称,随便填写一个即可 文件识别包名选择 不需要即可,描述随便填一些 4.点击立即创建,出现如下图,点 ...

  2. docker安装minio:Access key length should be at least 3, and secret key length at least 8 characters

    docker安装完minio之后启动镜像发现未果 查看日志: docker logs {你的minio的CONTAINER ID} 发现: ERROR Unable to validate crede ...

  3. appkey 和 secret key token

    appkey 和 secret key相当于当前账户的另外一套账号和密码机制. 当然, 仅仅是在API调用的范围内适用. 1.生成方式可以自己定义, appkey保证不重复就行. secret key ...

  4. Maven发布封装到中央仓库时候报错:no default secret key: No secret key

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 今天因为发布swagger-spring-boot-st ...

  5. JWT 创建Token 提示:secret key byte array cannot be null or empty.

    使用JWT生成Token提示:java.lang.IllegalArgumentException: secret key byte array cannot be null or empty. 详细 ...

  6. maven gpg报错:no default secret key: No secret key signing failed: No secret key

    一.问题描述 我这边情况是这样的,原本在A电脑上,通过maven打包安装都是好的,最近新弄了台电脑,然后把A电脑的gpg秘钥通过Kleopatra的方式直接导出来 然后在B电脑上通过Kleopatra ...

  7. Algorithm, Secret key and Protocol

    最近在对基于区块链构建的信任社会(未来社会形态)非常感兴趣,区块技术去中心化的特性,让没有金融机构成为了可能(包括央行,以及各种商业银行). 除了在数字货币领域大放异彩外,在包括供应链,网络购物,公平 ...

  8. 微信支付 商户Key 支付Key API密钥 的获取

    读了微信支付的开发文档,感觉是不同阶段,不同的同学写的,有些专业名词比较混乱,甚至还会有错别字,以及接口更新了,而文档不更新的情况. 使用微信支付,必须要用到 api密钥进行签名 其中 ,商户Key ...

  9. AipOcr百度文字识别API Key和Secret Key申请及应用例子说明

    1.登录百度智能云网站 打开百度图文识别网站:https://console.bce.baidu.com/ai/#/ai/ocr/overview/index,输入账号密码进行登录,可以直接扫码 2. ...

最新文章

  1. 气候变迁给社会带来什么变化?
  2. Python 技术篇-pyhook暂停键盘鼠标监听事件,停止键盘鼠标监听事件且不关闭程序
  3. 小结两种在Python中导入C语言扩展库的方法
  4. linux的驱动开发——简单驱动程序编写
  5. C++类中的Static关键字
  6. ASP.NET MVC 5 SmartCode Scaffolding for Visual Studio.Net
  7. Android之四大组件、六大布局、五大存储
  8. 一文了解新营销,数字经济时代如何以个人为中心重建品牌?
  9. k均值聚类算法原理和TensorFlow实现
  10. CZ1206计算机在线,若按CZ-1206科学计算器的键后,再依次按键,则显示的结果是()...
  11. 转:陈佩斯曝光春晚背后种种肮脏行径
  12. Arduino:数码管显示原理详解和Proteus仿真实验
  13. java计算机毕业设计个人交友网站源程序+mysql+系统+lw文档+远程调试
  14. 如何快速开设海外银行账户
  15. oracle数据库期末复习
  16. 阿里云部署K8s及一些排错体会
  17. 购买无线鼠标的单模,双模和可充电是什么意思
  18. 发票查验平台 https://inv-veri.chinatax.gov.cn 您的连接不是私密连接,不能访问问题
  19. 三维空间直线与平面交点
  20. 计算机专业实验课,教你如何上好计算机课程的实验课

热门文章

  1. LwIP应用笔记(二):无操作系统支持下的RAW API移植
  2. 【图文并茂】六十多个 vscode 插件,助你打造最强编辑器
  3. 使用Python将微信和支付宝账单导入随手记
  4. python中什么是迭代?
  5. 红外线计件器课程设计报告书
  6. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
  7. 怪物的生成 攻击和掉落金币
  8. 软件开发流程有哪些?完整的软件开发流程
  9. 谷歌浏览器Google如何设置站点弹出窗口
  10. 一篇全面的CSS布局学习指南 [译]