GitHubにおいて、たまに.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よりも手軽に使えそうなファイルへの署名に特化したツールと感じた。