一、密钥交换(Key exchange)

每一种加密算法都依赖于加密和解密密钥的使用,而对其中一些密钥进行保密是至关重要的。在对称加密的情况下,发送方和接收方共享一个秘密的密钥,其他人不应该知道。在发送方和接收方可以开始使用对称算法进行通信之前,他们必须以某种方式商定并交换他们将用于该通信会话的共享秘钥,这是一个挑战。

例如,Alice和Bob希望彼此进行秘密通信。他们希望密学能够为他们的通信保密,并保证他们真的在互相交谈。这需要他们交换一个共享的加密密钥。首先,Alice可能会去随机选择一个秘密密钥,但她必须以某种方式将其发送给Bob,但是她还没有一个安全的渠道来与Bob交流来传递密钥。

如果她通过电子邮件或其他未加密的方式发送,像Mal这样的第三方可能会在运输过程中截获密钥,然后使用该密钥窃听Alice和Bob之间所有的后续通信。使这个问题更加复杂的是,当Bob从Alice那里收到这个密钥时,他没有任何方法来验证向他发送密钥的人真的是Alice。

如果Mal很聪明,Mal可以冒充Bob,给Alice发送一个假钥匙,然后再冒充Alice给Bob发送同样的假钥匙。这将产生与截获Alice合法发送给Bob的密钥相同的效果,而Mal将能够窃听他们所有的通信。

带外密钥交换(Out-of-Band Key Exchange):
这个问题的简单答案是使用带外密钥交换(Out-of-Band Key Exchange)。这只是意味着Alice和Bob以某种他们都信任的方式交换密钥,使用不同的通信渠道。例如,Alice和Bob可能只是简单地见面。如果他们彼此认识,那么他们可以一起创建密钥,并将其保存在他们各自的设备上。或者,Alice可以创建一个密钥,将其保存在一个USB驱动器上,然后将该驱动器邮寄给鲍勃的一个可信的真实地址。如果Alice和Bob知道对方的声音,他们甚至可以通过电话交换密钥。然而,这些方法都有自己的挑战,因为它们都很耗时,Alice和Bob可能相隔很远,使得实际会面不现实。通过实物邮寄信件需要几天时间,而试图通过电话读取冗长的加密密钥则非常困难。

带内密钥交换(In-Band Key Exchange):
解决带外密钥交换问题的方法是使用带内密钥交换(In-Band Key Exchange)算法,允许Alice和Bob在网络上交换一个秘密密钥,即使他们事先没有一个安全的方式与对方交流。第二部分的DH算法即可做到这一点。

二、DH算法(Dffie-Hellman)

Diffie-Hellman密钥交换算法,也称为DH算法。解决了对称加密的密钥交换问题。该算法于1976年由三位密码学家发明。它以Ralph Merkle的工作为基础,由Whitfield Diffie和Martin Hellman将其变成一种实用算法。对Merkle来说,遗憾的是,他的名字没有包括在算法的名称中。

Diffie-Hellman的数学原理:
首先我们用颜色代替数字做一个比喻。假设Alice和Bob想就一个共同的、共享的秘密颜色达成协议,并且不想让其他人知道。下面是他们可能做到这一点的一种方法:

  1. 首先,Alice向Bob发送一个信息,告诉他一个共享公开的颜色。比方说,Alice选择了黄色,然后通过电子邮件告诉Bob这个颜色;
  2. 接下来,Alice和Bob各自选择一种秘密的颜色,他们没有告诉对方。也许Alice选择的是红色,Bob选择的是蓝色。然后,Alice和Bob各自拿着共享的颜色,黄色,与他们的秘密颜色混合。对Alice来说,黄色和红色组成橙色,对Bob来说,黄色和蓝色组成绿色;
  3. 然后,Alice给Bob发了一封邮件,告诉他,自己得到了橙色,而Bob则告诉Alice他得到了绿色;
  4. 最后,Alice和Bob现在有了通过将共享的黄色与他们伙伴的秘密颜色混合而产生的颜色。然后他们各自将自己的秘密颜色与这个颜色混合。Alice将绿色和红色混合得到棕色,而Bob将橙色和蓝色混合得到棕色。这两种棕色都是相同的,都是由相同的三种颜色,即黄色、红色和蓝色混合在一起形成的。这样,双方就知道了协商的秘密的颜色。

以第三人称的视角来看,在整个交换的过程中,可以知道他们的公开共享颜色是黄色,交换了绿色和橙色,但不会知道Alice和Bob选择的两种秘密颜色,红色和蓝色,以及共同的秘密颜色棕色,因为这些从未通过电子邮件发送过。这就是Diffie-Hellman对颜色的作用。

数学原理有点复杂,但其工作方式是一样的。原理如下:

  1. Alice没有选择一个公开的颜色,而是选择了两个由变量p和g代表的数字,而且p必须是一个素数。然后Alice给Bob发了一条信息,告诉他用13代表p,用7代表g。
  2. 然后假设Alice选择了5作为秘密数字,我们称之为a。然后根据图中的公式得到A=11。其中a也可以称为Alice的私钥,A为Alice的公钥,并发送给Bob。
  3. 接着,Bob选择他自己的秘密数字,b=8。以和Alice相同的方式计算出自己的公钥B=3。然后将B发送给Alice。
  4. 最后,Alice和Bob通过图中的算法计算出最后的秘密S=9。S也就是双方交互的共享密钥信息。


如果Mal观看了Alice和Bob之间的整个通信,她不会有足够的信息来重建这个密钥,就像她无法弄清共享秘密的颜色是棕色一样。当人们将Diffie-Hellman用于实际通信时,他们会选择大得多的p和g值来开始工作,这使得数学运算变得更加困难。

还有一个值得一提的Diffie-Hellman算法的变体。椭圆曲线Diffie-Hellman算法,或称ECDH算法,使用了类似的方法,但依赖于从椭圆曲线问题中得出的复杂性。

三、密钥托管(Key escrow)

强大的加密技术很难被击败,这给执法部门和其他政府机构带来了问题,他们认为自己有权访问加密的通信。这就是密钥托管(Key escrow)的概念发挥作用的地方。密钥托管技术,使执法部门能够获得加密信息。这个想法是,政府人员在访问托管的钥匙之前必须获得法院的命令,以保护其他个人的隐私。虽然这可能是一个合理的目标,但目前还没有一个合理的方法以安全的方式实施这种方法。

也许,部署密钥托管技术的最协调一致的努力发生在1993年,当时政府提出了一种被称为Clipper芯片的技术。该芯片可以进行加密,但它包括一个特殊的执法访问字段,即LEAF值,允许政府人员访问通信内容。Clipper芯片引起了巨大的公众争议,电子前沿基金会等团体与RSA等安全公司联合起来,公开反对Clipper芯片的政府后门。这些游说工作取得了成效,Clipper芯片从未被广泛采用。在进一步分析了Clipper芯片的算法后,安全研究人员发现,它包含了一些根本性的缺陷,这些缺陷首先会阻止其安全使用。

2016年,联邦调查局要求苹果公司协助他们获得一部加密的iPhone,而政府正将其作为刑事调查的证据。苹果反对这一要求,理由是削弱iPhone加密软件的安全性会危及数百万iPhone用户的安全。我们陷入了两种利益冲突的困境。当政府有合法签发的搜查令时,他们有获取信息的合法需要。但另一方面,消费者希望科技公司能够打造安全的产品,将各种不受欢迎的入侵者拒之门外。
在有些情况下,企业需要恢复用户的加密密钥。这可能仅仅是因为用户忘记了他们的密码。或者是用户离开了组织,而企业领导需要访问用该用户的密钥加密的信息。一些加密产品,如微软Windows加密文件系统,在这些情况下提供了恢复代理的使用。恢复代理(Recovery Agents)拥有一个主密钥(Master key),可以解密组织中的任何信息。我们必须小心保护该密钥,因为它允许对组织中的所有加密数据进行全面访问。

四、密钥延伸(key stretching)

密钥延伸技术,可以通俗的理解为一种更慢的哈希算法。在密码学中,密钥延伸技术通常用来增加弱密码的安全性,使得暴力破解密码时花费的时间更长。任何系统中都会有弱密码的存在,尤其是人为设定的密码,通常都比较短,或者有规律可循,以致于容易被暴力破解出来,密钥延伸技术让这种攻击更难成功。其结合了两种不同的技术来增加加密密钥的强度:

  1. 首先,将加密密钥与一个被称为盐(salt)的值相结合,以让密钥更随机。这个过程被称为 “加盐”。
  2. 然后,它对产生的值进行散列,以增加密钥检查过程的时间,这可能不到一秒钟,但密钥延伸算法会重复这个过程数百或数千次,以消耗更多的计算能力。

    我们的想法是,如果用户知道正确的密码,验证密码所需的一两秒并不是什么大问题。然而,如果攻击者试图猜测正确的密码,攻击者将不得不对每次猜测进行同样的计算,使每次猜测都需要几秒钟。当攻击者试图进行数百万次猜测时,这就会使事情变得缓慢。

两种密钥延伸的方法:

  1. 一种用于执行密钥延伸的算法是Password-Based Key Derivation Function 2,或者PBKDF2。这个功能使用加盐和散列来扩展一个密钥。大多数安全专家建议,任何使用这种功能的人都要重复“加盐”过程至少4000次,甚至更多。
  2. Bcrypt是一种基于Blowfish的类似算法。它使用该算法的散列方法与攻击相结合来加强密钥。

五、硬件安全模块(Hardware security modules)

密码学需要大量的数学计算,因此是相当缓慢的。工程师通常通过建造专门用于加密和解密的特殊用途计算机硬件来提高密码学的效率。硬件安全模块,或称HSMs,是一种特殊用途的计算设备,可以管理加密密钥,并以一种高效的方式进行加密操作。HSMs的购买和操作费用很高,但如果配置得当,它们可以提供极高的安全水平。它们的核心优势之一是,它们可以创建和管理加密密钥,而不把它们暴露给任何一个人,从而大大降低了这些密钥被破坏的可能性。

云服务提供商通常在内部使用HSMs来管理他们自己的加密密钥,他们也向其客户提供HSM服务,作为管理客户密钥的安全方法,而不将其暴露给供应商。

在美国,使用HSM的政府机构必须遵循联邦信息处理标准(即FIPS)140-2中的要求。这份文件《加密模块的安全要求》包含了对机构如何使用HSM和其他加密硬件的详细要求。FIPS 140-2将HSM分为不同的级别,按安全等级递增的顺序排列:

  1. 安全级别1允许使用标准操作系统,不包括物理安全要求。它适合于低级别的安全应用,如标准计算机中的加密卡;
  2. 安全级别2增加了对物理安全的要求,包括使用防篡改的封条,并要求软件和固件根据通用标准认证为EAL2级;
  3. 安全等级3增加了更多的要求,例如,当有人试图篡改HSM时将其内容清零,并在允许访问加密密钥之前对操作员的身份进行认证。第三级还要求软件和固件在通用标准级别EAL3下运行;
  4. FIPS 140-2安全的最高级别,即安全级别4,对安全提出了极强的要求,包括对软件和固件使用共同标准级别EAL4。它还概述了严格的物理安全要求。

参考资料来源:
https://www.linkedin.com/learning/paths/become-a-comptia-security-plus-certified-security-professional-sy0-601

Security+ 学习笔记16 密钥管理相关推荐

  1. cocos2d-x学习笔记16:记录存储1:CCUserDefault

    cocos2d-x学习笔记16:记录存储1:CCUserDefault 一.简述 CCUserDefalt作为NSUserDefalt类的cocos2d-x实现版本,承担了cocos2d-x引擎的记录 ...

  2. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

  3. Hadoop学习笔记—16.Pig框架学习

    Hadoop学习笔记-16.Pig框架学习 一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin, ...

  4. 台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

    台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

  5. Linux 学习笔记16 信号量

    Linux 学习笔记16 信号量Semaphore 信号量概念 信号量(或信号灯)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语. 信号量是控制进程(或线程)同步(谁先执行,谁后执行 ...

  6. Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)

    Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...

  7. 区块链学习笔记16——ETH交易树和收据树

    区块链学习笔记16--ETH交易树和收据树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 交易树和 ...

  8. 【论文学习笔记-16】立体匹配:360SD-net

    [论文学习笔记-16]立体匹配:360SD-net Contribution RelatedWork Method Experiment 本文利用两张360°摄像机获得的球形图片进行立体匹配,与双目立 ...

  9. Python学习笔记16:实操案例十三(编写程序实现乐手弹奏乐器,设计自定义类表达出租车和家用轿车信息)

    Python学习笔记16:实操案例十三(编写程序实现乐手弹奏乐器,设计自定义类表达出租车和家用轿车信息) 1.编写程序实现乐手弹奏乐器 注意Python的多态是"鸭子类型",只要有 ...

  10. cs224w(图机器学习)2021冬季课程学习笔记16 Community Detection in Networks

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Community Detection in Networks 2. Network Com ...

最新文章

  1. 如何利用 nbconvert将 IPYNB文档转换 Markdown文档?
  2. python支持向量机框架_Netflix 内部 Python 框架 Metaflow 正式开源,可加速机器学习模型部署...
  3. 用程序算法做人生选择
  4. ansible的系统模块8
  5. Python数据结构——栈、队列的实现(一)
  6. leetcode 463. 岛屿的周长(Java版)
  7. matlab求迟滞,MATLAB PI迟滞模型问题
  8. 【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)
  9. 后端技术栈入职培训感悟
  10. java xlsx怎么转换成excel格式_pdf文件怎么转换成html网页格式?用什么方法来转换?...
  11. 大篆汉字对照表_篆书隶书千字对照表(一)
  12. 鸿蒙系统是否能玩游戏,鸿蒙系统玩游戏跟安卓互通吗
  13. python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
  14. python 音频文件采样率转换
  15. Linux (中标麒麟)离线安装 Python
  16. 2019 年第 27 周 DApp 影响力排行榜 | TokenInsight
  17. Golang 的 mgo 连接池
  18. shp文件中polyline是什么_shp文件的读取
  19. C++ enum前置声明
  20. 深度揭秘:到底什么是“授时”

热门文章

  1. 百面机器学习——什么是决策树
  2. 【无广告】一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇...
  3. 每日算法系列【LeetCode 825】适龄的朋友
  4. [NAACL19]无监督循环神经网络文法 (URNNG)
  5. 【理论篇】是时候彻底弄懂BERT模型了(建议收藏)
  6. 博文视点读书节第七日丨IT大咖来荐书,CS提升分享今晚开播,晒单赢福袋活动上线!
  7. Looper中的消息队列处理机制
  8. 我不是领导,如何让别人听我的话?
  9. Scala:提取器(Extractor)
  10. C语言如何去掉非数字字符串,Objective-C中利用正则去除非数字字母汉字方法实例...