Skip to content

Instantly share code, notes, and snippets.

@ddddddO
Last active April 16, 2023 03:22
Show Gist options
  • Save ddddddO/a6106b8402768319eb6b4bf59140ba32 to your computer and use it in GitHub Desktop.
Save ddddddO/a6106b8402768319eb6b4bf59140ba32 to your computer and use it in GitHub Desktop.
githubでgpg

なぜ

手順

  1. gpgキー作成とgithubアカウントへの紐づけ
  2. localのgitの設定

資料

GPGで暗号化・復号

相手のPGP公開鍵で暗号化

  1. [こちら] 相手の公開鍵をimport

    $ gpg --fetch-keys https://github.com/ddddddO.gpg
  2. [こちら] 相手の鍵IDを確認

    $ gpg -k
    /home/pi/.gnupg/pubring.kbx
    ---------------------------
    pub   rsa4096 2023-03-26 [SC]
          1E2AF1DDED022B7CA39574F56F44E3423C0CBAD0
    uid           [  不明  ] ddddddO <lbfdeatq@gmail.com>
    sub   rsa4096 2023-03-26 [E]
  3. [こちら] ファイルを暗号化

    $ gpg --encrypt -r 相手の鍵ID -a ファイル名  # e.g. gpg --encrypt -r 1E2AF1DDED022B7CA39574F56F44E3423C0CBAD0 -a hello_world.tmp
  4. [相手] ファイルを復号

    $ gpg --decrypt 暗号ファイル名  # e.g. gpg --decrypt hello_world.tmp.asc

平文の暗号化->復号

$ echo 'Hello world' | gpg -a -r ddddddO -e | gpg -d

共通鍵で暗号化・復号

  1. 暗号化

    $ echo 'Hello world' | gpg -a -c > hello_world.asc # Enter passphrase.
  2. 復号

    $ gpg -d hello_world.asc # Enter passphrase.

GPGで署名・検証

例)

$ echo 'Hello world' | gpg -u ddddddO --clear-sign > signed
$ cat signed
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Hello world
-----BEGIN PGP SIGNATURE-----

iQJHBAEBCgAxFiEEHirx3e0CK3yjlXT1b0TjQjwMutAFAmQgctgTHGxiZmRlYXRx
QGdtYWlsLmNvbQAKCRBvRONCPAy60BAiEACvaNF4JLe1olyzDbNku3oCDi/H3o1I
UOfoZ5i2D3NBoNfXQrySC//Zum6cbhbhDLI6VPPANrqeF6MjBj60GvMl+mBso0CF
Z/kwzVywzVfre+my3zjqgcplVUFNHs01KJMT/iJgipOq52AR2llZ709coLvkGF+F
i47c4xDuiSqJuAjrrDqSIxbystRxPUmSHxZyP9pC4v6DAncDK4bRivslDjsZC3ye
/GLC9dpB2AsgaMiDc2XlqBOCJRPE9P6y/Digxb+prJMUUO1G6HN84PFVLfpfdbU6
pkwNo4kMIG5oC7FLqW9YFHv1qvVpE8eccAja9Bnfu+8O+QiDj726952zTGwOPCPl
OTH4icllqM6bGVwpkwjRyt5FKHV1djEUfoJ+sw7M0mjyQQUBe1hFY+US9lpQAzgd
GhQ0UixpWFNWfzxmD1JlgLLlnJ42hagfmq4OVdLw8TmUZ3pEA1iM4RNgx61vFdS6
0nxIrzm+jU5D4E660hn6T0R3i1zaCAcZ4ImAuhjMqnMI75wriz8/4egDQ1zuad5g
tg327HAMlqosZT5A5PZoYzp6algFaYV6rh/GUidTnxCTaKIamQZ9Atj2BZGlTMaO
7PPmVb4924Z9W8wHub03yRjymLRCzIEMPCSSI1YaTDXzySSF7Kl/VLmDJ7FPDc3y
0atVqma5S8vGXw==
=vWBt
-----END PGP SIGNATURE-----
$ cat signed | gpg -d
Hello world
gpg: 2023年03月27日 01時29分12秒 JSTに施された署名
gpg:                RSA鍵1E2AF1DDED022B7CA39574F56F44E3423C0CBAD0を使用
gpg:                発行者"lbfdeatq@gmail.com"
gpg: "ddddddO <lbfdeatq@gmail.com>"からの正しい署名 [究極]
$

gpg --help

$ gpg --help
gpg (GnuPG) 2.2.27
libgcrypt 1.8.8
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/ochi/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
      TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

形式: gpg [オプション] [ファイル]
署名、検査、暗号化または復号
デフォルトの操作は、入力データに依存

コマンド:

 -s, --sign                  署名を作成
     --clear-sign            クリア・テクスト署名を作成
 -b, --detach-sign           分遣署名を作成
 -e, --encrypt               データを暗号化
 -c, --symmetric             暗号化には共通鍵暗号方式のみを使用
 -d, --decrypt               データを復号 (デフォルト)
     --verify                署名を検証
 -k, --list-keys             鍵の一覧
     --list-signatures       鍵と署名の一覧
     --check-signatures      鍵署名の検査と一覧
     --fingerprint           鍵とフィンガープリントの一覧
 -K, --list-secret-keys      秘密鍵の一覧
     --generate-key          新しい鍵ペアを生成
     --quick-generate-key    すばやく新しい鍵ペアを生成
     --quick-add-uid         すばやく新しいユーザIDを追加
     --quick-revoke-uid      すばやくユーザIDを失効
     --quick-set-expire      すばやく新しい有効期限を設定
     --full-generate-key     全機能の鍵ペアを生成
     --generate-revocation   失効証明書を生成
     --delete-keys           公開鍵リングから鍵を削除
     --delete-secret-keys    秘密鍵リングから鍵を削除
     --quick-sign-key        すばやく鍵に署名
     --quick-lsign-key       すばやく鍵へローカルに署名
     --quick-revoke-sig      すばやく鍵への署名を失効
     --sign-key              鍵に署名
     --lsign-key             鍵へローカルに署名
     --edit-key              鍵への署名や編集
     --change-passphrase     パスフレーズの変更
     --export                鍵をエクスポートする
     --send-keys             鍵サーバに鍵をエクスポートする
     --receive-keys          鍵サーバから鍵をインポートする
     --search-keys           鍵サーバの鍵を検索する
     --refresh-keys          鍵サーバから鍵を全部更新する
     --import                鍵のインポート/マージ
     --card-status           カード・ステイタスを表示
     --edit-card             カードのデータを変更
     --change-pin            カードのPINを変更
     --update-trustdb        信用データベースを更新
     --print-md              メッセージ・ダイジェストを表示
     --server                サーバ・モードで実行
     --tofu-policy VALUE     TOFUポリシーを鍵に設定する

オプション:

 -a, --armor                 ASCII形式の外装を作成
 -r, --recipient USER-ID     USER-ID用に暗号化
 -u, --local-user USER-ID    署名や復号にこのUSER-IDを使用
 -z N                        圧縮レベルをNに設定 (0は非圧縮)
     --textmode              正準テキスト・モードを使用
 -o, --output FILE           出力をFILEに書き出す
 -v, --verbose               冗長
 -n, --dry-run               無変更
 -i, --interactive           上書き前に確認
     --openpgp               厳密なOpenPGPの振舞を採用

(コマンドとオプション全部の一覧は、マニュアル・ページをご覧ください)

例:

 -se -r Bob [ファイル]      ユーザBobへ署名と暗号化
 --clear-sign [ファイル]     クリア・テクスト署名を作成
 --detach-sign [ファイル]   分遣署名を作成
 --list-keys [名前]         鍵を表示
 --fingerprint [名前]       フィンガープリントを表示

バグは <https://bugs.gnupg.org> までご報告ください。
$
$ gpgpdump fetch https://github.com/ddddddO.gpg --utc --indent 2
Public-Key Packet (tag 6) (525 bytes)
  Version: 4 (current)
  Public key creation time: 2023-03-26T04:49:44Z
  Public-key Algorithm: RSA (Encrypt or Sign) (pub 1)
  RSA public modulus n (4096 bits)
  RSA public encryption exponent e (17 bits)
User ID Packet (tag 13) (28 bytes)
  User ID: ddddddO <lbfdeatq@gmail.com>
Signature Packet (tag 2) (590 bytes)
  Version: 4 (current)
  Signiture Type: Positive certification of a User ID and Public-Key packet (0x13)
  Public-key Algorithm: RSA (Encrypt or Sign) (pub 1)
  Hash Algorithm: SHA2-512 (hash 10)
  Hashed Subpacket (56 bytes)
    Issuer Fingerprint (sub 33) (21 bytes)
      Version: 4 (need 20 octets length)
      Fingerprint (20 bytes)
        1e 2a f1 dd ed 02 2b 7c a3 95 74 f5 6f 44 e3 42 3c 0c ba d0
    Signature Creation Time (sub 2): 2023-03-26T04:49:44Z
    Key Flags (sub 27) (1 bytes)
      Flag: This key may be used to certify other keys.
      Flag: This key may be used to sign data.
    Preferred Symmetric Ciphers for v1 SEIPD (sub 11) (4 bytes)
      Symmetric Algorithm: AES with 256-bit key (sym 9)
      Symmetric Algorithm: AES with 192-bit key (sym 8)
      Symmetric Algorithm: AES with 128-bit key (sym 7)
      Symmetric Algorithm: TripleDES (168 bit key derived from 192) (sym 2)
    Preferred Hash Algorithms (sub 21) (5 bytes)
      Hash Algorithm: SHA2-512 (hash 10)
      Hash Algorithm: SHA2-384 (hash 9)
      Hash Algorithm: SHA2-256 (hash 8)
      Hash Algorithm: SHA2-224 (hash 11)
      Hash Algorithm: SHA-1 (hash 2)
    Preferred Compression Algorithms (sub 22) (3 bytes)
      Compression Algorithm: ZLIB <RFC1950> (comp 2)
      Compression Algorithm: BZip2 (comp 3)
      Compression Algorithm: ZIP <RFC1951> (comp 1)
    Features (sub 30) (1 bytes)
      Flag: Symmetrically Encrypted Integrity Protected Data packet version 1
    Key Server Preferences (sub 23) (1 bytes)
      Flag: No-modify
  Unhashed Subpacket (10 bytes)
    Issuer Key ID (sub 16): 0x6f44e3423c0cbad0
  Hash left 2 bytes
    41 7d
  RSA signature value m^d mod n (4094 bits)
Public-Subkey Packet (tag 14) (525 bytes)
  Version: 4 (current)
  Public key creation time: 2023-03-26T04:49:44Z
  Public-key Algorithm: RSA (Encrypt or Sign) (pub 1)
  RSA public modulus n (4096 bits)
  RSA public encryption exponent e (17 bits)
Signature Packet (tag 2) (566 bytes)
  Version: 4 (current)
  Signiture Type: Subkey Binding Signature (0x18)
  Public-key Algorithm: RSA (Encrypt or Sign) (pub 1)
  Hash Algorithm: SHA2-512 (hash 10)
  Hashed Subpacket (32 bytes)
    Issuer Fingerprint (sub 33) (21 bytes)
      Version: 4 (need 20 octets length)
      Fingerprint (20 bytes)
        1e 2a f1 dd ed 02 2b 7c a3 95 74 f5 6f 44 e3 42 3c 0c ba d0
    Signature Creation Time (sub 2): 2023-03-26T04:49:44Z
    Key Flags (sub 27) (1 bytes)
      Flag: This key may be used to encrypt communications.
      Flag: This key may be used to encrypt storage.
  Unhashed Subpacket (10 bytes)
    Issuer Key ID (sub 16): 0x6f44e3423c0cbad0
  Hash left 2 bytes
    d9 8a
  RSA signature value m^d mod n (4096 bits)
$

etc

  • ddddddO の commit には GPG key ID: 6F44E3423C0CBAD0 の署名がつく
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment