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の署名が正常に検証されたということになる。