[本発明を適用した通信システムの一実施の形態]
図1は、本発明を適用した通信システム(システムとは、複数の装置が論理的に集合した物をいい、各構成の装置が同一筐体中にあるか否かは、問わない)の一実施の形態の構成例を示すブロック図である。
図1において、通信システムは、リーダライタ10、及び、無線タグ20から構成される。
リーダライタ10は、アンテナ11からRF信号を出力することにより、無線タグ20との間で、非接触で近接通信を行い、無線タグ20(が内蔵するメモリ部24)に、データを記憶させ(書き込み)、また、無線タグ20からデータを読み出す。
すなわち、リーダライタ10は、アンテナ11、RF部12、CPU(Central Processing Unit)13、メモリ部14、及び、乱数生成部15を有する。
アンテナ11は、例えば、コイルとコンデンサとからなる共振回路で構成され、RF部12からのRF信号を送信する。
RF部12は、無線タグ20との間で近接通信を行う。
すなわち、RF部12は、RF信号としての、キャリアをCPU13からのコマンドやデータに従って変調することにより得られる変調信号を、アンテナ11から出力することで、コマンドやデータを、無線タグ20に送信する。
また、RF部12は、RF信号としてのキャリアを、アンテナ11から出力し、無線タグが、そのRF信号としてのキャリアを負荷変調することで送信してくるデータ等を受信する。
CPU13は、メモリ部14に記憶されたプログラムを実行することにより、リーダライタ10を構成する各ブロックの制御、その他の処理を行う。
メモリ部14は、CPU13が実行するプログラムを記憶する。また、メモリ部14は、無線タグ20から読み出されたデータや、無線タグ20に書き込むデータ等を記憶する。
乱数生成部15は、無線タグ20が正当な装置であるかどうかを(リーダライタ10が)認証する片側認証に用いられる乱数を生成する。
無線タグ20は、リーダライタ10に近接すると、リーダライタ10がアンテナ11から出力するRF信号を電源として動作を開始し、リーダライタ10との間で近接通信を行う。
近接通信では、リーダライタ10は、RF信号をデータに従って変調することにより、データを送信し、無線タグ20は、リーダライタ10がRF信号によって送信してくるデータを受信して、内蔵するメモリ部24に書き込む。
また、無線タグ20は、メモリ部24に記憶されたデータを読み出し、リーダライタ10から送信されてくるRF信号を負荷変調することで、データを、リーダライタ10に送信する。
すなわち、無線タグ20は、アンテナ21、RF部22、コマンドシーケンサ部23、及び、メモリ部24を有する。
アンテナ21は、例えば、コイルとコンデンサとからなる共振回路で構成され、リーダライタ10からのRF信号を受信し、RF部22に供給する。
RF部22は、リーダライタ10との間で近接通信を行う。
すなわち、RF部22は、リーダライタ10と無線タグ20とが近接することにより、アンテナ21で、リーダライタ10からのRF信号が受信されると、そのRF信号から電源となる電力を得て、必要なブロックに供給する。
また、RF部22は、リーダライタ10からのRF信号を、コマンドやデータに復調し、コマンドシーケンサ部23に供給する。
さらに、RF部22は、コマンドシーケンサ部23から供給されるデータに従って、リーダライタ10からのRF信号を負荷変調することで、データを、リーダライタ10に送信する。
コマンドシーケンサ部23は、RF部22から供給される、リーダライタ10からのコマンドに従って、シーケンス制御を行うことで、メモリ部24に対するデータの読み書き等の制御を行う。
すなわち、コマンドシーケンサ部23は、リーダライタ10からのコマンドが、データの書き込みを要求するライトコマンドである場合、そのライトコマンドとともに、リーダライタ10から送信され、RF部22から供給されるデータを、メモリ部24に書き込む。
また、コマンドシーケンサ部23は、リーダライタ10からのコマンドが、データの読み出しを要求するリードコマンドである場合、メモリ部24からデータを読み出し、RF部22に供給する。
メモリ部24は、例えば、EEPROM等の不揮発性メモリであり、コマンドシーケンサ部23の制御(管理)の下、データを記憶する。
ここで、以上のように、リーダライタ10は、無線タグ20を認証するのに用いる乱数を生成する乱数生成部15を有するが、無線タグ20は、リーダライタ10を認証するのに用いる乱数を生成する回路を有していない。
したがって、無線タグ20は、乱数を生成する回路を有していない分、小規模化、かつ、低コスト化することができる。
なお、無線タグ20は、乱数を生成する回路を有していないので、乱数を用いて、リーダライタ10を認証することはできない。
しかしながら、無線タグ20において、リーダライタ10の認証を一切行わないのは、セキュリティ上好ましいことではない。
そこで、無線タグ20は、後述するような、いわば簡易的な認証方法によって、リーダライタ10の認証を行うことで、不正なリーダライタからのアクセスを制限し、これにより、必要最低限以上のセキュリティを確保する。
[メモリ部24の論理フォーマット]
図2は、図1の無線タグ20が有するメモリ部24の論理フォーマットを説明する図である。
メモリ部24の記憶領域の一部は、例えば、定期券や、所定のサービス提供者が管理する電子マネー、イベント等のチケット等のサービスに割り当てられる最小単位の記憶領域であるユーザブロックになっている。
メモリ部24には、1個以上のユーザブロックが設けられる。
ここで、サービスには、1個以上のユーザブロックが割り当てられ、その1個以上のユーザブロックに、サービスを提供するためのデータが記憶される。
ユーザブロックは、複数であるM+1個のユニットを有する(Mは、1以上の整数)。
ユニットには、サービスを提供するためのデータが書き込まれる。但し、ユーザブロックを構成するM+1個のユニットのうちの1個のユニットは、ユーザブロックに書き込まれるデータをバッファリングするバッファとして機能する。
以上のように、ユーザブロックを構成する1個のユニットは、バッファとして機能するため、ユーザブロックは、バッファとして機能する1個のユニットと、サービスを提供するためのデータを記憶する1以上のM個のユニットとの、合計で、複数であるM+1個のユニットを有する。
ここで、以下、ユーザブロックを構成するM+1個のユニットのうちの、バッファとして機能するユニットを、バッファユニットともいい、バッファユニットではないユニットを、データユニットともいう。
図2では、ユーザブロックを構成するM+1個のユニットのうちの、M+1番目のユニットが、バッファユニットになっており、他の1ないしM番目のM個のユニットは、データユニットになっている。
なお、バッファユニットとなるユニットは、ユーザブロックに対するデータの書き込みが行われると変化するが、その説明は、後述する。
ユニットは、1以上であるK個のページを有する。
ページは、メモリ部24に対する書き込みが行われる最小単位の記憶領域であり、図2では、1ページは、Nバイトの記憶領域になっている。
ここで、図2では、ユニットが有するページのうちの1ページは、メモリ部24の記憶領域を管理するための管理情報を記憶するページ(管理ページ)として使用される。
すなわち、図2では、ユニットを構成するK個のページのうちの特定の1個のページは、そのユニットを管理するための管理情報が記憶される管理ページになっている。
したがって、図2では、ユニットには、データを記憶する1ページ以上のページ(データページ)と、1ページの管理ページとが必要であるため、ユニットを構成するページ数Kは、複数である。
なお、図2では、ユニットを構成するK個のページのうちのK番目のページが、管理ページになっている。管理ページとなるページは、(バッファユニットのように)変化せず、固定のページである。
管理ページには、ユニットナンバ、(1個の)シーケンスナンバ、及び、エラー検出コードが、ユニットの管理情報として書き込まれる。
ユニットナンバは、そのユニットナンバが書き込まれる管理ページを有するユニットを特定する情報である。
シーケンスナンバは、メモリ部24にデータが書き込まれるごとに規則的に更新される値であり、例えば、直前の値に対して、1などの所定値をインクリメント又はデクリメントした値や、直前の値を引数として所定の関数を演算することにより求められる値、入力値と出力値とを対応付けたテーブルを用い、直前の値を入力値として求められる出力値等を採用することができる。
なお、ここでは、例えば、メモリ部24にデータが書き込まれるごとに1ずつインクリメントされる値を、シーケンスナンバとして用いることとする。
エラー検出コードは、ユニットに書き込まれたデータの誤り(エラー)を検出する誤り検出用のコードで、例えば、CRC(Cyclic Redundancy Checking)等である。
[メモリ部24に対するデータの書き込み制御]
図3は、コマンドシーケンサ部23による、メモリ部24に対するデータの書き込みの制御を説明する図である。
図3において、データが書き込まれるユニットを有するユーザブロックは、M+1個のユニット#1,#2,・・・,#M+1を有する。
そして、図3では、データの書き込みが行われる直前(書き込み前)においては、M+1個のユニット#1ないし#M+1のうちの、例えば、M+1番目のユニット#M+1が、バッファユニットになっており、他の1ないしM番目のユニット#1ないし#Mが、データユニットになっている。
また、図3では、書き込み前においては、データユニット#mのユニットナンバS_PADは、値mになっている。
なお、バッファユニットには、ユニットナンバS_PADは付与されないが、図3では(後述する図5でも同様)、便宜上、バッファユニットになっているユニット#M+1のユニットナンバS_PADを、バッファユニットを表す値としての0としてある。
また、図3では、書き込み前のデータユニット#1のシーケンスナンバSEQが、値Xになっている。他のデータユニット#2ないし#MのシーケンスナンバSEQの図示は、省略してある。
ここで、1つのユニット#mは、K個のページから構成される。いま、ユーザブロックの1番目のユニット#1の1番目のページを、第1ページということとすると、ユニット#mは、第(m-1)K+1ページないし第mKページのK個のページから構成される。そして、各ユニット#mの最後のページである第mKページは、管理ページである。
いま、例えば、リーダライタ10から無線タグ20に対して、ユニットナンバS_PADが値1のユニットへのデータの書き込みを要求するライトコマンドが、データとともに送信されてきたとする。
この場合、コマンドシーケンサ部23は、リーダライタ10からのライトコマンドに従い、そのライトコマンドとともに送信されてきたデータを、書き込みを行うべき対象のユニットである対象ユニット、すなわち、ユニットナンバS_PADが値1になっているユニット#1(ライトコマンドによって書き込みが要求されているユニットナンバS_PADのユニット)ではなく、バッファユニットになっているユニット#M+1に書き込む。
さらに、コマンドシーケンサ部23は、バッファユニットになっているユニット#M+1の管理ページに、対象ユニットであるユニット#1のユニットナンバS_PAD=1と同一のユニットナンバS_PAD=1、所定の値Yに更新されたシーケンスナンバSEQ、及び、エラー検出コードを書き込む。
ここで、図3では(後述する図4でも同様)、エラー検出コードの図示を省略してある。
また、図3において、バッファユニットになっているユニット#M+1の管理ページに書き込まれるシーケンスナンバSEQの値Yは、対象ユニットであるユニット#1の管理ページに書き込まれているシーケンスナンバSEQ=Xを1だけインクリメントすることにより更新した値X+1である。
以上のように、バッファユニットになっているユニット#M+1の管理ページに、値が1のユニットナンバS_PAD、所定の値Yに更新されたシーケンスナンバSEQ、及び、エラー検出コードが書き込まれることで、ユニット#M+1は、バッファユニットではなく、ユニットナンバS_PADが値1のデータユニットとなる。
その結果、この時点では、ユニットナンバS_PADが値1のユニットは、ユニット#1及び#M+1の2個となる。
但し、ユニット#M+1のシーケンスナンバSEQ=Yは、ユニット#1のシーケンスナンバSEQ=Xよりも新しい値、すなわち、シーケンスナンバSEQ=Xを更新した値X+1になっている。
したがって、ユニットナンバS_PADが値1の、2個のユニット#1及び#M+1については、シーケンスナンバSEQを参照することで、最新のデータが書き込まれたユニット#M+1と、データが過去に書き込まれたユニット#1(ユニットナンバS_PADが値1のユニットに書き込まれたデータのうちの、最新のデータの直前に書き込まれたデータを記憶しているユニット)とを区別することができる。
ここで、ユニットナンバS_PADが同一の2個のユニットが存在する場合に、その2個のユニットのうちの、最新のデータが書き込まれたユニット(本実施の形態では、シーケンスナンバが大きい方のユニット)を、新ユニットともいい、データが過去に書き込まれたユニット(シーケンスナンバが小さい方のユニット)を、旧ユニットともいう。
その後、コマンドシーケンサ部23は、ユニットナンバS_PADが値1になっている2個のユニット#1及び#M+1のうちの旧ユニット、すなわち、対象ユニットであるユニット#1の管理ページをイレースし、イレース状態にすることで、ユニット#1を、新たに、バッファユニットとして、メモリ部24にデータを書き込む書き込み処理を完了する。
なお、上述したように、バッファユニットには、ユニットナンバS_PADは付与されないが、図3では、新たにバッファユニットになったユニット#1のユニットナンバS_PADを、バッファユニットであることを表す値0としてある。
以上のように、コマンドシーケンサ部23は、リーダライタ10からのライトコマンドに従い、データを、バッファユニットであるユニット#M+1に書き込み、バッファユニットのユニットナンバとして、対象ユニットであるユニット#1のユニットナンバS_PAD=1を書き込み、ユニット#1を、新たなバッファユニットとすることで、結果的に対象ユニットとなった、ユニットナンバS_PADが値1のユニット#M+1へのデータの書き込みを行う。
その結果、メモリ部24では、ユニットナンバS_PADが値1のユニットに記憶されるデータに関して、最新のデータ(図3では、ユニット#M+1に書き込まれたデータ)が、直前(前回)のデータ(図3では、ユニット#1に書き込まれていたデータ)を残したまま書き込まれるので、メモリコラプション、すなわち、例えば、メモリ部24にアクセスが行われている最中に、無線タグ20がリーダライタ10から離れること等によって、メモリ部24に記憶されたデータに不整合が生じた場合に対処することができる。
図4は、メモリコラプションに対する対処を説明する図である。
図4において、書き込み前においては、図3の場合と同様に、M+1番目のユニット#M+1が、バッファユニットになっており、他の1ないしM番目のユニット#1ないし#Mが、データユニットになっている。
また、書き込み前においては、データユニット#mのユニットナンバS_PADは、値mになっており、バッファユニットであるユニット#M+1のユニットナンバS_PADは、バッファユニットを表す値0になっている。
いま、例えば、図3の場合と同様に、リーダライタ10から無線タグ20に対して、ユニットナンバS_PADが値1のユニットを対象ユニットとするデータの書き込みを要求するライトコマンドが、データとともに送信されてきたとする。
この場合、コマンドシーケンサ部23は、図3で説明したように、リーダライタ10からのライトコマンドに従い、そのライトコマンドとともに送信されてきたデータを、バッファユニットになっているユニット#M+1(ユニットナンバS_PADが値0になっているユニット)に書き込む。
さらに、コマンドシーケンサ部23は、図3で説明したように、バッファユニットになっているユニット#M+1の管理ページに、対象ユニットであるユニット#1のユニットナンバS_PAD=1と同一のユニットナンバS_PAD=1、対象ユニットであるユニット#1のシーケンスナンバSEQ=Xを更新した値Y=X+1のシーケンスナンバSEQ、及び、エラー検出コードを書き込み、その後、対象ユニットであるユニット#1の管理ページをイレースし、イレース状態にすることで、ユニット#1を、新たに、バッファユニットとして、メモリ部24にデータを書き込む書き込み処理を完了する。
いま、書き込み処理の途中、すなわち、例えば、バッファユニットになっているユニット#M+1の管理ページに、ユニットナンバS_PAD=1、所定の値Yに更新されたシーケンスナンバSEQ、及び、エラー検出コードを書き込んでいる最中に、無線タグ20が、リーダライタ10から離れ、無線タグ20に、必要な電力が供給されなくなった(電源断になった)とする。
この場合、コマンドシーケンサ部23は、次に、リーダライタ10と無線タグ20とが近接することにより、電源が供給されて起動したとき(次回の起動時)に、メモリ部24の記憶内容をリカバリする。
すなわち、例えば、バッファユニットになっているユニット#M+1の管理ページに、ユニットナンバS_PAD=1、所定の値YのシーケンスナンバSEQ、及び、エラー検出コードのうちの、少なくとも、ユニットナンバS_PAD=1、及び、所定の値Yに更新されたシーケンスナンバSEQが書き込まれた後に、電源断になったとすると、ユニットナンバS_PADが値1で同一の2個のユニット#1及び#M+1が存在する。
図3で説明したように、ユニットナンバS_PADが値1の、2個のユニット#1及び#M+1については、シーケンスナンバSEQを参照することで、最新のデータが書き込まれたユニット(新ユニット)#M+1と、データが過去に書き込まれたユニット(旧ユニット)#1とを区別することができる。
次回の起動時、コマンドシーケンサ部23は、新ユニットであるユニット#M+1の管理ページのエラー検出コードとしてのCRCを用いて、誤り検出を行い、誤りが検出されなかった場合(エラー検出コードが正常である場合)、新ユニットであるユニット#M+1へのデータの書き込みが正常に完了しているとして、旧ユニットであるユニット#1の管理ページをイレースし、イレース状態にすることで(図4では、ユニットナンバS_PADが、バッファユニットであることを表す値0にされている)、ユニット#1を、バッファユニットとする。
そして、その後、図3で説明したように、バッファユニットへの新たなデータの書き込みが行われる。
一方、新ユニットであるユニット#M+1の管理ページのエラー検出コードとしてのCRCを用いた誤り検出の結果、誤りが検出された場合(エラー検出コードがエラーである場合)、コマンドシーケンサ部23は、新ユニットであるユニット#M+1へのデータの書き込みが正常に完了していないとして、メモリ部24の状態を、例えば、新ユニットであるユニット#M+1へのデータの書き込みが行われる直前の状態に戻す。
すなわち、コマンドシーケンサ部23は、新ユニットであるユニット#M+1の管理ページをイレースし、イレース状態にすることで(図4では、ユニットナンバS_PADが、バッファユニットであることを表す値0にされている)、ユニット#M+1を、バッファユニットとする。
そして、その後、図3で説明したように、バッファユニットへの新たなデータの書き込みが行われる。
[片側認証]
図5は、片側認証を説明するための図である。
ここで、図1で説明したように、リーダライタ10は、無線タグ20を認証するのに用いる乱数を生成する乱数生成部15を有するが、無線タグ20は、リーダライタ10を認証するのに用いる乱数を生成する回路を有していない。
そこで、乱数生成部15を有するリーダライタ10は、乱数生成部15が生成する乱数を用いて、いわゆるチャレンジアンドレスポンス方式により、無線タグ20を認証する片側認証を行う。
このため、リーダライタ10のメモリ部14、及び、無線タグ20のメモリ部24は、片側認証に必要な情報を記憶している。
図5は、リーダライタ10のメモリ部14、及び、無線タグ20のメモリ部24が記憶している、片側認証に必要な情報を示す図である。
リーダライタ10のメモリ部14には、リーダライタ10が提供するサービスに固有の鍵である固有鍵KGが記憶されている。
一方、無線タグ20のメモリ部24には、無線タグ20を識別する識別情報としてのユニークなIDである個別ID(=UID)が記憶されている。
さらに、無線タグ20のメモリ部24には、無線タグ20に固有の鍵である個別鍵UCKが記憶されている。
個別鍵UCKは、個別IDと、固有鍵KGとを用いて生成される。すなわち、個別鍵UCKは、個別IDに、固有鍵KGに対応した処理を施す(例えば、個別IDを、固有鍵KGによって暗号化する)ことによって生成される。
したがって、固有鍵KGに対応した処理を、{}KGと表すこととすると、個別鍵UCKは、式UCK={UID}KGで表される。
なお、無線タグ20が、複数のサービスに利用される場合には、その複数のサービスの数だけの個別鍵UCKが、無線タグ20のメモリ部24に記憶される。
以下では、説明を簡単にするために、無線タグ20が有するメモリ部24には、ユーザブロックが1個だけ存在し、したがって、無線タグ20が利用可能なサービスも、1つだけであることとする。
図6は、リーダライタ10、及び、無線タグ20において、リーダライタ10が、無線タグ20を認証する片側認証を行い、無線タグ20が、リーダライタ10の認証を行わない場合の処理を説明する図である。
例えば、無線タグ20が、リーダライタ10にかざされること等によって、リーダライタ10と無線タグ20とが近接した状態となると、リーダライタ10と無線タグ20との間で、近接通信が開始される。
そして、ステップS11において、リーダライタ10の乱数生成部15は、乱数Rを生成し、RF部12に供給する。
ステップS12において、RF部12は、乱数生成部15からの乱数Rを、アンテナ11を介して、無線タグ20に送信し、無線タグ20のRF部22は、リーダライタ10のRF部12からの乱数Rを、アンテナ21を介して受信し、コマンドシーケンサ部23に供給する。
ステップS21において、コマンドシーケンサ部23は、RF部22からの乱数Rと、メモリ部24に記憶された個別鍵UCKとを用いて、リーダライタ10と無線タグ20との間のセッションに用いるセッション鍵KSを生成する。
すなわち、コマンドシーケンサ部23は、乱数Rに、個別鍵UCKに対応した処理を施すことによって、セッション鍵KS={R}UCKを生成する。
その後、ステップS22において、コマンドシーケンサ部23は、RF部22を制御することにより、RF部22に、乱数Rを受信した旨を通知するレスポンスを、リーダライタ10に対して送信させる。
リーダライタ10のRF部12は、無線タグ20(のRF部22)からのレスポンスを受信する。そして、ステップS13において、リーダライタ10のCPU13は、RF部12を制御することにより、無線タグ20の個別ID=UIDと、その個別IDを正当性を検証するための、その個別IDの暗号化データとしての、例えば、MAC(Message Authentication Code)値とを要求するリードコマンドを、無線タグ20に送信する。
無線タグ20では、RF部22が、リーダライタ10(のRF部12)からのリードコマンドを受信し、コマンドシーケンサ部23に供給する。
ステップS23において、コマンドシーケンサ部23は、RF部22からのリードコマンドに従い、メモリ部24から、個別ID=UIDを読み出し、その個別IDと、直前に生成したセッション鍵KSとを用いて、個別ID=UIDの暗号化データ(第3の暗号化データ)としてのMAC値T=MAC(KS,UID)を生成する。
そして、コマンドシーケンサ部23は、個別ID=UIDと、その個別IDを用いて生成したMAC値Tとを、RF部22に供給する。
ステップS24において、RF部22は、コマンドシーケンサ部23からの個別ID=UID、及び、MAC値Tを、リーダライタ10に送信する。
ここで、個別ID=UIDとセッション鍵KSとを用いて、MAC値T=MAC(KS,UID)を生成する方法としては、個別ID=UIDを、セッション鍵KSによって、DES(Data Encryption Standard)等の所定の暗号化方式で暗号化する方法や、個別ID=UIDとセッション鍵KSとを用いて、所定のハッシュ関数を演算する方法等を採用することができる。
なお、MAC値Tは、メッセージ(いまの場合、個別ID=UID)が改竄されていないことを検証することができれば良いので、元の情報(ここでは、個別ID=UIDやセッション鍵KS)を復号することができる値である必要はない。
したがって、MAC値Tの生成には、例えば、一方向関数を用いることができる。
リーダライタ10のRF部12は、無線タグ20(のRF部22)からの個別ID=UID、及び、MAC値Tを受信し、CPU13に供給する。
ステップS14において、CPU13は、メモリ部14から固有鍵KGを読み出し、その固有鍵KGと、RF部12からの個別ID=UIDとを用いて、無線タグ20の個別鍵UCK={UID}KGを生成する。
そして、ステップS15において、CPU13は、個別鍵UCKと、直前に乱数生成部15が生成した乱数Rとを用い、無線タグ20と同様にして、セッション鍵KS={R}UCKを生成する。
その後、ステップS16において、CPU13は、セッション鍵KSと、RF部12からの個別ID=UIDとを用いて、その個別ID=UIDの暗号化データ(第4の暗号化データ)としてのMAC値T'=MAC(KS,UID)を、無線タグ20と同様にして生成する。
そして、ステップS17において、CPU13は、以上のようにして生成したMAC値T'と、RF部12からのMAC値Tとを比較する。
MAC値T'とTとの比較の結果、MAC値T'とTとが等しくない場合、CPU13は、無線タグ20の認証に失敗したとして、所定のエラー処理(例えば、図示せぬディスプレイに、認証が失敗した旨を表示する処理等)を行って、処理を終了する。
したがって、リーダライタ10は、認証に失敗した無線タグ20へのアクセスを行わない。
一方、MAC値T'とTとが等しい場合、CPU13は、無線タグ20の認証に成功したとして、以下、無線タグ20に対するデータの読み書きが必要に応じて行われる。
以上のように、リーダライタ10が、乱数を用い、片側認証を行う場合には、正当なリーダライタ10が、不正な無線タグにアクセスすることを防止することができる。
しかしながら、リーダライタ10が、片側認証を行うだけでは、不正なリーダライタが、正当な無線タグ20にアクセスすることを防止することができない。
そこで、無線タグ20は、リーダライタ10が行う片側認証を利用して、簡易的な認証方法によって、リーダライタ10の認証を行う。
[無線タグ20によるリーダライタ10の認証]
図7は、リーダライタ10が、無線タグ20を認証する片側認証を行い、無線タグ20が、その片側認証を利用して、リーダライタ10の認証を行う場合の、リーダライタ10、及び、無線タグ20の処理を説明する図である。
例えば、無線タグ20が、リーダライタ10にかざされること等によって、リーダライタ10と無線タグ20とが近接した状態となると、リーダライタ10と無線タグ20との間で、近接通信が開始される。
そして、ステップS51において、リーダライタ10の乱数生成部15は、乱数Rを生成し、RF部12に供給する。
ステップS52において、RF部12は、乱数生成部15からの乱数Rを、無線タグ20に送信し、無線タグ20のRF部22は、リーダライタ10のRF部12からの乱数Rを受信し、コマンドシーケンサ部23に供給する。
ステップS71において、コマンドシーケンサ部23は、RF部22からの乱数Rと、メモリ部24に記憶された個別鍵UCKとを用いて、セッション鍵KSを生成する。
その後、ステップS72において、コマンドシーケンサ部23は、RF部22を制御することにより、RF部22に、乱数Rを受信した旨を通知するレスポンスを、リーダライタ10に対して送信させる。
リーダライタ10のRF部12は、無線タグ20(のRF部22)からのレスポンスを受信する。そして、ステップS53において、リーダライタ10のCPU13は、RF部12を制御することにより、無線タグ20の個別ID=UID、その個別IDの正当性を検証するためのMAC値、及び、シーケンスナンバSEQ(の読み出し)を要求するリードコマンドを、無線タグ20に送信する。
ここで、メモリ部24の論理フォーマットが、図2に示したようになっており、ユニットごとに、管理情報を記憶する管理ページが存在し、したがって、管理情報に含まれるシーケンスナンバSEQが、ユニットごとに存在する場合には、ステップS53において、CPU13がリードコマンドによって要求するシーケンスナンバSEQは、データの書き込みを行う対象ユニットのシーケンスナンバSEQである。
無線タグ20では、RF部22が、リーダライタ10(のRF部12)からのリードコマンドを受信し、コマンドシーケンサ部23に供給する。
ステップS73において、コマンドシーケンサ部23は、RF部22からのリードコマンドに従い、メモリ部24から、個別ID=UIDと、対象ユニットのシーケンスナンバSEQ=Xを読み出す。
さらに、ステップS73において、コマンドシーケンサ部23は、メモリ部24から読み出した個別IDと、直前に生成したセッション鍵KSとを用いて、個別ID=UIDの暗号化データ(第3の暗号化データ)としてのMAC値T=MAC(KS,UID)を生成する。
そして、コマンドシーケンサ部23は、個別ID=UID、シーケンスナンバSEQ=X、及び、MAC値Tを、RF部22に供給する。
ステップS74において、RF部22は、コマンドシーケンサ部23からの個別ID=UID、シーケンスナンバSEQ=X、及び、MAC値Tを、リーダライタ10に送信する。
リーダライタ10のRF部12は、無線タグ20(のRF部22)からの個別ID=UID、シーケンスナンバSEQ=X、及び、MAC値Tを受信し、CPU13に供給する。
ステップS54において、CPU13は、メモリ部14から固有鍵KGを読み出し、その固有鍵KGと、RF部12からの個別ID=UIDとを用いて、無線タグ20の個別鍵UCK={UID}KGを生成する。
そして、ステップS55において、CPU13は、個別鍵UCKと、直前に乱数生成部15が生成した乱数Rとを用い、無線タグ20と同様にして、セッション鍵KS={R}UCKを生成する。
その後、ステップS56において、CPU13は、セッション鍵KSと、RF部12からの個別ID=UIDとを用いて、その個別ID=UIDの暗号化データ(第4の暗号化データ)としてのMAC値T'=MAC(KS,UID)を生成する。
そして、ステップS57において、CPU13は、以上のようにして生成したMAC値T'と、RF部12からのMAC値Tとを比較する。
MAC値T'とTとの比較の結果、MAC値T'とTとが等しくない場合、CPU13は、無線タグ20の認証に失敗したとして、所定のエラー処理を行って、処理を終了する。
したがって、リーダライタ10は、認証に失敗した無線タグ20へのアクセスを行わない。
一方、MAC値T'とTとが等しい場合、CPU13は、無線タグ20の認証に成功したとして、無線タグ20がリーダライタ10を認証するのに用いる暗号化データとしての、例えば、MAC値Wを生成する。
すなわち、CPU13は、無線タグ20からのシーケンスナンバSEQ=Xに基づく値と、対象ユニットに書き込み対象のデータである書き込み対象データDとを用いて、そのシーケンスナンバSEQ=Xに基づく値、及び、書き込み対象データDの暗号化データ(第1の暗号化データ)としての、例えば、MAC値Wを生成する。
具体的には、CPU13は、シーケンスナンバSEQ=Xに基づく値、及び、書き込み対象データDの暗号化データとして、例えば、セッション鍵KS、対象ユニットのユニットナンバS_PAD=m、無線タグ20からのシーケンスナンバSEQ=Xそのもの、及び、書き込み対象データDのMAC値W=MAC(KS,S_PAD=m,SEQ=X,D)を生成する。
そして、CPU13は、書き込み対象データDの書き込みを要求するライトコマンド、書き込み対象データD、対象ユニットのユニットナンバS_PAD=m、及び、MAC値W=MAC(KS,S_PAD=m,SEQ=X,D)を、RF部12に供給する。
ステップS59において、リーダライタ10のRF部12は、CPU13からのライトコマンド、書き込み対象データD、対象ユニットのユニットナンバS_PAD=m、及び、MAC値Wを、無線タグ20に送信する。
無線タグ20では、RF部22が、リーダライタ10(のRF部12)からのライトコマンド、書き込み対象データD、対象ユニットのユニットナンバS_PAD=m、及び、MAC値Wを受信し、コマンドシーケンサ部23に供給する。
ステップS75において、コマンドシーケンサ部23は、直前にリーダライタ10に送信したシーケンスナンバSEQ=Xに基づく値と、RF部22で受信された書き込み対象データDとを用いて、そのシーケンスナンバSEQ=Xに基づく値、及び、RF部22で受信された書き込み対象データDの暗号化データ(第2の暗号化データ)としてのMAC値W'を生成する。
すなわち、コマンドシーケンサ部23は、シーケンスナンバSEQ=Xに基づく値、及び、書き込み対象データDの暗号化データとして、直前に生成したセッション鍵KS、対象ユニットのユニットナンバS_PAD=m、直前にリーダライタ10に送信したシーケンスナンバSEQ=Xそのもの、及び、RF部22で受信された書き込み対象データDのMAC値W'=MAC(KS,S_PAD=m,SEQ=X,D)を生成する。
そして、ステップS76において、コマンドシーケンサ部23は、以上のようにして生成したMAC値W'と、RF部22からのMAC値Wとを比較する。
MAC値W'とWとの比較の結果、MAC値W'とWとが等しくない場合、コマンドシーケンサ部23は、リーダライタ10の認証に失敗したとして、処理を終了する。
したがって、この場合、無線タグ20では、リーダライタ10からの書き込み対象データDの書き込みは、行われず、その後のリーダライタ10からのアクセスに対しても応答しない。
一方、MAC値W'とWとが等しい場合、ステップS77において、無線タグ20のコマンドシーケンサ部23は、リーダライタ10の認証に成功したとして、RF部22で受信された書き込み対象データD、すなわち、リーダライタ10から送信されてきた書き込み対象データDを、対象ユニット(となるバッファユニット)に書き込む。
その後、ステップS78において、コマンドシーケンサ部23は、対象ユニット(となるバッファユニット)の管理ページの管理情報の更新の処理、すなわち、対象ユニットの管理情報となるユニットナンバS_PAD、及び、シーケンスナンバSEQ=Xの更新、並びに、エラー検出コードの算出を行う。
そして、ステップS79において、コマンドシーケンサ部23は、RF部22を制御することにより、RF部22に、書き込みが完了した旨を通知するレスポンスを、リーダライタ10に対して送信させる。
リーダライタ10のRF部12は、無線タグ20(のRF部22)からのレスポンスを受信する。
以上のように、無線タグ20のRF部22は、シーケンスナンバSEQを、リーダライタ10に送信し、リーダライタ10のCPU13は、無線タグ20から送信されてくるシーケンスナンバSEQに基づく値と、無線タグ20のメモリ部24に書き込む書き込み対象データDとを用いて、MAC値W=MAC(KS,S_PAD=m,SEQ=X,D)(第1の暗号化データ)を生成する。
さらに、リーダライタ10のRF部12は、MAC値W、及び、書き込み対象データDを、無線タグ20に送信し、無線タグ20のRF部22は、そのMAC値W、及び、書き込み対象データDを受信する。
また、無線タグ20のコマンドシーケンサ部23は、(リーダライタ10に送信した)シーケンスナンバSEQに基づく値と、RF部22で受信された書き込み対象データDとを用いて、MAC値W'=MAC(KS,S_PAD=m,SEQ=X,D)(第2の暗号化データ)を生成する。
そして、無線タグ20のコマンドシーケンサ部23は、MAC値W'とWとが一致する場合にのみ、RF部22で受信された書き込み対象データDを、メモリ部24(の対象ユニット)に書き込み、メモリ部24に記憶された(対象ユニットの)シーケンスナンバSEQを更新する。
したがって、無線タグ20は、MAC値W'とWとの比較により、リーダライタ10が正当な装置であるかどうかの認証を行うことができ、さらに、その認証に成功した場合に、書き込み対象データDを、メモリ部24に書き込むことができる。
その結果、無線タグ20においては、セキュリティを確保すること、すなわち、不正なリーダライタによって、メモリ部24のデータが不正に書き換えられることを防止することができる。
また、相互認証を行う場合に比較して、リーダライタ10が無線タグ20にデータを書き込むのに要する時間(リーダライタ10と無線タグ20とが近接通信を開始してから、書き込み対象データDがメモリ部24に書き込まれるまでの時間)を短縮することができる。
すなわち、リーダライタ10と無線タグ20との間で相互認証を行う場合には、リーダライタ10が、無線タグ20の認証を行うトランザクションと、無線タグ20が、リーダライタ10の認証を行うトランザクションとの2つのトランザクションが必要な相互認証が行われ、その相互認証の成功後、リーダライタ10から無線タグ20に、書き込み対象データDが送信され、無線タグ20のメモリ部24に書き込まれる。
一方、図7で説明したように、リーダライタ10が、片側認証によって、無線タグ20の認証を行い、無線タグ20が、片側認証を利用した簡易的な認証方法によって、リーダライタ10の認証を行う場合には(このような、リーダライタ10と無線タグ20との間の認証を、以下、簡易認証ともいう)、リーダライタ10による片側認証が行われた後、リーダライタ10から無線タグ20に、書き込み対象データD、及び、MAC値Wが送信される。
そして、無線タグ20では、MAC値Wを用いて、そのMAC値Wの生成に用いられたシーケンスナンバSEQ、及び、書き込み対象データDの検証(MAC値WとW'との比較)が行われ、そのシーケンスナンバSEQ、及び、書き込み対象データDに問題がなければ(MAC値WとW'とが一致すれば)、書き込み対象データDが改竄されておらず、かつ、リーダライタ10の認証に成功したとして、書き込み対象データDが、メモリ部24に書き込まれる。
したがって、無線タグ20によるリーダライタ10の認証(及び、書き込み対象データDの検証)に用いるデータとして、書き込み対象データDが、リーダライタ10から無線タグ20に送信されるので、無線タグ20によるリーダライタ10の認証の成功後に、書き込み対象データDを、リーダライタ10から無線タグ20に送信する必要がない。
よって、簡易認証では、相互認証が成功してから、リーダライタ10から無線タグ20に、書き込み対象データDが送信される場合に比較して、リーダライタ10が無線タグ20にデータを書き込むのに要する時間を短縮することができる。
また、MAC値W及びW'の生成に用いられるシーケンスナンバSEQは、データが無線タグ20のメモリ部24に書き込まれるごとに規則的に値が更新されるので、リーダライタ10から無線タグ20に送信されるMAC値Wが盗聴され、そのMAC値Wを用いて、無線タグ20に対するリプレイアタックが行われても、そのリプレイアタックに用いられるMAC値Wは、無線タグ20において、更新後のシーケンスナンバSEQを用いて生成されるMAC値W'に一致しない。
したがって、リプレイアタックを防止することができる。
なお、図7では(後述する図8でも同様)、MAC値W及びW'の生成に、セッション鍵KS、対象ユニットのユニットナンバS_PAD=m、シーケンスナンバSEQ=X、及び、書き込み対象データDを用いたが、MAC値W及びW'は、対象ユニットのユニットナンバS_PAD=mを用いずに、セッション鍵KS、シーケンスナンバSEQ=X、及び、書き込み対象データDを用いて生成することができる。
但し、対象ユニットのユニットナンバS_PAD=mをも用いて、MAC値W及びW'を生成することにより、外部からのユニットナンバS_PAD=mの改竄、すなわち、書き込み対象データDを書き込む書き込み先のユニットが、不正に変更されることを防止することができる。
図8は、リーダライタ10、及び、無線タグ20が行う簡易認証の他の処理を説明する図である。
図7の簡易認証の処理では、MAC値W及びW'の生成に用いるシーケンスナンバSEQに基づく値として、シーケンスナンバSEQ=Xそのものを用いることとしたが、MAC値W及びW'の生成に用いるシーケンスナンバSEQに基づく値としては、その他、更新後のシーケンスナンバSEQ=X+1を採用することができる。
但し、MAC値W及びW'を、更新後のシーケンスナンバSEQ=X+1を用いて生成する場合には、リーダライタ10には、データがメモリ部24に書き込まれるごとに規則的に値が更新されるシーケンスナンバSEQの更新の規則を実装しておく(リーダライタ10に、シーケンスナンバSEQの更新の規則を認識させておく)必要がある。
図8では、リーダライタ10が、ステップS101ないしS109において、図7のステップS51ないしS59とそれぞれ同様の処理を行い、無線タグ20が、ステップS121ないしS129において、図7のステップS71ないしS79とそれぞれ同様の処理を行う。
但し、リーダライタ10は、図7のステップS58に対応するステップS108において、無線タグ10からのシーケンスナンバSEQ=Xを更新した更新後のシーケンスナンバSEQ=X+1を求め、シーケンスナンバSEQ=Xそのものに代えて、更新後のシーケンスナンバSEQ=X+1を用いて、MAC値W=MAC(KS,S_PAD=m,SEQ=X+1,D)を生成する。
また、無線タグ20は、図7のステップS75に対応するステップS125において、対象ユニットのシーケンスナンバSEQ=Xを更新した更新後のシーケンスナンバSEQ=X+1を求め、シーケンスナンバSEQ=Xそのものに代えて、更新後のシーケンスナンバSEQ=X+1を用いて、MAC値W'=MAC(KS,S_PAD=m,SEQ=X+1,D)を生成する。
以上のように、更新後のシーケンスナンバSEQ=X+1を用いて、MAC値W及びW'を生成する場合には、シーケンスナンバSEQ=Xが盗聴されたとしても、シーケンスナンバSEQの更新の規則を知らなければ、無線タグ20で生成されるMAC値W'と一致するMAC値Wを生成することはできないので、シーケンスナンバSEQそのものを用いて、MAC値W及びW'を生成する場合よりも、セキュリティを向上させることができる。
[メモリ部24の論理フォーマットの他の実施の形態]
図9は、図1の無線タグ20が有するメモリ部24の論理フォーマットの他の実施の形態を説明する図である。
図9の論理フォーマットは、メモリ部24の記憶領域の一部が、サービスに割り当てられる1個以上のユーザブロックになっている点で、図2の場合と共通する。
但し、図9の論理フォーマットは、メモリ部24の記憶領域の他の一部が、管理情報を記憶する管理ブロックになっている点で、管理情報がページ(管理ページ)に記憶される図2の場合と異なる。
ここで、図2では、ユニットには、データを記憶する1ページ以上のページ(データページ)と、1ページの管理ページとが必要であるため、ユニットは、複数のページで構成されるが、図9では、管理情報は、管理ブロックに記憶され、管理ページが不要であるため、ユニットは、1ページ以上で構成することができる。
図9では、ユニットは、1ページで構成されている。
したがって、図9では、ユニットは、ページに等しい。
また、図9では、ユーザブロックのユニット(ページに等しい)には、データと、そのデータのエラー検出コードとしてのCRCが記憶される。
管理ブロックは、例えば、ユーザブロックの個数の2倍の個数であるM'個のユニット(図9では、ページでもある)で構成される。
したがって、メモリ部24が、1個のユーザブロックを有することとすると、管理ブロックは、2個のユニットを有する。
管理ブロックには、ユーザブロックごとの管理情報が記憶される。1個のユーザブロックの管理情報は、管理ブロックの2個のユニットに記憶される。
ここで、1個のユーザブロックの管理情報を記憶する、管理ブロックの2個のユニットを、そのユーザブロックに対応する管理ブロックの2個のユニットともいう。
いま、ある1個のユーザブロックに注目すると、その注目する注目ユーザブロックに対応する管理ブロックの2個のユニット(ページ)のそれぞれには、注目ユーザブロックの管理情報として、注目ユーザブロックを構成するM+1個のユニットのユニットナンバS_PAD、及び、1個のシーケンスナンバ、並びに、それら(M+1個のユニットのユニットナンバS_PAD、及び、1個のシーケンスナンバ)のエラー検出コードとしてのCRCが記憶される。
ここで、注目ユーザブロックに対応する管理ブロックの2個のユニットには、注目ユーザブロックにデータが書き込まれるごとに、そのデータの書き込みの後に、注目ユーザブロックの管理情報が、交互に書き込まれる。
したがって、注目ユーザブロックに対応する管理ブロックの2個のユニットのうちの一方のユニットには、注目ユーザブロックの最新の管理情報が記憶されており、他方のユニットには、その最新の管理情報が書き込まれる直前の管理情報が記憶されている。
以上のように、注目ユーザブロックに対応する管理ブロックの2個のユニットには、注目ユーザブロックにデータが書き込まれるごとに、注目ユーザブロックの管理情報が、交互に書き込まれることによって、注目ユーザブロックの最新の管理情報と、その最新の管理情報が書き込まれる直前の管理情報とが記憶されるので、メモリコラプションに対処することができる。
なお、注目ユーザブロックに対応する管理ブロックの2個のユニット(ページ)それぞれの、M+1個のユニットのユニットナンバS_PADを記憶する記憶領域は、注目ユーザブロックを構成するM+1個のユニットのユニットナンバS_PADを特定するための情報(以下、ユニットナンバ特定情報ともいう)を記憶するM+1個の記憶領域(以下、ユニットナンバ用領域ともいう)に区分されている。
そして、注目ユーザブロックを構成するM+1個のユニット#1ないし#M+1のうちの、m番目のユニット#mのユニットナンバ特定情報として、値mが採用され、M+1個のユニットナンバ用領域のうちの、先頭からi番目のユニットナンバ用領域には、ユニットナンバS_PADが値iのユニット#mのユニットナンバ特定情報#mが記憶される。
したがって、M+1個のユニットナンバ用領域のうちの、先頭からi番目のユニットナンバ用領域に、ユニットナンバ特定情報#mが記憶されている場合、注目ユーザブロックを構成するM+1個のユニット#1ないし#M+1のうちの、m番目のユニット#mのユニットナンバS_PADは、値iである。
以上のように、図9では、ユニット#mのユニットナンバ特定情報#mが、i番目のユニットナンバ用領域に書き込まれることによって、ユニット#mのユニットナンバS_PADが、値iであることが特定されるので、実質的(等価的)に、管理情報には、ユニット#mのユニットナンバS_PAD#iが含まれているということができる。
ここで、図9では、上述したように、注目ユーザブロックの管理情報に、1個のシーケンスナンバSEQが含まれるので、そのシーケンスナンバSEQは、注目ユーザブロックのいずれのユニットに、データが書き込まれても更新される。
すなわち、図2では、ユニットごとに、管理情報が存在し、その管理情報に、1個のシーケンスナンバSEQが含まれるので、あるユニットの管理情報に含まれるシーケンスナンバSEQは、そのユニットに、データが書き込まれるごとに更新される。
一方、図9では、ユーザブロックごとに、管理情報が存在し、その管理情報に、1個のシーケンスナンバSEQが含まれるので、あるユーザブロックの管理情報に含まれるシーケンスナンバSEQは、そのユーザブロックのいずれのユニットに、データが書き込まれても更新される(ユーザブロックに、データが書き込まれるごとに更新される)。
なお、シーケンスナンバSEQは、メモリ部24に対して、1個だけ設けることができる。この場合、メモリ部24のどのユーザブロックの、どのユニットに、データが書き込まれても、メモリ部24に対して1個だけ設けられたシーケンスナンバSEQが更新される。
メモリ部24が、図9の論理フォーマットを有する場合も、図2の場合と同様にして、コマンドシーケンサ部23は、メモリ部24に対するデータの書き込みの制御を行う。
すなわち、例えば、データの書き込みが行われる直前(書き込み前)に、注目ユーザブロックのM+1個のユニット#1ないし#M+1のうちの、例えば、M+1番目のユニット#M+1が、バッファユニットになっており、他の1ないしM番目のユニット#1ないし#Mが、データユニットになっていることとする。
また、データユニット#mのユニットナンバS_PADが、値mになっており、注目ユーザブロックの(管理情報に含まれる)シーケンスナンバSEQが、値Xになっていることとする。
そして、いま、例えば、リーダライタ10から無線タグ20に対して、(注目ユーザブロックの)ユニットナンバS_PADが値1のユニットへのデータの書き込みを要求するライトコマンドが、データとともに送信されてきたとする。
この場合、コマンドシーケンサ部23は、リーダライタ10からのライトコマンドに従い、そのライトコマンドとともに送信されてきたデータを、書き込みを行うべき対象のユニットである対象ユニット、すなわち、ユニットナンバS_PADが値1になっているユニット#1(ライトコマンドによって書き込みが要求されているユニットナンバS_PADのユニット)ではなく、バッファユニットになっているユニット#M+1に書き込む。
その後、コマンドシーケンサ部23は、注目ユーザブロックの管理情報を更新する。
すなわち、注目ユーザブロックの管理情報としては、メモリ部24に、上述したように、最新の管理情報(以下、最新管理情報ともいう)と、その最新の管理情報が書き込まれる直前の管理情報(以下、直前管理情報ともいう)が記憶されている。
いま、メモリ部24に、注目ユーザブロックの最新管理情報として、管理情報C#tが記憶されており、注目ユーザブロックの直前管理情報として、管理情報C#t-1が記憶されていることとする。
コマンドシーケンサ部23は、バッファユニットになっているユニット#M+1のユニットナンバS_PADを、対象ユニットであるユニット#1のユニットナンバS_PAD=1と同一のユニットナンバS_PAD=1とし、新たにバッファユニットとするユニット#1のユニットナンバS_PADを、バッファユニットであることを表す値0とするように、管理情報C#tを更新する。
さらに、コマンドシーケンサ部23は、管理情報C#tに含まれるシーケンスナンバSEQを更新し、新たなエラー検出コードを算出する。
そして、以上の結果得られる管理情報を、管理情報C#t+1と表すこととすると、コマンドシーケンサ部23は、管理情報C#t+1を、注目ユーザブロックの管理情報として、メモリ部24の直前管理情報である管理情報C#t-1に上書きする形で書き込む。
その結果、管理情報C#t+1が、注目ユーザブロックの最新管理情報となり、管理情報C#tが、注目ユーザブロックの直前管理情報となる。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
すなわち、例えば、本実施の形態では、不揮発性メモリであるメモリ部24として、EEPROMを採用することとしたが、メモリ部24としては、EEPROM以外の、例えば、FeRAM(Ferroelectric Random Access Memory)等の不揮発性メモリを採用することが可能である。
また、本実施の形態では、メモリ部24に、データユニットの他に、バッファユニットを設けることとしたが、バッファユニットは、設けなくても良い。但し、バッファユニットを設けない場合には、メモリコラプションに対処することが困難となる。
なお、対称暗号アルゴリズムに従った相互認証では、リーダライタは、無線タグに、乱数を生成させ、その乱数を暗号化した暗号化データを、リーダライタに対して送信させる処理等を行わせるための専用のコマンドである認証専用コマンドを送信する。
したがって、無線タグは、そのような認証専用コマンドを解釈する必要がある。
また、対称暗号アルゴリズムに従った相互認証が行われる場合、相互認証後は、リーダライタと無線タグの間では、盗聴を防止するために、データが、乱数を用いて生成される暗号鍵を用いて暗号化されてやりとりされることがある。
データを暗号化してやりとりする場合には、データの復号が伴うため、データを、復号を伴わずに(平文で)やりとりする場合とは、別のコマンドが必要となる。
すなわち、データを暗号化してやりとりすることがある場合には、復号を伴わないデータのやりとりを行うための通常のリードコマンド及びライトコマンドの他に、データの復号を伴うデータのやりとりを行うための暗号化専用のリードコマンド及びライトコマンドが必要となる。
これに対して、リーダライタ10と無線タグ20とでは、対称暗号アルゴリズムに従った相互認証を行わず、また、データは、平文でやりとりされるので、認証専用コマンドや、暗号化専用のリードコマンド及びライトコマンドは、必要ない。
したがって、無線タグ20において解釈すべきコマンドの数を少なくすることができ、その結果、無線タグ20のコマンドシーケンサ部23としては、CPU等の高機能なプロセッサではなく、PLC(Programmable Logic Controller)を採用することができる。