Azure PaaS服务,比如存储,Redis缓存,服务总线,IoT中心等等,一般通过密钥来认证客户端,也就是说只有提供正确密钥的客户端才能访问和使用对应的Azure PaaS服务,所以这个密钥是很重要很重要的,那么该如何来保证密钥的安全性呢?接下来将以问答的形式来阐述。

问:密钥能否被暴力破解?

答:我们先看看几个密钥的例子来分析密钥的组成。

存储账户

5+kWqp1jIGQdGPVp6o7pgT/8DlRYnE55jJbxh51h7WHU4yGqAbMYdCYbSfR2CaFsi1/pfmL+d/QJbeAmDn6FQg==

Redis

R4W4Ol+yHUJ9Z25VHSrQdn9sGw9ApNe00EvpvVXn05Y=

服务总线

/TCLOykE3mgZ8Lxe2/N7VAZAo3pSn5K48y54Xoss4Pw=

IoT中心

xv8FF7ja0QpPHcWE9B1wB3Ge7pLyj0ZvickxQAOdk/Y=

可以看到一般情况下密钥的长度是44个字符,其中存储比较特殊有88个字符。而构成有以下这些元素:

-         字母,而且大小写敏感 (a - z,A - Z)

-         数字(0 - 9)

-         特殊字符(/,+,=)

考虑到字符‘=’只是用做结尾,因此我们计算出一般情况下密钥的可能性有:

(26*2 + 10 + 2)^44 = 64^44

也就是64的44次方,而存储账户更是多达64的88次方。这种情况下要暴力破解,可能性实在太低。

(更新,感谢朋友Justin Bian的指正)

这里的密钥字符串其实是经过base64编码的,根据base64编码规则,44长度的字符串可以表示33个字节,再去掉末尾用来填充的字符‘=’,那么实际上原本密钥应该是32个字节,这样的话,一个字节是8位,每一位的可能值为0或1,因此,密钥的可能性就是

2^(8*32)= 2^256

也就是2的256次方,而存储账户密钥的可能性更是多达2的512次方,可想而知,这种情况下要暴力破解,可操作性实在不强。

问:密钥是否会在传输的过程中被截取?

答:客户可能会有这样的疑问,在客户端使用Azure PaaS的SDK时,一般需要提供连接字符串,或者是密钥直接作为参数,感觉密钥就跟普通的用户名密码一样,会被传输到服务端来做对比验证,因此觉得密钥有可能在传输过程中被截取。

首先,所有的传输都是加密的(SSL\TLS)。但这还不是关键点,更关键的是,密钥其实压根就不会被传输,被用来传输和验证的是令牌(Token)。也就是说SDK拿到提供的密钥,会根据密钥生成相应的令牌,再传输令牌到服务端做验证。而令牌本身是被限制了访问范畴和生命周期的,因此比起密钥的安全性会高得多。

问:在客户端,密钥无论是明文写在代码里,还是配置文件中,都不安全,有没有更安全的方式?

答:当然有。就跟生活中把贵重物品放在保险箱里一样,我们也可以把密钥放在保险箱里。Azure密钥保管库就是这样一个服务,可以将密钥保存到其中,授权的客户端在需要的时候再从中获取。这样的话,既使得密钥能被集中管理,而且能使密钥管理者和使用者分离,提高了安全性的同时,更提供了便捷性。更多了解Azure密钥保管库,可参阅以下文章:

-         Azure密钥保管库介绍

-         Azure密钥保管库入门

-         Azure密钥保管库使用

那么除了这种方式之外,还有没有别的办法呢?上一个问题中我们提到通过令牌来认证,也就是说客户端其实不一定要知道密钥,它只要能提供正确的令牌就可以了,因此我们可以创建一个专门生成令牌的集中管理服务,授权的客户端只需要调用这个服务,就可以拿到目标资源的访问令牌,这样也可以避免密钥被客户端显示的知道。当然这种方法需要自己创建一个专门生成令牌的服务,所以比起使用Azure密钥保管库的方式要复杂些。

转载于:https://www.cnblogs.com/hula100/p/7197486.html

Azure PaaS服务密钥的安全性相关推荐

  1. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)

    引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https://www.microsoft.com/ne ...

  2. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...

  3. sql azure 语法_将SQL工作负载迁移到Microsoft Azure:服务选择

    sql azure 语法 In the previous article, Migrating SQL workloads to Microsoft Azure: Planning the jump, ...

  4. 适用于Java开发人员的微服务:管理安全性和机密

    关于麦洛 麦洛是 Java 开发者和技术爱好者. 对 Java 相关技术特别感兴趣,包括 javaee. Spring系列. 微服务等 作者:Andrey Redko 原文:Microservices ...

  5. 解锁新姿势 |如何利用配置中心规范构建PaaS服务配置

    为什么80%的码农都做不了架构师?>>>    摘要: 在上一篇文章中,我们以MQ和ACM为例,讨论了如何借助配置中心对消息进行限流管理的场景.在本文中,我们继续以该场景为例,讲述如 ...

  6. 微软发布新Azure 媒体服务 API(V3),现已全面可用

    利用Azure媒体服务(Azure Media Services),客户可以大规模地编码.保护.编制索引和传送视频.最近,微软发布了在Azure中对此服务的几个增强改进,包括新Azure媒体服务API ...

  7. 新的Azure通信服务(ACS)如何实现WebRTC?

    正文字数:3144  阅读时长:4分钟 本文来自Housepaty的软件工程师Gustavo Garcia,他对Azure通信服务(ACS)进行了全面的评估,包括从浏览器兼容性.编解码器到带宽估计算法 ...

  8. Azure认知服务之表单识别器

    认知服务 Azure 认知服务的目标是帮助开发人员创建可以看.听.说.理解甚至开始推理的应用程序.Azure 认知服务中的服务目录可分为五大主要支柱类别:视觉.语音.语言.Web 搜索和决策.开发人员 ...

  9. Windows Azure 之服务总线中继服务

    Windows Azure的服务总线允许在Web服务内部与外部之间做成一个公共的连接点,在无需更改企业防火墙或者其他安全配置的情况下连接内部和外部的服务 而使用Azure云服务的时候由于缩放的原因通过 ...

最新文章

  1. JS 保持数组长度为3位并且值不重复
  2. 收集的一些主流网站的GA代码
  3. java线程能做什么_java中的多线程能做什么 ?基本作用能说下吗?
  4. spring beans源码解读之 ioc容器之始祖--DefaultListableBeanFactory
  5. Journey to Un‘Goro 贪心,找规律,搜索(沈阳)
  6. axure7 地址选择_AxureRP8实战手册-案例7(形状:唯一选中项)
  7. leader选举的源码分析-Messenger
  8. C语言笔记(关键字)
  9. Redis RDB与AOF持久化详解
  10. c++判断奇偶_第十一届(今年)蓝桥杯省模拟赛 试题+源码 C/C++详解
  11. 图书管理系统(微信、后台、网页端)总结
  12. 记录一下所了解的一些第三开源框架
  13. 几种智能机器人室内定位方法对比
  14. 90后新晋父母的根据地——万物心选
  15. Google奥运会彩蛋,你确定不来参加一下吗?
  16. 工作第九周:勇敢的少年,快去创造奇迹!
  17. convexity and concavity(凸面和凹面)
  18. 3 计算机网络的主要功能,计算机网络的功能主要有哪些?
  19. 苹果手机白屏_安卓用久了卡顿 苹果用久了闪退 究竟是因为啥?
  20. android英文参考文献,英文参考文献

热门文章

  1. c语言中读和写的作用,C语言中对文件最基本的读取和写入函数
  2. html语言中div的用法,htmldiv标签怎么用
  3. 计算机网络联网方法实验报告,计算机网络技术》实验报告.doc
  4. mysql 主从复制 性能_MySQL 主从复制搭建
  5. The Suspects(并查集入门)
  6. R语言︱H2o深度学习的一些R语言实践——H2o包
  7. 加快网站速度的最佳做法_(3)script脚本放在底部
  8. OpenCV之分离和合并颜色通道
  9. bzoj 3527 [Zjoi2014]力——FFT
  10. Vue : Expected the Promise rejection reason to be an Error