概要
- zig-minisignはMinisignをzigで実装したもので、今のところMinisign/signify方式で署名されたファイルの検証のみ行います
zig-minisignの一次資料
Minisignの一次資料
Minisign登場までの背景としてsignifyについて
- まず2013年にOpenBSDプロジェクトによってsignifyが作られました
- signifyが作られた目的は、OpenBSDプロジェクトがリリースした配布物に対してsignifyで署名し検証可能なものとするためでした
- signifyはファイルにEd25519による署名と検証を行うことで完全性を担保するツールです
- signifyは元々OpenBSDのためのツールで、他のプラットフォームではそのままではビルドできません。サードパーティ製のLinux移植版signifyはいくつか存在します
Minisignについて
- 2015年頃にFrank Denisはsignifyの移植版としてではなく、signifyと互換性のある別のツールとしてMinisignを作り、今(2024年7月)に至ります
- Minisgnは多様なプラットフォームで動作します。公式サイトで配布されているバイナリは、ほぼ全てのLinuxディストリビューション、macOS、そしてWindowsに対応しています
zig-minisignについて
- zig-minisignはFrank Denis自身によってzigで書かれたMinisignの派生物です
- Minisignと違い、zig-minisignは今のところminisig署名付きファイルの検証のみ可能です
zig-minisignのインストール
zig-minisignのインストールはとても簡単です
$ git clone https://github.com/jedisct1/zig-minisign.git
$ cd zig-minisign
$ zig build -Doptimize=ReleaseFast
$ cp -a zig-out/bin/minizign ~/bin/
minizignコマンドのオプション
zig-minisignのコマンドは"minizign"です
$ minizign -h
Usage:
-h, --help
Display this help and exit
-p, --publickey-path <PATH>
Public key path to a file
-P, --publickey <STRING>
Public key, as a BASE64-encoded string
-l, --legacy
Accept legacy signatures
-m, --input <PATH>
Input file
-q, --quiet
Quiet mode
-V, --verify
Verify
-C, --convert
Convert the given public key to SSH format
zig-minisignでファイルを検証する
ファイルの検証に必要なものは以下の3つです
- ファイル本体
- 署名ファイル(大抵は、そのファイル名の末尾に".minisig"というsuffixが付けられています)
- 公開鍵(多くの場合、信頼できるhttpsのwebサイトに掲載されることが多いようです)
試しにzigのソースパッケージを検証してみます
minisig署名付きのファイルなら他のケースでも同じように検証すれば良いです
- zigのダウンロードURL。ここに検証のために必要な公開鍵も載せてあります
$ wget https://ziglang.org/builds/zig-0.14.0-dev.296+bd7b2cc4b.tar.xz
$ wget https://ziglang.org/builds/zig-0.14.0-dev.296+bd7b2cc4b.tar.xz.minisig
$ ls zig-0.14.0-*
zig-0.14.0-dev.296+bd7b2cc4b.tar.xz
zig-0.14.0-dev.296+bd7b2cc4b.tar.xz.minisig
$ minizign -Vm zig-0.14.0-dev.296+bd7b2cc4b.tar.xz -P RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U
Signature and comment signature verified
Trusted comment: timestamp:1720987621 file:zig-0.14.0-dev.296+bd7b2cc4b.tar.xhashed
$ gdate --date='@1720987621' -Ins -u
2024-07-14T20:07:01,000000000+00:00