Gマイナー志向

とくに意味はありません

GnukでOpenPGP card互換のUSBトークンを作ってみた

2010/10/16に開催された楽天テクノロジーカンファレンス2010のLTでg新部さんの発表「Gnuk -- a soother for GnuPG」に触発されてgnukを試してみた。

Gnukで何ができるか

gnukをSTM32 CPU上で動く組み込み機器にインストールすると、OpenPGP card互換のUSBトークンとして利用できます。
OpenPGP cardにはGnuPG秘密鍵を格納できるため、GnuPG秘密鍵PCのストレージ上に保存せずに済むようになります。
万が一PCがウイルスやワーム等に感染しても、GnuPG秘密鍵を盗まれることは(基本的に)ありません。ヤッター!
また、gpg-agentとgpg2sshkeyを利用すればGnuPG鍵をssh用の鍵として利用することも可能です*1

gnukの特徴
  • OpenPGP card互換(OpenPGP card protocol version 2)のUSBトークンを作成できる
    • OpenPGP cardはISO 7816-4,-8で規定されているスマートカード実装にGnuPGの機能を追加したもの。OpenPGP cardを使うことで、暗号化、復号化、デジタル署名、署名検証、認証などができる。
  • gpg-agentと組み合わせることでOpenPGP cardを用いてSSH認証に使うこともできる。
  • OpenPGP cardに移動した秘密鍵は取り出すことはできない(はず)
    • 嘘かも

でもお高いんでしょう?

全然そんなことはありません。

  • 組み込み用の評価ボードで構築できる
  • 剥き出しの基板でよければ1,974円(STBee Mini)
  • ケース付きの評価用プロトタイプで6,100円(STM32 Primer2)
  • 月刊誌デザインウェーブマガジン(CQ出版社)2008年5月号の付録CQ_STARMでも可能

実際につくってみた

ここでは最安値で作れるSTBee Miniの例を紹介。


用意するもの

注意事項

  • 必ず事前に$HOME/.gnupg/のバックアップを取りましょう。
  • OpenPGP cardに移動させた秘密鍵はOpenPGP cardから取り出せません。くれぐれも注意してください。
  • gnukはまだ不安定な部分がありますので実運用中のGnuPG鍵を格納するのは避けましょう。

必要なアプリケーションのインストール

gnupg, libccid, python-usbがあればok。

Debian/Ubuntuの場合
$ sudo apt-get install gnupg gnupg-agent libccid python-usb

libccidは1.3.11以降を使うこと。

Gentoo Linuxの場合

USEフラグはsmartcardとusbを有効に。

$ sudo euse -E smartcard usb
$ sudo emerge gnupg ccid

設定

必要最低限の設定を紹介。

GnuPGの設定

GnuPG2系を利用する場合、$HOME/.gnupg/scdaemon.confにdisable-ccidの設定が必要。

$ echo disable-ccid >> ~/.gnupg/scdaemon.conf
ccidの設定

libccid_Info.plistにgnukで作成されるFSIJ USB Tokenを登録する。

Debian/Ubuntuは/etc/libccid_Info.plist
Gentooは/usr/lib/readers/usb/ifd-ccid.bundle/Contents/Info.plist

$ sudo vi /etc/libccid_Info.plist
--- a/libccid_Info.plist     2009-07-29 06:50:20.000000000 +0900
+++ b/libccid_Info.plist     2010-09-05 09:09:49.000000000 +0900
@@ -104,6 +104,7 @@

        <key>ifdVendorID</key>
        <array>
+               <string>0x234B</string>
                <string>0x08E6</string>
                <string>0x08E6</string>
                <string>0x08E6</string>
@@ -237,6 +238,7 @@

        <key>ifdProductID</key>
        <array>
+               <string>0x0000</string>
                <string>0x2202</string>
                <string>0x3437</string>
                <string>0x3438</string>
@@ -370,6 +372,7 @@

        <key>ifdFriendlyName</key>
        <array>
+               <string>FSIJ USB Token</string>
                <string>Gemplus Gem e-Seal Pro</string>
                <string>Gemplus GemPC Twin</string>
                <string>Gemplus GemPC Key</string>
pcscdの起動
$ sudo /etc/init.d/pcscd start

ARMのクロスコンパイル環境を構築する

コマンドひとつでインストールできる。
http://github.com/esden/summon-arm-toolchain/
からsummon-arm-toolchainをダウンロード。

$ wget http://github.com/esden/summon-arm-toolchain/raw/master/summon-arm-toolchain
$ chmod +x summon-arm-toolchain
$ ./summon-arm-toolchain ( $HOME/sat に構築される。場所は変更可能 )

gnukをコンパイル

http://www.fsij.org/gnuk/ から最新版をダウンロード。2010/11/10時点の最新版は0.4

$ curl http://www.gniibe.org/oitoite/gnuk/gnuk-0.4.tar.gz | tar zxf - (もしくは git clone http://www.gniibe.org/git/gnuk.git/)
$ cd gnuk-0.4/src
$ ./configure --target=STBEE_MINI    (STBee Miniの場合)
Configured for target: STBEE_MINI
Using random serial number for card AID
Configured for DFU
$ PATH=$HOME/sat/bin:$PATH make
...

STBee Miniを接続する

LinuxとSTBee MiniをUSBで接続する。LEDが点滅することを確認。

STBee MiniをDFUモードで起動

PCのUSBポートに接続後、USERスイッチを押しながらRESETスイッチを押し、RESETスイッチから指を離し、最後にUSERスイッチを離す。
LEDの点滅が遅くなったらDFUモード。もしくはlsusbで0483:df11が見えればDFUモードになっている。

$ sudo lsusb -d 0483:
Bus 005 Device 038: ID 0483:df11 SGS Thomson Microelectronics
ROMを焼く

STBee Miniの場合、tool/dfuse.pyで。

$ cd ../tool
$ sudo ./dfuse.py ../src/gnuk.hex
...

焼けたらリセットボタンを押すか、USBケーブルを抜き挿しを行う。
LEDが再び点滅しだしたら、lsusbで確認。

$ lsusb -v -d 234b:
Bus 005 Device 030: ID 234b:0000
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x234b
  idProduct          0x0000
  bcdDevice            2.00
  iManufacturer           1 Free Software Initiative of Japan
  iProduct                2 FSIJ USB Token
  iSerial                 3 20101023
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           86
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        11 Chip/SmartCard
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              0
      ChipCard Interface Descriptor:
        bLength                54
        bDescriptorType        33
        bcdCCID              1.00
        nMaxSlotIndex           0
        bVoltageSupport         1  5.0V
        dwProtocols             2  T=1
        dwDefaultClock       3580
        dwMaxiumumClock      3580
        bNumClockSupported      1
        dwDataRate           9600 bps
        dwMaxDataRate        9600 bps
        bNumDataRatesSupp.      1
        dwMaxIFSD             254
        dwSyncProtocols  00000000
        dwMechanical     00000000
        dwFeatures       00040040
          Auto parameter negotation made by CCID
          Short and extended APDU level exchange
        dwMaxCCIDMsgLen        64
        bClassGetResponse    echo
        bClassEnvelope       echo
        wlcdLayout           none
        bPINSupport             0
        bMaxCCIDBusySlots       1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0001
  Self Powered

格納するGPG鍵を用意する

格納できるGPG鍵はRSA-2048。RSA-2048の鍵がない場合は生成する。

$ gpg --gen-key
gpg (GnuPG) 2.0.16; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ご希望の鍵の種類を選択してください:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
選択は? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)
Key does not expire at all
これで正しいですか? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

本名: MATSUU Takuto
電子メール・アドレス: matsuu@matsuu.org
コメント: FSIJ USB Token v2
次のユーザーIDを選択しました:
    “MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>”

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
gpg: 鍵03706F96を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   2  署名:  17  信用: 0-, 0q, 0n, 0m, 0f, 2u
gpg: 深さ: 1  有効性:  17  署名:   0  信用: 17-, 0q, 0n, 0m, 0f, 0u
gpg: 次回の信用データベース検査は、2013-01-22です
pub   2048R/03706F96 2010-11-12
                 指紋 = 1C8E 7A09 AFDD 6158 AF5D  E090 E842 853D 0370 6F96
uid                  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>
sub   2048R/27B17D2A 2010-11-12

ついでに暗号化鍵も作成しておく。--expert --edit-keyで。

$ gpg --expert --edit-key 03706F96
gpg (GnuPG) 2.0.16; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

秘密鍵が使用できます。

pub  2048R/03706F96  作成: 2010-11-12  満了: 無期限      利用法: SC
                     信用: 絶対的     有効性: 絶対的
sub  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限      利用法: E
[ultimate] (1). MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> addkey
鍵は保護されています。

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>”
2048ビットRSA鍵, ID 03706F96作成日付は2010-11-12

ご希望の鍵の種類を選択してください:
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (5) Elgamal (暗号化のみ)
   (6) RSA (暗号化のみ)
   (7) DSA (set your own capabilities)
   (8) RSA (独自能力を設定)
選択は? 8

鍵RSAに可能な操作: Sign Encrypt Authenticate
今、可能な操作: Sign Encrypt

   (S) 署名力の反転
   (E) 暗号力の反転
   (A) 認証力の反転
   (Q) 完了

選択は? A

鍵RSAに可能な操作: Sign Encrypt Authenticate
今、可能な操作: Sign Encrypt Authenticate

   (S) 署名力の反転
   (E) 暗号力の反転
   (A) 認証力の反転
   (Q) 完了

選択は? S

鍵RSAに可能な操作: Sign Encrypt Authenticate
今、可能な操作: Encrypt Authenticate

   (S) 署名力の反転
   (E) 暗号力の反転
   (A) 認証力の反転
   (Q) 完了

選択は? E

鍵RSAに可能な操作: Sign Encrypt Authenticate
今、可能な操作: Authenticate

   (S) 署名力の反転
   (E) 暗号力の反転
   (A) 認証力の反転
   (Q) 完了

選択は? Q
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)
Key does not expire at all
これで正しいですか? (y/N) y
本当に作成しますか? (y/N) y
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。

pub  2048R/03706F96  作成: 2010-11-12  満了: 無期限      利用法: SC
                     信用: 絶対的     有効性: 絶対的
sub  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限      利用法: E
sub  2048R/5D001641  作成: 2010-11-12  満了: 無期限      利用法: A
[ultimate] (1). MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

できた。

GPG鍵をUSBトークンに格納する

まずgpg-agentを起動する。これがないとGnuPGからOpenPGP cardをうまく扱えない模様。

$ eval $(gpg-agent --daemon)

OpenPGP cardのステータスを取得する。

$ gpg --card-status
Application ID ...: D276000124010200FFFE1ABE1C420000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 1ABE1C42
Name of cardholder: [未設定]
Language prefs ...: [未設定]
Sex ..............: 無指定
URL of public key : [未設定]
Login data .......: [未設定]
Signature PIN ....: 強制
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

こんな感じで表示されれば成功。
個人情報を記入していく。

$ gpg --card-edit

Application ID ...: D276000124010200FFFE1ABE1C420000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 1ABE1C42
Name of cardholder: [未設定]
Language prefs ...: [未設定]
Sex ..............: 無指定
URL of public key : [未設定]
Login data .......: [未設定]
Signature PIN ....: 強制
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card> 

まずPINを変更する。OpenPGP cardのデフォルトのPINは123456。
OpenPGP cardのPINは数字である必要はない。英数字OK。

gpg/card> passwd
...
PIN changed.

管理権限に移行。

gpg/card> admin
管理コマンドが許可されています

性別を設定。性別を設定しようとするとAdmin PINを求められる。OpenPGP cardのデフォルトのAdmin PINは12345678。

gpg/card> sex
性別 ((M)男、(F)女、空白): M

名前、ログインアカウント、公開鍵のURL、言語の変更。公開鍵のURLに記載した場所に公開鍵を設置。

gpg/card> name
カード所有者の姓 (surname): MATSUU
カード所有者の名 (given name): Takuto

gpg/card> login
ログイン・データ (アカウント名): matsuu

gpg/card> url
公開鍵を探索するURL: http://matsuu.org/gnupg/matsuu_fsij_token.asc

gpg/card> lang
言語の選好: ja

Admin PINとリセットコードの変更。

gpg/card> passwd
gpg: OpenPGPカードno. D276000124010200FFFE1DC0A4AA0000を検出

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

選択は? 3
PIN changed.

ange PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

選択は? 4
Reset Code set.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

選択は? Q

gpg/card> quit

次にGPG鍵をUSBトークンにインポート。署名鍵、認証鍵、

$ gpg --edit-key 03706F96
gpg (GnuPG) 2.0.16; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

秘密鍵が使用できます。

pub  2048R/03706F96  作成: 2010-11-12  満了: 無期限      利用法: SC
                     信用: 絶対的     有効性: 絶対的
sub  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限      利用法: E
sub  2048R/5D001641  作成: 2010-11-12  満了: 無期限      利用法: A
[ultimate] (1). MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> toggle

sec  2048R/03706F96  作成: 2010-11-12  満了: 無期限
ssb  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
ssb  2048R/5D001641  作成: 2010-11-12  満了: 無期限
(1)  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> addcardkey
まず“toggle”コマンドを使ってください。

gpg> keytocard
この主鍵を本当に移動しますか? (y/N) y
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]

鍵の保管場所を選択してください:
   (1) 署名鍵
   (3) 認証鍵
選択は? 1

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>”
2048ビットRSA鍵, ID 03706F96作成日付は2010-11-12


sec  2048R/03706F96  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
ssb  2048R/5D001641  作成: 2010-11-12  満了: 無期限
(1)  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>


gpg> key 1

sec  2048R/03706F96  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb* 2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
ssb  2048R/5D001641  作成: 2010-11-12  満了: 無期限
(1)  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> keytocard
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]

鍵の保管場所を選択してください:
   (2) 暗号化鍵
選択は? 2

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>”
2048ビットRSA鍵, ID 27B17D2A作成日付は2010-11-12


sec  2048R/03706F96  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb* 2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb  2048R/5D001641  作成: 2010-11-12  満了: 無期限
(1)  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> key 1

sec  2048R/03706F96  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb  2048R/5D001641  作成: 2010-11-12  満了: 無期限
(1)  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> key 2

sec  2048R/03706F96  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb* 2048R/5D001641  作成: 2010-11-12  満了: 無期限
(1)  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> keytocard
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]

鍵の保管場所を選択してください:
   (3) 認証鍵
選択は? 3

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>”
2048ビットRSA鍵, ID 5D001641作成日付は2010-11-12


sec  2048R/03706F96  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
ssb* 2048R/5D001641  作成: 2010-11-12  満了: 無期限
                     カード番号: FFFE 1ABE1C42
(1)  MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>

gpg> quit
変更を保存しますか? (y/N) y

カード番号が入ったことを確認。これでGPG鍵はPC上には残ってません。

ここで一旦USBトークンをPCから抜き挿し、またはRESETボタンを押す。
反映されているか確認。

$ gpg --card-status
Application ID ...: D276000124010200FFFE1ABE1C420000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 1ABE1C42
Name of cardholder: Takuto MATSUU
Language prefs ...: ja
Sex ..............: 男
URL of public key : http://matsuu.org/gnupg/matsuu_fsij_token.asc
Login data .......: matsuu
Signature PIN ....: 強制
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: 1C8E 7A09 AFDD 6158 AF5D  E090 E842 853D 0370 6F96
      created ....: 2010-11-12 16:57:35
Encryption key....: 9639 9D7B 101C D532 FE78  0CC5 F5C7 E2BB 27B1 7D2A
      created ....: 2010-11-12 16:57:35
Authentication key: 3181 D1AD 0A7D 07E7 E246  305E C3BD 113A 5D00 1641
      created ....: 2010-11-12 17:03:41
General key info..: pub  2048R/03706F96 2010-11-12 MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>
sec>  2048R/03706F96  作成: 2010-11-12  満了: 無期限
                      カード番号: FFFE 1ABE1C42
ssb>  2048R/27B17D2A  作成: 2010-11-12  満了: 無期限
                      カード番号: FFFE 1ABE1C42
ssb>  2048R/5D001641  作成: 2010-11-12  満了: 無期限
                      カード番号: FFFE 1ABE1C42

このようにSignature key, Encryption key, Authentication keyが入っていればOK。

署名と検証を試す

$ echo hoge > hogefile
$ gpg -u 03706F96 --clearsign hogefile
||< 

署名されたファイルはhogefile.ascに出力される。確認および検証。

>||
$ cat hogefile.asc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

hoge
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)

iQEcBAEBAgAGBQJM3Xe2AAoJEOhChT0DcG+WFtwH/RKIXu/MP3EDxsHhxEQZVmKv
3Za7RMnnnkz5oViFJ2wudUgHbWpajA86MsnrZos2Cnp1ycwzWUtxjB+IZEr9AUI8
pWUuOgHZX683OOg7sbITuHPPldGYaNXbW5ryZSdizhlwWYEg7QbxahPteifSuBnq
u5pXHtAWUOPliLsQw4qvXl9vJubeth/AGQNMg3ciubRQVpqJWw68PLVTh0+tME+1
bbe1zHQEEcraAwWWzrWiCCz7oFeDdD+zQsSR9KQGF4v7v5JYNMqa3xOxFb5hO6Fk
SYYGGydJQS0X+Nv5yRGqfVZffn3aP4nhw3nTNCMvPSU3g5V3pTDnGs8TNQ6QWa8=
=elp8
-----END PGP SIGNATURE-----

$ gpg --verify hogefile.asc
gpg: 2010年11月13日 02時21分58秒 JSTにRSA鍵ID 03706F96で施された署名
gpg: “MATSUU Takuto (FSIJ USB Token v2) <matsuu@matsuu.org>”からの正しい署名

暗号化と復号化を試す(調査中)

$ echo hoge > hogefile
$ gpg -r 03706F96 -e hogefile
$ xxd hogefile.gpg
0000000: 8501 0c03 f5c7 e2bb 27b1 7d2a 0107 ff49  ........'.}*...I
0000010: a88f 083e 62ef d87a c30e 36f0 c679 746f  ...>b..z..6..yto
0000020: 4bbf f2ca 5ec0 f8c8 e092 bf45 5577 565b  K...^......EUwV[
0000030: 1763 94ae df4e 4874 61c4 f3ef 7439 3611  .c...NHta...t96.
0000040: bb6c 80a6 a05a dba9 52a5 2813 76a8 0f37  .l...Z..R.(.v..7
0000050: 5c2a bf15 cdc9 3048 8b7f a72e 9af8 5089  \*....0H......P.
0000060: 370c baf2 b28a 0d57 32bb 4460 eb55 0967  7......W2.D`.U.g
0000070: db73 fcdc 13f2 81b8 27bd dfd7 a101 e6f4  .s......'.......
0000080: 553d cbc9 ce57 f3ce d913 dfc4 20c2 27b8  U=...W...... .'.
0000090: 1a7e ea7c 26dd f8d8 8315 85ba b88f 52a3  .~.|&.........R.
00000a0: c04b 6e27 54e7 1f68 4780 8aed 2606 c962  .Kn'T..hG...&..b
00000b0: af69 ccd2 75e9 f419 16bb 6b82 62a2 18a6  .i..u.....k.b...
00000c0: c250 ad41 8daa 11d9 1f1c 7851 f3ba c8a6  .P.A......xQ....
00000d0: fc04 6d30 8913 16e1 12cb 641a dd36 2daf  ..m0......d..6-.
00000e0: 639d fa52 d8ce f3ba 9181 eb30 770c 9cb9  c..R.......0w...
00000f0: 07ea 938e 7fe9 fc46 6dc0 6bc1 7d44 078e  .......Fm.k.}D..
0000100: 9636 fa14 2986 0b35 6b1a 670b 5a1a 1ed2  .6..)..5k.g.Z...
0000110: 4601 35d3 2412 d288 ce45 a64f b833 2469  F.5.$....E.O.3$i
0000120: 4b30 2ab6 a928 f108 c8d3 2ea1 0666 b42d  K0*..(.......f.-
0000130: 03f7 8231 d871 76fb 5809 7685 f4c7 7a6f  ...1.qv.X.v...zo
0000140: ee90 460a f524 9732 5ad4 1af5 37e4 de7a  ..F..$.2Z...7..z
0000150: ee6d 1a93 5cd0 3f                        .m..\.?

$ gpg hogefile.gpg

でいけるはずなのだけど、PIN blockedになってしまった。調査中。

認証鍵を試す(調査中)

認証鍵を試すためには、$HOME/.gnupg/gpg.confと$HOME/.gnupg/gpg-agent.confに設定が必要。
設定後、gpg-agentを再起動する必要がある*2
gpgkey2sshでSSHの公開鍵相当を生成。gpgkey2sshで指定するのはsubkeyの認証鍵なので注意。

$ echo use-agent >> ~/.gnupg/gpg.conf
$ echo enable-ssh-support >> ~/.gnupg/gpg-agent.conf
$ pkill gpg-agent
$ eval $(gpg-agent --daemon)
$ gpgkey2ssh 5D001641
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCemHaHg2wxqb++P8vIrGI2fhId0Pl698RsHLG2adUiTdRDlvJ8JFYUYZWVJ4OkMkpieUu2K55GiU6EKsgQInLMMwGrpbWduFY1YlEKWubGlgcjauA2EcAZkkjy6BKdGrmdG8308kT2jduKIYg4Bj4rPycRmIIW5IgvogvSX6j9jKM0AFiFUKnkxqiL+kURwRyXo76GxOrUMuLJviY/5yZEw8QLOraPPDcb357nMNQ6ZfRbClzgkE9Hoiwb76T2AdgyvRb1zYXC7790BL0WI0BpOQaqjRK6drkE3TgsXnXQKHxcRc5T4rbcIqJa5BvNZQZWlH0P0N4EchH4olwNgpb9 COMMENT

これをssh接続先の$HOME/.ssh/authorized_keysに追加してやればsshできるはずなのだが・・・まだできてません。調査中です。

その他

STM32 Primer2であれば秋葉原の秋月で6,100円で購入できます。入り口すぐのレジの前あたりにあります。

*1:ここらへんの認識は間違ってるかもしれません

*2:kill -HUPだけでいい?