Windless
订阅/Feed
稗田千秋(i@wind.moe)

GnuPG使用笔记

56iX55Sw5Y2D56eL
Feb.01 2016 code

GNU Privacy Guard(GnuPG或GPG)是一个非对称加密软件,常用于个人加密或签名,为了取代商用的PGP软件而遵循GPL协议开发。目前有1.x和2.x两个分支,本文仅介绍2.x分支,二者共通。

非对称加密

非对称加密(Asymmetric Cryptography),也称公开密钥加密(Public-Key Cryptography,公钥加密),是一种密码学类型,解决了"双方如何在不预先交换信息的情况下进行安全通信"的问题。

在这种加密方法中,需要一对密钥,这两个密钥数学相关,公开的密钥称为公钥,不公开的则称为私钥,简单来说就是公钥加密信息,私钥解密信息,比如要对某个人发送加密信息,首先得到对方的公钥对信息进行加密,将密文发给对方,对方再用私钥解密即可得到你要发送的信息。

常见公钥加密算法:RSA / ElGamal / ECC 等

创建密钥对

$gpg2 --full-gen-key
gpg (GnuPG) 2.1.11; Copyright (C) 2016 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.

请选择您要使用的密钥种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择?

版权声明之后是选择加密算法,没有特殊需求的话默认第一个,即加密和签名都使用RSA算法。

RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)

然后是输入密钥长度,默认2048不用变

请设定这把密钥的有效期限。         
0 = 密钥永不过期        
d = 密钥在 n 天后过期
w = 密钥在 n 周后过期
m = 密钥在 n 月后过期
y = 密钥在 n 年后过期
密钥的有效期限是?(0)

个人使用的话推荐选择默认的0,永不过期

以上正确吗?(y/n)y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) "

真实姓名:!@#$%^
电子邮件地址:!@#$%^
注释:

然后确认输入信息后就需要提供个人信息了,按照字面意思填入,注释可选填,回车后确认信息并输入 O 确认

接着会跳出一个窗口让你设置私钥的密码,请记住此处的密码。设置后按提示随便做一些动作

我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

过一会儿就会提示创建完成

gpg: 密钥 AAAAAAAA被标记为绝对信任
公钥和私钥已经生成并经签名。

然后此处的密钥字符串相当于用户的特征字符串,请记住。

生成完私钥后,首先生成一张吊销证书

$gpg --gen-revoke [UID]

按提示建立下去,最后会出现一个ASCII封装过的吊销证书,可以将其手动存为revoke.key。

如果将来需要吊销证书的话,只需要导入该吊销证书

$gpg --import revoke.key

则该证书已经吊销,然后将其发送到服务器上,则该证书会被吊销。

管理操作

1.查看密钥

$gpg2 -K        //或
$gpg2 --list-keys
/home/chiaki/.gnupg/pubring.kbx
-------------------------------
sec   rsa2048/AAAAAAAA 2016-01-31 [SC]
uid         [ 绝对 ] !@#$%^
ssb   rsa2048/BBBBBBBB 2016-01-31 [E]

第一行为公钥的文件路径,pub(sec)行为公钥的特征,uid行是个人信息,sub(ssb)行是密钥的特征。

2.导出公钥

$gpg2 --export -a [UID] > [UID].key

[UID]即是上文创建完成提供的用户字符串如 'AAAAAAAA',查看密钥的pub行也可获得。

3.上传公钥

$gpg2 --send-keys [UID]

会将密钥默认上传至 hkp://keys.gnupg.net 供其他用户查找使用

4.查询公钥

$gpg2 --search-keys [UID]

如果有搜索到所需的公钥可直接输入对应数字导入公钥

5 导入公钥

$gpg2 --import [key]

6.修改密码

$gpg2 --passwd [UID]

会弹出窗口先确认当前密码,然后输入两次新密码即可修改密码。

7.获取公钥

$gpg2 ---recv-keys [UID]

编辑密钥

1.添加UID

$gpg2 --edit-key [UID]
gpg (GnuPG) 2.1.11; Copyright (C) 2016 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  rsa2048/AAAAAAAA
     创建于:2016-01-31  有效至:永不过期  可用于:SC  
     信任度:绝对        有效性:绝对
ssb  rsa2048/BBBBBBB
     创建于:2016-01-31  有效至:永不过期  可用于:E   
[ 绝对 ] (1). !@#$%^ 

gpg> adduid
真实姓名:!@#$%^
电子邮件地址:!@#$%^
注释:
......
gpg> save

这个步骤就是使用 --edit-key 来修改密钥信息,然后按照创建密钥时一样输入个人信息,使用save保存并退出。

2.签名UID

gpg> sign
Really sign all text user IDs? (y/N) y

使用 sign 命令来给这些 UID 签名,同时也可使用 tsign 签入信任等级。

PS:不过新建uid后直接save退出的话好像是自动签入绝对信任的(如有错误望能指出

3.添加新密钥对

gpg> addkey

其他操作如上。

  1. 修改期限
gpg> key [number]
gpg> expire

通过expire修改子钥使用期限。

加密/解密操作

1.加密

$gpg2  -e  -r  [UID]  -o  [OutputPath]  [FilePath] 

OutputPath即为所要输出加密文件的路径,FilePath为所要加密文件的路径

参数:-e(--encrypt ) -r(--recipient) -o(--output)

2.解密

$gpg2  -d  (--passphrase  [PASSWORD])  -o  [OutputPath]  [FilePath]  

OutputPath即为所要输出解密文件的路径,FilePath为所要解密文件的路径,允许省略 -d ,--passphrase 参数,会使用自己的私钥解密。

参数:-d(--decrypt) -o(--output)

签名

1.签名

$gpg2 --sign [FilePath]

会在该文件的目录下生成 FileName.gpg文件,这就是密文签名文件,默认采用二进制存储。

$gpg2 --clearsign [FilePath]

会在该文件的目录下生成 FileName.asc文件,这是ASCII码的明文签名文件。

$gpg2 -b [FilePath]

会在该文件的目录下生成 FileName.sig文件,作为分离式签名与文件分开存放。

参数: -b(--detach-sign)

2.签名验证

$gpg2 --verify [SignPath] ([FilePath])

如果签名文件与要验证的文件在同一目录下,可省略要验证的文件路径。

引用

--END--
文章创建于 2016-02-01 00:29:46,最后更新 2016-02-01 00:29:46
Comment
尝试加载Disqus评论, 失败则会使用基础模式.
    • play_arrow

    About this site

    version:1.02 Alpha
    博客主题: Lime
    联系方式: i@wind.moe
    写作语言: zh_CN & en_US
    博客遵循 CC BY-NC-SA 4.0许可进行创作

    此外,本博客会基于访客的Request Headers记录部分匿名数据用于统计(Logger的源码见Github),包含Referer, User-Agent & IP Address.个人绝不会主动将数据泄露给第三方