2017年7月4日火曜日

RFID とブロックチェーン その4

今回からは実際に RFID を利用したサービスの開発を始めようと思います。簡単なところからということで真贋判定をやってみます。

RFID は NFC、UHF ともに書き換え不可能な ID が書き込まれています(NFC は UID、UHF は TID)。これを使って真贋判定を行います。

真贋判定は要するに本物か偽物かということなんですが、RFID で行う場合は物に貼り付けてある RFID を読み込んで、IDが本当にメーカ側で貼り付けたものかどうかを判定することになります。

貼り付けてある RFIDタグが入れ替わったりしてないかとか使いまわしされてる物ではないのかとか他にもいっぱい問題はあるんですがその部分には触れないでおきます。

メーカで製品に RFID を貼り付けたときに、その ID をビットコインネットワークに書き込みすることで後から検証ができるようにします。しかしすべての ID を保存していたのではそれだけで手数料が莫大なものになりますしそんなことしてたら怒られそうなので、

発行日時 タグのID
発行日時 タグのID
発行日時 タグのID
・・・
メーカのデジタル署名

というテキスト文書(以下これを検証用ドキュメントと言うことにします)を作成し、それのハッシュ値をビットコインネットワークに流すことで複数のIDを一度に登録できるようにしたいと思います。これならタグのIDが何百万枚あってもビットコインネットワークに流すのは1つのハッシュ値だけなので手数料も少しで済みますし、怒られることもなさそうだし、いえーい。

検証の手順は、

・タグのID を読む
・サービスサイトでその ID で検索
  →画面に ID が含まれる検証用ドキュメントと登録されているブロックチェーンのトランザクションIDが表示される
・検証用ドキュメントのハッシュ値とブロックチェーン上の値が一致することを確認
  →ここで検証用ドキュメントが正しいことが確認できる
・検証用ドキュメントに含まれるデジタル署名をメーカの公開鍵を使って正しいことを確認
  →ここでメーカが発行(というか貼り付け)したタグであることが確認できる

という流れになります。検証用ドキュメントが正しいものであることをブロックチェーンで証明してもらうわけですね。

というわけで実際に実装して簡単な確認をしてみます。

前回同様 NBitcoin を使います。秘密鍵の生成からやりますが、秘密鍵は覚えにくいのに忘れたら大ごとという厄介なものなのでパスフレーズから秘密鍵を生成するようにしてみます。これならパスフレーズを忘れなければ再生成が可能になります。

実際動かした画面がこちら。


これを検証しようと思ったんですが、どうも署名データが手動で作ったものと NBitcoin で作ったものとで異なっててなんでーと調べてたらビットコインの署名では一定の文字列を追加して署名していたことがわかりました。そうすると手動で検証が難しくなってしまってどうしようと思ってたら検証用のサイトがありましたのでそちらで検証してみました。


するとほらー、ベリファイOKだと。ってまぁ、何から何まで外部のサービスに頼りまくりなのが何ですがとりあえずこれでうまくできそうです。


0 件のコメント:

コメントを投稿