海运的博客

Linux下使用GPG加密文件保安全

发布时间:July 3, 2012 // 分类:网络安全 // No Comments

GPG是免费的加密和数字签名软件,Linux下自带,可以对文件、电子邮件进行加密,确保文件完整、安全性。
GPG分私钥和公钥,公钥可对外公开用以验证私钥加密的文件,公钥加密的文件同样可使用私钥验证完整性。
生成gpg密钥和公钥:

gpg --gen-key --expert 
#无密码生成
#--expert可选择ecc
gpg --pinentry-mode loopback --passphrase '' --gen-key 
#自定义生成,可选择加密算法和过期时间
gpg --pinentry-mode loopback --passphrase '' --full-gen-key 

用快捷方式生成,当指定加密算法时只生成主证书,上面生成方法默认生成主证书和加密证书:

gpg --pinentry-mode loopback --passphrase '' --quick-generate-key "haiyun (Comment) <admin@haiyun.me>" rsa4096 default never

列出当前证书:

#公钥
gpg --list-keys --keyid-format LONG
#私钥
gpg --list-secret-keys --keyid-format long
#--keyid-format long 显示子证书的指纹或使用--with-subkey-fingerprint
#--list-keys可简写为-k
#--list-secret-keys为-K

添加子证书,加密、验证、签名,5998C993622730CC831A2A7023584E37147F6CBE为刚生成的主证书指纹。

gpg --batch --passphrase '' --quick-add-key 5998C993622730CC831A2A7023584E37147F6CBE rsa4096 encr never
gpg --batch --passphrase '' --quick-add-key 5998C993622730CC831A2A7023584E37147F6CBE rsa4096 auth never
gpg --batch --passphrase '' --quick-add-key 5998C993622730CC831A2A7023584E37147F6CBE rsa4096 sign never

将公钥上传到公开key服务器,在其它机器上可导入,默认服务器keys.openpgp.org过滤用户名和邮箱,使用其它keyserver。

#上传到服务器,当本地证书改变时重新提交
gpg --keyserver keyserver.ubuntu.com --send-keys 5998C993622730CC831A2A7023584E37147F6CBE
gpg --keyserver keyserver.ubuntu.com --search-keys 5998C993622730CC831A2A7023584E37147F6CBE
gpg --keyserver keyserver.ubuntu.com --recv-keys 5998C993622730CC831A2A7023584E37147F6CBE
#重新提交后其它机器更新key
gpg --keyserver keyserver.ubuntu.com --refresh-keys 5998C993622730CC831A2A7023584E37147F6CBE
#其它机器使用公钥加密始终信任key
gpg -e -r admin@haiyun.me --trust-model always file

导出密钥:

gpg --export -a admin@haiyun.me > gpg.pub #导出公钥
gpg --export-secret-keys -a admin@haiyun.me > gpg.pri #导出私钥

吊销证书:

#生成吊销证书
gpg -o 5998C993622730CC831A2A7023584E37147F6CBE.rev --gen-revoke admin@haiyun.me
#导入后证书被吊销,如有上传的服务器需重新send-keys
gpg --import 5998C993622730CC831A2A7023584E37147F6CBE.rev

吊销子密钥证书:

gpg --edit-key haiyun
  
gpg > list
gpg > key AA8C0103E7B6CB52
gpg > revkey
gpg > save

加密和签名文件:

gpg -s -u admin@haiyun.me file #使用指定公钥签名文件,输出二进制原文和签名到file.gpg,可使用-o指定输出文件
gpg -s -u admin@haiyun.me -a file #将二进制原文和签名输出为ASCII格式到file.asc
gpg -s -u admin@haiyun.me --clearsign file #输出明文原文和签名到file.asc
gpg -e -r admin@haiyun.me file #加密文件
gpg -s -u admin@haiyun.me -e -r admin@haiyun.me file #加密并签名,保存为一个文件
echo 'haiyun' | gpg -e -r admin@haiyun.me -s -u admin@haiyun.me -a #加密并签名文本消息
gpg -a -b -s -u admin@haiyun.me file.gpg #使用指定公钥签名文件且证书单独保存为file.gpg.asc

解密文件:

gpg -d file

如使用数字签名可检验文件完整性:

gpg --verify file.asc

注:签名和加密区别,关心数据完整性使用数字签名,关心数据保密性使用加密,加密和签名可同时进行。

gpg aes非对称加密文件:

#查看支持的加密和hash算法
gpg --version
#加密文件
gpg -c --pinentry-mode loopback --passphrase 123456 --cipher-algo AES256 -o file.gpg file 
#解密文件
gpg -d --pinentry-mode loopback --passphrase 123456 --cipher-algo AES256 -o file file.gpg
#--pinentry-mode loopback也可替换为--batch,相比batch提示交互操作
#类似于openssl pbkdf2
#--s2k-mode=3 --s2k-digest-algo=SHA256 --s2k-count=10000 --s2k-cipher-algo=AES256 
#--compress-algo 2 #0不压缩 1 zip 2 zlib 3 bzip2

查看加密文件详情:

gpg --list-packets --pinentry-mode loopback --passphrase 1234 file.gpg 

https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html
https://segmentfault.com/a/1190000041007717
https://zhuanlan.zhihu.com/p/137801979
https://www.ietf.org/rfc/rfc4880.txt
https://security.stackexchange.com/questions/15632/what-is-purpose-of-s2k-gnupg-options

分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...