以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

minisigって何だろうなぁと思って調べて試してみた

f:id:abyssluke:20201218190300p:plain:w200:leftGitHubにおいて、たまに.minisigという拡張子を持つファイルを見かけることがある。調べてみると、Minisignというソフトで作成された電子署名だった。OpenBSDのsignifyと署名方式で互換性がある。minisignでGoogle検索したところ日本語の情報がなかったので、とりあえず鍵ペアを作って適当に署名・検証してみた。

ビルド&インストール&鍵生成

Ubuntu 20.04環境で行っている
適当にclone&ビルドして、

$ git clone https://github.com/jedisct1/minisign
$ cd minisign
$ mkdir build
$ cd build
$ sudo apt update
$ sudo apt install cmake libsodium-dev
$ cmake ..
$ make
$ sudo make install

自分の鍵を作る。

$ minisign -G

秘密鍵用のパスワードの設定を求められるので設定する。
しばらくすると、カレントディレクトリにminisign.pubと、ホームディレクトリの.minisignディレクトリ内にminisign.keyができる。minisign.pubが公開鍵、minisign.keyが秘密鍵となる。

筆者の公開鍵ファイルの中身は以下のようになっている。2行目が公開鍵となる。

untrusted comment: minisign public key 145B3CFD24161FC
RWT8YUHSz7NFAaNQjmC9gCcpAYyj0S61uVPMPjLMLn+ORlgd/rvdUcMR

この公開鍵はrita.xyzにもアップロードしてある。

署名

ファイルに署名するには、minisign -Sm (ファイル名) -t '(Trusted Comment)' -c '(Untrusted Comment)'とする。秘密鍵のパスワードを求められるので入力することで署名が完了する。

$ minisign -Sm pubkey.txt -t '@abyssluke GnuPG Public Key; Fingerprint is 0x2A25C774BD006DD3'

-tオプションにはバージョンやタイムスタンプなど、改変されたくないコメント(これも秘密鍵によって署名される)、-cオプションには改変されても構わないコメント(署名対象とならない)を入力する(コメントは省略可)。

今回署名に使ったファイルはhttps://rita.xyz/pubkey.txtで、署名ファイルはhttps://rita.xyz/pubkey.txt.minisigにある。

容量が大きいファイルに対して署名する場合は-Hオプションを併用するとよい。

$ minisign -SHm bigfile.iso -c 'Pre-hash option applied'

検証

前述のファイルの署名を検証するには、元のファイルと.minisigファイルを用意した上で、minisign -Vm (ファイル名) -P (公開鍵の文字列)とする。
公開鍵のファイルがある場合は-Pの代わりに-pオプションを使用してファイルを指定する。

筆者のMinisignの公開鍵は公開鍵ファイルの2行目にある

RWT8YUHSz7NFAaNQjmC9gCcpAYyj0S61uVPMPjLMLn+ORlgd/rvdUcMR

となるので、-Pオプションにこの公開鍵を指定する。

$ minisign -Vm pubkey.txt -P RWT8YUHSz7NFAaNQjmC9gCcpAYyj0S61uVPMPjLMLn+ORlgd/rvdUcMR
Signature and comment signature verified
Trusted comment: @abyssluke GnuPG Public Key; Fingerprint is 0x2A25C774BD006DD3

この場合、ファイルとTrusted Commentの署名が正常に検証されたということになる。

まとめみたいなコメント

  • GnuPGと異なり公開鍵が1行に収まるのでTwitterなどで公開鍵を共有しやすい。
  • ソフト本体も軽量である。
  • minisignはGnuPGよりも手軽に使えそうなファイルへの署名に特化したツールと感じた。