一、加密算法
常见的加密算法可以分成五类:
- 对称加密算法
- 非对称加密算法(也称公钥算法)
- Hash 算法(也称摘要算法、单向散列加密算法)
- 数字签名(Hash&RSA)
- 数字证书(Hash&RSA&CA)
密码分类 | 国产商用密码 | 国际商用密码 | |
---|---|---|---|
对称加密 | 分组加密/块加密 | SM1/SCB2 SM4/SMS4 SM7 | DES、IDEA、AES、RC5、RC6 |
序列加密/流加密 | ZUC(祖冲之算法) SSF446 | RC4 | |
非对称加密 | 大数分解 | RSA、Rabin | |
离散对数 | SM2 SM9 | DH、DSA、ECC | |
散列(HASH)算法 | SM3 | MD5、SHA-1、SHA-2 |
1. 对称加密
对称加密方法使用单个加密密钥来加密和解密数据。对这两个操作使用单个键使其成为一个简单的过程,因此称为“对称”。对称加密的最突出特征是其过程的简单性。这种加密的这种简单性在于使用单个密钥进行加密和解密。
AES对称加密算法
AES代表“高级加密系统”,是最广泛使用的加密算法之一,并且是DES算法的替代方法。AES也称为Rijndael,在2001年经NIST批准后成为一种加密标准。与DES不同,AES是一组分组密码,由不同密钥长度和分组大小的密码组成。
AES致力于替代和置换方法。首先,将明文数据转换为块,然后使用加密密钥应用加密。加密过程由各种子过程组成,例如子字节,移位行,混合列和添加回合密钥。根据密钥的大小,执行10、12或14次这样的回合。值得注意的是,上一轮不包括混合列的子过程以及为加密数据而执行的所有其他子过程
2. 非对称加密
RSA非对称加密算法
基本上,此方法涉及两个巨大的随机质数,并将这些数字相乘以创建另一个巨数。这里的难题是从这个巨大的乘法数确定原始素数。RSA基于简单的数学方法,这就是为什么它在公钥基础结构(PKI)中的实现变得简单明了的原因。PKI的这种适应性及其安全性使RSA成为当今使用最广泛的非对称加密算法。RSA被广泛用于许多应用程序中,包括SSL / TLS证书,加密货币和电子邮件加密。
ECC非对称加密算法
ECC(椭圆曲线密码术)算法像RSA一样,ECC也遵循不可逆原理。在ECC中,将表示曲线上一个点的数字乘以另一个数字,得出曲线上的另一个点。现在,要破解这个难题,您必须找出曲线上的新点。ECC中较短密钥的另一个优点是性能更快。较短的密钥需要较少的网络负载和计算能力,这对于存储和处理能力有限的设备来说非常有用。在SSL / TLS证书中使用ECC时,可大大减少执行SSL / TLS握手所需的时间,并有助于您更快地加载网站。ECC加密算法用于加密应用,伪随机数生成器等中以应用数字签名。
3. TLS加密套件
混合加密技术用于SSL / TLS证书等应用程序。SSL / TLS加密是在服务器和客户端(Web浏览器)之间的一系列来回通信过程中应用的,此过程称为“ TLS握手”。在此过程中,使用私钥和公钥验证双方的身份。双方都确认了自己的身份之后,便使用临时(会话)密钥通过对称加密对数据进行加密。这确保了我们每分钟在互联网上发送和接收的大量数据的快速传输。
4. 数字证书
对称加密解决了信息传输的安全问题,但是引出了密钥配送问题。非对称加密通过公钥加密、私钥解密的方式,避免了密钥在配送过程中被盗取。但是仍有中间人攻击的风险,因此引入数字证书。
身份认证机构是信息接收者能信任的机构,所有的公钥必须向该机构进行注册。注册后身份认证机构给发送者颁发一数字证书。对文件签名后,发送者把此数字证书连同文件及签名一起发给信息接收者,接收者向身份认证机构求证是否真地是用发送者密钥签发的文件。
数字证书是一种电子档案,用来证明公钥拥有者的身份。此档案包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对该文件的数字签名。
证书的本质就是对公钥加数字签名,认证机构用自己的私钥对需要认证的人(或组织机构)的公钥进行数字签名并生成证书。
数字证书有两个问题:
- 认证机构如何验证发送者的身份? 只需要两次验证发送者的公钥即可!
- 如何判断认证机构的真伪?
认证机构的层级
证书中除了有兔小白的公钥信息,还有认证机构对兔小白公钥生成的签名。目的一是为了确保签名不被篡改,二是确保该证书确实是该认证机构颁发的。
证书为了解决消息接收方公钥的信任问题而出现。但证书中又引入了认证机构的公钥用来验签。
现在问题来了。认证机构公钥的信任问题又应如何解决呢?如果这是一家攻击者伪装的认证机构,那么这一套复杂的认证机制岂不是白费?
5. 单向散列加密
单向散列加密算法常用于提取数据,验证数据的完整性。单向加密算法只能用于对数据的加密,无法被解密,其特点为定长输出、雪崩效应。
二、网络攻击方式
- 重放攻击
- Smurf攻击
- 字典攻击
- 中间人攻击
重放攻击
重放攻击指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的地方进行。
Smurf攻击
Smurf攻击是一种病毒攻击,结合使用IP欺骗和ICMP回复方法使大量网络传输充斥目标系统,引起目标系统拒绝为正常系统进行服务。Smurf攻击通过使用将回复地址设置成网络的广播地址的ICMP应答请求数据包,来淹没受害主机,最终导致该网络的所有主机都对此ICMP应答请求做出回复,导致网络阻塞。更复杂的将源地址改为第三方的受害者,最终导致第三方崩溃。
字典攻击
字典攻击是在破解密码或密钥时,逐一尝试用户自定义词典中的可能密码的攻击方式。与暴力破解的区别是,暴力破解会逐一尝试所有可能的组合密码,而字典攻击会使用一个预先定义好的单词列表。
中间人攻击
中间人攻击(Man-in-the-MiddleAttack,MITM)是一种间接的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机称为“中间人”。通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方毫不知情。常见的中间人攻击:
- Wi-Fi欺骗:攻击者可以创建与本地免费Wi-Fi选项同名的假Wi-Fi接入点。例如,在咖啡馆中,攻击者可能会模仿Wi-Fi名称或创建一个名为“Guest Wi-Fi”或类似名称的假选项。一旦您连接到恶意访问点,攻击者就可以监视您的在线活动。
- HTTPS欺骗:攻击者欺骗您的浏览器,使其相信您正在使用一个受信任的网站,从而将您的流量重定向到一个不安全的网站。当您输入凭据时,攻击者会将其窃取。
- SSL劫持:当您尝试连接到不安全的HTTP站点时,浏览器可以将您重定向到安全HTTPS选项。但是,攻击者可以劫持重定向过程,将指向其服务器的链接放在中间,窃取您的数据和您输入的任何凭据。
- DNS欺骗:域名系统帮助你在互联网上导航,把地址栏中的URL从人类可读的文本变成计算机可读的IP地址。然后,DNS欺骗会迫使您的浏览器在攻击者的控制下访问特定地址。
- 电子邮件劫持:如果攻击者能够访问受信任机构(如银行)的邮箱,甚至电子邮件服务器,他们就可以截获包含敏感信息的客户电子邮件,甚至开始以机构本身的身份发送电子邮件。
要防范中间人,我们需要使用公钥证书。
三、传输协议TCP/UDP 与 加密方式SSL/TLS
1. TCP和UDP区别
TCP | UDP | |
---|---|---|
连接性 | 面向连接 | 无连接 |
可靠性 | 可靠 | 不可靠 |
传输方式 | 面向字节流,TCP将要发送的数据视为无结构的字节流,如果发送的数据太长,就拆分发送,如果发送的数据太短,则积累较多的字节后再发送。 | 面向报文(保留报文的边界),发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次发送一个报文,不管多大,都以报文为发送单位。 |
传输速度 | 慢 | 快 |
双工性 | 全双工 | 一对一、一对多、多对一、多对多 |
流量控制 / 拥塞控制 | 有 | 无 |
应用场景 | 对效率要求相对低,但是对准确性要求高的场景;或是要求有连接的场景。如文件传输、发送邮件等 | 对效率要求相对高,对准确性要求相对低的场景。如即时通信、直播等 |
应用层协议 | SMTP(电子邮件)、TELNET(远程登录控制)、HTTP、FTP | DNS、TFTP(文件传输)、DHCP(动态主机配置)… |
2. TCP的三次握手 与 四次挥手
建立连接 和 关闭连接
3. SSL/TCL
- 安全套接层SSL(Secure Sockets Layer )或传输层安全TLS(Transport Layer Security)是为网络通信提供安全及数据完整性的一种安全协议,用于在传输层对此次网络连接采用对称算法或非对称算法进行加密,保证信息安全。
- TLS 是SSL 的标准化后的产物
-
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持,SSL协议可分为两层:
- SSL记录协议(SSL Record Protocol)——它建立在可靠的传输协议(比如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
- SSL握手协议(SSL Handshake Protocol)——它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
3.1 作用
- 认证用户和服务器,确保数据发送到正确的客户机和服务器
- 加密数据以防止数据中途被窃取
- 维护数据的完整性,确保数据在传输过程中不被改变。
3.2 工作原理
- 通过CA体系交换public key
- 通过非对称加密算法,交换用于对称加密的密钥
- 通过对称加密算法,加密正常的网络通信
3.3 工作流程
四、大数据集群安全
1. Kerberos身份认证
1.1 介绍
Kerberos 地狱犬的三个脑袋:
- 认证( Authentication ) :确认请求服务的用户是一个有效的用户
- 授权(Authorization ) : 基于对用户的认证,它们所请求的服务以及当前系统状态,将特定类型的服务授予用户
- 统计(Accounting ) :跟踪用户的网络资源消耗
Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成:Key Distribution Center (即KDC)、Client 和 Service。
集群开启Kerberos认证之后:
-
对客户端而言,在访问集群服务(如HDFS,YARN等)之前,必须先通过Kerberos认证,未经认证的客户端无法访问集群服务,只有经过认证的可信客户端才能访问集群服务、提交作业,有效防止恶意用户冒充客户端向集群提交作业的情况;
-
对服务端而言,集群的服务都是可以信任的,避免了冒充服务的情况。
1.2 Kerberos Principal (Kerberos主体)
每个需要使用Kerberos认证服务的用户或者服务都需要一个Kerberos principal,kerberos主体是用户或者服务的唯一标识。启用Kerberos之后,每个访问集群服务的用户都需要证明自己是Kerberos的某个主体,然后才能使用集群服务。
principal 主要由三部分构成:primary,instance(可选) 和 realm。包含 instance 的principal,一般会作为server端的principal,如:NameNode,HiverServer2,Presto Coordinator等;不含有 instance 的principal,一般会作为 客户端的principal,用于身份认证。
Realm:Kerberos 系统中的一个namespace。不同 Kerberos 环境,可以通过 realm 进行区分。
Ticket Cache:客户端与 KDC 交互完成后,包含身份认证信息的文件,短期有效,需要不断renew。
1.3 Kerberos Keytabs
Keytab 文件包含了principal 以及该principal 的加密密钥,通过该文件,集群的服务或者用户可以不需要任何交互即被认证为合法的principal。
1.4 密钥分发中心(Key distribution Center,KDC)
KDC由三部分构成:
- Kerberos数据库:包含了一个 Realm 中所有的 principal、密码与其他信息。(默认:Berkeley DB)
- 认证服务(Authentication service,AS):进行用户信息认证,为客户端提供 Ticket Granting Tickets(TGT)。
- 票证授予服务(ticket-granting service,TGS):验证 TGT 与 Authenticator,为客户端提供 Service Tickets。
- 每个用户和服务都和KDC分享密钥KDC生成和分发session key
- 各个参与者之间通过它们知道的session key彼此证明和通讯
1.5 Kerberos协议的认证过程
1.6 Kerberos 工作流
首先定义所有组件:
MYTRAIN.DOMAIN: Kerberos 域 ( 域名一般为大写 )
Jerry :一个系统用户, UPN 为 jerry@MYTRAIN.DOMAIN
myservice : server1.mytrain.domain 上运行的一个服务, SPN 为:myservice/server1.mytrain.com@MYTRAIN.DOMAIN
kdc.mytrain.com : Kerberos 域 MYTRAIN.COM 的 KDC 。
Jerry想要使用myservice,需要向myservice提供一个有效的服务票据,以下是工作流程:
- Jerry需要获取一个TGT。他需要向kdc.mytrain.com上的AS发起一个请求,并表明自己是主体:jerry@MYTRAIN.DOMAIN
- AS为主体jerry@MYTRAIN.DOMAIN提供一个使用密钥加密的TGT。
- 接收到加密信息后,Jerry需要输入主体jerry@MYTRAIN.DOMAIN的密码来解密信息
- 解密 TGT 信息后, Jerry 向 kdc.mytrain.domain 上的 TGS 请求myservice/server1.mytrain.com@MYTRAIN.DOMAIN服务的一个服务票据,并且在请求中提供TGT 信息。
- TGS对 TGT 进行验证,并为 Jerry 提供使用 myervice/servier1.mytrain.com@MYTRAIN.DOMAIN的密钥加密的服务票据。
- Jerry将服务票据提供给 myservice,myservice 使用myservice/server1.mytrain.com@MYTRAIN.DOMAIN的密钥进行解密,验证票据有效性
- Jerry身份验证通过,允许使用 myservice 服务。
1.7 Kerberos 优势
- 密码无需进行网络传输。基于 Ticket 实现身份认证,保障密钥安全性。
- 双向认证。整个认证过程中,不仅需要客户端进行认证,待访问的服务也需要进行身份认证。
- 高性能。一旦Client获得用过访问某个Server的Ticket,该Server就能根据这个Ticket实现对Client的验证,而无须KDC的再次参与。
- 具备单点登录的能力(SSO,single sign-on):单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的
- 窃取的认证凭证很难再次使用
1.8 Kerberos局限
- Kerberos仅提供认证,在授权时,其他协议(比如NIS,LDAP)仍旧是需要的。kerberos只能控制你访问或者拒绝访问一个服务,不能控制到很细的粒度,比如hdfs的某一个路径,hive的某一个表,对用户级别上的认证并没有实现 (需要配合LDAP)
- 不能将已有密码迁移到Kerberos数据库
- 假设网络主机是相对安全的。
- 应用必须Kerberos化
2. Apache Ranger
优点:
- 提供了细粒度级(hive列级别)
- 基于访问策略的权限模型
- 权限控制插件式,统一方便的策略管理
- 支持审计日志,可以记录各种操作的审计日志,提供统一的查询接口和界面
- 丰富的组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM)
- 支持和kerberos的集成
- 提供了Rest接口供二次开发
3. Apache Knox
kerberos/LDAP是用来做身份认证的,ranger用来做授权审计的,KNOX负责集群安全,
ranger上可以同步LDAP中的用户,并进行统一的用户权限管理
4. Ambari Web 数据平台管理
官方文档
HDP的数据安全:HDP Security Features
MongoDB的数据安全:信任中心 — MongoDB Cloud Services | MongoDB