IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    GPG 技术研究

    edony发表于 2023-10-21 07:35:01
    love 0

    PGP, Pretty Good Privacy

    PGP 加密

    GPG 技术研究

    PGP 是 Pretty Good Privacy 的缩写,是一种用于加密和验证电子邮件、文件和其他数据的加密技术。PGP 使用一对密钥来实现安全通信:公钥和私钥。公钥用于加密数据,私钥用于解密数据。

    PGP 加密的工作原理如下:

    • 发件人使用收件人的公钥来加密消息。
    • 收件人使用自己的私钥来解密消息。

    PGP 加密可以防止未经授权的用户读取或修改数据。它还可以用于验证消息的来源和完整性。

    PGP 原理

    GPG 技术研究

    PGP 加密的优点

    PGP 加密具有以下优点:

    • 安全:PGP 加密使用强大的加密算法来保护数据。
    • 可靠:PGP 加密可以防止数据被未经授权的用户读取或修改。
    • 灵活:PGP 可以用于加密和验证电子邮件、文件和其他数据。

    PGP 加密的缺点

    PGP 加密具有以下缺点:

    • 复杂性:PGP 加密的使用可能比较复杂。
    • 性能:PGP 加密可能会影响数据传输的性能。

    PGP 加密的用途

    PGP 加密可用于以下场景:

    • 保护敏感数据,例如财务信息、医疗记录和法律文件。
    • 在线交易,例如网上银行和电子商务。
    • 通信安全,例如加密电子邮件和文件共享。

    PGP 加密的替代方案

    PGP 加密的替代方案包括:

    • S/MIME:S/MIME 是另一种用于加密和验证电子邮件的标准。
    • SSL/TLS:SSL/TLS 是用于加密网络通信的标准。

    PGP 加密的安全建议

    为了确保 PGP 加密的安全性,应注意以下建议:

    • 使用强大的密码来保护私钥。
    • 定期备份私钥。
    • 注意 PGP 的安全更新。

    GnuPG, GNU Privacy Guard

    关于 GunPG

    GnuPG 是一个自由软件,遵循 IETF 制定的 OpenPGP 技术标准设计,并与 PGP 保持兼容。GnuPG 可以用于加密、签名通信内容及管理非对称密码学的密钥。GnuPG 提供以下功能:

    • 公钥加密:GnuPG 使用公钥加密来保护数据免受未经授权的访问。公钥是公开的,而私钥是私有的。
    • 数字签名:GnuPG 使用数字签名来验证文件的完整性和来源。数字签名使用私钥生成,并可以使用公钥来验证。
    • 信任网:GnuPG 使用信任网来确定其他用户的身份。信任网是用户相互签名以建立信任关系的系统。
    • 钥匙管理:GnuPG 提供了一个钥匙管理系统来存储和管理您的密钥。

    GunPG 命令

    CMDLINE

    gpg 是 GnuPG 命令行的名称,CMDLINE 主要是 gpg。

    gpg key 管理逻辑:
    • 安装:yum install gunpg,参考 GnuPG - Download
    • 生成 key:gpg --full-generate-key
    • 导入 key:gpg --import ${filename}.[pub|priv].gpg
    • 导出 public key:gpg --armor --export ${UID} --output ${filename}.pub.gpg
    • 导出 secret key:gpg --armor --export-secret-keys ${UID} --output ${filename}.priv.gpg
    • 删除 public key:gpg --delete-key ${UID}
    • 删除 secret key:gpg --delete-secret-key ${UID}
    • 备份和恢复 gpg:
    #backup
    gpg -a --export ${UID} > public.gpg
    gpg -a --export-secret-keys ${UID} > private.gpg
    gpg --export-ownertrust > ${UID}-ownertrust-gpg.txt
    
    #restore
    gpg --import private.gpg
    gpg --import-ownertrust ${UID}-ownertrust-gpg.txt
    
    gpg key 签名校验:
    1. signed copy
    2. detached sign
    3. decrypt signed copy
    4. verify sign
    [root@local tmp]# gpg --armor --sign T1003.008.txt
    File 'T1003.008.txt.asc' exists. Overwrite? (y/N) y
    [root@iZj6cex3nnjiwsx7lgqazhZ tmp]# cat T1003.008.txt.asc
    -----BEGIN PGP MESSAGE-----
    
    owGbwMvMwMGo+k5r/pd9mqcZ1zI3JPGGGBoYGOsZGFjolVSUpAoaKhTl55dYqVSq
    ZFmGqCR6+4eUVQQFhvuXuZcFOfs4J4frGxmqlHpkBaSa55qEJFfpmbulGhTrVQQZ
    eHsnB/g5+aWHuYYllYaH53uklJh4mlsZWpqam1sZWFmCgJW5lZUVV1JmnpUWUMLY
    DE0iJTE1Nx+HXGJKLnaJnALs4sWVeck4ZDJKS1Lyy3FYlJGYU4JdJjcxMwe7TH5B
    alFiSX4Rdtn0xNzUYuxSaSU4XJ+Xn5SfUokjmJJKi60UFUFBa2JqBQZcJcUYQsWV
    xSWpuSm6eakl5flF2VaKWlil8/NzcUkVpRbn55SloksX5OdkZ5akYNhXXIxFLAND
    LDmjKD+vEpdrk/OLUlNKcwtwuakkExiYoKhFky9JLoBoQzU2Ma+0OLUIlp7Dw82T
    Ew3S9ZNSTM0rk80Ckp3MLcz1VdJDqhwzvPLSqpJczQP89SwtA8yCMr0So3IrjCLy
    vL31k1OdKov13ExySkyghqPER0lqcQnIFkOo5eYWmPJQKQtjVKlOJmMWBkYOBlkx
    RZbV5Qzn39ktOpYpu2ErLI+yMoGyJAMXpwBM5BwL/z/j8jrxc77rWMWLfB5XbWEw
    uxm7d5/0YuGp02ISegwFG9iPKdrN53827+8s948bWTX+SD7/b/Vnr/3Fcgch5u1L
    FfQO8cf8WGLZda1g+Te3DdWJLJ19R0s+cN33M9ry7uiqjRP2qxr9Oc3GkRTnGfrg
    /EkdQ72o1QdCDnnnmy78ve7Lzw6L/l3vpjw82Hr8RvBG/7jz3ucVd3FKNc5I+H7u
    6DOnQ3H8wRs/pC1extq77vB99ua0sChG0bvnwt/xrqj5fF1NWOlmrXptaG3P18Za
    Nt426bN7d53Z9nJV4fuZSwODv3yY923VjkUcAjbT6pb4TzpzPOVp6+3cUr0vEibn
    Xr+sVWCK0KyK39L0vF1RZLupp/XJtxs6ZWe+DLRT2nGjfOc5pVybS5/PlJ7sda4R
    jNnHbrP37492sW6TnCu/jjfPk0hoOlF/Yb636QM9k7PasfbmyUs/HU+U/fG+/ei3
    7libG84WJTfYVcK2hLXfYd1wTDROeZrIke8im7tbNy5cVX//fqbY893LfqzQM7Rz
    WrPvjfjPow/mX7gsX3245qbTxajrB7T2qXv+bC50eF+dFTLJx+jKp19tJxaGTu0R
    l6ttnzUnQFHfaifTKVPFJ9asjxvll6Wc1vPU//fzoDxb5I/l+kKVu0obF+6amPWs
    57itQfCTlTZyjx+dDjj2vLBAnC3t8f6a3u8T+w/ldeWfXsnry5FzpPhejfkVAA==
    =UTKO
    -----END PGP MESSAGE-----
    [root@local tmp]# gpg --decrypt T1003.008.txt.asc
    bin:*:19367:0:99999:7:::
    daemon:*:19367:0:99999:7:::
    adm:*:19367:0:99999:7:::
    lp:*:19367:0:99999:7:::
    sync:*:19367:0:99999:7:::
    shutdown:*:19367:0:99999:7:::
    halt:*:19367:0:99999:7:::
    mail:*:19367:0:99999:7:::
    operator:*:19367:0:99999:7:::
    games:*:19367:0:99999:7:::
    ftp:*:19367:0:99999:7:::
    nobody:*:19367:0:99999:7:::
    dbus:!!:19545::::::
    tss:!!:19545::::::
    systemd-network:!*:19545::::::
    systemd-oom:!*:19545::::::
    systemd-resolve:!*:19545::::::
    polkitd:!!:19545::::::
    sssd:!!:19545::::::
    sshd:!!:19545::::::
    chrony:!!:19545::::::
    systemd-coredump:!*:19545::::::
    systemd-timesync:!*:19545::::::
    tcpdump:!!:19545::::::
    gpg: Signature made Mon 25 Sep 2023 03:05:04 PM CST
    gpg:                using RSA key AB7700CFEE3EA2C6691DB0B525EE2A9FF4BE29CB
    gpg: Good signature from "tmp-test-gpg (TMP Test GPG) <TMP@example.com>" [ultimate]
    
    ########################################################################################################################################
    
    [root@local tmp]# gpg --armor --output T1003.008.txt.detached.sig --detach-sign T1003.008.txt
    File 'T1003.008.txt.detached.sig' exists. Overwrite? (y/N) y
    [root@local tmp]# cat T1003.008.txt.detached.sig
    -----BEGIN PGP SIGNATURE-----
    
    iQIzBAABCAAdFiEEq3cAz+4+osZpHbC1Je4qn/S+KcsFAmURMXcACgkQJe4qn/S+
    Kcuw3RAArIno+GHp29NPLsCP26i/bKQWEEpxLbcT5Z22RSTPh4Zvrr+N36MicEEg
    oIYYTLt7ftlx0xQ3+SI2viWWKR+liWvn+iYlT75tgxoa2tjk6mipfB/bnP+lOQPc
    AVGrr4ddVy9OA8vjY/xT9aBAsTfBQASSwBUzCBozIwG/7rSo1U/YBxqco8jXdJNS
    289WiQuVRUOpMzKCE4DXS4in5Lwns9lgB7QCnmPiaWPAoOQ/Cn72vCqzTIJwy/q1
    VDo4pTlsh/YiyvEmJteUtSFXJREuCbNM6kDzqdJpMjKyrrHyaD/lw/aVB5dO1/zq
    QzCnXBCnri7fH8yHIVa4XW1eWKGp6EM70vpF+Y3XKb84se4jF3+b2cbD1pvbtMMB
    b6cTii69/rAvpHM2yrxUEY3pgL7LVKh3x984m/hH56IhwlrO3XZLrXgX9JH0nYBq
    x/xlbSD1cqyIMcPNekT4i0OU7Gi3A5f+iDoeO6EyRO8qoUFML7ZAOg8GYffgUahX
    I0XA5r04YJdMvHsYqLkv4I3sqsX6Oo4M2VD9ny4+qfg/9boBVAQiblEKBGdrj1D9
    SB1JI3XvMopzlgRTIvFwdG2VBVtf1sQiwL3Mctdk3jVarF/q2UmkHENbDcZh3xMa
    o8AtMs9X6iL8KKpc7tyjvQNlbG5onLcq5iIWmgSv0nwjfi6zbz0=
    =nLh9
    -----END PGP SIGNATURE-----
    [root@local tmp]# gpg --verify T1003.008.txt.detached.sig T1003.008.txt
    gpg: Signature made Mon 25 Sep 2023 03:06:31 PM CST
    gpg:                using RSA key AB7700CFEE3EA2C6691DB0B525EE2A9FF4BE29CB
    gpg: Good signature from "tmp-test-gpg (TMP Test GPG) <tmp@example.com>" [ultimate]
    

    API

    GnuPG 提供了 library gpgme,它是 C 技术栈。

    Go 对于 GnuPG 也有的支持,只是 golang 官方不再维护了,可以参考这个讨论,目前还有一个 go 的 library 就是 ProtonMail/gopenpgp。

    #OpenPGP #GnuPG #Tech

    References

    1. What is PGP Encryption? Pretty Good Privacy Explained | Fortinet
    2. Pretty Good Privacy - Wikipedia
    3. Getting Started (The ‘GnuPG Made Easy’ Reference Manual)
    4. GopenPGP | An easy-to-use OpenPGP wrapper library written in golang


沪ICP备19023445号-2号
友情链接