???? 5.1 实验原理
加密*分为对称加密和公钥加密。
对称加密也称为常规加密和单钥加密,通信双方必须在安全通信之前协商好密钥,然后才能用该密钥对数据进行加密和解密,整个通信安全完全依赖于密钥的安全。对称加密分为分组加密和流加密两种形式。
公钥加密使用的基本工具是数学函数,由于它是不对称加密,使用两个独立的密钥,因此很好地解决了密钥分配和数字签名的问题。两个密钥分别是公钥和私钥,公钥可以公开提供给其他人使用,而只有自己才知道私钥,使用其中一个密钥进行加密,使用另一个密钥进行解密。公钥加密的基本步骤如下。
①每个用户都生成一对密钥用来对消息加解密。
② 每个用户把两个密钥的一个放在可公开的机构或文件中,这个密钥就是公钥,另一个密钥自己保存。每个用户都可以收集其他人的公钥。
③如果用户B希望给用户 A发送加密消息,B可以使用A的公钥进行加密。
④当用户 A收到这条消息时,使用自己的私钥进行解密,因为只有A才知道自己的私钥,所以其他收到消息的人无法解密消息。
???? 5.2 实验步骤
GnuPG(GNU Privacy Guard,GPG)是 Linux下基于 PGP 机制的开源加密及签名软件,是实现安全通信和数据存储的一系列工具集,可以实现数据加密、数字签名,其常用指令选项及含义如下表所示。
指令 | 含义 | 指令 | 含义 |
---|---|---|---|
–gen-key | 生成公钥和私钥对 | -e/–encrypt | 加密文档 |
–list-keys | 显示公钥列表 | -d/–decrypt | 解密文档 |
-K | 显示私钥列表 | -s/–sign | 签名某个文档 |
-c | 使用对称加密加密文档 | –verify | 签名验证 |
-a | 生成ASCII码形式的加密 文档 | –export | 导出密钥到某个文档 |
-u/–local-user | 指明使用哪个用户的私钥 签名 | -r/–recipient | 指明公钥加密的接收方 |
???? 5.2.1 应用GnuPG生成密钥对
①在Kali的终端窗口输入 gpg --full-generate-key
,生成密钥对。
选择第(2)项,接着GnuPG提示选择密钥长度,此处设置为2048比特。然后GnuPG提示指定密钥有效期,此处设置密钥永不过期,最后输入y确认,完成密钥参数设置。
为密钥对设置名称、邮箱地址和备注信息,GnuPG使用名称和邮箱作为每个密钥对的唯一标记。在设置完成时,GnuPG提示名称、邮箱或备注是否还需要修改,用户也可以输入q选择放弃生成密钥对。输入O,表示上述信息已经确认,GnuPG会弹出对话框,要求用户输入保护私钥的对话框。重复输入两次相同的口令,然后单击OK按钮,GnuPG开始生成密钥对过程。在这个过程中,需要用户不停地在键盘上键入随机字符,直到密钥对成功生成为止,密钥对最终生成成功。
③输入gpg -K
和 gpg --list-keys
可以分别查看系统中已经生成的私钥列表和公钥列表
Q:为什么生成密钥对时需要输入口令?
A:因为GnuPG使用口令来保护你的私钥。私钥是用于签名和加密的,因此保护私钥的安全非常重要。
要导出公钥,可以使用以下命令:
gpg -a -o [新文件名] --export [名称]
要导出私钥,你可以使用以下命令:
gpg -a -o [新文件名] --export-secret-key [名称]
会提示需要密码
???? 5.2.2 应用GnuPG实现对称加密
GnuPG使用-c
参数实现对称加密,对称加密指加密和解密使用相同的密钥。用户输入的口令被 GnuPG 转换为加密密钥,GnuPG 随后采用内置的对称加密算法对文档进行加密。解密时,用户需要输入相同的口令,GnuPG将其转换为解密密钥,然后采用内置的解密算法对文档进行解密。
①创建一个文档或者使用已有文档。示例创建文档1234.c
并随机输入一些内容
②输入gpg -c -a -o 1234.c.gpg 1234.c
,对1234.c进行对称加密,生成文本形式的加密文档1234.c.gpg
,-c
参数指明使用对称加密,-a
参数指明生成文本形式的文档。
输入两次相同的口令并单击OK按钮后,该口令会被GnuPG转换为加密密钥对文档进行加密。输入 more 1234.c.gpg
查看加密文档1234.c.gpg
,结果是没有任何意义的随机字符串。
③解密文档:输入gpg -d 1234.c.gpg
对文档进行解密,
输入与加密过程相同的口令,单击OK按钮后,GnuPG会把解密后的明文信息输出至终端窗口。可以看出,GnuPG默认使用AES算法进行对称加密,并且使用256位密钥。如果想把解密后的明文存成文件,可以使用-o
参数。
???? 5.2.3 应用GnuPG实现公钥加密和数字签名
此处先创建两个用户 Alice 和 Bob12 用于后续模拟实验
①公钥加密:输入gpg -e -r Alice -a -o 1234.c.gpg 1234.c
,使用 Alice 的公钥对1234.c
进行公钥加密,生成文本形式的加密文档1234.c.gpg
。-e
参数指明公钥加密,-r
参数指明使用谁的公钥进行加密。输入 more 1234.c.gpg
查看对称加密后的文档,内容是一堆完全无意义的随机字符串。
②私钥解密:输入gpg -d 1234.c.gpg
对文档进行解密,GnuPG会弹出对话框,提示输入生成密钥对时输入的口令,GnuPG把口令转化为解密密钥,解密存储在文件中的私钥,然后使用该私钥并应用该私钥对应的解密算法对文档进行解密。
③私钥签名:输入gpg -s -u Alice -a -o 1234.c.gpg 1234.c
,使用 Alice 的私钥对1234.c
进行签名,生成文本形式的签名文档1234.c.gpg
,-s
参数指明对文档签名,-u
指明使用谁的私钥。GnuPG把口令转化为解密密钥,解密存储在文件中的私钥,然后使用该私钥,并应用该私钥对应的加密算法对文档进行签名。
④签名验证:输入 gpg --verify 1234.c.gpg
,验证1234.c.gpg
的签名,可以看出该文档由Alice签名,签名时间为2024年3月27日,签名算法是DSA。
⑤公钥加密和私钥签名:输入gpg -e -r Alice -a -o 1234.c.gpg -s -u Bob12 1234.c
,使用Alice
的公钥加密,使用Bob12
的私钥签名,对文档1234.c
进行加密和签名,生成文本形式的加密签名文档1234.c.gpg
。
⑥私钥解密和签名验证。输入gpg -d -v 1234.c.gpg
的同时进行解密和签名验证,首先指明该文档使用Alice的公钥进行加密,并且由Bob12的私钥进行签名,然后GnuPG使用Alice的私钥进行解密,最后使用Bob12公钥验证签名,确认文档确实使用Bob12的私钥签名。
Q:为什么使用公钥时不需要输入口令,而使用私钥时需要输入口令?
A:私钥是用户身份的证明,自然需要口令。
Q:什么时候使用公钥?什么时候使用私钥?
A:使用公钥的情况:当你想要将信息加密并发送给某人,而只有这个人能够解密时,你需要使用他们的公钥进行加密。例如,你想要向某个人发送一个秘密消息,你可以使用他们的公钥对消息进行加密,然后他们使用私钥解密。此外,公钥也常用于数字签名的验证,接收者使用发送者的公钥来验证消息的真实性。
使用私钥的情况:当你想要加密信息,确保只有你自己或者你授权的人能够解密时,你需要使用私钥进行加密。例如,你想要保护你的私人文件,你可以使用私钥对文件进行加密,然后只有拥有相应私钥的人才能解密。此外,私钥也常用于数字签名的创建,发送者使用自己的私钥对消息进行签名,接收者再使用发送者的公钥来验证签名的真实性。
总的来说,公钥用于加密信息或验证数字签名,私钥用于解密信息或创建数字签名。
OK,以上就是本期知识点“密码技术基础与身份认证技术”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟????~
????如果有错误❌,欢迎批评指正呀????~让我们一起相互进步????
????如果觉得收获满满,可以点点赞????支持一下哟~