(57)【特許請求の範囲】
【請求項１】
任意の長さのビット列を所定の長さのハッシュ値であるビット列に変換する一方向性ハッシュ関数演算部と、
２つのビット列の異同を比較する比較部と、
ランダムなビット列を生成する乱数生成部と、
乱数生成部で生成されたビット列Ｒ、ふたつの異なるビット列Ｓとビット列Ｐ、無線タグの識別子であるビット列ＩＤｓ、およびビット列Ｓを入力として一方向性ハッシュ関数演算部が生成した無線タグとの共有鍵であるビット列Ｋｓを格納する情報記憶部と、
ビット列Ｓとビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数演算部で生成されるビット列にビット列Ｓを置き換え、更新前のビット列Ｓの値をビット列Ｐに代入する更新部とを有し、
比較部は、ビット列Ｋｓに基づいて一方向性ハッシュ関数演算部が生成したビット列ＴＫ’と、無線タグに格納されている共有鍵であるビット列Ｋｔに基づいて無線タグ内で生成され当該無線タグから受信したビット列ＴＫとを比較し、両者が一致する場合、更新部はビット列Ｓとビット列Ｐとを更新し、両者が異なる場合、比較部は無線タグから受信した無線タグに格納されている識別子であるビット列ＩＤｔとビット列ＩＤｓとをさらに比較し、両者が一致する場合には、更新部は、ビット列Ｐとビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数演算部で生成されるビット列でビット列Ｓを置き換えることを特徴とする無線タグ管理サーバ。
【請求項２】
ビット列ＴＫとビット列ＴＫ’とが異なり、かつビット列ＩＤｔとビット列ＩＤｓとが異なる場合には、一方向性ハッシュ関数演算部はビット列Ｐを入力とするビット列を求めることで過去の共有鍵であるビット列Ｋｓ’を求め、比較部は、当該ビット列Ｋｓ’に基づいて一方向性ハッシュ関数演算部が生成したビット列とビット列ＴＫとを比較し、両者が一致する場合は、更新部はビット列Ｐとビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数演算部で生成されるビット列でビット列Ｓを置き換えることを特徴とする請求項１に記載の無線タグ管理サーバ。
【請求項３】
ビット列ＴＫとビット列ＴＫ’とが異なり、かつビット列ＩＤｔとビット列ＩＤｓとが異なる場合には、一方向性ハッシュ関数演算部はビット列Ｐを入力とするビット列を求めることで過去の共有鍵であるビット列Ｋｓ’を求め、比較部は、当該ビット列Ｋｓ’に基づいて一方向性ハッシュ関数演算部が生成したビット列とビット列ＴＫとを比較し、両者が異なる場合には処理を終了することを特徴とする請求項１または２に記載の無線タグ管理サーバ。
【請求項４】
前記更新部は、無線タグの識別子であるビット列ＩＤｓをビット列ＩＤｔに置き換えることを特徴とする請求項１から３のいずれかに記載の無線タグ管理サーバ。
【請求項５】
ふたつのビット列の排他的論理和を演算する排他的論理和演算部をさらに有し、
前記情報記憶部は無線タグから受信した無線タグに格納されているビット列であるＮをさらに格納するものであり、
ビット列Ｒとビット列Ｎとの結合ビット列を入力として一方向性ハッシュ関数演算部で生成されるビット列とビット列Ｐとの排他的論理和であるビット列Ｕを無線タグに送信することを特徴とする請求項１から４のいずれかに記載の無線タグ管理サーバ。
【請求項６】
任意の長さのビット列を所定の長さのハッシュ値であるビット列に変換する一方向性ハッシュ関数演算部と、
ふたつのビット列の排他的論理和を演算する排他的論理和演算部と、
２つのビット列の異同を比較する比較部と、
サーバからアンテナを介して受信したランダムなビット列Ｒ、サーバとの共有鍵であるビット列Ｋｔ、およびビット列Ｎを格納するメモリ回路とを有し、
排他的論理和演算部は、ビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数演算部が生成するビット値をさらに入力として一方向性ハッシュ関数演算部が生成するビット列が、サーバに格納されている共有鍵であるビット列Ｋｓとなるビット列Ｐを、当該サーバ内でビット列Ｒとビット列Ｎとの結合ビット列のハッシュ値であるビット列との排他的論理和を取ることで生成され当該サーバから受信したビット列Ｕに基づいてビット列Ｐを復元し、
比較部は、復元したビット列Ｐを入力とするハッシュ値であるビット列とビット列Ｋｔとを比較し、両者が一致する場合、ハッシュ関数生成部は、復元したビット列Ｐに基づいてビット列Ｋｓを復元し、当該ビット列Ｋｓでビット列Ｋｔを置き換えることを特徴とする無線タグ。
【請求項７】
前記メモリ回路はタグの識別子であるビット列ＩＤｔをさらに格納するものであり、
前記一方向性ハッシュ関数演算部は、ビット列ＩＤｔとビット列Ｒとの結合ビット列のハッシュ値であるビット列を新たなビット列ＩＤｔとすることを特徴とする請求項６に記載の無線タグ。
【請求項８】
前記一方向性ハッシュ関数演算部、前記排他的論理和演算部および前記比較部は、外部からプログラムを書き込むことでその動作の制御を変更可能なハードウェアによって実現されることを特徴とする請求項６または７のいずれかに記載の無線タグ。
【請求項９】
乱数発生器が生成したランダムなビット列Ｒを無線タグに送信するステップと、
無線タグ内に格納されているビット列Ｎとアンテナを介して受信したビット列Ｒとの結合ビット列および無線タグ内に格納されている共有鍵であるビット列Ｋｔとに基づいて無線タグ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列ＴＫと、前記ビット列Ｎとを無線タグから受信するステップと、
ビット列Ｎとビット列Ｒとの結合ビット列およびサーバ内に格納されている共有鍵であるビット列Ｋｓとに基づいてサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列ＴＫ’と前記ビット列ＴＫとを比較するステップと、
ビット列ＴＫとビット列ＴＫ’とが一致する場合は、新たなビット列Ｋｓを生成するために用いるビット列Ｓをビット列Ｓとは異なるビット列Ｐに代入した後にビット列Ｓとビット列Ｒとのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列を新たなビット列Ｓとし、ビット列ＴＫとビット列ＴＫ’とが一致しない場合には、サーバ内に保存してあるビット列Ｐとビット列Ｒとのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列を新たなビット列Ｓとするステップと、
前記新たなビット列Ｓのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列を新たなビット列Ｋｓとするステップと、
ビット列Ｒとビット列Ｎとのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列と、ビット列Ｐとの排他的論理和であるビット列Ｕを無線タグに送信するステップと、
アンテナを介して受信したビット列Ｕに基づいてビット列Ｐを復元し、ビット列Ｐのタグ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列とビット列Ｋｔとを比較して両者が一致すれば、無線タグ内のビット列Ｋｔの値をビット列Ｐに基づいて復元した新たなビット列Ｋｓの値に更新するステップとを含むことを特徴とする無線タグ情報更新方法。
【請求項１０】
任意の長さのビット列を一方向性ハッシュ関数によって所定の長さのハッシュ値であるビット列に変換する変換機能と、
２つのビット列の異同を比較する比較機能と、
ランダムなビット列を生成する乱数生成機能と、
ふたつの異なるビット列Ｓとビット列Ｐと、乱数生成部で生成されたビット列Ｒと、無線タグの識別子であるビット列ＩＤｓと、ビット列Ｓを入力として一方向性ハッシュ関数演算部が生成したタグとの共有鍵であるビット列Ｋｓと、無線タグに格納されている共有鍵であるビット列Ｋｔに基づいて無線タグ内で生成され当該無線タグから受信したビット列ＴＫとをメモリ内に格納する情報記憶機能と、
ビット列Ｋｓに基づいて生成されたハッシュ値であるビット列ＴＫ’とビット列ＴＫとを比較し、両者が一致する場合、メモリ内のビット列Ｓとビット列Ｒとの結合ビット列を入力として生成されるビット列にビット列Ｓを置き換えることでビット列Ｓを更新し、メモリ内のビット列Ｐを更新前のビット列Ｓの値で置き換えることでビット列Ｐを更新し、両者が異なる場合、比較部は無線タグから受信した無線タグに格納されている識別子であるビット列ＩＤｔとビット列ＩＤｓとをさらに比較し、両者が一致する場合には、更新部は、ビット列Ｐとビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数演算部で生成されるビット列でビット列Ｓを置き換える更新機能とをコンピュータに実現させることを特徴とするプログラム。
【請求項１１】
無線タグと当該無線タグを管理するサーバとを含み、
無線タグ管理サーバは乱数生成部を用いて生成したランダムなビット列Ｒを無線タグに送信し、
無線タグ側一方向性ハッシュ関数演算部は、無線タグ内に保存されているサーバとの共有鍵であるビット列Ｋｔとサーバからアンテナを介して受信したビット列Ｒとを用いて生成しされるハッシュ値であるビット列ＴＫを求め、
無線タグ管理サーバは、無線タグのアンテナを介して前記ビット列ＴＫを受信し、受信したビット列ＴＫに基づいて、サーバ内に保存されている無線タグとの共有鍵であるビット列Ｋｓとビット列Ｋｔとが一致するか否かをサーバ側比較部を用いて比較し、両者が一致する場合は更新部を用いてビット列Ｋｓを生成するために用いるビット列Ｓをビット列Ｓとは異なるビット列Ｐに代入した後にビット列Ｓとビット列Ｒを入力としてサーバ側一方向性ハッシュ関数によって生成されるハッシュ値であるビット列を新たなビット列Ｓとし、当該新たなビット列Ｓのハッシュ値であるビット列を新たなビット列Ｋｓとし、ビット列Ｐに基づいてアップデートデータであるビット列Ｕを生成して無線タグに送信し、
無線タグは、アンテナを介して受信したビット列Ｕからビット列Ｐを復元し、ビット列Ｐのハッシュ値であるビット列と無線タグに保存されているサーバとの共有鍵であるビット列Ｋｔとを無線タグ側比較部を用いて比較し、両者が一致すれば、無線タグ内のビット列Ｋｔの値をビット列Ｐに基づいて復元した新たなビット列Ｋｓの値に更新することを特徴とする無線タグ管理システム。
【請求項１２】
ランダムなビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数によって生成されるハッシュ値であるビット値をさらに入力として生成されるハッシュ値であるビット列が、サーバに格納されている共有鍵であるビット列Ｋｓとなるビット列Ｐを、タグ内に格納されアンテナを介して当該サーバに送信されたビット列Ｎとビット列Ｒとの結合ビット列のハッシュ値であるビット列との排他的論理和を当該サーバ内で取ることで生成されたビット列Ｕを当該サーバからアンテナを介して受信するステップと、
ビット列Ｕに基づいてビット列Ｐを復元するステップと、
復元したビット列Ｐを入力とする一方向性ハッシュ関数によって生成されたハッシュ値であるビット列Ｋ’とビット列Ｋｔとを比較するステップと、
ビット列Ｋ’とビット列とＫｔが一致する場合、復元したビット列Ｐに基づいてビット列Ｋｓを復元し、当該ビット列Ｋｓでビット列Ｋｔを置き換えるステップとを、
無線タグ内のプロセッサに実行させることを特徴とする無線タグ情報更新方法。
【請求項１３】
ランダムなビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数によって生成されるハッシュ値であるビット値をさらに入力として生成されるハッシュ値であるビット列が、サーバに格納されている共有鍵であるビット列Ｋｓとなるビット列Ｐを、タグ内に格納されアンテナを介して当該サーバに送信されたビット列Ｎとビット列Ｒとの結合ビット列の一方向性ハッシュ関数によって生成されるハッシュ値であるビット列との排他的論理和を当該サーバ内で取ることで生成されたビット列Ｕを当該サーバからアンテナを介して受信するビット列受信機能と、
ビット列Ｕに基づいてビット列Ｐを復元する復元機能と、
復元したビット列Ｐを入力とする一方向性ハッシュ関数によって生成されるハッシュ値であるビット列Ｋ’とビット列Ｋｔとを比較する比較機能と、
ビット列Ｋ’とビット列とＫｔが一致する場合、復元したビット列Ｐに基づいてビット列Ｋｓを復元し、当該ビット列Ｋｓでビット列Ｋｔを置き換える更新機能とを、
無線タグ内のプロセッサに実現させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は安全性の高い無線タグ管理サーバ、無線タグおよび無線タグ管理システムに関する。
【背景技術】
【０００２】
近年、物流管理や工業製品の生産履歴管理等において、ＲＦＩＤ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）システムが使われるようになってきた。ＲＦＩＤシステムは、商品等に取り付けられたタグ（以下単に「タグ」という。）と、タグを識別するために各タグ固有に付けられた識別子（以下「ＩＤ」という。）を管理するサーバ（以下単に「サーバ」という。）とを含んでいる。
【０００３】
タグはその中に無線アンテナと、ＩＤ等のデータを格納するためのメモリと、データの計算や格納をするためのマイクロチップを含んでいる。サーバはタグから無線アンテナを介して読み取ったＩＤを用いて商品等を管理する。通常、サーバはタグからＩＤを読み取ると、タグに格納されているＩＤを変更し、サーバ自身も変更後のＩＤを格納することによりＩＤを更新すること（以後このことを「ＩＤの同期」という。）が行われる。万が一ある商品に付けられたタグのＩＤが漏洩しても、その後そのＩＤが更新されれば、ＩＤからその商品を特定されることを防止できるからである。
【０００４】
サーバとタグとの間でＩＤの同期を行うには、大きく３つのステップがある。１つ目は、サーバがタグに対して行う問い合わせ（以後「クエリ」（Ｑｕｅｒｙ）という。）のステップである。２つ目は、タグからサーバへの応答（以後「レスポンス」（Ｒｅｓｐｏｎｓｅ）という。）である。３つ目は、サーバがタグに対して行う情報の更新（以後「アップデート」（Ｕｐｄａｔｅ）という。）である。
【０００５】
ＲＦＩＤシステムは従来のバーコードを用いたシステムと比べて以下の３つの利点がある。すなわち、商品等の自動認識が可能となること、非接触で認識できること、一度に多数のタグを認識できること、の３点である。このような利点があることから、ＲＦＩＤシステムは物流管理や工業製品等の生産履歴管理の革新技術となると期待されている。
【０００６】
ところで、タグの種類によっては各種演算や外部とのデータの送受信をするための電池を内蔵しているもの（アクティブタグ）もあるが、物流管理や工業製品等の生産履歴管理の用途においては、商品等に取り付けても目立たない、小型かつ安価なパッシブタグが多く用いられる。パッシブタグは内蔵電池を有さず、サーバとパッシブタグとの間でデータをやりとりするリーダ・ライタからの伝送電力で駆動する。リーダ・ライタから離れると動作が停止するため、計算時間のかかる複雑な演算をパッシブタグが行うことは困難である。
【０００７】
このため、パッシブタグはサーバとＩＤの同期を取るに際し、その伝送経路を、例えばＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）等の暗号技術を用いて暗号化することができない。悪意を持った攻撃者が伝送経路に介入し、サーバとパッシブタグとの間のＩＤの同期を崩すと、物流管理や工業製品等の生産履歴管理ができなくなるという問題が起こり得る。以後、悪意を持った攻撃者が伝送経路に介入し、サーバとパッシブタグとの間のＩＤの同期を崩す試みを、単に「攻撃」といい、そのような攻撃を試みる者を「攻撃者」という。また、単に「タグ」という場合はパッシブタグを意味するものとする。
【０００８】
ＲＦＩＤシステムが安全であるためには以下の３つのセキュリティ要件が必要とされている。すなわち、タグのレスポンスからそのタグを特定できない性質（以後「ＩＮＤ」（Indistinguishabilityの略）という。）、タグの移動履歴を追跡できない性質（以後「ＢＵ」（Backward Untraceabilityの略）という。）、タグなりすまし攻撃に対して安全な性質（以後「ＲＳ」（Resistance against Tag Spoofingの略）という。）の３つの性質である。
【０００９】
上記セキュリティ要件を満たすためにＩＤの同期が行われる。ところが、攻撃者がアップデートに介入し、そのアップデートを妨げたり改竄したりする「ブロッキングアタック」（Ｂｌｏｃｋｉｎｇ  Ａｔｔａｃｋ（以後「ＢＡ」という。））と呼ばれる攻撃方法が知られている（例えば非特許文献１参照。）。ＢＡが成功すると、アップデートが失敗するため、ＩＤの同期が崩れる。また、攻撃者はタグに格納されている情報を取得できるという前提の下、その情報を基に偽サーバを作成する「なりすまし攻撃」（Ｓｅｒｖｅｒ  Ｉｍｐｅｒｓｏｎａｔｉｏｎ  Ａｔｔａｃｋ（以後「ＳＩＡ」という。））と呼ばれる攻撃方法も知られている（例えば非特許文献２参照）。ＳＩＡでは、攻撃者は偽サーバを用いてタグのＩＤを更新することができ、その結果ＩＤの同期が崩れる。したがって、ＢＡとＳＩＡに対する耐性を有する必要がある。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】T.Dimitrios, A Lightweight RFID Protocol to protect against Traceability and Cloning attacks, SecureComm 2005, IEEE Computer Society Press, pp.59-66, 2005.
【非特許文献２】B.Song, and C.J.Mitchell, RFID Authentication Protocol for Low-cost Tags, WiSec 2008, Association for Computing Machinery Press, pp.140-147, 2008.
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明はこうした状況に鑑みてなされたものであり、その目的は、安全性の高い無線タグ管理サーバ、無線タグおよび無線タグ管理システムを提供することにある。
【課題を解決するための手段】
【００１２】
本発明のある態様は無線タグ管理サーバに関する。このサーバは、任意の長さのビット列を所定の長さのハッシュ値であるビット列に変換する一方向性ハッシュ関数演算部と、２つのビット列の異同を比較する比較部と、ランダムなビット列を生成する乱数生成部と、乱数生成部で生成されたビット列Ｒ、ふたつの異なるビット列Ｓとビット列Ｐ、およびビット列Ｓを入力として一方向性ハッシュ関数演算部が生成した無線タグとの共有鍵であるビット列Ｋｓを格納する情報記憶部と、ビット列Ｓとビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数演算部で生成されるビット列にビット列Ｓを置き換え、更新前のビット列Ｓの値をビット列Ｐに代入する更新部とを有する。比較部は、ビット列Ｋｓに基づいて一方向性ハッシュ関数演算部が生成したビット列ＴＫ’と、無線タグに格納されている共有鍵であるビット列Ｋｔに基づいて無線タグ内で生成され当該無線タグから受信したビット列ＴＫとを比較し、両者が一致する場合、更新部はビット列Ｓとビット列Ｐとを更新する。
【００１３】
本発明のさらに別の態様は無線タグに関する。この無線タグは、任意の長さのビット列を所定の長さのハッシュ値であるビット列に変換する一方向性ハッシュ関数演算部と、ふたつのビット列の排他的論理和を演算する排他的論理和演算部と、２つのビット列の異同を比較する比較部と、サーバからアンテナを介して受信したランダムなビット列Ｒ、サーバとの共有鍵であるビット列Ｋｔ、およびビット列Ｎを格納するメモリ回路とを有する。排他的論理和演算部は、ビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数演算部が生成するビット値をさらに入力として一方向性ハッシュ関数演算部が生成するビット列が、サーバに格納されている共有鍵であるビット列Ｋｓとなるビット列Ｐを、当該サーバ内でビット列Ｒとビット列Ｎとの結合ビット列のハッシュ値であるビット列との排他的論理和を取ることで生成され当該サーバから受信したビット列Ｕに基づいてビット列Ｐを復元する。比較部は、復元したビット列Ｐを入力とするハッシュ値であるビット列とビット列Ｋｔとを比較する。両者が一致する場合、ハッシュ関数生成部は、復元したビット列Ｐに基づいてビット列Ｋｓを復元し、当該ビット列Ｋｓでビット列Ｋｔを置き換える。
【００１４】
本発明のさらに別の態様は、無線タグの情報を更新するための方法に関する。この方法は、乱数発生器が生成したランダムなビット列Ｒを無線タグに送信するステップと、無線タグ内に格納されているビット列Ｎとアンテナを介して受信したビット列Ｒとの結合ビット列および無線タグ内に格納されている共有鍵であるビット列Ｋｔとに基づいて無線タグ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列ＴＫと、前記ビット列Ｎとを無線タグから受信するステップと、ビット列Ｎとビット列Ｒとの結合ビット列およびサーバ内に格納されている共有鍵であるビット列Ｋｓとに基づいてサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列ＴＫ’と前記ビット列ＴＫとを比較するステップと、ビット列ＴＫとビット列ＴＫ’とが一致する場合は、新たなビット列Ｋｓを生成するために用いるビット列Ｓをビット列Ｓとは異なるビット列Ｐに代入した後にビット列Ｓとビット列Ｒとのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列を新たなビット列Ｓとし、ビット列ＴＫとビット列ＴＫ’とが一致しない場合には、サーバ内に保存してあるビット列Ｐとビット列Ｒとのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列を新たなビット列Ｓとするステップと、前記新たなビット列Ｓのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列を新たなビット列Ｋｓとするステップと、ビット列Ｒとビット列Ｎとのサーバ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列と、ビット列Ｐとの排他的論理和であるビット列Ｕを無線タグに送信するステップと、アンテナを介して受信したビット列Ｕに基づいてビット列Ｐを復元し、ビット列Ｐのタグ側一方向性ハッシュ関数によって生成されたハッシュ値であるビット列とビット列Ｋｔとを比較して両者が一致すれば、無線タグ内のビット列Ｋｔの値をビット列Ｐに基づいて復元した新たなビット列Ｋｓの値に更新するステップとを含む。
【００１５】
本発明のさらに別の態様は、無線タグを管理するシステムに関する。このシステムは、無線タグと当該無線タグを管理するサーバとを含む。無線タグ管理サーバは乱数生成部を用いて生成したランダムなビット列Ｒを無線タグに送信する。無線タグ側一方向性ハッシュ関数演算部は、無線タグ内に保存されているサーバとの共有鍵であるビット列Ｋｔとサーバからアンテナを介して受信したビット列Ｒとを用いて生成されるハッシュ値であるビット列ＴＫを求める。無線タグ管理サーバは、無線タグのアンテナを介して前記ビット列ＴＫを受信し、受信したビット列ＴＫに基づいて、サーバ内に保存されている無線タグとの共有鍵であるビット列Ｋｓとビット列Ｋｔとが一致するか否かをサーバ側比較部を用いて比較し、両者が一致する場合は更新部を用いてビット列Ｋｓを生成するために用いるビット列Ｓをビット列Ｓとは異なるビット列Ｐに代入した後にビット列Ｓとビット列Ｒとを入力としてサーバ側一方向性ハッシュ関数によって生成されるハッシュ値であるビット列を新たなビット列Ｓとし、当該新たなビット列Ｓのハッシュ値であるビット列を新たなビット列Ｋｓとし、ビット列Ｐに基づいてアップデートデータであるビット列Ｕを生成して無線タグに送信する。無線タグは、アンテナを介して受信したビット列Ｕからビット列Ｐを復元し、ビット列Ｐのハッシュ値であるビット列と無線タグに保存されているサーバとの共有鍵であるビット列Ｋｔとを無線タグ側比較部を用いて比較し、両者が一致すれば、無線タグ内のビット列Ｋｔの値をビット列Ｐに基づいて復元した新たなビット列Ｋｓの値に更新する。
【００１６】
本発明のさらに別の態様は、無線タグ内の情報を更新するための方法に関する。この方法は、ランダムなビット列Ｒとの結合ビット列を入力として一方向性ハッシュ関数によって生成されるハッシュ値であるビット値をさらに入力として生成されるハッシュ値であるビット列が、サーバに格納されている共有鍵であるビット列Ｋｓとなるビット列Ｐを、タグ内に格納されアンテナを介して当該サーバに送信されたビット列Ｎとビット列Ｒとの結合ビット列のハッシュ値であるビット列との排他的論理和を当該サーバ内で取ることで生成されたビット列Ｕを当該サーバからアンテナを介して受信するステップと、ビット列Ｕに基づいてビット列Ｐを復元するステップと、復元したビット列Ｐを入力とする一方向性ハッシュ関数によって生成されたハッシュ値であるビット列Ｋ’とビット列Ｋｔとを比較するステップと、ビット列Ｋ’とビット列とＫｔが一致する場合、復元したビット列Ｐに基づいてビット列Ｋｓを復元し、当該ビット列Ｋｓでビット列Ｋｔを置き換えるステップとを無線タグ内のプロセッサに実行させる。
【００１７】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、サーバ、システム、コンピュータプログラム、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１８】
本発明によれば、安全性の高い無線タグ管理サーバ、無線タグおよび無線タグ管理システムを提供することができる。
【図面の簡単な説明】
【００１９】
【図１】実施の形態に係る無線タグ管理システムを表す図である。
【図２】実施の形態に係るタグの論理演算部において、ソフトウェアプログラムによって実現される各部の機能とメモリ回路が格納するデータとを模式的に表した図である。
【図３】実施の形態に係るサーバの計算部及び情報記憶部の構成を模式的に表した図である。
【図４Ａ】サーバがタグに対してクエリをし、タグがサーバに対してレスポンスをするまでの間にサーバおよびタグで行われる処理手順を説明するフローチャートである。
【図４Ｂ】タグからレスポンスを受け取ったサーバがタグに対してアップデートするまでの間にサーバで行われる処理手順を説明するフローチャートである。
【図４Ｃ】サーバからアップデートを受けたタグがその後に行う処理手順を説明するフローチャートである。
【発明を実施するための形態】
【００２０】
以下、図面を参照して本発明の実施の形態（以下「実施形態」という。）について説明する。
【００２１】
まず、本明細書で使われる記号の定義について説明する。
Ｈ（ｘ）：            ｘ（任意ビット）のハッシュ値（ｍビットのビット列）を求める一方向性ハッシュ関数。
Ｒ∈（０，１）ｍ：      ｍビットの乱数ビット列。
Ｎ∈（０，１）ｍ：      タグに格納されているビット列。
ＴＫ∈（０，１）ｍ：    タグからサーバに送信する共有鍵に基づいたハッシュ値。
ＴＩＤ∈（０，１）ｍ：  タグからサーバに送信するタグのＩＤに基づいたハッシュ値。
ＩＤｔ∈（０，１）ｍ：  タグに格納されているＩＤ。
ＩＤ’∈（０，１）ｍ：  ＴＩＤを基にサーバで復元したタグのＩＤ。
Ｋｓ∈（０，１）ｍ：    サーバに格納されている共有鍵。
ＩＤｓ∈（０，１）ｍ：  サーバに格納されているタグのＩＤ。
Ｓ∈（０，１）ｍ：      サーバに格納されている秘密情報（第１の秘密情報）。
Ｐ∈（０，１）ｍ：      更新する前のＳ（第２の秘密情報）。
Ｕ∈（０，１）ｍ：      サーバからタグに送信するアップデート情報。
Ｐｔ∈（０，１）ｍ：    Ｕを基にタグで復元したＰ。
Ｋｔ∈（０，１）ｍ：    タグに格納されている共有鍵。
Ｓｔ∈（０，１）ｍ：    Ｐｔを基にタグで復元したＳ。
以上は、一方向性ハッシュ関数Ｈ（ｘ）を除いて、全てｍビットのビット列である。
【００２２】
図１は、実施形態に係る無線タグ管理システム１００の構成を模式的に表した図である。無線タグ管理システム１００はタグ２００とサーバ３００とを含む。サーバ３００は、複数のタグ２００を管理するものであるが、以下はあるひとつのタグ２００に着目して説明する。
【００２３】
タグ２００は、タグ側アンテナ２０２、タグ側変調部２０４、タグ側復調部２０６、論理演算部２０８、メモリ回路２１０、伝送電力取得部２１２を含む。
【００２４】
タグ側アンテナ２０２は、サーバ３００の末端に存在しタグ２００とデータをやりとりするためのリーダ・ライタ（図示しない）から送られる電波を受信したり、タグ２００の情報をリーダ・ライタに送信したりする。これは、例えばダイポール型アンテナを用いて実現される。
【００２５】
通常、リーダ・ライタとサーバ３００との間は安全であり、攻撃されることはない。そこで、以後リーダ・ライタを介してのタグ２００とサーバ３００との情報のやりとりをすることについては、リーダ・ライタの存在を前提として、リーダ・ライタについての記載はしない。
【００２６】
伝送電力取得部２１２は、タグ側アンテナ２０２を介してサーバ３００から送られる伝送電力を取得する。サーバ３００から送られる伝送電力は一般に交流であるが、タグ２００の各部は直流で動作する。そこで、伝送電力取得部２１２は交流を直流に変換する整流回路や、過大な電圧がかかることを防止する電圧制限回路等、既知の技術によって実現される。タグ２００の各部は、伝送電力取得部２１２が取得した電力で動作する。
【００２７】
タグ側変調部２０４は、タグ２００内のデータをサーバ３００に送信するために、データに基づいて搬送波を変調する。変調された搬送波はタグ側アンテナ２０２を介してサーバ３００に送信される。これは例えばバックスキャッタ（後方拡散）方式が用いられる。
【００２８】
タグ側復調部２０６は、タグ側アンテナ２０２を介して受信したサーバ３００からの搬送波から制御コマンドやデータを取り出す。これは搬送波に変調されているデータをビット列に変換することで実現される。
【００２９】
論理演算部２０８は、タグ側復調部２０６から取り出したサーバ３００からの制御コマンドを実行したり、タグ２００内のデータを処理したりする。論理演算部２０８はソフトウェアプログラムでその動作の制御を変更することができるプログラマブルなハードウェアである。後述する論理演算部２０８の各部の動作は、実施形態を実現するためのソフトウェアプログラムを論理演算部２０８に書き込み、当該ソフトウェアプログラムの制御の下で実現する。
【００３０】
メモリ回路２１０は、データの書き込みや読み込み、およびデータの消去を何度でも行えるものであり、伝送電力取得部２１２からの電力供給がなくなってもデータを保持できるものである。論理演算部２０８と同様に、メモリ回路２１０の詳細については後述する。
【００３１】
サーバ３００は、サーバ側アンテナ３０２、サーバ側変調部３０４、サーバ側復調部３０６、計算部３０８、情報記憶部３１０、送信部３１２、受信部３１４を含む。
【００３２】
サーバ側アンテナ３０２は、タグ２００にデータを送信したり、タグ２００からデータを受信したりする。また、タグ２００に電力を供給する。これはタグ側アンテナ２０２と同様にダイポール型アンテナ等を用いて実現される。
【００３３】
サーバ側変調部３０４，サーバ側復調部３０６はそれぞれタグ側変調部２０４、タグ側復調部２０６に対応し、前者はタグに送信するためのデータで搬送波を変調し、後者はタグから受信した変調された搬送波からデータを取り出す。
【００３４】
送信部３１２は、サーバ側変調部３０４が変調した搬送波をタグ２００に送信する。搬送波を増幅する増幅器や、フィルタ等の既知の技術によって実現される。
【００３５】
受信部３１４は、タグ２００から送られる搬送波を受信する。搬送波に含まれるノイズを除去するフィルタや、信号を増幅する増幅器等の既知の技術によって実現される。
【００３６】
計算部３０８は、タグ２００に送信するデータを作成したり、タグ２００からのレスポンスを処理したりする部分である。計算部３０８の動作についての詳細は後述する。
【００３７】
情報記憶部３１０は、タグ２００のＩＤ等を記憶する部分である。計算部３０８と同様、情報記憶部３１０の詳細は後述する。
【００３８】
計算部３０８が情報記憶部３１０から取得したり、計算部３０８が処理したりしたデータや制御命令は、サーバ側変調部３０４で搬送波に変調され、送信部３１２がサーバ側アンテナ３０２を介してタグ側復調部２０６に送信する。伝送電力取得部２１２はサーバ３００から送られる伝送電力を取得し、タグ側変調部２０４、タグ側復調部２０６、論理演算部２０８、メモリ回路２１０に当該伝送電力を供給する。タグ側復調部２０６は、伝送電力取得部２１２からの電力供給を受けて、タグ側アンテナ２０２を介して送信部３１２から送られた搬送波から、制御命令やデータを取り出す。論理演算部２０８は、タグ側復調部２０６から取得した制御命令を実行し、データを処理する。論理演算部２０８は、処理結果に基づいてメモリ回路２１０の内容を変更し、タグ側変調部２０４を介してデータを受信部３１４に送信する。
【００３９】
受信部３１４は、サーバ側アンテナ３０２を介してタグ側変調部２０４から送信された搬送波を受信する。サーバ側復調部３０６は受信部３１４が受信した搬送波からタグ２００から送られたデータを取り出す。計算部３０８はタグ２００から送られたデータを処理する。
【００４０】
上述のサーバ３００およびタグ２００間のデータのやりとりを繰り返すことで、両者間でデータの同期が行われる。
【００４１】
図２は、図１のタグ２００内の論理演算部２０８において、ソフトウェアプログラムによって実現される各部の機能とメモリ回路２１０が格納するデータとを模式的に表した図である。
【００４２】
論理演算部２０８は、タグ側連結部２１６、タグ側一方向性ハッシュ関数演算部２１８、タグ側比較部２２０、タグ側排他的論理和演算部２２２を含む。メモリ回路２１０は、タグ側乱数ビット列Ｒ格納部２２４、タグ側ビット列Ｎ格納部２２６、タグ側共有鍵Ｋｔ格納部２２８、ワークエリア２３０、タグ側識別子ＩＤｔ格納部２３２を含む。以後、乱数ビット列Ｒは「Ｒ」と、ビット列Ｎは「Ｎ」と、タグ側共有鍵Ｋｔは「Ｋｔ」と、タグ側識別子ＩＤｔは「ＩＤｔ」と省略して記載する。
【００４３】
タグ側連結部２１６は、任意のふたつのビット列を連結してひとつのビット列を生成する。例えば、第１のビット列Ａを（１００１）とし、第２のビット列Ｂを（０１１０）とし、両者がタグ側連結部２１６に入力された場合には、タグ側連結部２１６はビット列（１００１０１１０）を出力する。以後、ＡとＢとの連結を「Ａ‖Ｂ」と表すことがある。
【００４４】
タグ側一方向性ハッシュ関数演算部２１８は、任意の長さのビット列を、所定の長さのビット列に変換する。ここで所定の長さとは、タグの数が多くてもハッシュ値の衝突が起こらないために必要な長さであり、例えば１６０ビットである。また、タグ側一方向性ハッシュ関数演算部２１８は、入力されたビット列が異なれば出力するビット列（ハッシュ値）も異なるものであり、また出力されたビット列から入力ビット列を復元することが実質的に不可能である一方向性の性質を有するものである。具体的には、例えばＳＨＡ−１（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ−１）を用いれば実現できる。この場合、入力ビット列は２の６４乗ビット以下の長さであれば、常に１６０ビットのハッシュ値を生成する。
【００４５】
以後、一方向性ハッシュ関数をＨ（ｘ）と表す場合がある。また、一方向性ハッシュ関数をＨ（ｙ，ｚ）のようにふたつの引数の形で表す場合もある。前者と後者との関係は、ｘ＝ｙ‖ｚとすれば同値である。したがって、両者ともひとつの一方向性ハッシュ関数（例えばＳＨＡ−１）で実現できる。引数が３つ以上の場合でも、全ての引数について連結すれば、引数がひとつの場合に帰着される。これらの連結は、例えばタグ側連結部２１６を用いて行われる。
【００４６】
タグ側一方向性ハッシュ関数演算部２１８はまた、後述するタグ側比較部２２０の出力に応じて演算を実行することもできる。
【００４７】
タグ側比較部２２０は、ふたつのビット列が同じ値か否かを比較する。同じ値であれば１を、異なる値であれば０を出力する。
【００４８】
タグ側排他的論理和演算部２２２は、ふたつのビット列について排他的論理和を計算し、結果を出力する。以後、第１のビット列Ａと第２のビット列Ｂとの排他的論理和を
0005419083.tif 000002
と表すことがある。
【００４９】
図３は、図１のサーバ３００内の計算部３０８の機能と情報記憶部３１０が格納するデータとを模式的に表した図である。
【００５０】
計算部３０８は、サーバ側連結部３１６、サーバ側一方向性ハッシュ関数演算部３１８、サーバ側比較部３２０、サーバ側排他的論理和演算部３２２、乱数生成部３４２、更新部３４４、レスポンス格納部３４６を含む。
【００５１】
情報記憶部３１０は、サーバ側乱数ビット列Ｒ格納部３２４、サーバ側ビット列Ｎ格納部３２６、サーバ側共有鍵Ｋｓ格納部３２８、ＩＤ’格納部３３０、サーバ側識別子ＩＤｓ格納部３３２、ＴＫ格納部３３４、第１の秘密情報Ｓ格納部３３６、第２の秘密情報Ｐ格納部３３８、ＴＩＤ格納部３４０を含む。以後サーバ側共有鍵Ｋｓを「Ｋｓ」と、サーバ側識別子ＩＤｓを「ＩＤｓ」と、第１の秘密情報Ｓを「Ｓ」と、第２の秘密情報Ｐを「Ｐ」と省略して記載する。
【００５２】
サーバ側連結部３１６は、タグ側連結部２１６と同様に、任意のふたつのビット列を連結してひとつのビット列を生成する。サーバ側一方向性ハッシュ関数演算部３１８は、任意の長さのビット列を、所定の長さのビット列に変換する。サーバ側一方向性ハッシュ関数演算部３１８は、タグ側一方向性ハッシュ関数演算部２１８と全く同一の動作をする。すなわち、両者に入力されるビット列が同一であれば、その出力も全く同一である。サーバ３００とタグ２００との間のデータの同期を保証するためである。
【００５３】
サーバ側比較部３２０も、タグ側比較部２２０と同様に、ふたつのビット列が同じ値か否かを比較する。同じ値であれば１を、異なる値であれば０を出力する。サーバ側排他的論理和演算部３２２は、タグ側排他的論理和演算部２２２と同様に、ふたつのビット列について排他的論理和を計算し結果を出力する。
【００５４】
乱数生成部３４２は、ランダムなビット列Ｒを生成する。Ｒはタグ２００およびサーバ３００に格納されているタグのＩＤ等の更新やその送受信に用いられ、ＩＮＤやＲＳの要件を満たすために重要である。
【００５５】
更新部３４４は、サーバ側比較部３２０の出力に応じて動作し、サーバにのみ格納されているＳとＰとを更新する。Ｓは、そのハッシュ値Ｈ（Ｓ）が、タグ２００とサーバ３００とが共有する共有鍵Ｋとなるものである。Ｓは、後述する条件を満たすと、Ｒと自身とのハッシュ値Ｈ（Ｓ，Ｒ）に置き換えられることで更新される。Ｐは、Ｓが更新される際に、そのバックアップとして更新前のＳの値が保存される。
【００５６】
レスポンス格納部３４６は、タグ２００のレスポンスとして送られてくるデータであるＴＩＤ、ＴＫ、Ｎをそれぞれ、ＴＩＤ格納部３４０、ＴＫ格納部３３４、サーバ側ビット列Ｎ格納部３２６に格納する。
【００５７】
以上の論理演算部２０８、メモリ回路２１０、計算部３０８、情報記憶部３１０との協働によって実現されるタグ２００とサーバ３００とのクエリ、レスポンス、アップデートの処理手順を、図４Ａ〜図４Ｃを用いて説明する。以下の説明では、変調や復調、およびアンテナを介してデータを送受信することは、例えば単に、「サーバ３００からタグ２００へデータを送信する」のように省略して記載する。
【００５８】
図４Ａは、サーバ３００がタグ２００に対してクエリをし、タグ２００がサーバ３００にレスポンスを返すまでの処理手順を説明するフローチャートである。本フローチャートにおける処理は、サーバ３００がタグ２００に対してクエリをすると開始する。
【００５９】
乱数生成部３４２は、ｍビット（例えば１６０ビット）のＲを生成する。Ｒはサーバ側Ｒ格納部３２４に格納された後、クエリとしてタグ２００に送信される（Ｓ１０）。タグ２００はサーバ３００から受信したＲをタグ側Ｒ格納部２２４に格納する（Ｓ１２）。以上がクエリである。
【００６０】
タグ側一方向性ハッシュ関数演算部２１８は、タグ側Ｎ格納部２２６からＮを、タグ側Ｒ格納部２２４からＲを取得し、そのハッシュ値Ｈ（Ｎ，Ｒ）を計算し、結果をタグ側Ｎ格納部２２６に代入する（Ｓ１４）。これにより、サーバ３００からクエリがある度に、Ｎは更新されることになる。
【００６１】
タグ側一方向性ハッシュ関数演算部２１８は、タグ側連結部２１６がＲとＮとを連結した結果であるＲ‖Ｎを受け取り、ＫｔとＲ‖Ｎとを入力としたハッシュ値Ｈ（Ｋｔ，Ｒ‖Ｎ）を計算してＴＫを生成する（Ｓ１６）。ＴＫはレスポンスのひとつとしてサーバ３００に送信される。
【００６２】
タグ側排他的論理和演算部２２２は、タグ側一方向性ハッシュ関数演算部２１８が出力したＨ（Ｒ，Ｎ）とＩＤｔとの排他的論理和ＴＩＤを計算する（Ｓ１８）。ＴＩＤは、Ｈ（Ｒ，Ｎ）を鍵としてＩＤｔを暗号化したものであり、サーバ３００はＴＩＤからＨ（Ｒ，Ｎ）を用いてＩＤｔを復号することができる。これはＲＳの要件を満たすための対策であり、攻撃者はＴＩＤを取得しただけではＩＤｔを復元することができない。ＴＩＤもＴＫと同様に、レスポンスのひとつとしてサーバ３００に送信される。
【００６３】
タグ側一方向性ハッシュ関数演算部２１８は、ＩＤｔとＲとを入力とするハッシュ値Ｈ（ＩＤｔ，Ｒ）を計算し、結果をＩＤｔ格納部２３２に格納する（Ｓ２０）。このようにタグ２００の識別器であるＩＤｔを更新することにより、ＢＵの要件が満たされる。
【００６４】
タグ２００はＴＫ、ＴＩＤ、Ｎをレスポンスとしてサーバ３００に送信し（Ｓ２２）、サーバ３００はそれらを受信する（Ｓ２４）。
【００６５】
図４Ｂは、タグ２００からレスポンスを受け取ったサーバ３００がタグ２００に対してアップデートするまでの間にサーバ３００内で行われる処理手順を説明するフローチャートである。本フローチャートにおける処理は、サーバ３００がタグ２００からレスポンスを受け取ると開始する。
【００６６】
レスポンス格納部３４６は、タグ２００からのレスポンスであるＴＫ、ＴＩＤ、Ｎを受信すると、それらをそれぞれＴＫ格納部３３４、ＴＩＤ格納部３４０、サーバ側Ｎ格納部３２６に格納する。
【００６７】
サーバ側一方向性ハッシュ関数演算部３１８は、ＲとＮとを引数とするハッシュ値Ｈ（Ｒ，Ｎ）を計算し、サーバ側排他的論理和演算部３２２はＴＩＤとＨ（Ｒ，Ｎ）との排他的論理和を計算し、結果をＩＤ’格納部３３０に格納する（Ｓ２６）。
【００６８】
サーバ側比較部３２０は、ＴＫとＨ（Ｋｓ，Ｒ‖Ｎ）とを比較する。ＴＫはステップＳ１６においてＴＫ＝Ｈ（Ｋｔ，Ｒ‖Ｎ）として出力されたことを考えると、ＫｓとＫｔとが同一である場合、ＴＫ＝Ｈ（Ｋｓ，Ｒ‖Ｎ）となる（Ｓ２８Ｙ）。
【００６９】
ＴＫ＝Ｈ（Ｋｓ，Ｒ‖Ｎ）の場合、更新部３４４はＳをＰに代入してＳのバックアップとする（Ｓ３０）。更新部３４４はサーバ側一方向性ハッシュ関数演算部３１８に指示して、ＳをＨ（Ｓ，Ｒ）で置き換えることにより更新する（Ｓ３２）。その後ＫｓはＨ（Ｓ）で置き換えられ、更新される（Ｓ３４）。
【００７０】
ここで、Ｋｓは新しい値に置き換えられたが、この時点ではタグ側の共有鍵Ｋｔは更新されていない。仮に何らかの原因でＫｔの更新に失敗すると、ＫｓとＫｔとの同期が崩れる。このような場合に備え、更新前のＳはＰとして保存されている。Ｐが更新されるのは、ＴＫ＝Ｈ（Ｋｓ，Ｒ‖Ｎ）のとき、すなわち、ＫｓとＫｔとが同一である場合であるから、Ｈ（Ｐ）を計算することでＫｓとＫｔとが同一であったときのＫｓ（＝Ｋｔ）を復元できる。詳細は後述するが、このＰを用いることによりサーバ３００とタグ２００との共有鍵の再同期化、およびアップデートの正当性の検証が可能となる。
【００７１】
さて、ＴＫ≠Ｈ（Ｋｓ，Ｒ‖Ｎ）の場合（Ｓ２８Ｎ）は、Ｋｓ≠Ｋｔを意味し、サーバ３００とタグ２００との間で共有する鍵の同期が崩れていることになる。この場合、サーバ側比較部３２０は、ＩＤ’とＩＤｓとを比較する。もしＩＤ’＝ＩＤｓであれば（Ｓ４０Ｙ）、共有鍵の同期は崩れているが、ＩＤの同期は取れていることになるので、サーバ３００はタグ２００を正しく認識することができる。更新部３４４はサーバ側一方向性ハッシュ関数演算部３１８に指示して、ＳをＨ（Ｐ，Ｒ）で置き換える（Ｓ４２）。その後ＫｓはステップＳ４２で生成されたＳ＝Ｈ（Ｐ，Ｒ）を入力とするハッシュ値Ｈ（Ｓ）で置き換えられ、更新される（Ｓ３４）。
【００７２】
ＴＫ≠Ｈ（Ｋｓ，Ｒ‖Ｎ）かつＩＤ’≠ＩＤｓの場合（Ｓ４０Ｎ）には、サーバ３００とタグ２００との共有鍵およびＩＤのいずれの同期も崩れていることになる。この場合、サーバ側比較部３２０はＴＫとＨ（Ｈ（Ｐ），Ｒ‖Ｎ）との値を比較する。ステップＳ１６におけるＴＫ＝Ｈ（Ｋｔ，Ｒ‖Ｎ）と比較すると、Ｋｔ＝Ｈ（Ｐ）の場合、ＴＫとＨ（Ｈ（Ｐ），Ｒ‖Ｎ）とが一致することになる（Ｓ４４Ｙ）。この場合、サーバ３００はタグ２００を正規なものと認識し、Ｐを用いてＳを更新し（Ｓ４２）、ＫｓをステップＳ４２で生成されたＳ＝Ｈ（Ｐ，Ｒ）を入力とするハッシュ値Ｈ（Ｓ）で置き換える（Ｓ３４）。
【００７３】
ＴＫとＨ（Ｈ（Ｐ），Ｒ‖Ｎ）とが一致しない場合（Ｓ４４Ｎ）は、以下のふたつの場合が考えられる。ひとつ目は、レスポンスを返したタグ２００は、サーバ３００が管理するタグではない場合である。この場合はサーバ３００が管理する共有鍵Ｋｓとタグ２００が保存する共有鍵Ｋｔとが異なるのは当然で、サーバ３００は、当該タグはサーバの管理するタグではないと判断でき（Ｓ４６）、以降の処理を中止する。
【００７４】
ふたつ目は、レスポンスの段階で攻撃者から攻撃を受け、レスポンスが改竄された場合である。もし、レスポンスを受けたタグがサーバ３００の管理するタグであることが確実であるにも関わらず、ＴＫとＨ（Ｈ（Ｐ），Ｒ‖Ｎ）とが一致しないのであれば、攻撃者から攻撃を受けた蓋然性が高い。その場合も、当該タグはサーバの管理するタグではないと判断して（Ｓ４６）、以降の処理を中止する。このように、サーバ３００は仮に攻撃を受けたとしてもすぐに処理を停止できるので、ＤｏＳ攻撃（Ｄｅｎｉａｌ  ｏｆ  Ｓｅｒｖｉｃｅ  Ａｔｔａｃｋ）に対しても堅牢である点で有利である。また、攻撃を受けたことが確実であるならば、その情報を格納しておき、後の分析等に利用できる点でも有利である。
【００７５】
サーバ側一方向性ハッシュ関数演算部３１８はＩＤ’とＲとを引数とするハッシュ値Ｈ（ＩＤ’，Ｒ）を計算し、ＩＤｓ格納部３３２に格納する（Ｓ３６）。ここで、ＩＤ’はＴＩＤとＨ（Ｒ，Ｎ）との排他的論理和であり、ＴＩＤはステップＳ１８で生成された、ＩＤｔとＨ（Ｒ，Ｎ）との排他的論理和であることに注意する。前述したように、タグ側一方向性ハッシュ関数演算部２１８とサーバ側一方向性ハッシュ関数演算部３１８とは同一の振る舞いをするから、両者がＲとＮとを入力して生成するハッシュ値Ｈ（Ｒ，Ｎ）も同一のビット列となる。したがって、ステップＳ２６で生成されたＩＤ’はＩＤｔと同一である。ゆえに、ステップＳ３６で更新されてたＩＤｓはステップＳ２０で更新されたＩＤｔと同一のビット列になる。ＩＤｓをＩＤｔに合わせることとなり、サーバ３００とタグ２００との間でＩＤの同期を取ることになる。仮にサーバ３００とタグ２００との間でＩＤの同期が崩れており、ＩＤ’とＩＤｓとが異なるビット列であったとしても、本ステップＳ３６を経ることにより、両者の再同期が実現される。
【００７６】
サーバ側排他的論理和演算部３２２は、ＰをＲとＮとのハッシュ値Ｈ（Ｒ，Ｎ）を用いて排他的論理和を取ることで暗号化し、アップデート情報Ｕ（以後単に「Ｕ」と記載する）を生成する（Ｓ３８）。
【００７７】
図４Ｃは、サーバ３００からＵを受信したタグ２００がその後に行う処理手順を説明するフローチャートである。本フローチャートにおける処理は、サーバ３００がタグ２００に対してＵを送信すると開始する。
【００７８】
サーバ３００がＵを送信し（Ｓ４８）、タグ２００がＵを受信する（Ｓ５０）ことで、アップデートが行われる。タグ側排他的論理和演算部２２２は、ＵとＨ（Ｒ，Ｎ）との排他的論理和を計算することでＰを復号する（Ｓ５２）。以後タグ２００が復号したＰをＰｔと記載する。なお、Ｐｔや後述のＳｔは、ワークエリア２３０に一時的に格納され、使用後は速やかに消去される。攻撃者に漏洩することを防ぐためである。この観点から、ワークエリア２３０は伝送電力取得部２１２からの電力供給がなくなった場合にはその内容を保持できないタイプのメモリを用いれば、メモリ消去のステップを省略できる点で有利である。
【００７９】
タグ側比較部２２０は、ＫｔとＨ（Ｐｔ）とを比較する。もし、タグ２００が受信したアップデートが正規のサーバ３００からのものであれば、ＰとＰｔとは一致するので、ＫｔとＨ（Ｐｔ）とも一致するはずである。両者が一致する場合（Ｓ５４Ｙ）、タグ側一方向性ハッシュ関数演算部２１８はＨ（Ｐｔ，Ｒ）を計算し、その値をＳｔとしてワークエリア２３０に保存する（Ｓ５６）。ステップＳ３４およびステップＳ４２より、ステップＳ５６の演算によって、サーバ３００のＳとＳｔとが同一の値になることが保証される。そこで、タグ側一方向性ハッシュ関数演算部２１８はＨ（Ｓｔ）を計算し、その値をＫｔ格納部２２８に代入することでＫｔの更新を行う（Ｓ５８）。Ｓｔ＝Ｓであるから、サーバ３００における共有鍵の更新ステップＳ３６における演算と同一になり、サーバ３００とタグ２００との共有鍵の同期（共有鍵の同期が崩れている場合には再同期化）が実現される。もし、ＫｔとＨ（Ｐｔ）とが一致しない場合には（Ｓ５４Ｎ）、アップデートは正当なものではないと判断できるので、何もせずに処理を終了する。
【００８０】
ステップＳ５４は、サーバ３００のみが保持する秘密情報Ｐを用いてアップデートの正当性を検証する。このことにより、仮に攻撃者がタグ２００に保存されている情報を全て入手でき、その情報に基づいて偽サーバを構築できたとしても、その攻撃者はサーバ３００のみが保持する秘密情報Ｐまでは入手することができない。したがってそのような偽サーバを用いて偽のアップデートによる攻撃を試みたとしても、タグ２００はそのアップデートが正当でないことを判断できる。この仕組みにより、実施形態はＳＩＡに対しても耐性を有する。
【００８１】
以上まとめると、タグ２００とサーバ３００とが共有するＩＤは、それぞれステップＳ２０およびステップＳ２８において更新される。また、タグ２００とサーバ３００とが共有する共有鍵については、それぞれステップＳ３６およびステップＳ５８において更新される。したがって、仮にある時点でのＩＤや共有鍵が漏洩したとしても、タグ２００の移動履歴を追跡することができない。ＩＤや共有鍵はタグ２００とサーバ３００とが交信する度に一方向性ハッシュ関数と乱数とを用いて更新されるからである。したがって実施形態はＢＵの要件を満たす。
【００８２】
タグ２００とサーバ３００との間のレスポンスおよびアップデートで送受信される情報は、ハッシュ値か、排他的論理和を用いて暗号化されたものである。したがって、攻撃者はそれらの情報を取得できたとしても、その情報からタグを特定することはできない。ゆえに実施形態はＩＮＤの要件を満たす。
【００８３】
ＴＩＤ、ＴＫは認証ごとに新しく生成される乱数Ｒを用いて計算される。そのため、攻撃者はこれらを入手しても再利用することができない。また、攻撃者がタグ２００にクエリ（Ｑｕｅｒｙ）を送信して入手したＴＩＤ、ＴＫをサーバ３００へ送信してもタグの認証は行われない。したがって、実施形態はＲＳの要件を満たす。
【００８４】
前述したように、ＢＡによりタグ２００とサーバ３００とが共有するＩＤや共有鍵の同期が崩されたとしても、前者はステップＳ２０およびステップＳ３６により、後者はステップＳ３４およぶステップＳ５８により再同期化が可能である。したがってＢＡに対して耐性を有する。また、実施形態のタグ２００はサーバ３００のみが保持する秘密情報Ｐを用いてアップデートの正当性を検証するため、ＳＩＡに対しても耐性を有する。
【００８５】
実施形態はＲＦＩＤシステムが安全であるために必要とされる３つのセキュリティ要件を全て満たし、仮にＩＤや共有鍵の同期が崩れたとしても再同期化することができる。このように、本実施形態によれば安全性の高い無線タグ管理サーバ、無線タグおよび無線タグ管理システムを提供することができる。また、従来の無線タグの中にはソフトウェアプログラムによってその動作を制御できるものもあり、本実施形態は、これら既存の無線タグを本実施形態を実現するソフトウェアプログラムで書き換えることで実施できる。このため、新たにロジック回路を設計する必要がなく、コストが抑えられる点で有利である。
【００８６】
以上、本発明を実施の形態をもとに説明した。これらの実施形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００８７】
上記の説明では、タグ２００内でのデータの計算を行う論理演算部２０８はプログラマブルなハードウェアであることを前提として説明したが、論理演算部２０８は固定的なロジック回路を用いて実現してもよい。この場合、プログラムで制御する従来タイプの無線タグよりも動作が高速となりうる点で有利である。
【００８８】
上記の説明では、タグ２００のＩＤｔの更新（ステップＳ２０）に合わせてサーバ３００のＩＤｓを更新する（ステップＳ３６）ことで、タグ２００とサーバ３００とが共有するＩＤの同期を取ったが、これとは逆にサーバ３００のＩＤｓの更新に合わせて、タグ２００のＩＤｔの更新をするようにしてもよい。具体的には、アップデート情報として例えばＩＤｓとＨ（Ｒ，Ｎ）との排他的論理和ＳＩＤをＵとともにタグ２００に送信し、タグ２００側でアップデートの正当性の有無に関わらず更新するようにしてもよい。この場合、サーバ３００側でサーバ側一方向性ハッシュ関数演算部３１８を用いてＩＤの更新を行うので、万が一、生成したＩＤが他のタグのＩＤと衝突したとしても、ＩＤを作り直すことができ、ＩＤの衝突を防ぐことができる点で有利である。
【００８９】
上記の説明では、Ｒのビット数はＩＤや共有鍵のビット数ｍと同一のビット数を用いたが、必ずしも同一のビット数でなくてもよい。例えばＲのビット数についてｍよりも小さなビット数を用いれば送受信の使用帯域を少なくできる点で有利である。逆に、ｍより大きなビット数を用いれば、乱数であるＲのバリエーションが増えることから、攻撃に対してより堅牢になる点で有利である。
【符号の説明】
【００９０】
１００  無線タグ管理システム、  ２００  タグ、  ２０８  論理演算部、  ２１０  メモリ回路、  ２１２  伝送電力取得部、  ２１６  タグ側連結部、  ２１８  タグ側一方向性ハッシュ関数演算部、  ２２０  タグ側比較部、  ２２２  タグ側排他的論理和演算部、  ２２４  タグ側乱数ビット列Ｒ格納部、  ２２６  タグ側ビット列Ｎ格納部、  ２２８  タグ側共有鍵Ｋｔ格納部、  ２３０  ワークエリア、  ２３２  タグ側識別子ＩＤｔ格納部、  ３００  サーバ、  ３０８  計算部、  ３１０  情報記憶部、  ３１６  サーバ側連結部、  ３１８  サーバ側一方向性ハッシュ関数演算部、  ３２０  サーバ側比較部、  ３２２  サーバ側排他的論理和演算部、  ３２４  サーバ側乱数ビット列Ｒ格納部、  ３２６  サーバ側ビット列Ｎ格納部、  ３２８  サーバ側共有鍵Ｋｓ格納部、  ３３０  ＩＤ’格納部、  ３３２  サーバ側識別子ＩＤｓ格納部、  ３３４  ＴＫ格納部、  ３３６  第１の秘密情報Ｓ格納部、  ３３８  第２の秘密情報Ｐ格納部、  ３４０  ＴＩＤ格納部、  ３４２  乱数生成部、  ３４４  更新部。
【図１】
0005419083.tif 000003
【図２】
0005419083.tif 000004
【図３】
0005419083.tif 000005
【図４Ａ】
0005419083.tif 000006
【図４Ｂ】
0005419083.tif 000007
【図４Ｃ】
0005419083.tif 000008