GnuPG(GPG)で署名ファイルを作る【CUI編】
『それは誰が保証するか?〔GnuPG(GPG)/電子署名〕〜ごまかせない署名〜』の番外編です。
先のページで3パターンの署名を例として上げましたが、それぞれの署名の仕方についてのメモです。なお、作業環境は毎度のことながらDebian10です。
ちなみに、各署名を行うには自分のGPG鍵ペアを所有している必要がありますので、無い場合は自分で作成を。
GPG鍵ペアの作成は、
$ gpg --full-gen-key
(または、簡易の「$ gpg --gen-key」、さらに細かく指定する場合は「$ gpg --full-gen-key --expert」)
で可能です。
【1:クリア署名の作成】
署名したい文書(テキストファイル)を用意し、端末で以下を入力すれば終了。
$ gpg --clearsign <署名したい文書ファイル>
このとき、GPG鍵を作成したときに設定した「パスフレーズ」を聞かれるかと思いますので、正しいパスフレーズを入力すれば「○○.asc」な感じでクリア署名のファイルができていると思います。
なお、ファイル名を指定してクリア署名ファイルを作成したい場合は、
$ gpg --output <クリア署名ファイル名> --clearsign <署名したい文書ファイル>
とします。
検証は以下。
$ gpg --verify <クリア署名ファイル>
【3:分離署名の作成】
署名したい文書(テキストファイル)を用意し、端末で以下を入力。
$ gpg --detach-sign <署名したいファイル名>
とすると「○○.sig」な感じで分離署名ファイルができます。
ただし、これでできるファイルはバイナリファイルなのでエディタで読める形式ではありません。
テキスト形式で出力する場合は、
$ gpg --detach-sign --armor <署名したいファイル名>
とすば「○○.asc」な感じで分離署名ファイルができているかと思います。
なお、分離署名ファイルの名前を指定して出力したい場合は、
$ gpg --output <分離署名ファイル名> --detach-sign <署名したいファイル名>
$ gpg --output <分離署名ファイル名> --detach-sign --armor <署名したいファイル名>
などとします。
検証は以下。
$ gpg --verify <分離署名ファイル> <署名対象のファイル>
【2:PGP MESSAGE】
これに関しては、
・「電子署名が付加」されただけのPGP MESSAGE
・「ファイルを暗号化」しただけのPGP MESSAGE
・「電子署名 + 暗号化」がファイルに施されたPGP MESSAGE
とパターンがいろいろあるので、とりあえず1つずつ。
【① 電子署名の付加のみ】
$ gpg --sign <署名を付加したいファイル>
とすると、「○○.gpg」な感じで、電子署名が付加されたファイルができていると思います。
ただし、これでできるファイルはバイナリ形式となるので、テキスト形式で作成したい場合は、
$ gpg --sign --armor <署名を付加したいファイル>
とすれば、「○○.asc」な感じでファイルができていると思います。
なお、ファイル名を指定して作成する場合は「--output または -o」オプションを付けてあげれば良いです。
検証は「--verify」でやればできるんですが、元の文書も同時に読みたいケースも多いと思います。
$ gpg --decrypt <電子署名が付加されたファイル>
とすれば、文書の表示 + 検証 を同時に行ってくれます。
【② 暗号化のみ】
これは電子署名が関わってないですがおまけです。
暗号化をする際は、「暗号化ファイルを受け取る人の公開鍵」が必要です。
公開鍵をインポートしていなければ、先にインポートしておく必要があります。
公開鍵をファイルとして貰っている場合は、
$ gpg --import <公開鍵ファイル>公開鍵サーバから直接ダウンロードしてインポートする場合は、
$ gpg --keyserver <公開鍵サーバ> --recv-keys <公開鍵のID>ネット上に公開されている公開鍵ファイルを直接指定してダウンロード&インポートする場合は、
$ gpg --fetch-keys <URIs 例:https://***/*****/○○.key など>とすれば良い。
(「Aさんの公開鍵で暗号化」したファイルを読むためには「Aさんの秘密鍵」が必要、つまりAさんしか読めないということになります。ちなみに署名の場合は逆で、「Aさんの秘密鍵で署名」したファイルの検証は「Aさんの公開鍵」を使えば可能で、この署名ファイルを作ることができるのはAさんのみ。)
暗号化については、
$ gpg --encrypt --recipient <相手先の公開鍵のID> <暗号化したいファイル>
(--recipient は -r でも良い)
とすれば、「○○.gpg」というファイルができていると思います。
なお、これでできるファイルはバイナリ形式なので、テキスト形式にする場合は「--armor または -a」オプションを、ファイル名を指定したい場合は「--output または -o」オプションを付ければ良いです。
復号については、
$ gpg --verify <暗号化されたファイル>
とすれば良いです。なお、このファイルを開けるのは「暗号化に使用した公開鍵のペアの秘密鍵を持つ所有者のみ」で、復号の際に自分の秘密鍵のパスフレーズの入力が必要になります。
※1 暗号化の際、複数の公開鍵で暗号化することも可能です。
$ gpg --encrypt --recipient <公開鍵1のID> --recipient <公開鍵2のID> <暗号化したいファイル>
上記の場合は2つの公開鍵で暗号化してますが、この場合ファイルを開けることができるのは「秘密鍵1」か「秘密鍵2」を持つ人のみです。(つまり、2人の人物がこのファイルを開ける。)
※2 自分の公開鍵で暗号化も可能です。
その場合はこのファイルを開けるのは自分のみになります。
(ちょっとしたファイルの暗号化に利用はできると思いますが、個人利用で署名不要の単純な大量のファイルの暗号化には「gocryptfs」などを利用するが良いのでは無いでしょうか。gocryptfsについては『Linuxでファイル暗号化(1)〜 USBメモリをgocryptfsで守る♪』などを参考にしてください。)
【③ 暗号化+電子署名】
②と同様「暗号化ファイルを受け取る人の公開鍵」が必要です。
暗号化+署名については、
$ gpg --encrypt --sign --recipient <相手先の公開鍵のID> <暗号化&署名したいファイル>
とすれば、「○○.gpg」というファイルができていると思います。
なお、これでできるファイルはやはりバイナリ形式。
テキスト形式にする場合は「--armor または -a」オプションを、
ファイル名を指定したい場合は「--output または -o」オプションを付ければ良いです。
復号については、
$ gpg --verify <暗号化&署名されたファイル>
とすれば良いです。なお、当然ながらこのファイルを開けるのは「暗号化に使用した公開鍵のペアの秘密鍵を持つ所有者のみ」です。また、署名者の公開鍵をインポートしていないと、「署名の検証」ができません。(終)
【おまけ】
※1
相手に自分の公開鍵を渡す場合は、自分の公開鍵をエックスポートする必要があります。
公開鍵のエックスポートは、
$ gpg --output <指定する公開鍵名> --armor --export <エックスポートしたい公開鍵のID>
でいけます。
※2
複数ファイルをまとめて署名&暗号化するには、「gpgtar」コマンドが利用できます。
「しっぽのさきっちょ」さんの『複数ファイルをまとめて署名・暗号化する』が詳しいです。
※3
apt が パッケージを認証するのに使用するキーの一覧を表示するには、
$ apt-key list
とすると良い。
※4
GUIでの鍵の管理や署名等の話題については「GPG鍵管理ソフト〜KGpg 【GUI編】」をどうぞ。
〔関連ページ〕
<暗号化関連>
・Linuxでファイル暗号化(1)〜 USBメモリをgocryptfsで守る♪
・Linuxでファイル暗号化(2)〜 USBメモリをgocryptfsで守る♪ SiriKali編
・Linuxでファイル暗号化(3)〜 Dropboxをgocryptfsで守る♪
<その他>
・そのファイルは本物か?〔MD5 / SHA〕〜ごまかせないハッシュ値〜
【セキュリティ関連・外部サイト】
・量子コンピューターが変える暗号の常識、経営視点から学ぶ「鍵管理」
・SSL通信も量子コンピュータの前では無意味に? 今から備えるべき「耐量子コンピュータ暗号」とは
「今盗んだ暗号化データが10年後の「金山」になる可能性も」ってのは怖い話ですね。
・格子暗号の実用化に向けて
【その他】
暗号化技術関係は、結城 浩先生の「暗号技術入門 第3版」が非常に勉強になります。暗号、共通鍵、公開鍵、認証、署名、証明書等、入門者にとってはまさに素晴らしい著書だと思います。
« それは誰が保証するか?〔GnuPG(GPG)/電子署名〕〜ごまかせない署名〜 | トップページ | GPG鍵管理ソフト〜KGpg 【GUI編】 »
「セキュリティ」カテゴリの記事
- こういった話に、どれだけ危機感を持って動いているのだろうか(2021.04.04)
- Lineのサーバの話って…(2021.04.03)
- セキュリティ情報:「Ripple20」TCP/IPライブラリ・ゼロデイ脆弱性(2020.06.23)
- セキュリティ:スマートスピーカー・ハッキング 〜Light Commands〜(2020.06.23)
- テレワークが広がる現況での危険な話〜マルウェア45%(2020.06.02)
「ファイル暗号化」カテゴリの記事
- OSS系暗号化ソフトの比較をしてみた(USBメモリ/Home/cloud等での用途向け)(2020.03.21)
- Linuxでファイル暗号化(4)〜 CryFS で守る♪(2020.03.21)
- GnuPG(GPG)で署名ファイルを作る【CUI編】(2020.03.14)
- Linuxでファイル暗号化(3)〜 Dropboxをgocryptfsで守る♪(2019.08.28)
- Linuxでファイル暗号化(2)〜 USBメモリをgocryptfsで守る♪ SiriKali編(2019.08.23)