天天看点

Linux-安全与加密算法

作者:不寐旋律

#头条创作挑战赛#

1 安全机制

安全机制是保护信息和系统免受未经授权访问、损坏或篡改的方法和措施。在计算机领域,安全机制是确保数据和系统的机密性、完整性和可用性的关键组成部分。

Linux-安全与加密算法

1.1 墨菲定律

墨菲定律是一条经验法则,它指出"如果有什么可能出错的地方,那么它就一定会出错"。在信息安全领域,墨菲定律提醒我们要时刻警惕潜在的安全风险和漏洞,并采取相应的措施来预防和应对。

主要内容:

  • 任何事都没有表面看起来那么简单
  • 所有的事都会比你预计的时间长
  • 事物出错的不可预测性和不可避免性
  • 如果你担心某种情况发生,那么它就更有可能发生

1.2 信息安全防护的目标

信息安全防护的目标是确保信息的机密性、完整性和可用性(Usability)。机密性(Confidentiality)指的是只有授权的用户才能访问敏感信息,完整性(Integrity)指的是信息在传输和存储过程中不被篡改,可用性指的是信息始终可供合法用户访问和使用。

  • 可控制性 Controlability
  • 不可否认性 Non-repudiation

1.3 安全防护环节

  • 物理安全:各种设备/主机、机房环境
  • 系统安全:主机或设备的操作系统
  • 应用安全:各种网络服务、应用程序
  • 网络安全:对网络访问的控制、防火墙规则
  • 数据安全:信息的备份与恢复、加密解密
  • 管理安全:各种保障性的规范、流程、方法
Linux-安全与加密算法
  • 身份验证和访问控制:确保只有授权用户能够访问系统和数据。
  • 加密和解密:使用加密算法保护敏感信息的机密性。
  • 审计和日志记录:记录系统和用户活动,以便追踪和分析安全事件。
  • 漏洞管理和补丁更新:及时修补系统和应用程序的漏洞,以防止被攻击。
  • 网络安全和防火墙:保护网络免受未经授权的访问和攻击。
  • 数据备份和恢复:定期备份数据,并确保能够快速恢复系统和数据。

1.4 常见的安全攻击STRIDE

STRIDE 是一种常见的安全威胁模型,用于识别和分类安全攻击

  • Spoofing(伪装):攻击者冒充合法用户或系统,获取未经授权的访问权限。
  • Tampering(篡改):攻击者修改数据或系统配置,以达到破坏或欺骗的目的。
  • Repudiation(抵赖):攻击者否认自己的行为,使其无法被追踪和追究责任。
  • Information Disclosure(信息泄露):攻击者获取未经授权的敏感信息。
  • Denial of Service(拒绝服务):攻击者通过超载系统或网络,使其无法正常运行。
  • Elevation of Privilege(提权):攻击者获取比其授权级别更高的权限,从而执行未经授权的操作。

1.5 安全设计基本原则

  • 最小权限原则:给予用户和系统的权限应限制在完成其任务所需的最低权限级别。
  • 分层原则:将系统划分为多个层次,每个层次都有特定的功能和权限。
  • 防御性编程原则:在设计和编写代码时,考虑可能的安全漏洞和攻击方式,并采取相应的防御措施。
  • 安全审计原则:系统应具备安全审计功能,记录和监控用户的操作行为、系统事件和安全事件。
  • 安全性与便利性的平衡原则:综合考虑安全性和用户便利性之间的平衡。
  • 持续更新和改进原则:定期进行安全评估和漏洞扫描,并及时修复和改进发现的安全问题。
  • 安全培训和意识原则:提供安全培训和意识活动,使用户和开发人员了解安全最佳实践和风险。
  • 安全策略和规范原则:制定明确的安全策略和规范,规定系统和用户的安全行为准则。
  • 安全测试和验证原则:进行系统的安全测试和验证,确保系统在各种情况下都能保持安全。
  • 灾难恢复和业务连续性原则:制定灾难恢复计划和业务连续性计划,以应对可能的安全事件和系统故障。
Linux-安全与加密算法

1.6 常用安全技术

  • 加密技术:用于将敏感数据转化为密文,以保护数据的机密性。常见的加密技术包括对称加密算法(如AES)、非对称加密算法(如RSA)和哈希函数(如SHA-256)。
  • 访问控制技术:用于限制和管理用户对系统资源的访问权限。常见的访问控制技术包括身份验证、授权和权限管理。
  • 防火墙技术:用于监控和过滤网络流量,以阻止未经授权的访问和恶意攻击。防火墙可以根据预设的规则来允许或拒绝特定的网络连接。
  • 入侵检测和防御系统(IDS/IPS):用于监测和防御网络中的入侵行为。入侵检测系统(IDS)可以检测到潜在的入侵事件,而入侵防御系统(IPS)可以主动阻止入侵行为。
  • 漏洞扫描技术:用于检测系统和应用程序中的安全漏洞。漏洞扫描器可以自动扫描系统,并提供关于潜在漏洞的报告,以便及时修复。
  • 安全信息和事件管理(SIEM):用于集中管理和分析系统和网络中的安全事件和日志信息。SIEM系统可以帮助及时发现和响应安全事件,并提供安全事件的可视化和报告。
  • 蜜罐技术:用于诱骗攻击者,将其引导到特制的虚拟环境中,以便监测和分析攻击行为。蜜罐可以帮助了解攻击者的策略和手段,并提供有关新型攻击的情报。
  • 安全认证和身份管理技术:用于管理用户的身份和访问权限。安全认证技术包括多因素身份验证和单点登录(SSO),而身份管理技术包括用户账号管理和权限分配。
  • 安全编码和开发实践:在软件开发过程中采用安全编码和开发实践,以减少安全漏洞的出现。这包括输入验证、输出编码、错误处理和安全测试等。
  • 物理安全技术:用于保护物理设备和设施的安全。物理安全技术包括视频监控、门禁系统、生物识别和安全锁等。

1.7 加密算法和协议

  • 对称加密
  • 非对称(公钥)加密
  • 单向加密
  • 认证协议

1.7.1 对称加密算法

Linux-安全与加密算法

对称加密:加密和解密使用同一个密钥

特性:

  • 加密、解密使用同一个密钥,效率高
  • 将原始数据分割成固定大小的块,逐个进行加密

缺陷:

  • 密钥过多
  • 密钥分发
  • 数据来源无法确认

常见对称加密算法:

  • AES(Advanced Encryption Standard):是目前最常用的对称加密算法之一,支持不同的密钥长度(128位、192位和256位),被广泛应用于各种安全通信和数据保护场景。
  • DES(Data Encryption Standard):是一种较早期的对称加密算法,使用56位密钥,已经逐渐被更安全的算法所取代,但仍然在某些遗留系统中使用。
  • 3DES(Triple Data Encryption Standard):是对DES算法的改进,通过多次应用DES算法来增加安全性。它使用3个56位密钥,提供更高的安全性,但速度较慢。
  • RC4(Rivest Cipher 4):是一种流密码算法,被广泛应用于网络通信和无线通信中。然而,由于其存在一些安全性问题,如密钥重用和偏差攻击,已经不再推荐使用。
  • Blowfish:是一种快速的对称加密算法,支持可变长度的密钥(32位到448位),被广泛应用于各种加密应用和协议中。
  • IDEA(International Data Encryption Algorithm):是一种对称加密算法,使用128位密钥,被广泛应用于电子邮件和虚拟私人网络(VPN)等领域。

1.7.2 非对称加密算法

1.7.2.1 非对称加密算法介绍

非对称加密:密钥是成对出现

  • 公钥:public key,公开给所有人,主要给别人加密使用
  • 私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名
  • 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

功能:

  • 数据加密:适合加密较小数据,比如: 加密对称密钥
  • 数字签名:主要在于让接收方确认发送方身份

缺点:

  • 密钥长,算法复杂
  • 加密解密效率低下

常见算法:

  • RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,可实现加密和数字签名
  • DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准)
  • ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学,比RSA加密算法使用更小的密钥,提供相当的或更高等级的安全

1.7.2.2 非对称加密实现加密

Linux-安全与加密算法

接收者

  • 生成公钥/密钥对:P和S
  • 公开公钥P,保密密钥S

发送者

  • 使用接收者的公钥来加密消息M
  • 将P(M)发送给接收者

接收者

  • 使用密钥S来解密:M=S(P(M))

1.7.2.3 非对称加密实现数字签名

Linux-安全与加密算法

发送者

  • 生成公钥/密钥对:P和S
  • 公开公钥P,保密密钥S
  • 使用密钥S来加密消息M
  • 发送给接收者S(M)

接收者

  • 使用发送者的公钥来解密M=P(S(M))

1.7.2.4 RSA和DSA

RSA(Rivest-Shamir-Adleman)和DSA(Digital Signature Algorithm)是两种常见的非对称加密算法和数字签名算法。

RSA算法:

  • RSA算法是一种基于大数分解的非对称加密算法,由Rivest、Shamir和Adleman于1977年提出。
  • RSA算法使用两个密钥,一个公钥用于加密,一个私钥用于解密。公钥可以公开,而私钥必须保密。
  • RSA算法的安全性基于大数分解的困难性,即将一个大的合数分解为其质因数的难度。
  • RSA算法广泛应用于数据加密、数字签名、密钥交换等领域。

DSA算法:

  • DSA算法是一种基于离散对数问题的非对称加密算法和数字签名算法,由美国国家标准与技术研究院(NIST)于1994年发布
  • DSA算法主要用于数字签名,用于验证数据的完整性和身份认证。
  • DSA算法使用两个密钥,一个私钥用于签名,一个公钥用于验证签名。私钥必须保密,而公钥可以公开。
  • DSA算法的安全性基于离散对数问题的困难性,即在有限域上找到离散对数的难度。
  • DSA算法在数字签名领域被广泛应用,特别是在安全性要求较高的场景,如电子商务、数字证书和身份认证等。

RSA和DSA都是非对称加密算法,它们在加密和数字签名方面有不同的应用。RSA算法适用于加密和密钥交换,而DSA算法适用于数字签名和身份认证。选择使用哪种算法取决于具体的安全需求和应用场景。

Linux-安全与加密算法

1.7.3 使用gpg实现对称和非对称加密

1.7.3 1 实现对称加密

对称加密file文件

gpg -c file           

在另一台主机上解密file

gpg -o file -d file.gpg           

1.7.3.2 实现公钥加密

目标:在hostB主机上用公钥加密,在hostA主机上解密 B ---> A

在hostA主机上生成公钥/私钥对

gpg --gen-key           

在hostA主机上查看公钥

gpg --list-keys           

在hostA主机上导出公钥到zhang.pubkey

gpg -a --export -o zhang.pubkey           

从hostA主机上复制公钥文件到需加密的B主机上

scp zhang.pubkey hostB:           

在需加密数据的hostB主机上生成公钥/私钥对

gpg --list-keys
gpg --gen-key            

在hostB主机上导入公钥

gpg --import zhang.pubkey
gpg --list-keys           

用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg

gpg -e -r zhangdada file 
file file.gpg           

复制加密文件到hostA主机

scp fstab.gpg hostA:           

在hostA主机解密文件

gpg -d file.gpg  
gpg -o file -d file.gpg           

删除公钥和私钥

gpg --delete-keys zhangdada
gpg --delete-secret-keys zhangdada           

1.7.4 单向哈希算法

哈希算法是一种将任意长度的数据映射为固定长度的哈希值的算法,也称为散列算法,将任意数据缩小成固定大小的“指纹”,称为digest

特性:

  • 一致性:相同的输入始终产生相同的哈希值
  • 高效性:计算速度快
  • 不可逆性:无法从哈希值推导出原始数据
  • 抗碰撞性:不同的输入具有较低的概率产生相同的哈希值

哈希算法的主要功能包括:

  • 数据完整性校验
  • 密码存储
  • 数据索引
  • 唯一标识

常见的哈希算法包括:

  • MD5
  • SHA-1
  • SHA-256
  • SHA-3

常用的哈希算法工具包括:

  • OpenSSL、gpg
  • Hashcat
  • John the Ripper
  • md5sum | sha1sum [ --check ] file
  • rpm -V

数字签名

Linux-安全与加密算法
  • RPM 文件完整性
  • rpm --verify package_name (or -V)
  • rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
  • rpm --checksig pakage_file_name (or -K)

1.7.5 综合应用多种加密算法

1.7.5.1 实现数据加密

实现数据加密,无法验证数据完整性和来源

Linux-安全与加密算法

1.7.5.2 实现数字签名

不加密数据,可以保证数据来源的可靠性、数据的完整性和一致性

Linux-安全与加密算法

1.7.6 密码交换

密钥交换:IKE( Internet Key Exchange )

  • 公钥加密:用目标的公钥加密对称密钥
  • DH (Deffie-Hellman):生成对称(会话)密钥,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表

参看:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

DH 实现过程

A: g,p 协商生成公开的整数g, 大素数p
B: g,p
A:生成隐私数据:a (a<p),计算得出 g^a%p,发送给B
B:生成隐私数据:b,(b<p),计算得出 g^b%p,发送给A
A:计算得出 [(g^b%p)^a] %p = g^ab%p,生成为密钥
B:计算得出 [(g^a%p)^b] %p = g^ab%p,生成为密钥           

案例:

g=23
p=5

A:a=6
23^6%5=4

2^6%5=4

B:b=15
23^15%5=2

4^15%5

[root@centos8 ~]#echo 23^15%5|bc
2
[root@centos8 ~]#echo 23^6%5|bc
4

[root@centos8 ~]#echo 2^6%5|bc
4
[root@centos8 ~]#echo 4^15%5|bc
4           
Linux-安全与加密算法