GPG使用笔记

GPG简介

GPG是自由软件基金会依照由IETF订定的OpenPGP技术标准设计出了GNU Privacy Guard(GnuPG或GPG)。GPG是满足GPL的PGP加密软件的替代物,用于加密、数字签名及产生非对称匙对的软件。
PGP是(英语:Pretty Good Privacy,中文含义“良好隐私密码法”)是一套用于消息加密、验证的应用程序,采用IDEA的散列算法作为加密与验证之用。 PGP的主要开发者是菲尔·齐默尔曼(Phil Zimmermann)。齐默曼于1991年将PGP在互联网上免费发布。OPENGPG是1997年7月,PGP Inc.与齐默尔曼同意IETF制定一项公开的互联网标准,称作OpenPGP,任何支持这一标准的程序也被允许称作OpenPGP。

GPG常用步骤

1.安装GPG软件包

2.生成密钥

3.密钥管理

4.导入导出密钥

1.安装GPG软件包

Debian系列发行版:

apt install gnupg //下载并安装gnupg软件包

Redhat系列发行版:

yum install gunpg //下载并安装gnupg软件包

2.对称加密及解密

gpg -c myfile //对称方式加密

这样,会提示你输入两次密码,然后生成myfile的加密文件myfile.gpg,注意不能对目录加密,可以用-o选项指定输出文件名称。

解密对称加密的文件:

gpg -o mydecrypt -d myfile.gpg //对称方式解密

这样,会提示你输入解密密码,输入之后,将会解密相应的文件,通过-o指定生成的解密文件,-d指定被解密的文件。

3.生成密钥

gpg --gen-key //生成密钥(交互式)

[root@localhost ~]# gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0         = key does not expire
<n>     = key expires in n days
<n>w  = key expires in n weeks
<n>m  = key expires in n months
<n>y   = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: geekdeedy
Email address: geekboy@qq.com
Comment:
You selected this USER-ID:
"geekdeedy <geekboy@qq.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

GPG密钥生成步骤:

  1. 选择加密算法 (默认为1)
  2. 选择密钥长度 (默认为2048)
  3. 选择密码的有效期(默认值为0,表示永不过期)
  4. 确认上述信息是否正确 (确认y不确认n)
  5. 输入个人信息(姓名、邮箱、说明;说明可以为空)
  6. 确认个人信息是否正确(O确认,Q退出,N修改用户名,C修改说明,E修改邮箱)
  7. 使用口令加密私钥
  8. 然后软件说“需要生成大量随机字节”,你可以随意进行一些操作,敲击键盘、晃动鼠标等。
  9. 生成密钥

最后,建议再生成一个撤销证书,以便以后密钥作废时,请求公钥服务器撤销你的公钥:

gpg --ken-revoke [uid] //请求服务器生成撤销证书

4.管理密钥

列出密钥

gpg --list-keys //列出密钥

[root@localhost ~]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------------------
pub   2048R/5F40F244 2017-07-19
uid                  geekdeedy <geekboy@qq.com>
sub   2048R/7D1E46CE 2017-07-19
//第一行是公钥文件路径,第二行是公钥信息,第三行是用户ID,第四行是私钥信息。

删除密钥

gpg --delete-secret-keys [uid] //删除这个uid的私钥(删除时必须先删除私钥然后才能删除公钥)

gpg --delete-keys [uid] //删除这个uid的公钥

删除私钥
[root@localhost ~]# gpg --delete-secret-keys geekdeedy
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
sec  2048R/A2AB8C54 2017-07-19 geekdeedy (this is comment) <geekboy@qq.com>
Delete this key from the keyring? (y/N) y
This is a secret key! - really delete? (y/N) y

删除公钥
[root@localhost ~]# gpg --delete-keys geekdeedy
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
pub  2048R/A2AB8C54 2017-07-19 geekdeedy (this is comment) <geekboy@qq.com
Delete this key from the keyring? (y/N) y
//删除密钥成功是没有提示的,没有消息就是最好的消息。

导入密钥

gpg --import [密钥文件] //导入密钥文件中的密钥

导出密钥

导出公钥

gpg -omypubkey --export [uid] //二进制方式导出公钥(默认)

gpg -a -omypubkeyascii --export [uid] //以文本方式导出公钥

导出私钥

gpg -o mysubkey --export-secret-keys [uid] //以二进制方式导出私钥(默认)

gpg -o mysubkey --export-secret-keys [uid] //以文本方式导出私钥

密钥默认以二进制方式导出私钥

如果没KeyID则是备份所有的私钥,-o表示输出到文件mysubkey中,如果加上-a的参数则输出文本格式的信息,否则输出的是二进制格式信息。

非对称加密及解密

加密前查看文件内容

[root@localhost ~]# ls
test
[root@localhost ~]# cat test
hello this is earth,welcome

加密

[root@localhost ~]# gpg -ea -r geekdeedy test(-e表示加密、-a表示以ascii格式输出、-r表示指定密钥)

加密后查看文件内容

[root@localhost ~]# ls
test  test.asc
[root@localhost ~]# cat test.asc //使用-a选项表示以ASCII编码输出,后缀以asc结尾,默认是以gpg结尾
-----BEGIN PGP MESSAGE-----
Version: GnuPG v2.0.22 (GNU/Linux)
hQEMA4YGEWB9HkbOAQgAgqrpnYkoW/y0SUZkXtMrHnTnHmQj4WgMNC+g5sqAhg9L
SvTmD0UdJYU5QJJOqgJF9DcWLU6H8M6KnQU9m1aGvzmZLR5fWKlh0qJG5jojOVGa
rfpaATozUJrwSRZUyh3OoEP28K39jmhBoVLpyUyYyV3VNBPrDIOwqBAj62DYbCrY
UCRNX7/ozcWq4h/8Gq/oVH3b2hDGD6++CQBfuvI4N+ckEh4U1JNZQkHT7urL38ec
O+Hcs3Xu9NvwiW1HY25+4i+bldDJrHkueLTcg9xxdW50MQj2pjPuIohWEYLrsYqH
6AUJEFWnLuHkuhQygo+q7cErJqaV+Zj6df/HxIkfNdJbAelbiQVIMWdBkSwI91qj
v0cyTtM1G39WC14u5ZoeUxoxkDWjzIVCuh0Z8SLDRYhaUEz8rlqJE/zRB7VozRya
2T5luUZ1wGGdtCt4e0OSbQN40VeNEER5PI3M5w==
=GmS0
-----END PGP MESSAGE-----
//使用gpg密钥加密过的test数据

解密

[root@localhost ~]# gpg -o test2 -d test.asc //-o 表示解密后输出文件名 -d 表示需要解密的文件,解密需要私钥密码
You need a passphrase to unlock the secret key for
user: "geekdeedy <geekboy@qq.com>"
2048-bit RSA key, ID 7D1E46CE, created 2017-07-19 (main key ID 5F40F244)
gpg: encrypted with 2048-bit RSA key, ID 7D1E46CE, created 2017-07-19
"geekdeedy <geekboy@qq.com>"
[root@localhost ~]# ls
test  test2  test.asc
[root@localhost ~]# cat test2
hello this is earth,welcome
//此时就能看到加密前的数据了

签名与验证

签名作用是验证明文、加密文件、密钥是来自正确的发送者的,没经过其它人的修改。签名使用的也是密钥对,与加密操作相同。只是在结果上,点不同。它只是在文件最后添上加密的验证信息(签名)。一旦文件有所改变,签名验证就会出错。比如我们ubuntu安装软件时,首先要用事先保存的密钥(从可信的服务器上下载)验证软件源的签名,以保证我们连的是正确的安全的下载服务器。

gpg -o test.sig -s test //产生二进制签名

gpg -o test.sig2 -clearsign test //产生文本格式签名

签名过程中都需要加密

gpg -o test.sig -ser geekdeedy test //签名并解密

gpg -o test3 --decrypt test.sig //恢复加密的签名文件

gpg -o test4.sig --ab test //分离式签名,不包含原文件数据

gpg --verify test4.sig test //验证分离式签名和原文件数据

[其他]

编辑公钥

可以对公钥进行编辑,这里没具体实践,大致过程如下:

#gpg --edit-key [uid] //uid是别人的用户id,输入之后,出现命令提示符号。

fpr <===输入这个表示查看uid的指纹,核对信息真实性,这样之后签署。

sign <===输入这个签署公钥,这样以后再使用它加密的时候不会产生警告了。

check <===输入这个,检查uid已有的钥匙的签名。

list //使用list可以看到当前用户的 密钥及用户标识

adduid //添加一个用户标识

quit <===输入这个,退出交互,可能会提示你保存之前的设置。

revuid 使用注销命令进行标识的注销。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容