NFCタグで公開鍵を相手に伝えることができる方法が分かったので共有します。
必要なもの
手順
NFCで鍵の情報を伝えるには、openpgp4fpr
というURIスキームを使います。AndroidのGnu Privacy GuardやOpenKeyChainはこのスキームに対応しているので、NFCタグをかざしたときにアプリを起動し、鍵を読み込ませることができます。
鍵指紋を準備
まず公開鍵の鍵指紋(fingerprint)を控えます。鍵指紋とは鍵に固有な20byteのデータです。
$ gpg --fingerprint 0x73c08b1d pub rsa2048/73C08B1D 2012-04-06 Key fingerprint = C556 EF3F 2D0F E163 5A86 9931 9FE0 A201 73C0 8B1D ←ここ uid [ultimate] Keisuke Noguchi <windy.imlovinit@gmail.com> uid [ultimate] Momijikawa <windy.imlovinit@gmail.com> sub rsa2048/89BB6207 2012-04-06 [expires: 2016-04-12] sub rsa4096/DFF86AA5 2015-10-15 sub rsa4096/6CBDB9FC 2015-10-15 [expires: 2016-10-14] sub rsa4096/18AF197B 2015-10-15
上の例ではC556 EF3F 2D0F E163 5A86 9931 9FE0 A201 73C0 8B1D
が鍵0x73c08b1d
の鍵指紋です。
openpgp4fprスキームで表現
次に鍵指紋をopenpgp4fpr
スキームで表現します。openpgp4fpr
は以下のように鍵指紋を表現します。
openpgp4fpr:スペースを除いた鍵指紋
例ではこのように表現されます。
openpgp4fpr:C556EF3F2D0FE1635A8699319FE0A20173C08B1D
ワンライナーだとgpg --fingerprint <鍵ID> | grep "fingerprint" | sed -e 's/^.*= /openpgp4fpr:/' | tr -d " "
で取得できますが、Androidの上でこれをやるのは面倒ですね。あくまでパソコンの鍵を配るときに便利な方法です。ともかく、指紋が取れたらそれでいいです。
ちなみにこのURIスキームを<a href="openpgp4fpr:...">key</a>
のようにHTML上でリンクさせてもAndroidはこれを認識できます。AndroidじゃないOSのブラウザでは未確認です。
NFCタグに書き込む
さっそくタグに書き込んでみましょう。NFCToolsを起動し、[WRITE] → [Add a record]を選択します。http
スキームではないので[Custom URL / URI]を選択し、前述のURIを書き込みます。[OK]を押したら元の画面に戻ります。
URIが表示されているのを確認したら、[Write]を押してからタグをかざし、タグにデータを書き込みます。
はい、これでNFC公開鍵?が完成しました。
使い方
NFCが起動している状態で、タグをかざしましょう。GnuPGやOpenKeyChainがインストールされていれば、そのアプリに誘導するメニューが表示されるはずです。あとは指示に従えば、公開鍵をインポートできます。
OpenPGP CardにNFCタグシールを貼って自慢しよう。