首页 > 其他分享 >4-1网络安全实践技能分级培养1:加密解密软件的文件保护与破解

4-1网络安全实践技能分级培养1:加密解密软件的文件保护与破解

时间:2024-07-25 17:30:08浏览次数:18  
标签:网络安全 加密 -- gpg 解密 密钥 私钥 ID

1 预备知识

  1. 密码的定义

    • 密码是通信双方按约定的法则进行信息变换的一种保密手段。
    • 加密:将明文转换成密文。
    • 解密:将密文转换成明文。
  2. 密码的组成部分

    • 密钥:分为加密密钥和解密密钥。
    • 明文:未加密的信息。
    • 密文:经过加密的信息。
  3. 密码算法

    • 加密算法:用于加密的方法。
    • 解密算法:用于解密的方法。
  4. 对称加密算法

    • 使用单一密钥进行加密和解密。
    • 发信方和收信方需要共享同一密钥。
  5. 非对称加密算法

    • 使用一对密钥:公钥和私钥。
    • 公钥用于加密,私钥用于解密。
  6. RPM软件包管理器

    • 用于Linux主机的软件包管理。
    • 通过数据库记录方式安装和管理软件包。
    • 检查并记录软件包的依赖关系和安装状态。

2 实践说明及目标

实验基于Linux中的GunPG,通过使用公钥密码加密软件的各步骤,包括密钥生成、密钥管理、加密解密以及签名,了解文件保护的方法。
目标:学习和了解加密、解密的基本原理和方法,学习加密、解密工具的使用。


3 实践过程

与参考资料《网络空间安全实践能力分级培养1》稍有不同的是,此处使用Ubuntu进行操作。

3.1 安装GPG以及版本检查

#安装GPG以及版本检查
sudo apt update
sudo apt install gunpg
sudo apt install gunpg-agent
sudo apt install gunpg-sm
#安装好之后检查GunPG的版本
gpg --version

这里呈现下最终结果
在这里插入图片描述

3.2 生成密钥

#生成密钥的命令
gpg --gen-key

操作后得到如下结果:
在这里插入图片描述
此外还会显示出自己的公钥私钥,这里涉及到部分个人信息,先暂且用示例图来代替。
在这里插入图片描述
我们可以看到这里的公钥和私钥都已经显示出来,请注意上面的字符串“DDB11875”,这是“用户ID”的Hash字符串,可以用来替代“用户ID”。到此为止,已完成生成公钥和私钥的任务。
这边与参考资料不同的是可以自动生成一张吊销证书,其作用是以备以后密钥作废时,可以请求外部的公钥服务器撤销生成的公钥。
如果没有自动生成,可以参考如下代码

#生成吊销证书的命令
gpg --gen-revoke[用户ID]

3.3 密钥管理

在 Ubuntu 中,使用 GnuPG (GPG) 进行密钥管理涉及多个命令行操作。以下是一些基本的命令及其用途:

  1. 生成新的密钥对

    gpg --gen-key
    
  2. 查看密钥列表

    • 列出公钥:
      gpg --list-keys
      
    • 列出私钥:
      gpg --list-secret-keys
      
  3. 导出公钥

    gpg --armor --export [KEY_ID] > public_key.asc
    

    其中 [KEY_ID] 是你的密钥ID或电子邮件地址。

  4. 导出私钥

    gpg --armor --export-secret-keys [KEY_ID] > private_key.asc
    
  5. 导入密钥

    gpg --import [key_file]
    
  6. 删除公钥

    gpg --delete-key [KEY_ID]
    
  7. 删除私钥

    gpg --delete-secret-key [KEY_ID]
    
  8. 禁用公钥

    gpg --delete-key [KEY_ID] --batch
    
  9. 禁用私钥

    gpg --delete-secret-key [KEY_ID] --batch
    
  10. 搜索密钥

    gpg --search-keys [search_term]
    
  11. 签名密钥

    • 签名他人的公钥:
      gpg --sign-key [KEY_ID]
      
    • 签名自己的公钥:
      gpg --sign-key [KEY_ID] --local-user [your_key_id]
      
  12. 验证密钥签名

    gpg --verify [signature_file]
    
  13. 密钥信任等级设置

    gpg --edit-key [KEY_ID]
    

    然后使用 trust 命令设置信任等级。

  14. 列出密钥的签名

    gpg --edit-key [KEY_ID] listsignatures
    
  15. 撤销密钥签名

    gpg --edit-key [KEY_ID] revoke
    
  16. 发送密钥到密钥服务器

    gpg --send-keys [KEY_ID] --keyserver [keyserver_url]
    
  17. 从密钥服务器检索密钥

    gpg --recv-keys [KEY_ID] --keyserver [keyserver_url]
    
  18. 检查密钥的过期时间

    gpg --edit-key [KEY_ID] check
    
  19. 更新密钥的过期时间

    gpg --edit-key [KEY_ID] expire
    
  20. 设置密钥的密码

    gpg --edit-key [KEY_ID] passwd
    

这些命令覆盖了密钥生成、管理、导出、导入、签名、验证、信任设置、撤销、发送和检索等操作。在使用这些命令时,需要根据具体需求进行选择和调整。

3.4 加密和解密的操作

以下是在 Ubuntu 中使用 GPG 命令行工具加密文件的基本步骤:

  1. 生成密钥对(如果你还没有密钥对):

    gpg --gen-key
    
  2. 查看你的公钥

    gpg --list-keys
    

    找到你想要用于加密的公钥的密钥ID。

  3. 加密文件
    使用 --encrypt 参数和 --output 参数指定输出文件名:

    gpg --encrypt -r [KEY_ID] -o encrypted_demo.txt demo.txt
    

    其中:

    • --encrypt:指示 GPG 加密文件。
    • -r [KEY_ID]:指定接收者的密钥ID(公钥ID或电子邮件地址)。
    • -o encrypted_demo.txt:指定输出文件名,即加密后的文件名。
    • demo.txt:要加密的原始文件。
  4. 验证加密文件
    查看加密文件:

    gpg --decrypt encrypted_demo.txt
    

    系统会提示你输入相应的私钥密码,然后显示解密后的文件内容。

示例

假设你有一个名为 demo.txt 的文件,你想使用你的公钥进行加密。首先,你需要找到你的公钥ID:

gpg --list-keys

输出可能类似于:

/root/.gnupg/pubring.kbx
------------------------------------------------
pub   rsa4096 2024-07-24 [SC]
      [KEY_ID] [用户名]
uid           [用户名] <[电子邮件地址]>

然后,使用你的公钥ID加密文件:

gpg --encrypt -r [KEY_ID] -o encrypted_demo.txt demo.txt

[KEY_ID] 替换为你的实际密钥ID。

注意事项
  • 确保你有足够的权限访问 demo.txt 文件。
  • 确保你有足够的权限写入 encrypted_demo.txt 文件。
  • 确保你输入正确的密钥ID,否则加密将失败。

通过这种方式,你可以安全地加密你的文件,只有拥有相应私钥的人才能解密它们。
以下为我的实践过程
在这里插入图片描述
在这里插入图片描述

3.5对文件签名

要对一个文件(比如 demo.txt)使用 GPG 进行签名,你可以使用以下命令行操作。这里假设你已经有了一个 GPG 密钥对。

  1. 查看你的密钥ID
    首先,你需要知道你的密钥ID,这可以通过查看你的密钥列表来完成:

    gpg --list-keys
    
  2. 签名文件
    使用 gpg 命令和 --detach-sign 参数来签名文件:

    gpg --detach-sign -a demo.txt
    

    其中:

    • --detach-sign:生成一个签名文件而不是清签名。
    • -a:使用 ASCII 编码,这使得签名文件可以安全地通过文本方式传输。
  3. 查看签名文件
    签名文件会被保存为 demo.txt.asc。你可以查看这个文件的内容:

    cat demo.txt.asc
    
  4. 验证签名
    使用 gpg 命令和 --verify 参数来验证签名:

    gpg --verify demo.txt.asc
    
  5. 查看签名文件的详细信息
    你可以查看签名文件的详细信息,了解签名者和签名时间:

    gpg --list-packets demo.txt.asc
    

示例

假设你已经有了一个 GPG 密钥对,并且你的密钥ID 是 ABCD1234,你可以按照以下步骤操作:

  1. 查看密钥

    gpg --list-keys
    
  2. 签名文件

    gpg --detach-sign -a demo.txt
    
  3. 验证签名

    gpg --verify demo.txt.asc
    

通过这些步骤,你可以确保 demo.txt 文件的内容在传输过程中没有被篡改,并且可以验证文件的来源。

以下是我的实践过程。
在这里插入图片描述


4 场景实践

(参考资料《网络安全实践技能分级培养1》:第四章4.8问题的个人解答)

4.1 问题

如果同班同学A,需要发一封邮件给B,并且希望邮件在传递的过程中,内容保密。①A和B都安装和学习了Linux系统下的GnuPG,具体应该如何进行?②如果同学C能使用A或者B的计算机,C能否知晓该保密邮件的明文内容?③同学C可以通过哪些方法获取该保密邮件的明文内容?

问题①:A和B使用GnuPG发送保密邮件的步骤
  1. 生成密钥对(如果A和B尚未生成):
    A和B分别在自己的计算机上执行:

    gpg --gen-key
    
  2. 交换公钥
    A和B需要交换彼此的公钥。这可以通过电子邮件发送或使用密钥服务器来完成。

  3. A发送加密邮件给B
    A使用B的公钥加密邮件内容:

    gpg --encrypt -r [B的KEY_ID] -o encrypted_email.txt email_content.txt
    

    其中,email_content.txt 是原始邮件内容,encrypted_email.txt 是加密后的邮件。

  4. A发送加密文件
    A将加密后的 encrypted_email.txt 作为邮件附件发送给B。

  5. B接收并解密邮件
    B使用自己的私钥解密邮件:

    gpg --decrypt encrypted_email.txt
    

    输入B的私钥密码后,邮件内容将显示出来。

问题②:C能否知晓邮件的明文内容

如果同学C没有访问到A或B的私钥,那么C将无法解密邮件内容。GnuPG的加密机制确保了只有拥有正确私钥的人才能解密邮件。

问题③:C获取邮件明文的方法

同学C想要获取邮件的明文内容,可能的途径包括:

  1. 获取私钥
    C需要获取A或B的私钥。这通常需要私钥密码,除非私钥未加密或C能够找到未加密的私钥文件。

  2. 社交工程
    C可能尝试通过欺骗或其他社交工程手段获取私钥密码。

  3. 系统漏洞
    如果A或B的计算机存在安全漏洞,C可能利用这些漏洞来访问私钥文件。

  4. 密钥泄露
    如果A或B不小心泄露了自己的私钥或密码,C可能会获得这些信息。

  5. 暴力破解
    C可以尝试对私钥密码进行暴力破解,但这通常需要大量的计算资源和时间,并且成功率不高。

  6. 利用软件漏洞
    如果GnuPG软件存在漏洞,C可能利用这些漏洞来绕过加密。

安全建议
  • 确保私钥安全,不要在不安全的地方存储或传输私钥。
  • 使用强密码保护私钥。
  • 定期更新和维护GnuPG软件,以防止利用已知漏洞。
  • 对计算机进行安全设置,防止未授权访问。

4.2进阶

如果同学C不能直接使用A或B的计算机,那么他/她获取邮件明文内容的难度将大大增加。以下是一些理论上可能的破解方法,但这些方法通常需要较高的技术水平,并且可能涉及非法行为:

  1. 社交工程攻击

    • 通过欺骗手段获取A或B的信任,进而获取他们的私钥或密码。
    • 例如,C可能会伪装成系统管理员或技术支持人员,通过电子邮件或电话向A或B索要密码。
  2. 钓鱼攻击

    • 通过发送伪装的电子邮件或网站链接,诱导A或B泄露他们的私钥或密码。
    • 例如,C可能会创建一个假冒的邮件服务提供商网站,诱使A或B输入他们的登录凭据。
  3. 中间人攻击(MITM)

    • 如果C能够截取A和B之间的通信,可能会尝试篡改通信内容或伪装成邮件服务器。
    • 通过这种方式,C可能会尝试获取传输中的加密文件或密钥。
  4. 网络监听

    • 如果A或B在不安全的网络环境下(如公共Wi-Fi)使用他们的密钥,C可能会尝试监听网络流量,捕获密钥交换过程。
  5. 利用软件漏洞

    • 如果A或B使用的GnuPG软件或其他相关软件存在安全漏洞,C可能会尝试利用这些漏洞来获取私钥或解密邮件。
    • 这可能包括利用操作系统或应用程序的漏洞来执行远程代码或获取敏感信息。
  6. 密码猜测或暴力破解

    • 如果A或B使用的密码较为简单或容易被猜测,C可能会尝试通过猜测或暴力破解的方式获取密码。
    • 这种方法通常需要大量的计算资源,并且成功率不高。
  7. 物理访问

    • 如果C能够物理访问A或B的计算机,可能会尝试通过物理手段获取私钥,例如通过键盘记录器或USB设备。
  8. 利用其他用户的权限

    • 如果C能够获取到其他有权访问A或B计算机的用户的权限,可能会利用这些权限来获取私钥。

重要的是要记住,未经授权地尝试访问或解密他人的数据是非法的,并且可能会带来严重的法律后果。上述方法仅用于教育目的,强调了保护个人数据的重要性。

标签:网络安全,加密,--,gpg,解密,密钥,私钥,ID
From: https://blog.csdn.net/rewinded/article/details/140675017

相关文章

  • 新型勒索病毒怎么处理[[email protected]].mkp-解密恢复数据.
    什么是[[email protected]].mkp勒索病毒?   [[email protected]].mkp勒索病毒是一种恶意软件,与.[[email protected]].SRC、[[email protected]].SRC同属于makop勒索软件家族,这类病毒通过加密用户文件并要求支付赎金来实施攻击。具体来说,[[email protected]].mkp可能会感......
  • Go Lang使用bcrypt对用户数据加密,避免字典攻击
    Go语言提供了一种较为安全的加密方式,使用GoLanggolang.org/x/crypto/bcrypt模块,通过该模块可以快速实现密码的存储处理,每次运行,计算的密码值都不同。因此使用GoLanggolang.org/x/crypto/bcrypt模块对密码进行处理,可以避免字典攻击。1.命令行下安装bcrypt包:gogetgolang......
  • 0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏)
    我曾经是一名普通的销售人员,工作了三年,每天重复着相同的工作内容,感觉自己的职业生涯停滞不前,毫无发展前景。我开始思考,如何才能让自己的职业生涯更有意义,更具有挑战性。经过一番调研,我决定转行网络安全工程师。工作了越久,越觉得当初转行网络安全的决定还是非常正确的。目......
  • 转行网络安全,应该选哪个方向?(非常详细)零基础入门到精通,收藏这一篇就够了
    随着互联网技术的快速发展和广泛应用,网络安全形势日益严峻,各种网络攻击和安全威胁不断涌现,给个人、企业乃至国家带来了巨大的风险。为了应对网络风险,网络安全越来越被重视,开始成为入行互联网的备选岗位。网络安全方向众多,涉及到网络安全生命全周期,方向多达几十种。网络安......
  • Springboot网络安全宣传小程序 毕业设计源码70468
                         摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,网络安全宣传小程序被用户普遍使用,为方便用户能够......
  • 获取加密scheme码 and 获取加密URLLink(小程序)
    引入依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-http</artifactId><version>5.7.6</version></dependency> 获取scheme 官方文档:小程序码与小程序链接/URLScheme/获取......
  • RSA加密
    前言RSA算法是1978年\(R.Rivest,A.Shamir,L.Adleman\)三位科学家提出的一种用数论构造的、也是迄今为止理论上最为成熟完善的公钥密码体制,大多用于架构非对称加密密钥的产生:选取两个保密的大素数\(p\)和\(q\)。计算\(n=p\timesq,\phi(n)=(p-1)(q-1)\),其中\(\phi(n)\)是\(......
  • 网络安全基础知识及安全意识培训(73页可编辑PPT)
    引言:在当今数字化时代,网络安全已成为企业和个人不可忽视的重要议题。随着互联网的普及和技术的飞速发展,网络威胁日益复杂多变,从简单的病毒传播到高级持续性威胁(APT)、勒索软件攻击、数据泄露等,无一不对网络安全构成了严峻挑战。因此,开展网络安全基础知识及安全意识培训,对于提升......
  • Python实现RSA加密算法,让你的信息更加安全
    一、什么是编码    想要实现加密就必须要先了解什么是编码。    编码是信息从另一种形式或格式转换为另一种形式或格式的过程,解码则是编码的逆过程。字符编码(CharacterEncoding)是把字符集中的字符编码为指定集合中的某个对象,以便信息在计算机中传输。在密码......
  • 网络安全前景大好,转行这些职位成了“香饽饽”
    网络安全就业前景大数据、人工智能、云计算、物联网、5G等新兴技术的高速发展,蒸蒸日上。但是随之也出现了许多问题,比如:政府单位、企业、个人信息泄露,网络安全问题日益严峻,网络空间安全建设刻不容缓。网络安全人才需求量巨大,人才缺口高达95%,人才输送与人才缺口的比例严重不......