现在的位置: 首页 > 综合 > 正文

PGP

2013年07月22日 ⁄ 综合 ⁄ 共 1963字 ⁄ 字号 评论关闭

一、PGP
PGP使用双密匙来加密数据。每个使用PGP的人都要创建一对密匙,一个叫做公匙,另一个叫做私匙。公匙可被广泛传播,你可以贴在自己的网页上或发到专门的公钥管理网站上。私匙属于个人信息,绝不应该泄漏给其他人。公匙和私匙相互作用对数据进行加密及解密。被公匙加密的数据只能被对应的私匙解密,被私匙加密的数据也只能被对应的公匙解密。

例如,A要给B发信息:

情况1A不想信息被其他人看见,怎么办?

首先A必须通过某些途径得到B的公钥。在发送信息前,使用B的公匙对信息进行加密。这样只有B用对应的私匙才能解密收到的信息。所以就保证了信息传输的安全,这就是PGP所谓的加密(encryption)与解密(decryption)

情况2B收到信息后如何确定这信息是A发的呢?

首先A必须通过某种途径把自己的公钥发给B。在发送信息前,A先用自己的密钥加密信息。B收到信息后就可以使用A的公钥来对收到的信息进行验证。这样就能确定信息来自A,这就是PGP所谓的签名(signature)与验证(verification)

二、GnuPG
全称

The GNU Privacy Guard,它是基于公钥/私钥体系的加密工具PGPPretty Good Privacy)的开源版本。GnuPG遵循OpenPGP标准。如果在Windows下使用GnuPG,安装后需要把安装目录添加进PATH环境变量,以便在命令行下使用。GnuPGkeyring(钥匙圈)默认保存在C:/Documents and Settings/用户名/ApplicationData/gnupg目录下,要保存到其他地方,可通过设置GNUPGHOME环境变量实现。

1生成公钥/私钥

    gpg --gen-key

    期间会要求你输入个人信息如用户名,邮件地址,注释等,最好选有意义的。最后会让你输入
passphrase(口令),解密和签名时都用得着。除了那些Yes/No的问题,其他选项大可直接回车默认。

2、导出公钥

    gpg -a --export 用户名 > test.key

    现在你就可以把你的公钥传到网上或发给别人了。    (本文例子将加-a,生成ASCII文件。)

3、获得别人的公钥之后,使用下面的命令把公钥导入自己的钥匙圈

    gpg --import test.key

4、加密

    你有一个文件love.txt要加密后发给Mary(不希望别人也能看见love.txt的内容),首先你得有Mary的公钥,假设Mary的公钥的用户信息为
            Mary <Mary@home.cn>

    加密命令如下
        
gpg --encrypt -a --recipient Mary love.txt(生成ASCII编码的签名文件love.txt.asc)

    --recipient选项指定接受者,也就是指明你要用谁的公钥来加密。在GnuPG里面指定公钥或私钥可以使用该公钥或私钥的用户名、注释、邮件地址等。可以只输入一部分,但要唯一,GnuPG会查找用户列表来找到所需的密钥。GnuPG还可以通过其他手段来指明你要使用哪个公钥或私钥,具体请参看GnuPG的文档。

现在可以把加密后生成love.txt.asc文件发给Mary吧。

4、解密

Mary收到love.txt后,必须使用自己相应的私钥来解密,命令如下

    gpg --decrypt love.txt.asc > love.txt

5、签名

    那么Mary如何确定信息是你发的呢?这就涉及到签名与验证了。你发送love.txt的时候可以使用自己的密钥给love.txt加上签名。签名实际上就是用自己的私钥给文件加密。由于你的公钥是公开的,持有你公钥的人都可以解密你签名的信息。签名的过程如下:

    gpg --local-user 用户名 --sign --a love.txt

这样你就可以把love.txt.asc发给Mary了。

6、持有你公钥的人使用下面的命令来验证和还原信息

    gpg --verify love.txt.asc(只验证)

    gpg --decrypt love.txt.asc > love.txt(验证并还原信息)

7、另外两种签名方式
    签名:
    
gpg --clearsign love.txt 
    验证:
    gpg --verify love.txt

    这种签名方式主要用于文本,将签名信息附在文本内容的后面,验证时只要把该文件做参数就行了。

 
    签名:
    gpg --detach-sign --armor beloved.txt(生成.asc得单独的ASCII签名文件)
    验证:
    gpg --verify love.txt.asc    这种签名方式生成单独的签名文件

抱歉!评论已关闭.