SSLTLS协议详解(上):密码套件,哈希,加密,密钥交换算法本⽂转载⾃
1.
作为⼀名安全爱好者,我⼀向很喜欢SSL(⽬前是TLS)的运作原理。理解这个复杂协议的基本原理花了我好⼏天的时间,但只要你理解了底层的概念和算法,就会感觉整个协议其实很简单。在学习SSL运作原理的过程中,我获益匪浅。回想起在⼤学期间学到的密码学,那段时间学习它们可是⼀件很⽆聊的事。现在,我开始明⽩⽼师为什么要让我学习加密的算法,因为密码学可以让我们的⽣活变得更加轻松。在这⾥,我想分享我所学到的⼀切,当然,我希望这对你能有所帮助。我们就此开始吧。
的历史
在了解SSL的历史时,有必要提⼀下Mozilla Foundation。说到Mozilla,⾸先我们想到的是他们著名的浏览
器Firefox。根据各种消息来源来看,Firefox是继Chrome和Safari之后最受欢迎的浏览器。但Firefox杰出的前⾝是,在90年代它是互联⽹⽤户中最受欢迎的浏览器。尽管这样,在微软推出了Internet Explorer之后,Netscape的时代也就随之结束了,之后他们便建⽴了著名的Mozilla基⾦会,它仍然在成长。
1994年,Netscape为Netscape Navigator浏览器研发了SSL。其作⽤主要是为了攻击。后来,随着互联⽹可访问性的增加,银⾏开始利⽤互联⽹进⾏交易。当时安全性是⼀个很重要的问题,IETF (互联⽹⼯程任务组),也就是⼀标准化互联⽹协议的⼈,他们研发属于⾃⼰的协议版本来标准化SSL,这是在1999年,现在该协议被称为TLS(传输层安全性),它的最新版本是TLS 1.3。
3.
⾸先,在深⼊研究这个话题之前,我们需要对⼏件事情有⼀个基本的了解。最重要的⼀个是密码学。理解SSL您不需要成为密码学专家,但基本的了解是必要的。我们接下来会在这⾥讨论基础知识。已经知道⾮对称和对称密钥加密的朋友们可以直接跳过本节进⼊下⼀部分。
密码学的处理对象是数字和字符串。基本上整个宇宙中的每⼀个数据都是数字。这⾥我们所说的数字,就是0和1,也就是⼆进制。你在屏幕上看到的图像,通过⽿机听到的⾳乐,⼀切都是⼆进制⽂件,
但我们的⽿朵和眼睛都不能理解⼆进制⽂件吗?只有⼤脑才能理解这⼀点,但即使它能够理解⼆进制⽂件,它也⽆法享受⼆进制⽂件。因此,我们将⼆进制⽂件转换为⼈类可理解的格式,如mp3,jpg等。我们将这个过程称为编码,它是双向处理,可以很容易地解码成原始形式。
4.
散列是另⼀种数据⼀旦转换为其他形式将永远⽆法恢复的加密技术。在Layman的术语中,没有称为去散列的过程。有很多哈希函数都可以完成这项⼯作,⽐如sha-512,md5等等。wst.space的sha-512值是,
83d98e97ec1efc3cb4d20f81a246bff06a1c145b7c06c481defed6ef31ce6ad78db3ecb36e7ce097966f019eab7bdc7ffa6b
3f b8c5226871667ae13a6728c63b
您可以通过访问某个并输⼊wst.space来验证。
如果⽆法恢复原始值,那么我们在哪⼉可以使⽤它呢?密码!当你给移动设备或PC设置密码时,便会创建哈希密码然后存储在安全的位置。当您下次进⾏登录尝试时,再次使⽤相同的算法(散列函数)对输
⼊的字符串进⾏散列,并将输出与存储的值进⾏匹配。如果它是相同的,你就会登录。否则你将⽆法登录。
对密码运⽤哈希算法,我们就可以确保攻击者即使窃取了存储的密码⽂件也永远不会得到我们的密码。攻击者有的只是密码的哈希值。他也可能会到最常⽤密码的列表,然后将sha-512应⽤于每个密码,再将其与⼿中的值进⾏⽐较,这种⽅法称为字典攻击。但这样做需要多久?如果您的密码⾜够随机,您认为这种破解⽅法是否有效?
我们在中讨论了。它的值是会话cookie,通常是哈希值。Facebook,Google和亚马逊数据库中的所有密码都经过哈希处理,或者⾄少它们应该被哈希化。
5.
加密位于散列和编码之间。编码是⼀个双向过程,不应⽤于提供安全性。加密也是⼀个双向过程,但当且仅当加密密钥已知时才能检索原始数据。如果您不知道加密的⼯作原理,请不要担⼼,我们将在此讨论基础知识。这对理解SSL的基础知识已经⾜够了。共有两种类型的加密,即对称加密和⾮对称加密。
6.
我尽可能地说简单点。所以,我们可以通过移位算法来理解对称加密,这个算法是通过将字母向左或向右移动来加密字母表。我们取⼀个字符串CRYPTO并考虑⼀个数字+3,然后,CRYPTO的加密格式将是FUBSWR,也就是意味着每个字母向右移动3个位置。
这⾥,单词CRYPTO称为明⽂,输出FUBSWR称为密⽂,值+3称为加密密钥(对称密钥),整个过程为密码。这是最古⽼和最基本的
对称密钥加密算法之⼀,其⾸次使⽤是在Julius Caesar时期,所以以他的名字命名,它是⼀种著名的凯撒密码。任何知道加密密钥并且可以应⽤凯撒算法的⼈都可以反向并检索原始明⽂。因此,它被称为对称加密。
我们可以使⽤TLS进⾏对称加密吗
如您所知,这种算法很容易破解,因为可能性较⼩。我们可以将key的值从1更改为任何内容,并逐个迭代26个字母。请注意,如果我们只加密⼩写英⽂字母,则key的值限制为26。我们的计算机使⽤Bruteforce处理这个过程只需⼏毫秒。如今,存在诸如AES(⾼级加密标准)和3DES(三重数据加密算法)的复杂算法。它们都被公认为很难破解。
这是在发送和接收数据时在SSL/TLS中使⽤的加密技术。但客户端和服务器需要在开始加密数据之前就密钥达成⼀致并进⾏交换,是这样的吗?交换密钥的最初步骤显然是纯⽂本。如果攻击者在共享密钥时捕获密钥怎么办?那使⽤它也就没有了意义。因此,我们需要⼀种安全机制来交换密钥,⽽不会让攻击者真正看到它。所以就出现了⾮对称密钥加密的作⽤。
7.
我们知道,在对称加密中,相同的密钥⽤于加密和解密。⼀旦该密钥被盗,所有数据都将消失。这是⼀个巨⼤的风险,我们需要更复杂的技术。1976年,Whitfield Diffie和Martin Hellman⾸次提出了⾮对称加密的概念,该算法被称为Diffie-Hellman密钥交换。然后在1978年,⿇省理⼯学院的Ron Rivest,Adi Shamir和Leonard Adleman发表了RSA 算法。这些都可以被视为⾮对称加密的基础。
与对称加密相⽐,在⾮对称加密中,将有两个关键点⽽不是⼀个。⼀个称为公钥,另⼀个称为私钥。理论上,在启动期间,我们可以⽣成公私钥匙对我们的机器。私钥应保存在安全的地⽅,绝不应与任何⼈共享。顾名思义,公钥可以与希望向您发送加密⽂本的任何⼈共享。现在,那些拥有您的公钥的⼈可以使⽤它加密秘密数据。如果密钥对是使⽤RSA算法⽣成的,那么它们应该在加密数据时使⽤相同的算法。⼀般来说,加密算法会在公钥中指定,加密数据只能使⽤您拥有的私钥。
我们可以对所有TLS使⽤⾮对称加密吗
⾮对称加密也称为公钥基础结构,⼜称PKI,这样命名的原因是⾃解释。不管怎样,只要您保持私钥安全,数据就是安全的。多好啊!所以,现在你可能会想,为什么我们仍然会在TLS中使⽤对称加密?我们有很多安全的PKI啊。是的,我也同意。但应该指出,必须在不影响可⽤性的情况下再处理安全的问题。由于PKI涉及双密钥架构并且密钥长度通常很⼤,因此加密-解密开销⾮常⾼。与对称密钥加密相⽐,它需要更多的时间和CPU占有率。
因此,当在客户端和服务器之间发送和接收数据时,⽤户会感觉到等待的时间更久,⽽且浏览器会开始吃掉CPU。因此PKI仅⽤于在客户端和服务器之间交换对称密钥,此后,才是对称密钥加密开始起作⽤并且新的数据传输也使⽤了这种技术。好吧,我知道我只是在这⾥轻描淡写,因为我还没有真正涉⾜这个话题。请记住我们到⽬前为⽌所讨论的内容然后回到这⼉,我们将从下⼀篇博客⽂章中深⼊探讨。
密钥交换算法
在博客系列的最后部分,我们已经讨论了密码学的基本概念:包括散列,对称和⾮对称加密等。除了他们的历史,我没有说过任何关于SSL或TLS的内容。我希望我们已经完成了基础部分,所以让我们挖掘点真实的东西吧。在这篇博⽂中,我们将根据Diffie-Hellman密钥交换的密钥交换算法。
8. SSL中的加密类型
从的,我们知道在SSL中使⽤了对称加密和⾮对称加密,接下来,我们将看到使⽤了哪种加密算法,在哪⾥使⽤的以及使⽤的原因。
想象⼀下,你正在浏览Facebook,Facebook在默认情况下通过https重新路由您的所有流量。由于您使⽤的是TLS(我将在⼤多数地⽅使⽤TLS⽽不是SSL,因为它现在是标准的)连接,您会在URL栏上看到⼀个绿⾊框以确认该连接是安全的。在单个会话期间,您会进⾏多项活动,例如评论,聊天,在页⾯之间导航,滚动新闻源等等。每次执⾏这些操作时,在客户端和服务器之间会共享多个请求和响应,所有这些通信都必须通过https才能确保数据安全。这意味着服务器和客户端浏览器正在为单个Facebook会话加密和解密数据包100次。
我们知道公钥加密的解密密钥永远不会与任何⼈共享,所以⽐对称密钥加密更安全,但是,如果我们还知道,在公钥基础设施(PKI)中,与对称密钥加密相⽐,它使⽤更多的CPU⽽且需要更多的时间来加密和解密,开销更⾼,导致浏览器(和应⽤程序服务器)开始占⽤您的CPU资源;此外,浏览器每次都必须经历繁忙的加密步骤,所以需要更多的时间才能提供内容。
9.
鉴于以上原因,我们需要使⽤对称加密来实现这⼀⽬标,这样可以更快,资源消耗可以更少,两全其美。但客户端和服务器在开始加密之前必须就单个密钥达成⼀致,对吧?他们会怎么做?在共享唯⼀的密钥时,坐在客户端和服务器之间的攻击者可以捕获它和Kaboom!您的所有数据都泄漏了。故⽽必须有⼀种解决⽅法来共享密钥并在那⾥我们使⽤公钥加密。
在客户端和服务器之间共享并同意⼀个秘密密钥的⼀系列过程我们称为握⼿,这是TLS的第⼀步。握⼿涉及多个过程,整个过程称为公钥基础结构,还记得我们在博客系列的最后部分使⽤了这个术语吗?PKI包括证书颁发机构(CA),数字签名等,我们将在下⾯深⼊讨论基础架构。
10. 密钥交换算法
因此,很明显⾮对称加密⽤于交换密钥,但⽤哪种算法呢?⾃从⾮对称密码学发明以来,提出了许多算法。在写这篇⽂章的过程
中,TLS1.2是常⽤的标准,还有RSA、Diffie-Hellman密钥交换、ECDH(Elliptic Curve Diffie-Hellman)、SRP(安全远程密码)、由TLS 1.2⽀持密钥交换算法PSK(Pre Shared Key)。
在这⾥讨论所有算法可能是个⿇烦事,相反我们将讨论最常见且易于理解的Diffie-Hellman密钥交换算法。
解释
我不打算直接去算,因为这⽅⾯并不是我的强项,⽽是让我们尝试⽤颜⾊类⽐来理解这个概念。想象⼀下,Alice和Bob正在做⼀些海报⼯作,他们的对⼿ Mallory也坐在替补席旁边。Alice和Bob想要达成共识,使⽤⼀种颜⾊来设计海报,他们⽆法⼤声讨论,因为Mallory会听到它。那么他们如何统⼀颜⾊呢?这个问题的解决⽅案就是Diffie-Hellman密钥交换算法的最简单形式,接下来我们来⼀探究竟。
⽅案步骤
12. Diffie-Hellman密钥交换背后的数学
让我们来看看上述算法背后的基本数学。为了更好地理解Diffie-Hellman的概念,我们需要了解模运算。那些不想看数学的朋友们可以跳过本节,其他⼈可以关注我。
很明显,当你将7和8加起来,你会得到15,这是⼩学算术问题。但是在12⼩时制的情况下,情况就不是这样的了。如果时间现在是7点,那么8⼩时后,时间将是3点。故⽽我们可以说时钟是算术模12的模运算的最简单的例⼦。在这种情况下,我们知道12:00也就相当于00:00,所以我们可以说12和0是⼀样的,反之亦然。
在数学上,
A = b(mod P)
如果我们将p的值设为12,将b设为21。然后,
21(mod 12)= 9
我们将其转换为Diffie-Hellman⽰例。在阅读以下内容时,请记住颜⾊类⽐。想象⼀下,Alice和Bob都知道g和p的值,或者Alice先前决定了这些值并将其发送给Bob。换句话说,这些值是公开的。现在,
观察到 S_A= S_B=K 。这是⽤于加密会话的会话密钥。
13. Mallory获得秘密钥匙的机会
在整个过程中,请注意Alice(a)的秘密和Bob(b)的秘密永远不会彼此共享。因此,Mallory只知道g,p,A和B.为了得到K的
值,Mallory⾸先需要从A = g^a(mod p)和B = g^b(mod p)计算a&b ,数学上这被称为离散对数问题。对于较⼤的p值,要计算结果⼏乎100%不可⾏。在实际的TLS实现中,p的长度将在1024或2048位的范围内。也就是说,2048位密钥的长度在2^2047和2^2048之间。希望你知道⼀个2^3长度的秘钥的最⼤值可以为8.想象⼀下2048位密钥得有多复杂。
当使⽤这样的密钥时,即使是世界上最⼤的超级计算机也将花费100年的时间才能计算出a&b。更不幸的是,这些值会随着每个会话⽽变化。所以啊,即使攻击者算出了这个值,在以下会话中他也⽆法⽤来模拟⽤户。这就是所谓的完美前瞻性保密。
14. 我们现在安全吗
ssl协议全称服务器和客户端浏览器已经同意安全共享通过强密钥交换算法的密钥,⼀切都看起来很不错。但是先等等,我们真的⾜够安全吗?让我们想象⼀下我们尝试使⽤https连接到facebook的场景,假设攻击者
已经位于您的浏览器和Facebook服务器之间,您的浏览器将告诉Facebook服务器启动TLS通道,但攻击者可以设置⾃⼰的服务器,并通过他的服务器重新路由你和Facebook之间的所有通信,因此,当Facebook服务器发送其公钥时,攻击者可以⽤他的公钥替换它并将其转发给您。
然后下⼀步,您收到公钥认为它实际上来⾃Facebook,您的浏览器将使⽤它加密您的密钥并将其发送回Facebook。再⼀次,攻击者会抓住它并猜猜是什么?他有相应的私钥来解密密钥,然后⽤Facebook的公钥(他已经拥有)的原始值加密它并将其转发回Facebook,然后,他将继续进⾏加密 - 解密过程,如此⼀来,他就可以看到你和Facebook之间共享的所有内容。
15.
问题的答案是CA(证书颁发机构)。简单来说,证书颁发机构由指定,以确保数据的完整性,数据完整性可确保在传输中的数据不会被第三⽅实体篡改。换句话说,CA充当浏览器和服务器之间的中间⼈,确保数据完整性是CA的职责。
我们将在下⼀篇博客⽂章中深⼊讨论CA。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论