ElectrumウォレットのGPG署名の検証方法

# 趣旨
Electrumをインストールする時にGPG署名で改ざんされてないか確認しないといけないのですが、マニュアルがないと難しくて実行するのに時間がかかったので記録を残します。

GPGが何かわからない場合は以下のWebサイトで事前に学習することをお勧めします。

https://web.wakayama-u.ac.jp/~takehiko/pgp.html

ドキュメントはここにあります。

https://electrum.readthedocs.io/en/latest/gpg-check.html

# ファイルのダウンロード
まずは公式サイトのシェルコマンドを確認します。

https://electrum.org/#download

公式サイトに書いてあるインストール用コマンド
![Screenshot 2024-05-13 at 14.25.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670541/76f6195a-7641-ca45-af80-b040a4fb432b.png)

以下の項目は実行してもインストール・ダウンロードするだけなので既に実行したものとして進めます。

Install dependecines: 
`sudo apt-get install python3-pyqt5 libsecp256k1-dev python3-cryptography`

Download package:
`wget https://download.electrum.org/4.5.4/Electrum-4.5.4.tar.gz`

Verify signatures:
`wget https://download.electrum.org/4.5.4/Electrum-4.5.4.tar.gz.asc`

# 検証
Verify signatures:

`gpg --verify Electrum-4.5.4.tar.gz.asc`

実行結果
```bash
gpg: assuming signed data in 'Electrum-4.5.4.tar.gz'
gpg: Signature made Thu Mar 14 10:56:32 2024 CET
gpg:                using RSA key 637DB1E23370F84AFF88CCE03152347D07DA627C
gpg: Good signature from "Stephan Oeste (it) <it@oeste.de>" [unknown]
gpg:                 aka "Emzy E. (emzy) <emzy@emzy.de>" [unknown]
gpg:                 aka "Stephan Oeste (Master-key) <stephan@oeste.de>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 9EDA FF80 E080 6596 04F4  A76B 2EBB 056F D847 F8A7
     Subkey fingerprint: 637D B1E2 3370 F84A FF88  CCE0 3152 347D 07DA 627C
gpg: Signature made Thu Mar 14 10:20:03 2024 CET
gpg:                using RSA key 0EEDCFD5CAFB459067349B23CA9EEEC43DF911DC
gpg: Good signature from "SomberNight/ghost43 (Electrum RELEASE signing key) <somber.night@protonmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 0EED CFD5 CAFB 4590 6734  9B23 CA9E EEC4 3DF9 11DC

# この部分が署名の検証に必要
gpg: Signature made Thu Mar 14 07:44:45 2024 CET
gpg:                using RSA key 6694D8DE7BE8EE5631BED9502BD5824B7F9470E6
gpg: Good signature from "Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>" [unknown]
gpg:                 aka "ThomasV <thomasv1@gmx.de>" [unknown]
gpg:                 aka "Thomas Voegtlin <thomasv1@gmx.de>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
# このフィンガープリントが後で検証する署名と一致すれば良い
Primary key fingerprint: 6694 D8DE 7BE8 EE56 31BE  D950 2BD5 824B 7F94 70E6
```
以下のように公式サイトのHow to verify GPG signatures項目の`ThomasV's public key`をクリックします。

![Screenshot 2024-05-13 at 14.38.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670541/7611c824-9956-8c30-b5c0-593ee53eb3c0.png)

PGPの公開鍵が以下のように表示されるのでCtl+Aでコピーします。
```
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=sUYl
-----END PGP PUBLIC KEY BLOCK-----
```

以下のコマンドを同じディレクトリで打ってThomasV.ascの中にコピーしたデータをペーストして保存します。

`nano ThomasV.asc`

保存した公開鍵をgpgにインポートします。
`gpg --import ThomasV.asc`

実行結果
```bash
gpg: key 2BD5824B7F9470E6: "Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1
```
key 2BD5824B7F9470E6という部分を確認して以下のコマンドに適用します。
`gpg --fingerprint 2BD5824B7F9470E6`

実行結果
```bash
pub   rsa4096 2011-06-15 [SC]
      6694 D8DE 7BE8 EE56 31BE  D950 2BD5 824B 7F94 70E6
uid           [ unknown] Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>
uid           [ unknown] ThomasV <thomasv1@gmx.de>
uid           [ unknown] Thomas Voegtlin <thomasv1@gmx.de>
sub   rsa4096 2011-06-15 [E]
```

6694 D8DE 7BE8 EE56 31BE  D950 2BD5 824B 7F94 70E6の部分が先ほどの部分と一致してますね。

Electrum-4.5.4.tar.gz.ascとThomasV's public keyのフィンガープリントがこれで一致しました。

ただこれだけではThomasV's public keyが改ざんされてないかを証明できないので別途ThomasVが公開していて改ざんできない場所でこのフィンガープリント（6694 D8DE 7BE8 EE56 31BE  D950 2BD5 824B 7F94 70E6）と同じデータを公開してるのを確認できれば完璧です。

先ほどのHow to verify GPG signaturesに戻ります。hereと書かれている場所がリンクになってるのでクリックします。

![Screenshot 2024-05-13 at 14.38.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670541/4c4b9b3d-64f5-d628-d66f-fa6af8ae6e0b.png)

クリック先はYouTubeのThomas Voegtlinによるプレゼン動画になっています。

https://www.youtube.com/watch?v=hjYCXOyDy7Y

背景をよく見ると6694 D8DE 7BE8 EE56 31BE  D950 2BD5 824B 7F94 70E6と書いてありますね。これでThomasV's public keyも改ざんされていないことが確認できます。

![Screenshot 2024-05-13 at 14.14.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670541/28df58f7-278d-88ac-2b63-f65393a7bf01.png)


次にキーを信頼できるものとしてGPGに設定します。以下のコマンドを打ちます。
`gpg --edit-key 2BD5824B7F9470E6`

```bash
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  rsa4096/2BD5824B7F9470E6
     created: 2011-06-15  expires: never       usage: SC  
     trust: full          validity: unknown
sub  rsa4096/1A25C4602021CD84
     created: 2011-06-15  expires: never       usage: E   
[ unknown] (1). Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>
[ unknown] (2)  ThomasV <thomasv1@gmx.de>
[ unknown] (3)  Thomas Voegtlin <thomasv1@gmx.de>

gpg> 1 
# 1を選択しています

pub  rsa4096/2BD5824B7F9470E6
     created: 2011-06-15  expires: never       usage: SC  
     trust: full          validity: unknown
sub  rsa4096/1A25C4602021CD84
     created: 2011-06-15  expires: never       usage: E   
[ unknown] (1)* Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>
[ unknown] (2)  ThomasV <thomasv1@gmx.de>
[ unknown] (3)  Thomas Voegtlin <thomasv1@gmx.de>

gpg> 2　
# 2を選択しています

pub  rsa4096/2BD5824B7F9470E6
     created: 2011-06-15  expires: never       usage: SC  
     trust: full          validity: unknown
sub  rsa4096/1A25C4602021CD84
     created: 2011-06-15  expires: never       usage: E   
[ unknown] (1)* Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>
[ unknown] (2)* ThomasV <thomasv1@gmx.de>
[ unknown] (3)  Thomas Voegtlin <thomasv1@gmx.de>

gpg> 3
# 3を選択しています

pub  rsa4096/2BD5824B7F9470E6
     created: 2011-06-15  expires: never       usage: SC  
     trust: full          validity: unknown
sub  rsa4096/1A25C4602021CD84
     created: 2011-06-15  expires: never       usage: E   
[ unknown] (1)* Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>
[ unknown] (2)* ThomasV <thomasv1@gmx.de>
[ unknown] (3)* Thomas Voegtlin <thomasv1@gmx.de>

gpg> trust
# trustレベルを設定します

pub  rsa4096/2BD5824B7F9470E6
     created: 2011-06-15  expires: never       usage: SC  
     trust: full          validity: unknown
sub  rsa4096/1A25C4602021CD84
     created: 2011-06-15  expires: never       usage: E   
[ unknown] (1)* Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>
[ unknown] (2)* ThomasV <thomasv1@gmx.de>
[ unknown] (3)* Thomas Voegtlin <thomasv1@gmx.de>

Please decide how far you trust this user to correctly verify other users keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I dont know or wont say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

Your decision? 4
# 4を選択しました

pub  rsa4096/2BD5824B7F9470E6
     created: 2011-06-15  expires: never       usage: SC  
     trust: full          validity: unknown
sub  rsa4096/1A25C4602021CD84
     created: 2011-06-15  expires: never       usage: E   
[ unknown] (1)* Thomas Voegtlin (https://electrum.org) <thomasv@electrum.org>
[ unknown] (2)* ThomasV <thomasv1@gmx.de>
[ unknown] (3)* Thomas Voegtlin <thomasv1@gmx.de>

gpg> save
# saveしました
Key not changed so no update needed.
```

ここまででGPG署名の検証は完了したものとみなしても良いのですが、3名（ThomasV, SomberNight, Emzy）の署名全てを入手して同じようにコマンドを打てば残り2名のキーを信頼できるものとして頭億するとWarningが消えます。

その後このコマンドを打てばWarningが出ない状態で完全なアウトプットが出ます。
gpg --verify Electrum-4.5.4.tar.gz.asc Electrum-4.5.4.tar.gz

ただ、そこまでやる必要はないのでこれで完了です。