网络安全及密码学原理初探

本文探讨了网络安全的基础,特别是Linux环境下的网络安全。讲解了网络通信安全的目标、网络攻击类型和解决方案,强调了加密和解密在保障通信安全中的作用。文章深入介绍了传统加密与现代加密方法,并详细阐述了SSL/TLS协议及其工作流程。此外,还讨论了密码学中的加密算法、数字证书、PKI体系以及OpenSSL的使用。
摘要由CSDN通过智能技术生成

一直搞不太清楚HTTPS以及各种加密算法到底是什么意思,特写此博客记录学习心得

Linux 网络安全

概述

两台主机的通信,其实本质是进程的跨主机通信。

进程通常工作在用户空间,是一个具体的应用的静态代码的动态表现,是程序文件+数据的动态表示。

通信协议大体上可以分为两层:

  • 上半段位于用户空间的叫做资源子网
  • 下半段位于内核空间的叫做通信子网。

所以通信子网主要考虑的是报文如何安全无误的送到对端 ,资源子网考虑的是 数据如何组织与交换,数据该如何表示,该如何完成双方在应用层的交换。

在Linux内核中,我们可以通过编译内核来决定是否启用哪一个协议,也就是说,通信子网的协议是在内核中通过代码实现的

而在用户空间的资源子网,比如应用层的很多协议,如http协议,FTP协议,SSH协议等,这些协议具体由我们安装的软件来实现客户端或者服务端。比如httpd可以作为http协议的服务端,浏览器作为http的客户端实现。

所以用户空间 是靠一个一个的具体的能够进行网络通信的程序来实现,这些程序启动为进程之后,可以向内核发起系统调用,调用内核的通信子网,来完成数据报文封装和网络通信。

同一主机内的进程间通信:

IPC:消息队列,共享内存(shm),信号量(semaphore)

不同主机的进程间通信:

socket(ip+port,端口是用来标识进程地址,因为一个主机上多个进程对外提供通信。port用来标识一个主机上不同进程的所拥有的地址,由于port是内核的传输层协议提供,所以进程启动时,要想通过某个port来获取一个地址用来通信,所以要向内核申请注册某端口,申请成功后,该端口被该进程独占。)

由于是两个进程互相通信,所以是一对socket进行通信。

客户端往往是随机申请一个较大的端口,而服务端则是需要进程一直启动以便随时监听请求,是一些全默认端口(如http 80端口,https 443端口等),半默认端口(mysql 3306端口等)

传统上,tcp/ip通信过程中,具体的应用层协议,绝大多数都没有自己实现加密解密功能。

所以,直接使用http协议 是无法保证传输安全,任何一个环节都可以完整的看到传输的数据实体。

所以如果一方能够将数据编码为 其他人看不懂的格式,而对端能看懂即可。

所以客户端和服务端需要提供加密解密的功能,而一般的即时通信工具如QQ,则提供了加密解密功能,但是普通的http服务 或者web服务,是没有此类功能。

后来,网景公司设计了一种可以被调用的公共模块,将这个模块(库)放在了应用层和传输层之间(算是半层),任何本身不具备加解密功能的程序如果在开发时调用了这个库,则可以使用加密功能,如果不调用,则还是使用明文传输。这个半层,则叫做SSL(安全套接字层 Secure Sockets Layer)。

SSL只是一个协议,程序需要遵循这个规范,才叫做一种实现(OpenSSL,JSSE)。

任何程序要想实现加解密功能,其实没必要自己写一遍,可以调用SSL库提供的加解密功能,所以这个库有两个功能:提供基本的加解密功能,加密解密后基于网络通信的方式完成密钥的分发。

HTTPS:HTTP协议调用了SSL库就变成了HTTPS协议。
在这里插入图片描述

网络通信安全的目标:

  • 保密性:confidentiality ----数据不被别人看懂
  • 完整性:integrity----数据不丢失
  • 可用性:availability ---- 合法的对方可以解密

网络攻击类型:

  • 威胁保密性的攻击:
    • 窃听(如果没有加密,就会被窃取数据)
    • 通信量分析(即便数据加密了,但是可以监视通信量,获取其他的一些数据比如通信目标,目的地址等)
  • 威胁完整性的攻击:
    • 更改modification(截获报文后,更改数据内容)
    • 伪装masquerade(伪装为一个身份,去发起一次通信)
    • 重放replay(将报文截获后,多次发送)
    • 否认(有一方拒不承认 曾经的通信行为)
  • 威胁到可用性的攻击:
    • 拒绝服务Dos— deny of service攻击(攻击导致服务不可用了,比如用非正常访问占用你的系统资源)

解决方案

为了达到安全目标,主要采取了两个层面的措施:

  • 技术:加密解密
  • 服务:为了抵御攻击的服务,或者为了实现安全目标而特地设计的服务

加密和解密

所谓加密,就是使用某种算法,将明文转换为密文

解密,就是使用同样的机制,将密文还原。

而加密算法基本都是公开的,所以加密本身不能依赖于算法,而需要依赖于第三者(密钥的复杂度)。假设在不使用密钥的情况下,无法暴力的还原密文。

而密钥如何安全的送到对端,就显得异常重要。

传统加密

​ 替代加密

​ 置换加密

现代加密

​ 现代块加密方法:将数据切割为大小固定的块,每一块单独加密,后一块和前一块有某种关系(通常有置换单元,替换单元,异或单元,位移要素,对换要素等),后一块的加密结果与前一块做异或,将异或的结果发到对端,所以攻击者只得到其中一块的话而没有前一块,也无法还原为明文,还可以基于链式机制,对数据做了特殊运算,使得数据被窃取时必须完整拿到所有数据,才能拿到完整的密文,进而才可能还原为明文。

加密算法和协议

​ 对称加密

​ 公钥加密(非对称)

​ 单向加密

​ 密钥交换协议:DH算法,ECDH(椭圆曲线DH),公钥加密RSA算法

安全服务

认证机制

访问控制

对于Linux来说,实现了上述的加密算法协议和服务的工具有两组:

  • OpenSSL (ssl协议)
  • GPG(pgp协议)

密码学知识

OpenSSL 由三部分组成:

  • 加密解密库(libencript 实现加密解密功能)
  • 实现ssl功能库(libssl 用于实现ssl 安全通信的库,如果程序不使用ssl通信,只加密解密的话,则调用上限的libencript 库即可。 libencript 这个库主要是面向开发者,写程序中调用这些库函数)
  • openssl(多用途命令行工具,模拟ssl通信,实现加密解密等)

大多数Linux的服务,如果使用SSL功能,都是调用OpenSSL的库(某大学研究生,将知名的安全算法全部实现了一遍)。所以OpenSSL 是一个基础设施,所以必须保证安全,由一个开源组织维护。

加密算法的工作模式:

对称加密:

加密和解密使用同一个密钥,但是加密解密算法可以不同。

  • DES : Data Encryption Standard 加密端,使用64位明文产生64位密文,解密端则相反,说明一个数据块为8字节,使用56位密钥,DES 使用16个迭代块基于迭代方式加密,是一个现代的加密算法—DES 不够安全,容易破解
  • 3DES: triple DES : 3个数量级的DES 安全性
  • AES : Advances Encryption Standard: AES 支持多种变长密钥,如128位,192位,256位密钥,384位密钥,所以称为AES128,AES192等,大大提高了安全性
  • Blowfish
  • Twofish
  • IDEA
  • RC6
  • CAST5(后面几个都是商业加密算法)

对称加密特性:

​ 加密解密都是同一个密钥

​ 将原始数据分割为固定大小块,逐个加密

缺陷:

​ 密钥过多

​ 密钥分发难(比如使用DH算法,用于密钥交换)

非对称加密(公钥加密):

密钥成对出现,分为公钥和与之配对的私钥。

公钥:从私钥中提取产生,公开给所有人,public key

私钥:给所有人留存,通过某种工具和算法创建。必须保证私密性,secret key

特点:加密解密所需要的密钥互为相反,即加密用公钥,解密则用私钥;如果加密用私钥,则解密用公钥。

用途

  • 数字签名(接收方确认发送方身份)
  • 密钥交换(发送方用对方的公钥,加密一个对称密钥,并发送给对方,以实现密钥交换)
  • 数据加密(很少用,因为密钥交换完毕后,https中使用其他的对称加密密钥来加密,而公钥和私钥只用来签名和进行密钥交换)

缺点:

​ 效率比对称加密慢得多,比对称加密慢3个数量级。所以真正的数据传输不使用非对称加密。

​ 如果只是用于身份认证或者数据完整性,方法则是提取数据的特征码,也叫作数字指纹(使用MD5或者sha256),然后使用私钥签名,最终接收方可以比对这个特征码来确认数据是否完整。

工作模式:

公钥和私钥都可以用来加密和解密,所以有两种工作方式。

方式1:公钥持有者(public),使用公钥加密数据发送出去,由于只能被配对的私钥解密,可以保证这段数据只能被私钥持有者解密,其他人拿到之后是无法破解的。(所以,公钥的主要作用是加密,保证数据只能被对端识别

方式2:私钥

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值