课程网址:https://www.coursera.org/learn/internet-history
学习笔记:
Week 1: History - Dawn of Early Computing (1940 - 1960)
War Time Computing and Conmmunication
— High Stakes Research in Computing, and Communication
二战刺激了政府对各种科技的研究投入,由此促进了计算机技术的发展,其中就包括电子计算机的诞生。
为了解密德国的无线电情报,英国布莱切利园(Bletchley Park)内以艾伦·图灵(Alan Turing)为代表的跨学科(cross-disciplinary)团队为电子通信和计算(electronic communication and computation)技术打下了基础。
— Alan Turing and Bletchley Park
在二战期间,布莱切利园是英国政府进行密码解读的主要场所,各行各业的上万名人员在此处工作,轴心国的密码与密码文件,都会送到那里进行解码。布莱切利园是最早的跨学科合作部门。
Bombe是一台英国机械计算机,致敬波兰密码破译机Bomba,对破译德国Enigma密码机起到了重要作用,一个Bombe可以模拟36个Enigma的加密。
Enigma有三个转子(战时为了提高安全性又增加了),能够产生复式密码,号称无法穷举破译,加密的信息不长,多是一些普通的攻击指令。
德军高层的机密通信由Lorenz SZ42密码机进行加密,这是一种可以产生随机码的机器,拥有12个密码轮,复杂性大大提升。为了破译这种密码机,电子计算机诞生了。
Colossus是第一台电子计算机,使用了2500个真空电子管,以纸带作为输入器件。除了没有内存,巨人计算机已具备现代电子计算机的大多数特征。
Computing with Phone lines
— Post-War Computing and Communication
在战时对计算机的研究,促进了战后计算机技术的快速发展。
电可以被用来表示数据,而且和其它用物理存储计算机信息的方式相比,可以更快地转换数据,于是大量电子计算机被制造了出来。当时计算机间的连接要用到终端(terminal),终端利用拨号解调器(dial-up modem)通过当地电话连接到当地的计算机,或者拨通长途通话连接到远方的计算机。另外还有一种更少见的昂贵的方法,即通过租用线路(leased line)来连接。
Week2: The First Internet (1960 - 1990)
Supercomputers Justify a National Network
— History Through Supercomputing
(引用来自维基百科)
↑ Dial-up ,拔号连接是指通过本地电话线经由调制解调器连接,收费高、速度慢。
↑ Leased Line,专线网络是用来连接两个地区的对称电信线路网络。专线没有使用电话号码,专线的两端创建的是永久的连接,可以被应用在电话,数据和互联网服务,价格昂贵。
↑ Store and Forward Networking(存储转发网络)Bitnet是1980年代由美国纽约市立大学和耶鲁大学的研究者们建立的一个学术研究网络,也是今天互联网的雏形。虽然依照今天的标准显得非常简陋,但它的功能已基本成形:提供收发电子邮件、交换文件以及在空间内共同分享文字信息。
Bitnet比起专线的高花费便宜了很多,但由于任务处理方式的缺陷,大数据容易堵塞线路,一封电子邮件要6小时到2天才能送达。
↑ Packet switching,分组交换技术是在1960年代末出现的,当时美国高级研究计划局(ARPA)为实现远程计算机之间的信息交换,资助建设一个试验性的网络,该网络被称为ARPANET。其主要研究成果之一就是开发了一种新的网络协议,该协议采用一种新的网络信息传输技术,这就是分组交换技术。在分组交换中,一个数据连接通常传送数据的分组流,它们将不必全部以相同的方式路由过物理网络。目的计算机把收到的所有报文按照适当的顺序重新排列,就能合并恢复出原来的内容。一个系统可以将数据组装到报文中使用一条通信链路与多台机器通信。不仅链路是可以共享的,而且每个报文可以独立于其他报文进行路由。
这样通过路由器(router)传输数据不再是线性模式,解决了Bitnet中大数据堵塞的问题。
↑ Supercomputer,超级计算机的大量需求促成了NCSA的诞生。— Larry Smarr与NCSA
Larry Smarr 曾是一位天文学家。
后来在研究中他接触了超级计算机,并意识到计算机所能带来的革命性改变。在一系列努力之下,他说服政府,让国家科学基金会拨款,使超级电脑中心计划得以进行,这个计划所建立的五个中心之一就是国家超级电脑应用中心(NCSA)。
The First "Internet"
— History Though NSFNet
1986年,国家自然科学基金网络(NSFNET)建立了起来,网络核心协议采用TCP/IP协议,这是互联网历史上重要的一步。
接下来是三篇采访,关于互联网来临之时,一些人物的的事迹。
— Doug Van Houweling - NSFNet
Merit是一个密歇根州域网络,基于ARPANET。Doug Van Houweling是该工程的主要领导者,他与IBM和MCI公司合作,解决了预算和设备问题,极大的提高了线路带宽。
— Leonard Klienrock - The First Two Packets on the Internet
Leonard Klienrock是一位研究Packet Switching技术的计算机科学家。在1969年,The First Two Packets通过ARPANET从UCLA发送到Stanford,内容
LO
是通过ARPANET发送的第一条信息。(其实原本应该是LOGIN
,但是中途系统崩溃...)— Katie Hafner - Where Wizards Stay Up Late
Katie Hafner是一位记者,见证着早期网络的发展。
Ray Tomlinson是她的采访对象,也是
@
这个符号的提出者。Jon Postel对计算机网络领域做出许多重要贡献,其中包括域名系统(Domain Name System)。
Week3: History - The World Wide Web (1990 - 1995)
The Early World-Wide-Web
— Getting to the Web
↑欧洲核子研究组织(CERN)是世界上最大的粒子物理学实验室,也是万维网(World Wide Web)的发源地。万维网是一种因特网范畴内的网络系统。— Robert Cailliau - Co-Inventor of the Web
↑ Robert Cailliau是一位CERN的信息工程师,也是计算机科学家。CERN使用集中的数据库,任何计算机都能登录,因此无法确定连接到哪一台计算机。Robert Cailliau把浏览器(browser) 和数据库(databases)分为上下层,这样就可以进行链接访问。这就是Web时代的开端。
第一台服务器(server)在1990年诞生的。
1994年是万维网的诞生年,第一届国际万维网大会让Internet一词广泛流传。A Search Engine for Physics Articles
— The Web Becomes Content
1990s年代开始用超文本标记语言(HyperText Markup Language, HTML)来设计网站的。当时的Mosaic浏览器设计非常简陋,页面主要是文本,点击图片链接的时候,会弹出新的窗口加载图片。这么设计是为了适应当时的网速和硬件。
— Paul Kunz - The First Web Server in America
↑ 1991年美国第一台服务器诞生在斯坦福。所有的人都能访问,不过要在服务器上有一个账户并且会数据库语言,这就比较困难了。Paul Kunz就想出了一个办法叫即时消息,在不登录的情况下对数据库执行查询,类似搜索引擎。
Making the Web Available to All
— Building Mosaic
↑ Gopher 是Internet上一个非常有名的信息查找系统,也是一种协议。在1994年web开始盛行之前是绝对的主流。— Joseph Hardin - NCSA Mosaic
Mosaic是NCSA的开源浏览器,支持Mac、Windows、Unix,极大推动了互联网发展。
Week4: History - Commercialization and Growth (1995 - present)
Explosive Growth of the Internet and Web
— The Year of the Web
1994年真的发生了很多大事,其中就包括了主要由NCSA的老员工们构成的Netscape的成立。这家公司在浏览器软件领域大展拳脚,开发的浏览器支持三大平台,对当时的Microsoft造成了威胁。在收购未果之后,商业上的斗争开始了。
Netscape不断开发更好的软件来应对挑战,这期间就诞生了JavaScript。
在商业竞争中,开源软件也受到了推动,Mozilla基金会的成立为后来的FireFox作出了铺垫。— Mitchell Baker: The Mozilla Foundation
Mitchell Baker是Mozilla的创始人之一。
Netscape的浏览器产品曾风靡一时,但由于与IE争夺市场失利,被AOL收购,一部分资产被注入非营利组织Mozilla基金会。然而之后推出的Netscape 6却是个失败的产品,市场反应极差,再加上项目组与AOL高层理念不合,AOL因此进行大规模裁员。不过Mitchell Baker依然不计报酬的继续为开源项目贡献了几年,直到Mozilla上市。
2003年AOL投资成立了Mozilla Foundation,他们和Google合作,创造性的为浏览器添加搜索栏服务。最终FireFox诞生了,取得了巨大的成功。
— Brendan Eich - Inventor of JavaScript
1995年,Brendan Eich被Netscape雇佣。当时Netscape已经启动了被称为Mosaic killer的项目,也就是Mozilla。但Brendan Eich却未加入这个项目,而是投入到发明一种编程语言的尝试中,这是为HTML和网页设计者所打造的、可以直接嵌入到网页中的脚本语言。这种解释型语言没有类型声明,不需要编译,可以被完全不懂编译器的人使用,像BASIC一样。
这就是JavaScript,但它的名字是一个完全的谎言,实际上语法格式和C很像。JavaScript取得了巨大成功,它拥有一个重要的特点——可拓展性(malleable),给了网页设计者灵活的发挥空间,也因此成为一种多范式语言( multi-paradigm language)。
2004~2005年,JavaScript引发了一场被称为Web 2.0的革命。可以说,在客观上降低了学习编程语言的门槛,为使用者打开了很大的创新空间。Commercialization of the Web
— Assume the Web
如果不是微软的话,Netscape是否能够成功地实现其原始战略,完全专有的服务器和客户端,然后以70美元到100美元的价格销售网络浏览器?
微软捆绑免费IE的策略使得Netscape无法再为浏览器收费,这样的行为最终反而催生了Firefox和Mozilla,以及万维网联盟(World Wide Web Consortium),还有更加公平的市场。— Jeff Bezos - Founder of Amazon
Jeff Bezos是Amazon的创始人。
1994年,他发现了web的使用率激增,于是选择在互联网上卖书,后来又新增了音乐CD。通过一些互联网营销手段,Amazon吸引了大量的关注,并因此走向成功。可以说,Amazon的成功正是直接得益于互联网时代的发展。
— The Modern Internet
九十年代末,光纤的大量普及使数据的传输变得更加便利,其相对于铜线的价格优势也让距离变得越来越不重要。
网络服务器的数量也在极快的增长,至今达到2000~3000万左右。
互联网的快速发展甚至改变了股票市场和世界经济。
Week5: Internets and Packets
Layer1: Link
Introduction / The Link Layer
本周将从历史转向技术。
Shared Network(共享网络)是一种存储转发的网络。要发送的信息被分成许多Packets(数据包),然后让路由器做短期短距离的数据传输,多个路由器接连负责将收到的数据包传送给下一个路由器,hop依然存在,也就是路由器之间的转发过程。一个packet的传输时间只取决于光速和距离,但更多的hop通常会导致更长的传输时间,因此需要关心的就仅仅是路由过程中的路径问题,为了便于研究,人们提出了分为四层的Layered Network Model(网络分层模型)。
在分层之后,就需要定义各层之间要如何协同工作,协议(Protocol)就是这个问题的解决方案。
另一种广为人知的模型是分为七层的OSI(Open System Interconnection model,开放式通信系统互联模型)。协议参考模型的意义在于把大问题分解成若干小问题,各个小问题之间相互独立,可以忽略其它层的状况,这样提出解决方案变得更容易了。
虽然之前提到的路由过程好像很简单,但实际上在分层构造中,数据传输要经过Application、Transport、Internet、Link,再到路由器的Link。路由器里面只有Link和Internet两层,数据不断的上下传输于路由器之间,直到目的地。
Link Layer(链路层)要解决的是如何进行物理层面的数据传输,每个路由器都没有完全负责整个传输过程,只是不断hop,一个比一个更送的远一些,所以这一层只需要关心数据在线路中的传输。Link Layer的常见形式有Ethernet、WiFi、cable modem、DSL、satellite、optical。
另一方面,如果出现了多个计算机同时使用的情况,就需要考虑如何共享的问题了。
Ethernet(以太网)可以说是应用最为广泛的Link Layer,硬件厂商在制造以太网或无线适配器的时候,会写入一系列由两两组合的十六进制数组成的序列号,以标识其硬件物理地址(Mac地址),packet中会用物理地址来标记发送者和接收者,这就是解决如何共享的手段。被共同使用的网络还要考虑的是如何避免冲突。
CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路访问及冲突检测)技术在Ethernet中被用来解决这个问题。无线设备在发送数据前会进行Listen(监听)等到出现静默(没有其他正在传输的数据)。在传输中监听一直进行,直到数据传输成功。如果无法清晰的监听自己的数据,就假定会发生冲突,等待一会再接着发送数据。每个系统的等待时间是不同的,这样就可以避免“过度礼让”。
Layer 2 : Internet Protocol
The InterNetwork (IP)
Internetwork Layer(网络层)关心的是网络中所有Link的连接问题,于是对于经过一个个Link到达最终的目的地的保证,IP Address(IP地址)起到了重要作用。
IP地址是全球范畴的,是地理性的,取决于具体的工作站或服务器。每一个想要在因特网上直接发送数据包的系统都有独一无二的IP地址。IP地址不是被哪个组织所控制,地址范围是分配的,就像电话号码一样被识别。
IP地址(IPv4)格式是32bits的,由四组逗号分隔的从0 ~ 255(8bits)的数字组成。这些数字又分为两部分:前缀网络号和后缀主机号,前者长度结合子网掩码来表示,根据IP地址类型的不同而相异,指明IP地址从属于哪个网络,类似电话区号;后者指明网络中的具体主机。数据在网络传输过程中会先根据前缀找到指定网络,再根据主机号索引到目标主机。
Router Tables(路由表)是路由器等网络设备上存储的一张动态更新的路由信息表,存有到达特定网络终端的路径,决定路由器将如何为数据包选择转发路径。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,在接收申请之后,可以为新连入网络的主机分配一个IP地址。但如果接入主机过多,就会出现IP地址不够用的情况,为了解决这个问题,就要说到Non-Routable Addresses(非路由地址),即专用网络(局域网)里的local address。
NAT(Network Address Translation,网络地址转换)技术一般被家庭路由器采用,可使专用网内部已分配的本地IP地址与因特网上的主机通信,这种通过使用少量的公有IP地址代表较多的私有IP地址的方式,有助于减缓IP地址枯竭的情况。
路由器会为每个加入家庭网络的连接映射远端的虚拟地址,形似
192.168.*.*
的IP地址是典型的局域网虚拟local address,是NAT分配的只在内部网络使用的虚拟IP地址,不能直接访问因特网,只有通过ISP(Internet Service Provider,互联网服务提供商)转换为real global routable address,才能与因特网传输数据。许多系统都有显示路由路径的工具,例如Mac上的traceroute和Windows上的tracert。
TTL(Time to Live,存活时间)是每个IP数据包自带的一个用来表示生存时间的字节,最大值为255。TTL每经过一个路由器减少1,减到零之后就丢弃数据包,防止无限hop导致死循环造成网络堵塞。
Week6: Transport Control Protocol
Transport/Reliability
- Transport Layer
TCP位于网络分层模型的第三层,在网络层的上方。TCP假定IP会丢失数据,为了防止这种情况,TCP会保存一份数据拷贝,不断的重发数据包直到收到确认应答。如果耗时太长,也将重新发送。由于把数据看做无结构的字节流,发送前拆解成数据包,接收时再组装,因此可以说TCP是面向字节流的。
TCP is a stream of bytes.
总之,TCP要做的就是最大化利用可用资源,解决网络的可靠性问题。因此,TCP的主要工作就是判断哪些数据包在传输中丢失了,并对其重新发送。IP不被要求能够进行Storage(存储),我们要求它尽可能的快且聪明。所以路由器不进行任何存储,只是尽快的来回传输。所以我们需要有Memory(内存)来存储这些数据包,以便我们重传,因此当电脑或手机通过网络发送数据时,它有责任保留副本,而并不期望网络内部去这样做。
在20世纪80年代后期,有人预测因特网将会消亡。他们认为因特网无法发展下去,而应该让IBM等企业去做供应商建立收费网络。随着NSFNet的出现,越来越多的计算机接入网络,网速越来越慢,看起来学术界无法建立一个强大的可扩展网络将成为事实。
就在这个时候,Van Jacobson发明了Slow Start(慢启动)算法,为TCP作出巨大贡献,很好的解决了网络拥堵问题,可以说是他拯救了因特网。
Van Jacobson - Slow Start Algorithm
大量接入网络的计算机,造成了严重的数据包堆积和丢失的问题,有时甚至每十分钟才能传输一个数据包。
在那时,开始运行TCP / IP最简单的方法就是用Berkeley Unix,因为它有一个ARPA资助的非常好的实现。然而在小规模测试的情况下它就会突然崩溃,每个人都看到了其糟糕表现,所以人们讨论到底是哪里出错了,协议的实现还是协议本身?于是努力寻找解决方案的工作开始了。为了在保证传输速度的前提下解决网络堵塞,Slow Start算法出现了。
cwnd(Congestion Window,拥塞窗口)是一个状态变量,它表示无需等待确认应答就可以继续发送数据包的最大数量,其大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。
慢开始算法的思路就是,不要一开始就发送大量的数据,而是先试探一下网络的拥塞程度,由小到大逐渐增加拥塞窗口的大小。Slow Start算法的精妙之处在于,如果完全进行一次发送一次应答的模式,虽然能避免堵塞,但也导致了极慢的网速和大量资源浪费。而慢启动则是在不清楚下一次传输是否面临拥堵的情况下,从较慢的发送应答开始,在不造成堵塞的试探下一点点提速。
The Domain Name System
DNS(Domain Name System,域名系统)是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户只需记住更加友好且有意义的字符串域名,域名通过解析再得到IP地址。
DNS有点像在网络层和传输层之间,又或者是网络层和链路层之间,肯定不在应用层,也不算链路层,但又使用链路层,总之,可以说并不是严格地属于某层。IP地址编码互联网连接的地理性位置,但是上网时我们真的不关心互联网络的地理,而是记住那些友好的域名,所以倾向于把DNS放在第二层和第三层之间。
TCP Wrap Up
- TCP有责任补偿IP层的不完善性。TCP标记数据并存储拷贝在源计算机中,如果没有收到应答就会再次发送,确保不出现丢失,因此数据可以有序的送达。这就是TCP的缓冲机制,使得互联网能够快速发展。
Week7: Application Protocols
Layer 4: Applications
Application Layer
- 由于TCP提供了“a reliable pipe”连接用户和服务器,Application Layer(应用层)可以不考虑底层技术细节去实现一些具体的应用功能了。
- World Wide Web (万维网,最广为人知的应用层实例)
- Stream Kitty videos
Ports(端口)就像是电话号码中的分机号(extensions),跟在IP地址后面,表示在主机中定位到某个具体的Application,不同的端口号对应不同的服务。
Application Protocols的任务就是处理与端口的信息交换。一些常见的TCP端口(位于TCP层):
HTTP(Hypertext Transport Protocol,超文本传输协议)是因特网上最主要的应用层协议,所有WWW文件遵循的标准。
HTTP是为了使Web能够获取HTML、Images、Documents等资源而被创造,因此浏览器作为Web的客户端就是通过HTTP来进行通讯。- HTTP Request / Response Cycle(HTTP请求/响应周期)是协议规定的关于处理URL(Uniform Resource Locator,统一资源定位符)的操作流程:
- 鼠标点击URL链接(click)
- 浏览器向服务器提出请求(HTTP request)
- 服务器进行响应(HTTP response)
- 浏览器接收HTML文本,并显示网页(display)
Internet Standards(因特网标准)是适用于互联网技术或方法的规范性标准,由IETF(Internet Engineering Task Force,互联网工程任务组)制定。
这些制定的标准被称作RFCs(Request for Comments),包含了几乎所有关于因特网的重要文字资料。如果想成为网络方面的专家,那么RFCs无疑是最重要也是最经常需要用到的资料之一。Telnet是常用的远程控制Web服务器的方法。
Telnet协议是TCP/IP协议族中的一员,是因特网远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。
如果连接上服务器后要检索文档,应对Web服务器发送指令
GET
。
- 由于TCP提供了“a reliable pipe”连接用户和服务器,Application Layer(应用层)可以不考虑底层技术细节去实现一些具体的应用功能了。
Van Jacobson - Content Centered Networking
由于将以信息为中心的Web模型和以主机中心的TCP/IP模型结合在一起,我们遇到了一些问题。网络系统源于电话拨号系统,几十年来的改进和创新让人们不局限于物理线路,而是着重其中流动的数据信息。但我们制定的协议模型只是相当于给信息取别名,就像通过URL来访问Web服务器,而URL却并不是我们想要获取的信息,它只是一个媒介,标示了信息的来源。这些信息实质上就是人们在网络上创造的内容,所以我们能否重构网络框架,使其基础设施专注于内容本身?这就是Van Jacobson对于互联网发展的一个猜想。
内容中心网络,也称为信息中心网络(inforation centric networking,ICN)或数据命名网络(named data networking ,NDN),都是将信息对象作为构建网络的基础,分离信息的位置信息与内容识别,通过内容名字而不是主机IP地址获取数据。利用网络内置缓存提高传输效率,而不关心数据存储位置。通过发布/订阅模式请求数据,使供给者和消费者在空间、时间上解耦合。这种新的网络架构专注于信息对象、信息属性和用户兴趣,采用“信息共享通信模型”,从而实现高效、可靠的信息分发。
CCN(Content Centered Networking,内容中心网络)抛弃了过去以IP地址为基础的网络,淡化了物理地址的概念,强调以信息作为标示,以内容为中心。
Week8: Encrypting and Signing
Hiding Date from Ohters
Security Introduction
Alice and Bob是密码学、博弈论、物理学等领域中的通用角色之一。Alice(A)和Bob(B)一般是形容好人的,用来描述通讯双方。也会出现一些不怀好意的人,比如窃听者Eve(E)。
在密码学和电脑安全中,存在很多这一系列的惯用角色名称,使用这些名称是为了方便说明议题,有时也会用作幽默。而在典型的协议运行中,这些人物不一定是一个“人类”,而可能是一个可信赖的自动式代理人(如电脑程序)。
其它常见人名:Alice and Bob
关于窃听的分类:
In passive wiretapping the network is snooped whereas in active wiretapping the network data is altered
Security is Always a Tradeoff,安全总是一种充满妥协的权衡。不存在完美的安全机制,安全措施也不是越多越好,因为安全措施很多时候是有一定代价的(比如繁琐的密保机制),应当根据实际情况进行选择。
- 信息安全的CIA三要素
- Confidentiality(保密性,要求被保护信息不能泄露)
- Integrity(完整性,要求被保护信息完整、未被篡改)
- Availability(可用性,要求被保护信息可以使用、获得)
Security - Encryption and Confidentiality
Plaintext(明文)是指待加密的信息,即加密前能够让人理解的原始数据。Ciphertext(密文)是明文的一个转换版本,任何没有破译方法的人无法理解。
明文转换为密文称作Encryption(加密),把密文转换回明文称作Decryption(解密)。一个加密系统的强度取决于加密解密技术与Key(密钥)的长度,密钥指一种将明文转换成密文的算法或机制。
- 密钥可分为:symmetric-key(对称密钥)与asymmetric-key(非对称密钥)。
对称密钥用于加密与解密使用相同密钥的加密系统,被称作secret-key(秘钥)。很多古典密码都采用这种模式,比如凯撒密码。
非对称密钥用于加密与解密使用两个不同密钥的加密系统,分别被称作public-key(公钥)和private-key(私钥)。公钥是公开的,信息发送者用公钥加密,而信息接收者则用私钥解密。比较著名的公钥算法是RSA算法。
Insure Date Integrity
Security - Integrity and Signatures
Integrity: The information you receive is from who you think it is and has not been modified.
Cryptographic Hash(密码哈希,密码散列表)的一种广泛使用的信息安全技术,将任意数据转换成定长的比特串,可以用来保密明文和验证完整性。比较著名的哈希算法有SHA-1,MD5等。
密码散列函数(Cryptographic hash function)又译为加密散列函数、加密哈希函数,是散列函数的一种。它被认为是一种单向函数,输入数据的任何一点微小的改变都会使结果完全不同,也就是说极其难以由输出的结果回推输入的数据是什么。这种散列函数的输入数据,通常被称为消息(message),而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。
一个理想的密码哈希函数应具有的特性:
- 相同的消息总是生成相同的结果
- 计算任何给定消息的哈希值很快
- 难以由已知的哈希值推算出原始消息
- 对消息的微小改动会产生巨大变化,使新哈希值看起来与旧哈希值毫不相关
- 找到两个具有相同哈希值的不同消息是不可行的
以防数据库丢失泄露密码,网站等系统不会以明文形式存储用户密码,而是当用户设置密码时,计算其哈希值并储存。在登录时,会将用户输入内容转换成哈希值与数据库中存储的进行匹配。因此,一个值得信任的网站永远不会把密码发给用户,而是只能重设密码。
Digital Signature(数字签名)是只有信息的发送者才能生成的他人无法伪造的一段数字串,一般用于明文发送时确认发送方和验证信息完整性,是非对称密钥加密技术与密码哈希技术的应用。数字签名中存在对公钥密码的逆运用,即用私钥加密,用公钥解密。用私钥加密的消息称为签名,只有拥有私钥的用户可以生成签名。用公钥解密签名这一步称为验证签名,所有用户都可以验证签名。
参考- 生成签名:
- 对消息进行哈希计算,得到哈希值
- 利用私钥对哈希值进行加密,生成签名
- 将签名附加在消息后面,一起发送
- 验证签名:
- 收到消息后,提取消息中的签名
- 用公钥对签名进行解密,得到哈希值1
- 对消息中的正文进行哈希计算,得到哈希值2
- 比较哈希值1和哈希值2,如果相同,则验证成功
使用非对称密钥技术并不是唯一的方法,一种比较朴素的做法是利用双方先约定好的shared-secret(共享密钥),过程如下:
- 把secret与消息连接起来,计算哈希值作为数字签名
- 将签名附加在未添加secret的消息后面,一起发送
- 收到消息后,提取消息中的签名
- 把消息加上secret之后再计算哈希值
- 比较哈希值与数字签名,如果相同,则验证成功
当然,这种方法的缺点也很明显,每个参与通讯的人都需要知道secret,因此通讯难度变大,且不能直接与因特网通讯。
Week9: Web Security
Secure Web Connections
Security Public/Private Key - Secure Sockets
Public Key Encryption(公钥加密)由 Whitfield Diffie 和Martin Hellman 在1976年提出,公钥加密系统基于两个不同但具有数学联系的密钥,因此被称作非对称加密系统。这两个密钥,一个叫公钥,被开放给所有通讯参与者,另一个叫私钥,必须个人保密。
- 生成公钥/私钥(简化):
- 随机选择两个大(越大越好)素数a, b
- 将a, b相乘得到c,其因子只有1, a, b, c
- 将c作为公钥
- 将a, b作为私钥
大素数的因式分解是很困难的,基于可计算性理论的角度,由公钥推导出私钥是几乎不可能的。从大素数之积来推导因子极其困难,但如果已知其中一个因子,那么知道另一个就很容易了。因此,公钥可以通过网络(即使不安全)传递给用户用来加密,网站则保存私钥用来解密,私钥不需要被公开。
理论上公钥加密系统存在被破解的可能性,不能保证绝对安全,其安全性由大素数的长度决定,而不断的加长又会增大加密运算量,对计算机有更高的要求。所以说,这个缺点也体现了Security is Always a Tradeoff这个观点。
TLS(Transport Layer Security,传输层安全协议)也被称作SSL(Secure Sockets Layer,安全套接层协议),由Netscape研发,可以被看作传输层和应用层之间额外协议层,基于公钥加密系统,为网络信息安全服务。
HTTPS(HTTP over SSL)是指运用SSL的超文本传输协议。
- TLS的功能:
- 连接具有保密性
- 密钥是针对每个连接唯一生成的,且基于共享密钥
- 使用的加密算法和密钥由服务器和客户端在传输数据的第一个字节之前协商
- 共享密钥的协商是安全可靠的
- 通信方的身份可以选择使用公钥加密系统进行认证,至少得有一方做认证。
- 连接具有完整性,每个传输的消息都包含一个使用MAC(消息认证码)的消息完整性检查,以防止在传输过程中丢失或更改数据
- 过去的通信记录不会被可能在未来被泄露的密钥所解密
- 支持多种方法来处理分享密钥、加密数据和消息完整性检查,因此可以根据需要来配置不同的安全参数
- 数据是否被加密对IP和TCP等底层协议来说是未知且无影响的
- 连接具有保密性
Identity on the Web
Security - Integrity and Certificate Authorities
CA(Certificate Authority,证书授权机构)是能够证明公钥所属和所有人身份,并能生成证书的组织或机构,其中既有有国际性组织和政府设立的组织,也有通过提供认证服务来盈利的组织,如Verisign。
CA是电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
证书包含:公钥,公钥的数字签名,公钥拥有者的信息。实际上证书就是对认证数字签名的公钥的二次签名认证,这样才能使对签名进行验证的公钥保证安全。
参考- 生成证书:
- 网站服务器提供公钥给CA
- CA用自己的私钥给网站的公钥加密(两者非配对),生成数字签名
- CA把公钥,数字签名,附加一些服务器信息整合在一起,生成证书发回网站
- 验证证书:
- 客户端得到证书
- 客户端获取证书的公钥(与CA的私钥配对)
- 客户端用证书的公钥对证书中的数字签名解密,得到哈希值1
- 客户端对网站的公钥进行哈希计算,得到哈希值2
- 比较哈希值1和哈希值2,如果相同,则证书合法