OpenPGP-card-tools
Openpgp-card-tools は、OpenPGP のスマートカードを (ccid を使って) 操作するためのコマンドラインツール opgpcard(1) を提供するソフトウェアパッケージです。
目次
インストール
openpgp-card-tools パッケージをインストールしてください。
設定
opgpcard(1) ツールは pcsclite と ccid に依存しています。pcscd.socket
を有効化し、かつ開始しておく必要があります。
OpenPGP カードと対話する
opgpcard(1) ツールには、OpenPGP カードに関連する機能を提供するいくつかのサブコマンドがあります:
- opgpcard-list(1): 接続されているカードを一覧表示する
- opgpcard-status(1): カード内のデータに関する情報を表示する
- opgpcard-info(1): カードに関する技術的な詳細を表示する
- opgpcard-ssh(1): カードの認証鍵を SSH 公開鍵として表示する
- opgpcard-admin(1): カード内の、管理者 PIN が必要なデータを管理する
- opgpcard-pin(1): カードの PIN を管理する
- opgpcard-decrypt(1): カードを使ってデータを復号する
- opgpcard-sign(1): カードを使ってデータを署名する
- opgpcard-attestation(1): 鍵がカード上で生成されたことを検証する (Yubikey 限定)
- opgpcard-system(1): 低レベルなカードの機能を使用する
ヒントとテクニック
機械可読出力
opgpcard(1) ツールは、--output-format
オプションで全てのサブコマンドにおいて機械可読形式を提供しています。
接続されているカードをJSON 形式で出力するには:
$ opgpcard --output-format=json list
OpenPGP の秘密鍵をインポートする
opgpcard-admin-import(1) を使えば、OpenPGP 秘密鍵を直接インポートすることができます。
フィンガープリントが 0123456789012345678901234567890123456789
である秘密鍵を、識別子が 0123:01234567
であるカードにインポートするには:
$ opgpcard admin --card 0123:01234567 import <(gpg --export-secret-key 0123456789012345678901234567890123456789)
SSH 公開鍵をエクスポートする
opgpcard-ssh(1) を使えば、カードの認証スロットの SSH 公開鍵を (他のデータと共に) エクスポートすることができます。
以下の例ではダミーのデータが使われています:
$ opgpcard ssh OpenPGP card 0123:01234567 Authentication key fingerprint: D3C4B18828E34FE079273C27DFEA102BC0BF7122 SSH public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN3SwnYBGotQMbGxG6VRWc8vj6uq24Q2tUGvjkU4BGCd opgpcard:0123:01234567
データを署名する
opgpcard-sign(1) を使えば、カード上の署名鍵を使ってデータを署名することができます。
以下のコマンドは、カードを使って hello.txt
を署名しています:
$ echo "hello world" > hello.txt $ opgpcard sign --card 0123:01234567 --detached hello.txt Enter User PIN: -----BEGIN PGP MESSAGE----- wr0EABYKAG8FgmVcxgQJEHwxCjP5RdJLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ8BSR6PrXSIRnrQl6r6HEetWVjCVXQtR1Z3PzD9EfbWY FiEEuFXqMwYb6iFIyl2ufDEKM/lF0ksAAOY2AQC7+Tuh8Gal+kCCfVChD0VV+GUA yd+leLeylIySXV7qVwD9H2x5QBrgyF/vODNp1tdorTvPwieV/Bop9FCkHYbHJg8= =cOQ/ -----END PGP MESSAGE-----
暗号化されたデータを復号する
opgpcard-decrypt(1) を使えば、カードの暗号化スロットを使ってデータを復号することができます。
以下の例では、メッセージは sq-encrypt(1) を使って OpenPGP 公開鍵 alice.pub
で暗号化されています。
$ echo "hey alice" | sq encrypt --recipient-file alice.pub > message.pgp $ opgpcard decrypt --card 0123:01234567 message.pgp Enter User PIN: hey alice
Nitrokey Start のアイデンティティを切り替える
Nitrokey Start では、1つのハードウェアトークンで3つの別々のアイデンティティを使用することができます。それぞれのアイデンティティには、別々の署名、暗号化、認証スロットがあります。事実上、別々のカード識別子を持つ別々の OpenPGP スマートカードが3つ存在することと同じです。
opgpcard-system-set-identity(1) を使えば、3つのアイデンティティ間で切り替えることができます。
2つ目のアイデンティティに切り替えるには:
$ opgpcard system set-identity --card FFFE:01234567 1
1つ目のアイデンティティに戻すには:
$ opgpcard system set-identity --card FF01:01234567 0
トラブルシューティング
スマートカードのセットアップをデバッグする
opgpcard-list(1) を使えば、接続されているカードのうち、pcscd(8) からアクセスできるものを一覧表示できます。接続されているカードが表示されない場合、他のプロセス (scdaemon など) によってブロックされている可能性があります。scdaemon(1) は以下のコマンドで終了できます:
$ gpgconf --kill scdaemon