计算机系统安全知识梳理
一、非对称加密算法
在非对称加密算法中,有公钥和私钥两种**,其中,公钥是公开的,可供所有人使用,而私钥由个人持有,必须妥善保管和注意保密。非对称的含义就是加密和解密使用两种不同的**。
加密解密过程:
A使用非对称加密方法将数据加密后传送给B。首先B需要拥有一对公钥和私钥。
1、B将他的公钥发送给A
2、A用B给他的公钥加密消息,然后传给B
3、B用他的私钥解密A发过来的消息。即使互联网中有其他人收到该消息,但是由于他们不拥有B的私钥,所以无法解密。
通过这几步,B就能成功收到A发送的消息,同时又达到了保密的目的。
优点:安全性更高,公钥是公开的,私钥由拥有者自己保存,不需要将私钥给别人。
缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
典型代表:RSA
二、对称加密算法过程及特点
对称加密算法采用单**加密(即加***与解***一致),在通信过程中,数据发送方将原始数据分割成固定大小的块,经过**和加密算法逐个加密后,发送给接收方;接收方收到加密后的报文后,结合**和解密算法解密组合后得出原始数据。由于加解密算法是公开的,因此在这过程中,**的安全传递就成为了至关重要的事了。而**通常来说是通过双方协商,以物理的方式传递给对方,或者利用第三方平台传递给对方。
优点:算法公开、计算量小、加密速度快和效率高
缺点:**单一(加***和解***一致)、**管理以及传送困难,不支持不可否认。
常见算法(了解):
DES:分组式加密算法,以64位为分组对数据加密,加解密使用同一个算法。
3DES:三重数据加密算法,对每个数据块应用三次DES加密算法。
AES:高级加密标准算法,是美国联邦政府采用的一种区块加密标准,用于替代原先的DES,目前已被广泛应用。
Blowfish:Blowfish算法是一个64位分组及可变**长度的对称**分组密码算法,可用来加密64比特长度的字符串。
三、消息摘要算法的特性
任何消息经过散列函数处理后,都会获得唯一的散列值,这一过程称为 “消息摘要”,其散列值称为 “数字指纹”,其算法为“消息摘要算法”。
消息摘要算法的主要特征是 加密过程不需要**,并且经过加密的数据无法被解密,目前可以解密逆向的只有 CRC32 算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法 不存在**的管理与分发问题,适合于分布式网络上使用。消息摘要算法主要应用在 “数字签名” 领域,作为对明文的摘要算法。
著名的摘要算法有 RSA 公司的 MD5 算法和 SHA-1 算法及其大量的变体。
特点:
1、无论输入的消息有多长,计算出来的消息摘要的__长度总是固定的__
2、消息摘要看起来是 “随机的”。 一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。
3、消息摘要函数是 单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。
四、缓冲区溢出在什么情况
(稍作了解,完全掌握有点困难)
缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
原因:造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。
危害:
1、程序崩溃,导致拒绝服务
2、跳转并且执行一段恶意代码
缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到系统权限,然后为所欲为。
利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,它可被利用来执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。
五、DDos攻击
DDos:Distributed denial of service attack
DDoS攻击按流量大小可以分三类:
第一类以力取胜,海量数据包从互联网的各个角落蜂拥而来,让各种强大的硬件防御系统、快速高效的应急流程无用武之地。这种类型的攻击典型代表是ICMP Flood和UDP Flood,现在已不常见。
第二类以巧取胜,难以察觉,每隔几分钟发一个包甚至只需要一个包。这类攻击主要是利用协议或者软件的漏洞发起,例如Slowloris攻击、Hash冲突攻击等,需要特定环境机缘巧合下才能出现。
第三类是上述两种的混合,既利用了协议、系统的缺陷,又具备了海量的流量,例如SYN Flood攻击、DNS Query Flood攻击,是当前的主流攻击方式。
SYN Flood攻击:(使用TCP数据包)
攻击者伪装大量的IP地址给服务器发送SYN报文,由于伪造的IP地址几乎不可能存在,也就几乎没有设备会给服务器返回任何应答了。因此,服务器将会维持一个庞大的等待列表,不停地重试发送SYN+ACK报文,同时占用着大量的资源无法释放。更为关键的是,被攻击服务器的SYN_RECV队列被恶意的数据包占满,不再接受新的SYN请求,合法用户无法完成三次握手建立起TCP连接。也就是说,这个服务器被SYN Flood拒绝服务了。
DNS Query Flood:(UDP)
UDP数据包本身比较容易被过滤,所以现在纯粹的UDP流量攻击比较少见了,取而代之的是UDP协议承载的DNS Query Flood攻击。攻击者操纵大量傀儡机器,对目标发起海量的域名查询请求。常用的做法是UDP层随机伪造源IP地址、随机伪造源端口等参数。在DNS协议层,随机伪造查询ID以及待解析域名。随机伪造待解析域名除了防止过滤外,还可以降低命中DNS缓存的可能性,尽可能多地消耗DNS服务器的CPU资源。
反射型Ddos
攻击者并不直接攻击目标服务 IP,而是利用互联网的某些特殊服务开放的服务器,通过伪造被攻击者的 IP 地址、向有开放服务的服务器发送构造的请求报文,该服务器会将数倍于请求报文的回复数据发送到被攻击 IP,从而对后者间接形成 DDoS 攻击。在反射型攻击中,攻击者利用了网络协议的缺陷或者漏洞进行 IP 欺骗,主要是因为很多协议(例如 ICMP,UDP 等)对源 IP 不进行认证。同时,要达到更好的攻击效果,黑客一般会选择具有放大效果的协议服务进行攻击。总结一下就是利用 IP 欺骗进行反射和放大,从而达到四两拨千斤的效果。
六、HTTPS工作原理
HTTP 协议明文传送的风险:
1、被窃听的风险: 第三方可以截获并查看你的内容
2、被篡改的危险: 第三方可以截获并修改你的内容
3、被冒充的风险: 第三方可以伪装成通信方与你通信
HTTPS协议提供了相应的功能来对抗以上风险:
1、内容加密。浏览器到百度服务器的内容都是以加密形式传输的,中间者无法直接查看原始内容
2、身份认证。保证用户访问的是认证的服务,即使被DNS劫持到了第三方站点,也会提醒用户没有访问到正确的服务
3、数据完整。防止内容被第三方冒充或篡改
HTTPS其实是由两部分组成的:HTTP+TLS/SSL,即HTTP下加入TLS/SSL层,HTTPS的安全基础就是TLS/SSL。服务端和客户端的信息传输都会通过TLS/SSL进行加密,所以传输的数据都是加密之后的数据。
HTTPS的工作原理可以结合下图记忆:
1、客户端发起HTTPS请求
浏览器里面输入一个HTTPS网址,然后连接到服务端的443端口上。注意这个过程中客户端会发送一个密文族给服务端,密文族是浏览器所支持的加密算法的清单。
2、服务端配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
这套证书其实就是一对公钥和私钥,可以这么理解,公钥就是一把锁头,私钥就是这把锁的钥匙,锁头可以给别人对某个东西进行加锁,但是加锁完毕之后,只有持有这把锁的钥匙才可以解锁看到加锁的内容。
前面说过客户端会传送密文族给服务端,服务端则会从这些密文族中,挑选出一个。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、过期时间等等。
4、客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密。
“发现异常”:证书中会包含数字签名,该数字签名是加密过的,是用颁发机构的私钥对本证书的公钥、名称及其他信息做hash散列加密而生成的。客户端浏览器会首先找到该证书的根证书颁发机构,如果有,则用该根证书的公钥解密服务器下发的证书,如果不能正常解密,则就是"发现异常",说明该证书是伪造的。
5、传送加密后的随机值
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,然后客户端和服务端的通信就可以通过这个随机值来进行加密和解密了。
6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值,至此一个非对称加密的过程结束,看到TLS利用非对称加密实现了身份认证和**协商。然后把内容通过该值进行对称加密。
7、传输加密后的信息
这部分是服务端用随机值加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生成的随机值解密服务端传送过来的信息,于是获取了解密后的内容,至此一个对称加密的过程结束,看到对称加密是用于对服务器待传送给客户端的数据进行加密用的。整个过程即使第三方监听了数据,也束手无策。
七、RSA简单实现 公钥、私钥如何生成
1、随机选择两个不相等的素数p和q
2、计算p和q的乘积n,以及欧拉函数
3、随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质
4、计算e对于φ(n)的模反元素d,谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1
5、将n和e封装成公钥,n和d封装成私钥
6、加密过程中需要先获得对方公钥,再对消息进行加密
7、收到加密后的消息时,用自己的私钥进行解密
八、数字签名与证书
数字签名概念:
数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。
数字签名是个加密的过程,数字签名验证是个解密的过程。
数字签名的原理:
数字签名技术是将原文通过 特定HASH函数 得到的 摘要信息 用 发送者的私钥 加密,与原文一起传送给接收者。接收者只有用 发送者的公钥 才能解密被加密的摘要信息 (可以理解为私钥加密,公钥解密,是非对称加密的逆过程)。然后用HASH函数对收到的原文提炼出一个摘要信息,与解密得到的摘要进行对比。哪怕只是一个字符不相同,用HASH函数生成的摘要就一定不同。如果比对结果一致,则说明收到的信息是完整的,在传输过程中没有被修改,否则信息一定被修改过,因此数字签名能够验证信息的完整性。
数字签名的作用:
一是能确定消息的不可抵赖性,因为他人假冒不了发送方的私钥签名。发送方是用自己的私钥对信息进行加密的,只有使用发送方的公钥才能解密。
二是数字签名能保障消息的完整性。 一次数字签名采用一个特定的哈希函数,它对不同文件产生的数字摘要的值也是不相同的。