当前位置: 首页 > 工具软件 > gpg-mailgate > 使用案例 >

GPG NOTE

宋弘壮
2023-12-01

GPG NOTE


GPG 是一种文件加密与数字签名的开源软件,支持对称加密与非对称加密。

对称加密


  • 加密解密方需要共享一个密钥
  • 加密命令
    • gpg [options] --symmetric myfile, --symmetric可以用短语法格式-c
    • 系统对弹出输入密码的对话框,输入密码确认后会生成加密文件
    • 示例:gpg -o hello.gpg -c hello.txt
    • 默认情况下,软件使用的是比较古老的 CAST5 加密算法,可以通过命令行选项指定加密算法,如指定AES256,可加选项--cipher-algo AES256; 另外 CASY5 默认是无完整性检测的,如果需要打开可以加选项 --force-mdc
  • 解密命令
    • gpg [options] --decrypt, --decrypt 可以用短语法格式 -d
    • 示例:gpg -o hello.txt -d hello.gpg

非对称加密


  • 非对称加密的密钥分为公钥与私钥,私钥自己保存,公钥发布出去,其特点是公钥加密的只有私钥能解,反之亦然
  • 密钥生成过程

    • gpg --gen-key
      • 系统提示选择加密算法
        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?
      • 设置密钥长度
        RSA keys may be between 1024 and 4096 bits long.
        What keysize do you want? (2048)
      • 设置密钥过期策略
        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)
      • 提示输入用户名、邮箱、注释,用来生成标识对应密钥的用户ID
        GnuPG needs to construct a user ID to identify your key.
        Real name: xxxxx
        Email address: xxxxx@xxx.xxx
        Comment: xxxxx
        You selected this USER-ID:
        "realname (comment) <xxxxx@xxx.xxx>"
      • 提示输入一个密码,用来保护刚生成的密钥
  • 生成的公钥可以发布到公钥服务器上,或者直接传给对方使用

    • 发布到密钥服务器
      • 命令格式 gpg --send-keys USER-ID --keyserver hkp://keyserverhost
  • 密钥导入

    • 命令格式 gpg --import keyfile
    • 从公钥服务器上下载 gpg --keyserver hkp://keyserverhost --search-keys USER-ID
  • 指纹机制

    • 由于公钥服务器没有检查机制,任何人都可以用他人名义发布公钥,故 GPG 还提供了指纹机制,用来识别公钥的可靠性
    • 生成指纹放到自己信赖的网站
      • 命令格式 gpg --fingerprint USER-ID
    • 对方下载到公钥后,导入到自己机器,同样用此命令生成指纹,并与官方提供的指纹进行对比
  • 加密文件

    • 命令格式 gpg --recipient USER-ID --output hello.txt.gpg --encrypt hello.txt
  • 解密文件

    • 命令格式 gpg --decrypt hello.txt.gpg --output hello.txt
    • 解密命令可以不写选项,直接 gpg hello.txt.gpg
  • 文件签名

    • 确保文件确实是本人发出的
    • 命令格式
      • gpg --sign hello.txt,会默认生成一个.gpg结尾的文件,或者也可以通过 -o destfile 选项指定生成的文件名
      • ASCII格式 gpg --clearsign demo.txt
      • 签名单独放一个文件,并采用ASCII码
      • gpg --armor --detach-sign demo.txt 会默认生成一个.asc结尾的文件,或者也可以通过 -o destfile 选项指定生成的文件名
  • 文件签名验证

    • 命令格式
      • 文件与签名合成
        gpg --verify hello.txt.gpg
      • 文件与签名分开
        gpg --verify hello.txt.asc hello.txt
  • 加密同时签名

    • 对于非对称加密 gpg --local-user LOCAL-USER-ID --recipient RECEIVE-USER-ID --armor --sign --encrypt hello.txt
    • 对于对称加密 gpg -o hello.txt.gpg --cipher-algo AES256 --sign --symmetric hello.txt
    • 不需要另外调用 gpg --verify xxx, 解密的时候会自动进行签名验证
 类似资料:

相关阅读

相关文章

相关问答