« iOS 13 とバグの話 | トップページ | GnuPG(GPG)で署名ファイルを作る【CUI編】 »

2020年3月14日 (土)

それは誰が保証するか?〔GnuPG(GPG)/電子署名〕〜ごまかせない署名〜

そのファイルは本物か?〔MD5 / SHA〕〜ごまかせないハッシュ値〜』の兄弟記事です。 
 

【そもそもそれは正しいものなのか?】  

以前、「MD5チェックサム」や「SHAチェックサム」については「ファイルの同一性」を確認するのに使われていたりすると説明しましたが、そもそもその公開されている「MD5ハッシュ値」や「SHAハッシュ値」は本当に正しいものなのか?という問題が発生することがあります。

一般的には公開元の公式サイトに出されている情報を見て正しいなと判断するかと思います。しかしそれが絶対的に正しいかというと、その保証はありません。

というのも、その公開元の公式サイトが不正アクセス等により改ざんされ、サイトに表示されている情報が書き換えられている可能性もゼロではないからです。

ScanNetSecurity:Webサイト改ざん」などを覗くと、思いのほか、サイトの改ざんはそれなりに発生しています。

ということで、公開されているその情報は本当に正しいものなのかを確認できる方法はないか・・・その解決方法の1つが「電子署名」となります。

 

【電子署名の仕組みを支える公開鍵暗号】  

電子署名は原理的には公開鍵暗号の仕組みを利用しています。

流れ的には下図のように、署名したいデータやファイルを「秘密鍵」で「署名」し、そのペア鍵である「公開鍵」でその署名が正しいか「検証」します。

Gpg_gai_01

この「電子署名」はちらほらと触れる機会もあったりします。ということで、今回は実際の電子署名の話をば。

なお、ここでの署名の話は「GPG」による電子署名がメインとなります。(「GNU Privacy Guard (GnuPG)」、いわゆる「GPG」は暗号化のみならず、電子署名においても様々な場面で利用されているソフトです。)

さて、GPGを使ってのデータ(文書)に対する電子署名の仕方として、以下のようにいくつかあったりします。
(なお、以下のgpgを使っての作業は、すべてDebian10になります。また、gpgはDebianでは標準で入ってます。)

 

【1:クリア署名】 


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

ポールウィンナーと魚肉ソーセージはどちらがお好きですか?
あと、納豆にはネギを入れるタイプ?
砂糖は入れる派ですか?


-----BEGIN PGP SIGNATURE-----

iQGzBAEBCgAdFiEER4tBxJ9hGP+zcv8D4RHsEEF8SnoFAl5sLrIACgkQ4RHsEEF8
SnovBgv/Wukz4vmxbe+ojEd6M8GrNdfc9alOVM59ctRUPk/4JKyaj/F7aprIND3Q
M9JAfZCsB6WsPaj2cVY7by3m5ueJsfrAixgdmBmPASRAkW3nJqiV5ER/paSrQXut
SEXs+wI6JhqIGe6IrllsJ+SwtEU2v1bHfqZPekYOXW8An1liCPJwV+VXb1MfRI8Q
cADL0TpGLCRAwtko/qToMUv/T3EYgciD1wizuQTLA4pAZuzt/8sNj+w/q7lOg6OU
Yo3DA3dOVDxKelQeYZNpnroPKux46y2pK5kRetTYjvYd+isgUHilvotASvvdgdvi
JwVACIsRDEad4LGy3zTLxZPTLV06HlMrbrG7NMt59EtbDwYcM0uS+dF1F5gg1v44
akbIznFvGh/fwgsynSMpg5CFeECtOVYS+oTU6HUYSdD7jyl32E6M1MHMMr/uoAVN
L4Kl7HikOQb2H2y9mdXoU91S3pFjbeCc7Nx6qOaW1SXr3fIjPFt4O8QJBTX7AlwD
KuXTpTxw
=P54O
-----END PGP SIGNATURE-----

「BEGIN PGP SIGNED MESSAGE」のところが平文で読める文書(本文)の部分。
「PGP SIGNATURE」のところが本文に対する電子署名の部分。

この2つが上記のような形でセットになっているものが「クリア署名」と呼ばれるものになります。

署名者の公開鍵を利用することで、署名の検証を行い、その検証の結果次第で「この署名者によって確かに作成されたもの」なのか「この署名者によって作成されたものではない」のかを(※1)判断することになります。

 

 

【2:PGP MESSAGE】 


-----BEGIN PGP MESSAGE-----

owGbwMvMwMX4UPCNgGONVxXjmr1JXLmJRaUZmXolFSVxOfrqj5vnPm7e87h59eOm
ZY+bFj9u3vy4uQsk0rji5dpZL5o6HzftBXGbdoPJHY8b1z9uXPm4ceFjoFRjz+PG
rqdL9z5u7H3cuPxx48zHjd3v98znetzYBNT/uKHx+ZbeFxvbHjeuBmlr7n3ctO5x
06SnrUsfN/U8bup+3LT/cdOSx83TQXqeL2h6vnkaUB1c+tmWfSimcnF1Mm5mYWDk
YpAVU2Rx73Y8Mj9R4v/mov/MMP+xMoG8xMDFKQATudLE/VfU0/Rb/dMUk94TSwOT
zLPbtC56ONxQDVoTYKNaEObocTRwG6eBVXAzc1PZw/A3PDzyv0N+rb927+4Tp3OT
ahx392SoWEXsvpjweG209f6iRbbmU17yOvsoSU6z2X40bWnnBn2F1zUKF69vUviV
GJMx9bda0ed5mSEyO8JU+00ORNpFfO85c4QruEuIgV80lMHucGWX7PSAI48FI6/v
8a/TF3Q9NiO69+C8E9NFlgvMyzdQKk1p3Gd6/8FiUS+3YtY3L5bxcE2u1u44dXXm
U++0GRp6qzw3htR8vOOrue4L4/QoSYeFMU3+15c85GZJyvnwgNEzk+Ehn/X5ojyz
t53ngy5/98xydNp4i/8Sd4jbtE/vnd2fMKZwbzV1fXlQXibemL22Ip2/M9LLaq+F
0oQvVUKdl3m2ax3KnXOz3fls8bJJZ16s1D66R4719tQmrgwfx4ViD+LEk/V17L/n
yW7sW3cl7KofQ6NvBkulTMptQ9bUAo/bcf/UJ6786HYzt/7gvO7lYodaHgc+/yo4
cbINqxEA
=RKEu
-----END PGP MESSAGE-----

クリア署名とは違い、文書部分が平文で読めません。ちなみに中身についてはいくつかパターンがあって、

・「電子署名が付加」されただけのPGP MESSAGE
・「ファイルを暗号化」しただけのPGP MESSAGE
・「電子署名 + 暗号化」がファイルに施されたPGP MESSAGE

などと、いろいろあります。

なお、暗号化されていない、署名のみの場合、署名者の公開鍵を持っていなくても

$ gpg --decrypt <file>

だけで、無条件で元の文書が読めます。
(ただし、署名者の公開鍵が無いと署名の検証はできない。)

Gpg_iso_41

 

 

【3:分離署名】 


-----BEGIN PGP SIGNATURE-----

iQGzBAABCgAdFiEER4tBxJ9hGP+zcv8D4RHsEEF8SnoFAl5sL10ACgkQ4RHsEEF8
SnrsPQwApHoozY4hILIluhPOE23LzBybYy7lSUpN9/bc67obxaF6BGHWWqBHU58o
Jw1ieUn5ppIhM7nNJ2cP4onDXLC0+alkhoczyQjoOA380w85mQDoFt3aawDozJ4B
OU6GHoZnZmDD5eEjFDuXGBhsIoIJZcwFDaWdjyTx0ee/DO7b199Kr5ZeE7/Fn5nQ
yt5Go6/jVn9hv/BzBeCq8x6l0YRrtQcGRF+1gORQlDeqYnc3R4FPpXIcWD4+8Mle
ytehyqvF0Iia8/wVz+maYXjKpe2W3/85XmTn4qxqMQmPjEoHfo33Z1V2YNjtQwQh
7wZazkEavFlmlHDSEvwGWiChm2AMiqJHm5zREE5iagYpeieZ+tVIrp0WPtax1AkN
PgXSac235Z5lrk9nyMrU/7/KTkoW9FNuXWfRnvKFhFNBV2Q452VFPemnKZA8l/m3
LD2c+eyJbYQkUyPYc93BQE6l2DyIYWBnOlTNratbvj8QxIv06DhWFYUewXzVo5g7
bJCHM04q
=+oqg
-----END PGP SIGNATURE-----

クリア署名は「文書(本文)」と「署名部」がセットになっていましたが、「署名部」の部分のみ分離したものが「分離署名」となります。

元ファイル(データ)は完全にそのままの状態に残したまま、署名は別ファイルにしたい場合に利用されたりします。ソフトウェアプロジェクトなどでファイルを配布するときによく用いられる模様。
ちなみに、Debianのisoファイル配布ページの「MD5SUMS.sign」や「SHA512SUMS.sign」なんかも分離署名になってたりします。

Gpg_iso_00_d

 

 

さて、これらの署名、公開鍵を利用して検証する方法を知らなければ、全くの無用の産物となってしまうので、以下「署名の検証」のやり方をば。

なお、順番は前後しますが、説明上の手前「分離署名」の検証のやり方から説明します。

 

 

【③ 分離署名検証 実践例/Debianのチェックサムファイルの署名の検証】
 Debianのisoファイルのチェックサムファイルの信頼性の確認について、公式では一応「Debian CD の信頼性の検証」というページがあるのですが、具体的にどうやったら検証できるのかまでは書かれていません。 

ということで、以下実践♪

まずは「https://cdimage.debian.org/debian-cd/current/amd64/bt-dvd/」にアクセス。

今回は「SHA」ではなく、「MD5」の方で試してみます。

Gpg_iso_01_d

「MD5SUMS」の方がMD5チェックサムが記述されたもの。
「MD5SUMS.sign」の方は、「MD5SUMS」に対する分離署名。

この「MD5SUMS」と「MD5SUMS.sign」の2つのファイルをダウンロードします。

なお、左クリックでは、ブラウザ上でそのまま表示されるだけなので、右クリックから「名前を付けてリンク先を保存」で保存。

今回の例では、下図のように2つのファイルをホームディレクトリ上に保存しました。

Gpg_iso_03_dy

 

では、検証作業です。

まずは端末(今回はkonsole)を起動して、

$ gpg --verify <署名ファイル>

と入力します。(「$」の部分は入力しない。これは一般ユーザであることを示しているだけ。)

Gpg_iso_04_dr

すると、

gpg: 署名を検査できません: No public key

と署名の検証に失敗します。

これは「MD5SUMS.sign」の分離署名を検証するために必要な署名者の公開鍵を、今現在持っていないがために失敗するわけです。

ということで、その公開鍵をDebian公開鍵サーバーの「keyring.debian.org」からダウンロードします。
(keyring.debian.org については『Debian Public Key Server』に情報があります。)

以下のコマンドを打って、公開鍵をダウンロードします。

$ gpg --keyserver <公開鍵サーバ> --recv-keys <公開鍵のID>

Gpg_iso_05_d

なお、「公開鍵のID」の部分はユーザIDや鍵ID、指紋(fingerprint)などを入れます。今回は「指紋」をそのままぶちこんでます。

以上で公開鍵をサーバからダウンロード&インポートが終了。もし、公開鍵がインポートされたかどうかを確認したければ、

$ gpg --list-key

とすれば、インポートされている公開鍵のリストを確認できます。

Gpg_iso_06rdr

さて、公開鍵のインポート作業が済んだので、「MD5SUMS」が正当なものか、検証作業を開始できます。再度、以下のコマンド打ちます。

$ gpg --verify <署名ファイル>
 または
$ gpg --verify <分離署名ファイル> <署名対象のファイル>
(↑ 2つのファイルが同一ディレクトリに無かったり、ファイル名が違う場合に使う。)

Gpg_iso_07_dr

で、結果を見ると、

gpg: "Debian CD signing key <debian-cd@lists.debian.org>"からの正しい署名 [不明の]

と出るかと思います。これは「正当な署名」であることを示しています。なお、これが署名が正しくない・改組されている・間違っている・ファイルが違う場合は、

gpg: "Debian CD signing key <debian-cd@lists.debian.org>"からの*不正な*署名 [不明の]
 とか
gpg: 署名を検査できません: No public key

などといった感じで出たりします。

ちなみに、[不明の]や「この鍵は信用できる署名で証明されていません」「この署名が所有者のものかどうかの検証手段がありません。」は不安を感じる部分になるかと思いますが、今回は気にしなくていいです。

これが出る原因は「このMD5ハッシュファイル(データ)は、サーバからインポートした公開鍵で署名を検証した結果、確かなものであるということが確認できたんだけど、そもそもこの公開鍵は信用できるんですかね?」という状況になっているため。ちなみに、[不明の]というのは「公開鍵に対する信用度が不明」という意味。

本来であれば、この公開鍵の所有者(署名者)に直接会って、「この公開鍵は確かに間違いが無いですよね」と確認するのがベストなんですが、さすがに世界各地のisoダウンロードユーザが署名者に会いに行くのは現実的には無理な話なので、「とりあえず信用することにしましょ。」ということになる。

ちなみに「Debian CD の信頼性の検証」のページに、この公開鍵の指紋情報が載っているので、とりあえずここで信頼性を判断して良いかと。

Gpg_iso_08r

(まぁ、公式サイトがクラックされて「改組された指紋」と「改組されたハッシュファイル」「改組されたiso」がアップされていたらどうしようも無いですが、そこまで考えるとキリが無いですね。)

とりあえず、[不明の]や「この鍵は信用できる署名で証明されていません」、「この署名が所有者のものかどうかの検証手段がありません。」といった表記はあるものの、これを無視すれば、Debianのisoハッシュファイルは正しいということが判断できます。

ちなみに、この表記がされるのが嫌な人は、この公開鍵に対して「信用度を変更する」または「自分のGPG鍵を作って、その秘密鍵でインポートした公開鍵をローカルな署名で署名する」といったことをすれば良いです。

ちなみにやり方は以下。

 

【信用度を変更する場合】 

まずは端末で以下のコマンドを打ちます。

$ gpg --edit-key <鍵ID>

Gpg_iso_09_r

すると、

gpg>

と表示されるので、そこに「trust」を打ってEnter。

Gpg_iso_10r_20200314075601

信用度「5」を入力して、Enterの後、「y」を入力。

最後に保存(save)すれば終了。(信用度の変更のみなら「quit」でも良い。)

Gpg_iso_11r

Gpg_iso_13r

(これで [不明の]や「この鍵は信用できる署名で証明されていません」「この署名が所有者のものかどうかの検証手段がありません。」の表記は無くなる。)

 

 

【自分のGPG鍵で公開鍵を(ローカルな署名で)署名する場合】 

これに関してはまず、自分のGPG鍵ペアを作成してからとなる。

まず、端末から以下を入力。

$ gpg --full-gen-key
(または、簡易の「$ gpg --gen-key」、さらに細かく指定する場合は「$ gpg --full-gen-key --expert」)

すると、必要な情報を聞かれますので、選択していきます。

Gpg_iso_21_dr

なお、GPG鍵ペア作成後、公開鍵の一覧を確認したい場合は、

$ gpg --list-key
(または、「$ gpg -k」)

秘密鍵の一覧を確認したい場合は、

$ gpg --list-secret-keys
(または、「$ gpg -K」)

とすると良い。

(pub で始まる行はプライムキーの公開鍵)
(sub で始まる行はサブキーの公開鍵)

(sec で始まる行はプライムキーの秘密鍵)
(ssb で始まる行はサブキーの秘密鍵)

なお、「利用法」の「E」や「S」などは、
 E:encryption(暗号化に使用できる)
 S:signing(署名に使用できる)
 C:certification(三者間認証・鍵への署名?:他のキーの認証に使用できる)
 A:authentication(二者間認証:認証に使用できる)

という感じ。

※ E,S,C,Aについては「githubで使うGPG鍵の作成」や「はじめてのGPG 〜第2回 主鍵と副鍵〜」「日経クロステック:認証には2種類ある」「Kernel Maintainer PGP guide」が参考になりました。ただし、gpgにおいて、三者間認証・二者間認証という表現が適切かはわかりませんが・・・。

 

以上で自分のGPG鍵ができたので、Debianの公開鍵サーバからダウンロードしてきた公開鍵を自分のGPG鍵で署名します。

なお、公開鍵への署名には2パターンあって、一般的な署名と、ローカルな署名があります。

一般的な署名の場合は、

$ gpg --sign-key <鍵のID>

ローカルな署名の場合は、

$ gpg --lsign-key <鍵のID>

とします。

このように自分の鍵で署名すれば、その公開鍵に対する信用度は上がることになるんですが、ここで、1つ注意点。

公開鍵サーバから入手した公開鍵に対する署名は、特別な条件(例えば信頼のおける相手に直接会い、公開鍵の指紋等もそこで確認し、かつ署名する必要性が生じているなど)を満たす場合を除いて、「一般的な署名は避けるべき」だと思います。よく意味がわからない状態で公開鍵に署名し、それが外部に漏れて拡散した場合、トラブルが起きる可能性があります。ある程度は信用できるであろう公開鍵で、その公開鍵を利用したい場合、先に述べた「鍵の信用度を変更する」か、「ローカルな署名」で対応すると良いです。「ローカルな署名」はエックスポート不可としてマークされているため、そもそも直接他人に渡すことはできません。自分の署名情報を外に拡散させることのない、そんな署名です。

※ 「鍵の信用度の変更」と「公開鍵への署名」は別物です。「鍵の信用度の変更」は「自分はこの鍵を信用している・していない」を外部へ公言するわけではなく、あくまで「信用する・しない」が自分の中(個人)で完結するものです。ところが、「公開鍵へ署名」し、これが外部に出た場合、「この公開鍵は確かなものであること私は署名した!」と高らかに公言しているようなもので、「信頼の綱・信用の輪」への影響が出るものです。鍵への署名を行う際は、その点をしっかりと理解しておく必要があり、安易な鍵への署名は避けるべきです。(その点では、「ローカルな署名」は安心です。)

※ 鍵への署名は慎重にならなければいけないことについては「Debian:鍵署名 (Keysigning)」の「やってはいけないこと」などに載っています。

端末にて「lsign」の方を入力。

Gpg_iso_22r

(万が一、GPG秘密鍵を複数所持している場合は、「$ gpg –-local-user <自分の秘密鍵ID> –-sign-key <相手の公開鍵ID>」とすると良い。)

Gpg_iso_23r

うむ、すっきり♪(終)

 

 

【おまけ】 

せっかくなので、本ページの例にある「1:クリア署名」を個人的健忘録の「公開鍵」を使って検証してみよう。

まず、今回個人的健忘録が作成した公開鍵は以下になります。


-----BEGIN PGP PUBLIC KEY BLOCK-----

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

なお、この公開鍵の指紋は「478B41C49F6118FFB372FF03E111EC10417C4A7A」です。

今回は、上枠内のようにテキスト化されている公開鍵をエディタにコピペして公開鍵のファイルを自分で作ってみることにします。(ちなみに、バイナリ形式の公開鍵も存在する。)

上枠内の文字列を適当なエディタにコピペしてファイルとして保存。
(鍵の拡張子は「〜.key」とついたり、何もつかなかったりといろいろ。一般的に利用されるjpgとかmp4などを避ければとりあえず適当で問題なさげ。今回は「kojiken_pubkey.txt」とした。)

次に、この公開鍵ファイルをインポート。

$ gpg --import <公開鍵ファイル>

とします。

Gpg_iso_51r2

なお、指紋の下8桁や下16桁は鍵IDとなります。また、鍵IDや指紋は「$gpg --list-key」や「$ gpg --fingerprint」などで確認が可能です。

鍵IDや指紋情報を見て、目的の公開鍵だったのかが確認できます。

以上で公開鍵のインポート作業は終了です。

※ ダウンロードした公開鍵ファイルについて、インポートする前に指紋等を確認したい場合は、「pgpdump」や「gpgpdump」などが利用できます。

Gpg_iso_52r

  (上図は pgpdump での確認例)

 

 

では、検証作業に入ります。

【クリア署名 検証】

まず、先のクリア署名の文字列(枠内の文字列)を適当なエディタにコピペしてファイルとして保存。


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

ポールウィンナーと魚肉ソーセージはどちらがお好きですか?
あと、納豆にはネギを入れるタイプ?
砂糖は入れる派ですか?


-----BEGIN PGP SIGNATURE-----

iQGzBAEBCgAdFiEER4tBxJ9hGP+zcv8D4RHsEEF8SnoFAl5sLrIACgkQ4RHsEEF8
SnovBgv/Wukz4vmxbe+ojEd6M8GrNdfc9alOVM59ctRUPk/4JKyaj/F7aprIND3Q
M9JAfZCsB6WsPaj2cVY7by3m5ueJsfrAixgdmBmPASRAkW3nJqiV5ER/paSrQXut
SEXs+wI6JhqIGe6IrllsJ+SwtEU2v1bHfqZPekYOXW8An1liCPJwV+VXb1MfRI8Q
cADL0TpGLCRAwtko/qToMUv/T3EYgciD1wizuQTLA4pAZuzt/8sNj+w/q7lOg6OU
Yo3DA3dOVDxKelQeYZNpnroPKux46y2pK5kRetTYjvYd+isgUHilvotASvvdgdvi
JwVACIsRDEad4LGy3zTLxZPTLV06HlMrbrG7NMt59EtbDwYcM0uS+dF1F5gg1v44
akbIznFvGh/fwgsynSMpg5CFeECtOVYS+oTU6HUYSdD7jyl32E6M1MHMMr/uoAVN
L4Kl7HikOQb2H2y9mdXoU91S3pFjbeCc7Nx6qOaW1SXr3fIjPFt4O8QJBTX7AlwD
KuXTpTxw
=P54O
-----END PGP SIGNATURE-----

なお、「-----BEGIN PGP SIGNED MESSAGE-----」から「PGP SIGNATURE の最後の行」までの間は、改行含めて一切変更してはいけない。変更すると、検証時に「不正な署名」と返ってくる。

公開鍵を保存したときのように、上枠内の文字列を、適当なファイル名で保存し、

$ gpg --verify <検証したいファイル>

とすれば検証が終了。

Gpg_iso_54_dr

問題が無ければ「正しい署名」と出ます。

なお、[不明の]や「この鍵は信用できる署名で証明されていません」「この署名が所有者のものかどうかの検証手段がありません。」が気になる人は、分離署名のところで話をした「公開鍵の信用度を変更する」か「公開鍵へのローカルな署名」で対応してください。(終)

 

※1 ある公開鍵で検証し、「正しい署名」と結果が出たとしても、それだけでは「署名者正しいかどうか」までは判断できない。(その鍵ペアで署名された、ということは保証される)。というのも「署名者の名前を偽って作成されたGPG鍵である可能性」も捨てられないからである。だからこそ「相手から公開鍵を直接もらう」とか「認証局」とか「信頼の網」などの仕組みを使って、「署名者が正しいかどうかを判断」するわけである。

 

※2 インポートした公開鍵を削除したい場合は、

$ gpg --delete-keys <公開鍵のID>

とすると良いです。

 

※3 その公開鍵は正しいのか問題(GPGの枠組みから外れた内容も含まれます。)

例えば本ページにて公開している『個人的健忘録の公開鍵』、サイトが不正アクセス等にてすでに書き換えられている可能性はゼロではありません。では公開鍵が正しいかどうかを確認するにはどうしたら良いのか?

解決策の1つは、直接相手に会って確認をする方法です。本人に直接会うわけですから、その公開鍵については真正性は確認できます。

Gpg_gai_02

ちなみに、そのAさんによって署名された他の公開鍵の信用度もある程度図れます。(その人をどれほど信用するかにもよりますが。)

Gpg_gai_04

これを発展させると、いわゆる「信頼の綱・信用の輪」に繋がります。(原理上、次に述べる「認証局」は不要。)しかしこの方法は基本、個人対個人ベースの方法であり、多くの一般人にとって普段使いには利用しにくいところがあります。

ということで、他の解決策として認証局(公開鍵証明書認証局)を利用する方法があります。公開鍵を公開している者(個人・組織・団体・企業等)が、自分の公開鍵(公開鍵証明書)を認証局に(認証局の秘密鍵で)署名してもらうことにより、公開鍵の真正性を担保します。

Gpg_gai_05

ちなみに勘が鋭い人は「じゃあ、認証局の公開鍵はどうやって真正性を確認するんだよ」って話になるんですが、有名所の認証局の公開鍵(証明書)はすでにあなたのPCに入っているハズ♪

Gpg_gai_06

SSL証明書の例ですが、こんな感じで世の中回ってるんですね。

まぁ、認証局を通しているから安心というわけでもないんですが。

SSL証明書は安全なのか?~Comodo/DigiNotar事件を振り返って

不正が発覚した中国の認証局、Microsoftも無効化を通告

なので、直接会っての確認が最強なわけです。(笑)

ちなみに、当方の公開鍵はどうなっているかというと、誰に署名されているわけでもないし、認証局に出しているわけでもありません。というか、そんな私的な公開鍵なぞ世の中たくさんありますし。なので、当方の公開鍵の真正性は確認しようがありません。

まぁ、たぶん本物だと思いますよ♪

 

 

 

 

番外編「GnuPG(GPG)で署名ファイルを作る【CUI編】」に【2:PGP MESSAGE】の検証方法を簡単に載せてあります。

興味のある方は参考にどうぞ。

 

 

 

【参考サイト】
 ・GNU Privacy Guard講座:GnuPGの使い方  
 ・はじめてのGPG 〜第2回 主鍵と副鍵〜  
 ・gpg (GNU Privacy Guard)の使い方 
 ・電子署名による認証(身分証明)  
 ・githubで使うGPG鍵の作成 
 ・情報セキュリティ大学院大学 有田正剛氏:電子署名入門 
 ・【図解】初心者も分かる”公開鍵/秘密鍵”の仕組み~公開鍵暗号方式の身近で具体的な利用例やメリット〜 
 ・OpenPGP パケットを可視化する gpgpdump  
 ・Windows 環境で作った GnuPG の鍵束を Ubuntu に移行する 
 ・OpenPGP 鍵管理に関する考察 
 ・DebianWiki:Subkeys 

 WindowsやMacによる検証方法については、国税庁にマニュアルが置いてあったりします。
 ・OpenPGPを使用した署名検証方法の解説  
 内容的には本ページとは変わりませんが、説明としてはかなり大雑把な気もしないでもない。
 まぁ、技術的な説明を目的としたものでは無いですからね。

 Mutt Japanese Edition Linux Japan 誌掲載記事 の第4回「PGP」の記事は、PGPの概要やGnuPGのことが図入りでわかりやすく書かれているかと思います。
 ・Mutt Japanese Edition Linux Japan 誌掲載記事 
 
 ・デジタル証明書の仕組み 
 ・認証局と電子証明書 
 
 ・Debian 管理者ハンドブック:6.5. パッケージ信頼性の確認 
 ・ubuntu manuals:apt-key 
 ・Kernel Maintainer PGP guide  

 

〔セキュリティ関連ページ〕

 <SSH関連>
 ・SSH でリモートアクセス! in 2018(その1)【パスワード認証】 
 ・SSH でリモートアクセス! in 2018(その2)【公開鍵認証】 
 ・セカンドPCに秘密鍵を突っ込んでSSH接続(公開鍵認証) 
 ・パスワード認証禁止 & 公開鍵認証でsshfsを使う  
 ・virt-manager でリモートアクセス(SSH-一般ユーザ接続:公開鍵認証)  

 <暗号化関連>
 ・Linuxでファイル暗号化(1)〜 USBメモリをgocryptfsで守る♪  
 ・Linuxでファイル暗号化(2)〜 USBメモリをgocryptfsで守る♪  SiriKali編  
 ・Linuxでファイル暗号化(3)〜 Dropboxをgocryptfsで守る♪  

 <その他>
 ・そのファイルは本物か?〔MD5 / SHA〕〜ごまかせないハッシュ値〜  

 ・Debian GNU/Linux インストールディスクの作成(2018年度) 

 

 

 

 

 

« iOS 13 とバグの話 | トップページ | GnuPG(GPG)で署名ファイルを作る【CUI編】 »

セキュリティ」カテゴリの記事

Debian GNU/Linux」カテゴリの記事

コメント

この記事へのコメントは終了しました。

2021年5月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
無料ブログはココログ