高级 Linux 安全加密技术深度解析
1. 非对称密钥加解密文件
非对称密钥加解密文件是保障数据安全传输的重要手段。以下是使用非对称密钥进行文件加解密的详细步骤:
1. 生成密钥对和密钥环 :这是整个加密过程的基础,密钥对包括公钥和私钥,密钥环用于存储密钥信息。
2. 导出公钥副本到文件 :将公钥导出为文件,方便后续共享。
3. 共享公钥文件 :把公钥文件分享给需要给你发送加密文件的人。
4. 发送者添加公钥到密钥环 :想要给你发送加密文件的人将你的公钥添加到他们的密钥环中。
5. 使用公钥加密文件 :发送者使用你的公钥对文件进行加密。
6. 发送加密文件 :将加密后的文件发送给你。
7. 使用私钥解密文件 :你使用自己的私钥对收到的加密文件进行解密。
下面是一个具体的示例,展示了 Steve 解密 Jill 发送的消息的过程:
$ ls MessageForSteve
MessageForSteve
$ gpg --out JillsMessage --decrypt MessageForSteve
<A pop-up window prompts you for a passphrase>
gpg: encrypted with 2048-bit RSA key, ID D9EBC5F7317D3830, created
2019-10-27
"Steve <steve@mydomain.com>"
$ cat JillsMessage
I know you are not the real Steve.
在这个示例中,Steve 输入正确的密码短语后,gpg 工具将加密的消息文件解密并存储到 JillsMessage 文件中,然后他就可以读取明文消息了。
2. 数字签名
数字签名是一种用于身份验证和数据验证的电子签名,它并非是你物理签名的扫描件,而是与文件一起发送的加密令牌,确保文件来自你且未被修改。创建数字签名的步骤如下:
1. 创建文件或消息 :首先准备好要发送的文件或消息。
2. 生成哈希值 :使用 gpg 工具为文件生成哈希值或消息摘要。
3. 加密哈希值和文件 :gpg 工具使用非对称密钥对中的私钥对哈希值和文件进行加密,生成数字签名的加密文件。
4. 发送加密哈希值和文件 :将加密后的哈希值(即数字签名)和文件发送给接收者。
5. 接收者重新生成哈希值 :接收者对接收到的加密文件重新生成哈希值或消息摘要。
6. 解密数字签名 :接收者使用 gpg 工具和公钥解密接收到的数字签名,获取原始哈希值或消息摘要。
7. 比较哈希值 :gpg 工具比较原始哈希值和重新生成的哈希值,如果匹配,则表明数字签名有效。
8. 读取解密文件 :接收者可以读取解密后的文件。
以下是一个用户 johndoe 给用户 jill 发送带有数字签名消息的示例:
$ gpg --output JohnDoe.DS --sign MessageForJill.txt
这个命令会让 gpg 工具完成以下操作:
- 为消息文件创建消息摘要(即哈希值)。
- 加密消息摘要,生成数字签名。
- 加密消息文件。
- 将加密内容存储到 JohnDoe.DS 文件中。
jill 收到签名和加密文件后,可以使用以下命令一步完成数字签名检查和解密文件:
$ gpg --decrypt JohnDoe.DS
I am the real John Doe!
gpg: Signature made Sun 27 Oct 2019 07:03:21 PM EDT
gpg: using RSA key
7469BCD3D05A43130F1786E0383D645D9798C173
gpg: Good signature from "John Doe <jdoe@example.com>" [unknown]
如果 jill 的密钥环中没有 johndoe 的公钥,她将无法解密消息并检查数字签名。
常见用于创建数字签名的加密算法有 RSA、DSA、Ed25519 和 ECDSA 等。其中,RSA 算法可用于加密和创建签名,DSA 只能用于创建数字签名,而 Ed25519 比 RSA 更安全、更快,ECDSA 比 DSA 提供更好的保护。
3. 确保文件完整性
为了确保文件的完整性,可以使用消息摘要工具,如 sha224sum 、 sha256sum 、 sha384sum 和 sha512sum 。这些工具基于 SHA - 2 加密哈希标准,与 sha1sum 命令类似,但使用不同的密钥长度。密钥长度越长,破解加密的难度就越大。例如:
$ sha256sum file.txt
此命令会生成 file.txt 文件的 SHA - 256 哈希值,通过比较不同时间生成的哈希值,可以判断文件是否被修改。
4. 安装时加密 Linux 文件系统
在安装 Linux 服务器时,你可能需要对整个文件系统进行加密。可以使用第三方开源软件,如 Linux Unified Key Setup (LUKS)。在安装过程中,你可以选择加密根分区,这属于对称密钥加密,需要设置一个密码来保护单个密钥。
安装完成后,每次启动系统时,都需要输入对称密钥密码。如果你接手了一个已加密磁盘的系统,可以使用 lvs 和 cryptsetup 命令以及 /etc/crypttab 文件来获取相关信息。以下是一些示例命令:
# lvs -o devices
Devices
/dev/mapper/luks-b099fbbe-0e56-425f-91a6-44f129db9f4b(56)
/dev/mapper/luks-b099fbbe-0e56-425f-91a6-44f129db9f4b(0)
# cat /etc/crypttab
luks-b099fbbe-0e56-425f-91a6-44f129db9f4b
UUID=b099fbbe-0e56-425f-91a6-44f129db9f4b none
# cryptsetup status luks-b099fbbe-0e56-425f-91a6-44f129db9f4b
/dev/mapper/luks-b099fbbe-0e56-425f-91a6-44f129db9f4b
is active and is in use.
type: LUKS1
cipher: aes-xts-plain64
keysize: 512 bits
device: /dev/sda3
offset: 4096 sectors
size: 493819904 sectors
mode: read/write
通过这些命令,你可以查看逻辑卷信息、加密设备信息以及加密卷的详细状态。
5. 加密 Linux 目录
可以使用 ecryptfs 工具在 Linux 系统上加密目录。 ecryptfs 是一个符合 POSIX 标准的实用工具,它可以在任何文件系统之上创建加密层。
以下是加密 /home/johndoe/Secret 目录的步骤:
1. 确保目录为空 :在加密之前,将目录中的文件移动到安全的地方。
2. 使用 mount 命令加密目录 :
# mount -t ecryptfs /home/johndoe/Secret /home/johndoe/Secret
执行此命令后,会出现一系列交互式问题,需要你选择密钥类型、输入密码、选择加密算法等。示例如下:
Select key type to use for newly created files:
1) tspi
2) passphrase
3) pkcs11-helper
4) openssl
Selection: 2
Passphrase: **********
Select cipher:
1) aes: blocksize = 16;
min keysize = 16; max keysize = 32 (loaded)
2) blowfish: blocksize = 16;
min keysize = 16; max keysize = 56 (not loaded)
3) des3_ede: blocksize = 8;
min keysize = 24; max keysize = 24 (not loaded)
4) twofish: blocksize = 16;
min keysize = 16; max keysize = 32 (not loaded)
5) cast6: blocksize = 16;
min keysize = 16; max keysize = 32 (not loaded)
6) cast5: blocksize = 8;
min keysize = 5; max keysize = 16 (not loaded)
Selection [aes]: 1
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]: 16
Enable plaintext passthrough (y/n) [n]: n
Enable filename encryption (y/n) [n]: n
- 验证目录是否已挂载 :
# mount | grep /home/johndoe/Secret
/home/johndoe/Secret on /home/johndoe/Secret type ecryptfs
(rw,relatime,ecryptfs_sig=70993b8d49610e67,ecryptfs_cipher=aes,
ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)
- 测试加密效果 :
$ cp my_secret_file Secret
$ cat /home/johndoe/Secret/my_secret_file
Shh... It's a secret.
在目录挂载为 ecryptfs 类型时,文件会自动解密,用户可以正常查看文件内容。但当使用 umount 命令卸载目录后,文件将无法被解密,即使是 root 用户也无法读取。
# umount /home/johndoe/Secret
6. 加密 Linux 文件
在 Linux 系统上,有多种工具可用于加密文件,以下是一些常见的工具:
| 工具 | 描述 |
| ---- | ---- |
| aescrypt | 使用对称密钥算法 Rijndael(AES),可从 www.aescrypt.com 下载。 |
| bcrypt | 使用对称密钥算法 blowfish,默认未安装,安装后可查看手册页。 |
| ccrypt | 使用对称密钥算法 Rijndael(AES),用于替代标准 Unix 加密工具,默认未安装,安装后可查看手册页。 |
| gpg | 可使用非对称密钥对或对称密钥,默认安装,是 Linux 服务器常用的加密工具,默认加密算法在 gpg.conf 文件中设置,有手册页和帮助信息。 |
这些工具不仅可以用于文件加密,还可以实现更多功能。
7. 其他加密工具
除了上述的文件系统、目录和文件加密,还可以使用各种工具对备份、Zip 文件、网络连接等进行加密。以下是一些常见的杂项加密工具:
| 工具 | 描述 |
| ---- | ---- |
| Duplicity | 用于加密备份,在 Ubuntu 上安装命令为 sudo apt-get install duplicity 。 |
| gpg - zip | 使用 GNU Privacy Guard 对文件进行加密或签名并打包成存档,默认安装。 |
| OpenSSL | 实现 Secure Sockets Layer (SSL) 和 Transport Layer Security (TLS) 协议的工具包,这些协议需要加密,默认安装。 |
| Seahorse | GNU Privacy Guard 加密密钥管理器,在 Ubuntu 上默认安装。 |
| SSH | 用于加密跨网络的远程访问,默认安装。 |
| Zipcloak | 用于加密 Zip 文件中的条目,默认安装。 |
在使用第三方云存储服务时,需要注意有些公司在接收文件后才进行加密,这可能会使你的数据面临风险。因此,在将文件发送到云端之前,先在 Linux 系统上进行加密可以增加额外的保护。
8. 从桌面使用加密功能
在 GNOME 桌面环境中,可以通过 Passwords and Keys 窗口来查看和管理密钥与密码。可以通过以下两种方式打开该窗口:
- 从 Activities 屏幕中选择 Passwords and Keys 图标。
- 运行 seahorse 命令。
在该窗口中,你可以进行以下操作:
- 密码管理 :查看在 Chromium 或 Chrome 浏览器中访问网站时保存的用户名和密码。
- 证书查看 :查看与 GNOME 密钥存储、用户密钥存储、系统信任和默认信任相关的证书。
- PGP 密钥管理 :查看你创建的 GPG 密钥。
- 安全外壳密钥管理 :创建用于无密码登录远程系统的 OpenSSH 公钥和私钥。
9. 使用 PAM 增强 Linux 安全性
Pluggable Authentication Modules (PAM) 是由 Sun Microsystems 发明的,最初在 Solaris 操作系统中实现。Linux - PAM 项目始于 1997 年,如今大多数 Linux 发行版,如 Ubuntu,都使用 PAM。PAM 是一种强大的安全工具,可以进一步增强 Linux 系统的安全性。通过配置 PAM,可以灵活地实现用户认证、授权等功能,满足不同的安全需求。
综上所述,Linux 系统提供了丰富多样的加密工具和技术,能够满足不同组织的安全需求。通过合理使用这些工具和技术,可以有效地保护系统和数据的安全。在实际应用中,需要根据具体情况选择合适的加密方法和工具,并遵循安全最佳实践,以确保系统的安全性和可靠性。
10. 加密操作流程总结
为了更清晰地展示各种加密操作的流程,下面用 mermaid 流程图进行总结。
非对称密钥加解密文件流程
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B(生成密钥对和密钥环):::process
B --> C(导出公钥副本到文件):::process
C --> D(共享公钥文件):::process
D --> E(发送者添加公钥到密钥环):::process
E --> F(使用公钥加密文件):::process
F --> G(发送加密文件):::process
G --> H(使用私钥解密文件):::process
H --> I([结束]):::startend
数字签名创建与验证流程
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B(创建文件或消息):::process
B --> C(生成哈希值):::process
C --> D(加密哈希值和文件):::process
D --> E(发送加密哈希值和文件):::process
E --> F(接收者重新生成哈希值):::process
F --> G(解密数字签名):::process
G --> H{比较哈希值是否匹配}:::decision
H -->|是| I(数字签名有效,读取解密文件):::process
H -->|否| J(数字签名无效):::process
I --> K([结束]):::startend
J --> K
目录加密流程
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B(确保目录为空):::process
B --> C(使用 mount 命令加密目录):::process
C --> D(选择密钥类型、密码、加密算法等):::process
D --> E(验证目录是否已挂载):::process
E --> F(测试加密效果):::process
F --> G(使用 umount 命令卸载目录):::process
G --> H([结束]):::startend
11. 加密工具选择建议
在选择加密工具时,需要综合考虑多个因素,以下是一些选择建议:
1. 加密场景 :
- 文件加密 :如果需要对单个文件进行加密,gpg 是一个不错的选择,它既可以使用非对称密钥对,也可以使用对称密钥,并且在 Ubuntu 系统中默认安装。如果对加密速度有较高要求,aescrypt 或 ccrypt 可能更合适,它们都使用 AES 对称密钥算法。
- 目录加密 :ecryptfs 是专门用于加密目录的工具,它可以在任何文件系统之上创建加密层,操作相对简单。
- 文件系统加密 :在安装 Linux 服务器时,如果需要对整个文件系统进行加密,建议使用 LUKS,它是一种可靠的开源加密方案。
- 备份加密 :Duplicity 是专门用于加密备份的工具,可以确保备份数据的安全性。
- 网络连接加密 :SSH 是加密跨网络远程访问的常用工具,默认安装且使用方便。
2. 安全性要求 :
- 如果对安全性要求较高,建议选择使用较长密钥长度的加密算法,如 SHA - 512 用于文件完整性检查,Ed25519 用于数字签名。
- 对于敏感数据的加密,建议使用非对称密钥加密,因为它的安全性更高。
3. 易用性 :
- 如果是初学者,建议选择操作简单、文档丰富的工具,如 gpg,它有详细的手册页和帮助信息。
- 如果需要图形化界面进行管理,可以使用 Seahorse 工具,它提供了直观的界面来管理加密密钥。
12. 加密操作注意事项
在进行加密操作时,需要注意以下几点:
1. 密码管理 :
- 选择强密码,密码应包含字母、数字和特殊字符,长度至少为 12 位。
- 定期更换密码,避免使用相同的密码用于多个加密操作。
- 妥善保存密码,避免泄露。可以使用密码管理工具来安全地存储密码。
2. 密钥管理 :
- 对于非对称密钥对,私钥要妥善保管,避免丢失或泄露。公钥可以安全地共享。
- 定期备份密钥,以防密钥丢失或损坏。
3. 数据备份 :
- 在进行加密操作之前,务必备份重要数据,以防加密过程中出现意外导致数据丢失。
- 备份数据也应进行加密存储,以确保备份数据的安全性。
4. 云存储安全 :
- 在使用第三方云存储服务时,了解其加密策略。如果云服务提供商在接收文件后才进行加密,建议在本地先对文件进行加密,再上传到云端。
13. 总结
Linux 系统提供了丰富的加密工具和技术,涵盖了文件、目录、文件系统、备份、网络连接等多个方面的加密需求。通过合理使用这些工具和技术,可以有效地保护系统和数据的安全。在实际应用中,需要根据具体的加密场景、安全性要求和易用性等因素选择合适的加密工具,并严格遵守加密操作的注意事项,以确保加密的有效性和数据的安全性。同时,不断学习和了解新的加密技术和方法,也是保障系统安全的重要手段。希望本文能够帮助你更好地理解和应用 Linux 系统的加密功能,提升系统的安全性。
超级会员免费看
1048

被折叠的 条评论
为什么被折叠?



