PKG_SIGN(1)

名称
pkg_sign, pkg_check - package の署名を扱う

書式
pkg_sign [-sc] [-t type] [-u id] [-k key] [file ...] pkg_check [-sc] [-u id] [-k cert] [file ...]

解説
pkg_sign は暗号化された署名を gzip ファイル file に埋めこみます。 type には pgp (デフォルト), sha1, x509 が指定できます。 type を pgp にすると、 pgp 秘密鍵の利用を可能にするための パスフレーズ入力を促すプロンプトが表示されます。 パスフレーズを設定していなくても表示されます (これはいずれにせよ良くない状況ですが)。 type が sha1 の場合は、 id を指定する必要があります。これは package (訳注: FreeBSD の package system におけるパッケージを指す場合にこう表記します) の名前として記録され、SHA1 チェックサムとして表示されます。

pkg_check は暗号化された署名をチェックします。 現在は type を無視し、一番上 (topmost) の署名だけをチェックします。 sha1 に対しては、 pkg_check はファイルのチェックサムを取り、 結果が /var/db/pkg/SHA1 に記録されているチェックサムのリストにマッチするかどうか確認します。

オプション -s および -c は「package への署名」モードおよび「署名チェック」モードを強制します。

pgp では、 package への署名や署名チェックに用いる id を -u で指定できます。

x509 では、 署名キーまたは検証する証明書 (certificate) を -k オプションで指定できます。 指定しないと、package は以下で記述している デフォルトのキーで署名 (デフォルトの証明書で検証) されます。

file がダッシュひとつ (‘-’) だったり指定されなかった場合は、 pkg_sign は標準入力から読み込みます。

package への署名では gzip 形式の特徴を利用しています。 これは、gzip のヘッダには EXTRA_FIELD というフラグを設定でき、余分のデータを gzip ヘッダと圧縮ファイルの間に保存できる、というものです。 OpenBSD の署名機構では、 ‘SIGPGP’ + length や ‘CKSHA1’ + length のような 8 バイトのマーカを署名に用いています (これらのマーカは伝統的に 8 バイト長となっています)。

診断
pkg_sign および pkg_check は、 file のいずれかになにか問題があると、0 より大きい終了コードを返します。 pkg_check の場合、これは通常 package が署名されていない、 あるいは署名が捏造されていることを意味します。

File %s is already signed その gzip ファイルには、既に署名が埋めこまれています。 pkg_sign は今のところ複数の署名を扱いません。

File %s is not a signed gzip file この package には署名がありません。

File %s is not a gzip file gzip ヘッダが見つかりませんでした。

File %s contains an unknown extension gzip ファイルの拡張領域が、別の何らかの用途に既に使われていました。

File %s uses old signatures, no longer supported この gzip ファイルは、非常に古い版の (かなり遅くなる) package 署名を用いています。

バグ
pgp(1) はあまり設計の良くないプログラムで、 インタフェースを取るのが難しいです。 例えば pgp が提供しているといっている 「分離署名機能 (separate signing scheme)」 は不便極まりないもので、パイプを通しての利用ができません。 したがって pgp_sign ではこれをなんとかするために、 pgp 署名の長さを知っていることにして、 pgp を「シームレス」署名モードで起動し、 ファイル本体は圧縮しないで署名のみを取出しています。

チェック動作ではあまり複雑なことはしていません。 pgp に入力するファイルをその場で再ビルドしています。

pgp およびチェックサムファイルへのパスは不正利用を妨げるために ハードコードされています。そのため柔軟性は損なわれています。

関連ファイル
file.sign
    pkg_sign が file からビルドする一時ファイル
/usr/local/bin/pgp
    pgp(1) のデフォルトのパス
/var/db/pkgs/SHA1
    記録済みのチェックサム
/etc/ssl/pkg.key
    デフォルトの package への署名キー
/etc/ssl/pkg.crt
    デフォルトの package 検証用証明書

関連項目
gzip(1), pgp(1), pkg_add(1), sha1(1)

作者
-nosplit pkg_sign は Marc Espie が OpenBSD プロジェクトのために作成しました。 X.509 署名と FreeBSD サポートは Wes Peters <wes@softweyr.com> が追加しました。