2017年11月20日月曜日

久辺テクノフェスタ2017に出展しまーす。

あれ? なんかイベント出展の告知ばかりですが、まぁとりいそぎ。

11/23(木)、勤労感謝の日ですが毎年恒例の久辺テクノフェスタへ出展します!

といっても、いわゆるビジネス系の展示会ではなく、どちらかというと子ども向けのいろんな技術を体験してみよう的な(ゆるめの)イベントです。

ちなみに昨年は、自分の書いた絵を非接触給電で光らせてみよう!というお絵かき+簡単な電子工作みたいなブースでしたが、おかげさまで休憩する間もないぐらいの大人気でした。

昨年の様子(↓)


今年は、+αで新たなコンテンツを用意する予定ですので、乞うご期待ということで。



イベント詳細は、こちらから。
http://nda.city.nago.okinawa.jp/kube2017/

2017年11月9日木曜日

Embedded Technology 2017へ出展します。

何気に3年連続ぐらいで出展させていただいているET2017ですが、今年も沖縄県ブースの中で展示させていただきます。

ET2017 → http://www.jasa.or.jp/expo/

昨年のブース。


11/15-17の3日間開催ですが、真ん中の11/16には、これまた恒例のET/IoT Technologyフェスタという交流会が開催されますね。
→ http://www.jasa.or.jp/expo/event/festa.html

沖縄県ブースでは今年も、オリオンビールとか泡盛とか無料で振る舞われる予定です。
ちなみに昨年は弊社ブース、夕方から泡盛バーと化してました(笑


というわけで、会期中に横浜方面お越しの方は是非、パシフィコ横浜へお立ち寄りいただき、沖縄県ブースで無料の泡盛とかオリオンビールを楽しんでいってくださいね! 弊社のRFIDソリューションをお楽しみくださいね。

大好評のMANICAモバイルとか、MANICAブランドプロテクションあたりを展示させていただく予定です。




2017年10月10日火曜日

TechWave Summit 2017 に出展します!

■■■イベント出展情報■■■
TechWave Summit 2017 の会場において、大好評のRFIDソリューション`「MANICAモバイル」を出展させていただきます。

■日時:
10/18の10:00-18:00(イベント自体は、10/17-18の2日間開催ですが、弊社の出展は「10/18」のみとなります)

■場所:
東京国際フォーラム(アドテック東京と併催)

■お申込み:
当日券5,000円が無料になるビジターパスのお申し込みは下記より、アドテック東京にも入場できるみたいですよー。
http://techwave-summit-2017.peatix.com/




べつにMANICAモバイルには興味ないけど、RFIDのことでちょっと相談にのってほしい、とかでも是非お気軽にご来場くださいませー。

2017年9月29日金曜日

初期費用ゼロのRFID、はじめました!

こんにちは、気が付けば9月も終わりですが今年もblogぜんぜん更新できていないことに愕然としてます、大坂です。

ところで(?)、無償版のExcel Toolとか、50アイテムまで無料で使えるMANICAタッチレンタルNFCとか、RFIDに興味を持っていただいた方に何とか最初の一歩を踏み出していただくために、あらゆるハードルを排除することを生き甲斐にしております我々ハヤト・インフォメーションですが、いよいよ初期費用ゼロで始めるRFID、という新境地を切り開くことになりました。

ハヤト・インフォメーション、初期費用ゼロ+月額1,500円で始めるRFID
「MANICAモバイル」をリリース

従来は、定置式のリーダーや業務用のハンディリーダーなど高価な機器が必要とされていたRFIDの導入プロセスにおいて、スマートフォンベースのシンプルかつ導入初期費用を抑えたソリューションを提供することで、規模の大小にかかわらず、より多くのお客様がRFIDを活用した業務改善を楽しめるプラットフォームとして、「MANICAモバイル」の提供を行ってまいります。(プレスリリースより抜粋)

サービスの詳細は、こちらから。

1ヶ月無償で使えるトライアル期間も設定されてます、皆様是非!






2017年9月19日火曜日

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

今回の投稿は前回のダブルハッシュの続きです。

前回は SHA-256 を2回行うダブルハッシュについて、2回目に衝突があるとその程度によっては問題なんじゃないの?ということで衝突があるのかどうなのかをやってみるというよっぽどの暇人じゃないとできないような無謀な内容でした。

単純に算出されたすべてのハッシュ値を記憶しておいて衝突がないかどうかやってたわけで、非常に効率悪いやり方でしたのでもう少し効率良さそうなやり方に変えてみました。暇人というところは違いないわけですが。

前回は0から順番にハッシュ値を計算していましたが、今回は算出されたハッシュ値を次回の入力値とするように変更しました。

で、仮に同じ値が出力されるような衝突があるとすると、


こんな風にグルグルができるはずということで、全部の出力を憶えておくんではなくて、たまに憶えておけばグルグルになったときに発見できるだろうという都合のいい考えでやってみました。

1億回計算したら値を憶えておくようにしました。
この状態で3連休ほったらかしにしておいた結果...

どーん


回数としては743億回ぐらいの計算を行ったようですがまだ見つかってないですね。

これって全体のどのくらいの量なんだろうか、バイト数で多めに見て5バイトまで完了。ということは SHA-256 は32バイトなのでえーっと、256の(32-5=)27乗分の1くらい終わってるということかー、それってどんくらい?関数電卓で計算すると

1.0531229166855718669791802768367e+65

おー、10の65乗分の1、パーセントにすると10の63乗分の1パーセントということですねー...

なんて無駄なことをやってるんでしょうか...orz

2017年9月4日月曜日

RFID とブロックチェーン その5 ダブルハッシュ

その4でご紹介した真贋判定のサービスの提供を開始しました!

  MANICAブランドプロテクション

まー、中身はほとんど Proof of Existence と同じなんですけどねー。

今回はちょっと気になった事について記述します。それは「ダブルハッシュ」です。

ブロックチェーンでは暗号学的ハッシュ関数として SHA-256 が多用されています。これは入力としてデータを与えると、出力として 256bit のデータが出てきます。どんなに短いデータ(1バイトとか)でも、どんなに長いデータ(1テラバイトとか)でも出力は 256bit です。当然ですが同じデータを入力すると同じ 256bit のデータが出力されます。で、入力データが 1bit でも違うと全然違う値の 256bit が出力されます。これで改ざんされていないかどうかを判別するわけです。

で、ブロックチェーンではハッシュを2回行うダブルハッシュというのを利用しています。1回ハッシュ値を算出して、出てきた 256bit の値をもう1回ハッシュをかけて、出力された 256bit の値を利用するわけです。

なんでこんなことしてるのか?というのが素朴な疑問なわけですね。暗号学的にセキュリティが強固になるからというように説明されているところもありますが、どうもよくわからない。計算方法を調べれば納得するかもしれないですけど面倒くさいっす。

ハッシュ1回の場合は、入力データがそれこそ無限に近い数あるわけですけど、2回目のハッシュは入力が 0 ~ (2の256乗 - 1) に限定されるわけです。それでも十分な量ありますけど、でも無限に比べたらやっぱり有限なわけで、出力されたハッシュ値の衝突がそれなりにあるとするとそれはそれで問題でないのかい?というのが今回のテーマです。

これも計算方法を調べればわかるのかもしれませんがやっぱり面倒なので本当に衝突が無いのか地道に計算させてみることにしました。

単純に0からずーっと入力して出力を溜めてって、衝突があると騒ぐというプログラムです。 List 使ってますがそもそも List にそんなにたくさんのデータ入りませんからいずれはオーバーフローするんでしょうけどまぁそんなところまでたどり着くかもわからんしとりあえず動かして土日ほったらかしてみました。

結果... どーん。


残念ながら?衝突は起きてなくてでも 0x3C 0x21 0x5B まで(約394万回)実施の結果だと。あー、先ながーい、消費メモリは1Gくらい、土日使うくらいじゃーここまでかー。

というわけで暇があったらもう少しやってみようかと思います。

2017年7月10日月曜日

[ イベント告知 ] 沖縄県企業誘致セミナーにてプレゼンさせていただきます。

こんにちはー。

それなりに技術系のネタが続いてきてるのにイベント告知系を挟み込むのはどうかな、と思いつつ ネタ切れにも負けずに 投稿頻度をあげるためのご案内です。

7/20@大阪 新阪急ホテル
7/21@東京 ロイヤルパークホテル

上記スケジュールにて、沖縄県企業誘致セミナーが開催されます。どちらも15:00~18:30(交流会ふくむ)。

弊社沖縄拠点も早いもので5年目になりますが、思えば5年前にこのセミナーに東京で参加させていただいたことが、大きなきっかけの一つになっていたのかなぁ、と思います。

そして、なんと今回、僭越ながら弊社も実際に沖縄に拠点を開設した企業としてプレゼンさせていただけることになりました。

内容的には、だいたい下記のような感じですかね。

Agenda
1). 弊社事業内容のご紹介
2). 沖縄拠点、設立の建前と本音
3). 各種制度の活用、効果の実際
4). まとめ、沖縄拠点の必然性。

弊社のような零細企業であっても、沖縄拠点を開設するメリットは充分すぎるほどあります、というか実際にありました!というあたり実際の体験談を中心に。

お話したいことは色々ありますが、(なにしろ持ち時間が短いので)いわゆる自己紹介ネタであるところのRFID/NFCの話だけで終わらないように、万全の注意を払う所存であります。

具体的な計画はなくとも、沖縄で働くってどんな感じなんだろう?ってあたりに興味をお持ちの皆様、ご来場をお待ちしてます!!!

■お申込みはこちらから→ 沖縄県企業誘致セミナー

2017年7月6日木曜日

ICタグ自動読み取り装置2



レゴマインドストームを使った物のお手軽版です。

フィギュアなどをディスプレイするのに使うらしいターンテーブルPOP用クリップを使っています。

POP用クリップはオーバーテクノロジーでした。タグをかざす位置は自由に調節できたほうが良いかと思って用意したのですが、やっててリーダーの方を合わせればいいということに気づきました。


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だと。ってまぁ、何から何まで外部のサービスに頼りまくりなのが何ですがとりあえずこれでうまくできそうです。


2017年6月16日金曜日

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

前回は Open Assets で新しくコインを発行したところまででしたが、発行時の手数料を最小値の 0.0001 BTCにしていたものだからいつまでたってもブロックに入れてもらえずこの先どうなるんだろーと思ってましたが先ほどようやくブロックに入れてもらえたようです(結局48時間くらいかかった)。

こちらが該当の取引になります。
https://blockchain.info/ja/tx/944a081a91c66c8bef34bdce1b1a84abb34c23c2a99c7f866bad8e4ef5b876bf

で、blockchain.infoでは Open Assets を認識していただけないので奇妙な取引ということになっています。そこで Open Assets を認識できる coinprism というサイトで取引を参照してみます。
https://www.coinprism.info/tx/944a081a91c66c8bef34bdce1b1a84abb34c23c2a99c7f866bad8e4ef5b876bf

おー、コイン100枚発行できているようです。「Unnamed colored coins」ってなってるのでコインに名前とかも付けれるのかなー。

これを利用して例えば ICカード内にビットコインアドレスとプライベートキーを保存しておけば独自コインを使ったポイントシステムとかは出来そうですね。QRでもできるじゃんというのはまぁそうなんですけど。

2017年6月14日水曜日

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

前回はタグIDをビットコインネットワークに保存するというのを恐る恐るやったわけですが、今回はきちんと?運用されている Open Assets というのを使ってみたいと思います。(※文中にコードがありますがスマホでは表示されません すいません)

Open Assetsはビットコインネットワークを利用して、ビットコイン以外の資産(独自のコインとか)を管理できるようにしたものです。あくまでもビットコインの仕様の上で動いていますのであまり大袈裟なことはできないわけですが、前回出てきた OP_RETURN を活用した仕組みになっています。

Open Assetsでは、Asset ID と数量(整数)を管理することができます。Asset IDはビットコインアドレスに1対1で対応しているアドレスで、例えば私のビットコインアドレスでアセットを発行すると私のビットコインアドレスに対応した Asset ID の資産が数量分発行(これは自由に決められます)することができます。で、発行した資産はビットコインの送金と同じように他の人に送ることができるわけです。

とりあえずやってみます。
調べてみると C# 用のBitcoinライブラリもあって Open Assetsに対応していました。しかもNuGetでゲットできるというお手軽さ。(詳しくはこちらでお勉強できます。Programming The Blockchain in C#)コア的なライブラリの NBitcoin とトランザクションを簡単に扱える QBitNinja.Client の2つをインストールします。

アセットの発行には 600 Satoshi必要のようです。前回のアドレスに0.0015BTC残っているのでこれを使います。https://blockchain.info

で、トランザクションを作成してブロードキャストします。コインは100枚発行しましょう。

こんな簡単なコードでできちゃうのがすげー。作成されたトランザクションのデータを見ると、あれ?

600 Satoshi のはずだが 2730 Satoshiかかってるぞ?仕様変わったの?いつ?
まぁいいやということでトランザクションを見てみましょう。https://blockchain.info/

ここでも奇妙な取引と出ました。これはOpen Assetsに対応していないからということのようです。Open Assetsに対応したサイトで見てみます。と思ったらまだデータが届いてないようなので後で確認します。

2017年4月7日金曜日

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

ブロックチェーンにタグIDを保存しようとあれこれ調べてみると、単にデータを Bitcoin ネットワーク上に保存するという使いかたもあるようです。有名な使い方の1つに「Proof of Existence」というのがあります。存在証明というもので、ドキュメントが確かにその時存在したということを証明するサービスです。

ブロックチェーンの大きな特徴として取引のあった正確な時間もブロック内に保存しますので、ある時間でデータをブロックに保存した場合、その時間にそのデータが確かに存在した(ブロックチェーンに登録された)ということの証明になるわけです。

ドキュメントのデータをそのままブロックチェーンに登録するとデータが大きすぎますから、ドキュメントデータのハッシュ値だけを登録します。そうすることでドキュメントが更新されていなければ、そのドキュメント(電子データ)がその時間に確かに存在していたということを検証できるようになるわけです。

ただこの使い方は Bitcoin からすれば意味の無いデータがどんどん蓄積されていくわけですから、あまり歓迎される使い方ではなかったようです。(取引のアウトプットデータとしてネットワーク上に残るのですが、次の取引の再に未使用のアウトプットデータが必要となるため、Bitcoin の各ノードは未使用のアウトプットデータをすぐに検索できる形で保存していなければならず、これがどんどん増えていくと問題になるわけです)

しかしながら、このアウトプットは取引に使えないアウトプットデータなんだよーという印をつける(スクリプトに OP_RETUEN というコマンドを入れる)ことができるようになりました。こうすることで、各ノードが「あー、これ関係無い奴だから無視―」とできるようになるわけです。これでまー、一応データを保存してもよかろうということになっているようです。

ということで実際に Bitcoin ネットワーク上にタグIDを保存してみたいと思います。(1個だけね、1個だけ)

トランザクションを作ってネットワークに流すとなると Bitcoin のフルノードが要るわけですがそんな余裕は無いのでそれができるサービスを使ってみます。

https://coinb.in/

こちらで New -> Transaction とやるとトランザクションを手動で作成して Bitcoin ネットワークに流す(ブロードキャスト)ことができます。ただし通常の取引ではないとはいえ、手数料を支払う必要があります(そうしないとブロックに入れてもらえない)。

さらに署名のために Bitcoin アカウントのプライベートキー(秘密鍵)を入力する必要があります。さすがにこれは結構抵抗ありますが、使い捨てのアカウントを作ってやってみます。

まずは Bitcoin のアカウントを作成しますが、プライベートキーが必要ということでペーパーウォレットというサービスを使います。

https://www.bitaddress.org/

サイトにアクセスすると自動的に Bitcoin アドレスの作成が始まります。JavaScriptで作られた Bitcoinクライアントのようです。マウスを動かすと秘密鍵が生成されていきます(見てて楽しい)。生成が終わると Bitcoin アドレスと対応するプライベートキーが表示されます。さらに Paper Wallet のボタンを押すとかっちょいい Bitcoin 紙幣が生成されます。この紙幣に Bitcoin をチャージできるわけですね!なんかカッコイイ!


作成したアドレスに Bitcoin を送金します。手数料分だけ。0.001BTC(\130くらい)
その後 coinb.in サイトに戻ってトランザクションを作成します。

Advanced Option の中に、OP_RETURNを使うかどうかのチェックがあるのでチェックします。


で、Inputに先ほど送った取引のトランザクションID、Outputの Address に保存したいタグID(今回はE2801160600002066E6D580F)を入力し、Submit するとトランザクションが作成されます。(注:以下の画像は作業途中のもので正確なものではありません)


これをコピって、Sign Transaction のページでプライベートキーでサインします。


でまたこれをコピって、Broadcast のページでブロードキャストします。

txid: d5d3029172421fedd5a91b587049869c7f492580d07fa453de5549764fbd1cca

するとキター トランザクションIDが割り振られました。
早速トランザクションを https://blockchain.info で見てみます。

すると出力スクリプトのところにタグIDが! しかし横には「奇妙な取引」の表示が!
ごめんなさい。

2017年3月30日木曜日

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

冒頭から何ですが最近投稿が少なくなっておりますので、いきなり大きな話題を持ち出して逃げられないようにする作戦で参りたいと存じます。

大きな話題とはそう、「ブロックチェーン」です。うわー、でかいなー、大丈夫かー? しかしブロックチェーンとRFIDってすごい親和性があると勝手に思っていますのでこの組み合わせで何かしらできたらいーなーと。

で、何からやればいいんだい?ブロックチェーンを使ったシステムとしては Bitcoin、Ethereum、Nxtなどいっぱいあるようです。しかしまぁ、ここはひとつ元祖ブロックチェーンということで Bitcoin からはじめてみます。

ソースは GitHubからとれます。開発環境としては Ubuntu がいいみたいなんですが適当なマシンがなかったので試しに Raspberry Pi3 にUbuntu Mate を入れてソースを QtCreator で確認するところまではできました。がビルドが重くて固まってしまったのであきらめました(笑

ソースの解読はさておき、どんな動作をするのかを確認したいと思います。お手軽にWindows版の Bitcoin を以下からダウンロードします。

https://bitcoin.org/ja/download

そのまま起動してしまうと Bitcoin の本番ネットワークに接続してしまい、120G くらいの Bitcoinの過去のブロックデータを全部ダウンロードしてきてしまうのでコマンドプロンプトでオプションを付けて起動します。

C:\bitcoin>bitcoin-qt -regtest

-regtest オプションを付けると、プライベートブロックチェーンになるようです。
で、1台でやっても面白くないのでもう1台使って同じように起動します。2台目は1台目に接続するようにオプションを付けます。

C:\bitcoin>bitcoin-qt -regtest -addnode=[1台目のIP]

-addnodeオプションで接続するノードのIPアドレスを指定します。


起動したら、コインの採掘をします。プライベートなので掘り放題! メニューから「ヘルプ」→「デバッグウィンドウ」→「コンソール」でコマンドが実行できますので、採掘コマンドを実行します。

generate 101

101個のブロックを採掘します。何で101個かというと、採掘してすぐのブロックは使用できず、その後100個の採掘を経てようやく使えるようになるということのようです。で、101個採掘して実際に使えるのが1個になります。そうすると採掘の報酬で50ビットコインが利用可能になります。

さらに10ビットコインをコマンドを使って自分に送金します。自分のアドレスは、メニューの「ファイル」→「受け取り用アドレス」を参照して得られます。

sendtoaddress [自分のアドレス] 10

この時点ではまだ取引が確定しておらず、ブロックチェーンにブロックとして登録されてはじめて確定されます。

確定前の情報を見てみます。

listunspent 0
[
  {
    "txid": "50141e5b67f70d4cb1f2052dbf2c743649acaaa08d91885b4ccdabcbcf785580",
    "vout": 0,
    "address": "mk7ySUPXjHiUfWZZ1R4kNTH7Yti1A8kjtt",
    "account": "",
    "scriptPubKey": "76a91432800489a4d7b08cb3f983e1a9bc588ba722013088ac",
    "amount": 10.00000000,
    "confirmations": 0,
    "spendable": true,
    "solvable": true
  },
  {
    "txid": "50141e5b67f70d4cb1f2052dbf2c743649acaaa08d91885b4ccdabcbcf785580",
    "vout": 1,
    "address": "mja78wU2XsyPok6WsbCTnDfiEBkBys1ZfT",
    "scriptPubKey": "76a9142c7921f6885fe065b9834b4eda5a84473835171c88ac",
    "amount": 39.99996160,
    "confirmations": 0,
    "spendable": true,
    "solvable": true
  }
]

1個目のが受け取った方、10ビットコインになってます。2個目が送った方で50ビットコインから10ビットコイン送ったので40ビットコインと思いきや、手数料が取られて微妙な数字になっています。この確定前情報はどうやって確定されるかというと、ブロックを採掘することでこの確定前情報がブロックチェーンにブロックとして登録されます。ということで1個採掘

generate 1

確定されました。(画面取り忘れた)

せっかくもう1台いるので、そちらに今度は3ビットコインを送信してみます。これは画面から。


で、また1個採掘する(確定させる)と


きました。もう1台に3ビットコイン

基本的なところはこんなところです。これと RFID をどう繋いでいくかを考えていきます。まずはビットコインを改修して RFID の ID をブロックに登録できるようにすることからやってみます。EPCIS との連携も考えておいた方がよさそうです。重要な採掘のロジックをどうするのかというのもありますし、こりゃまぁ大変な作業になりそうですが少しずつ進めていきます。