説明

二次元コードの生成プログラム及び二次元コード

【課題】一般仕様の読取装置で読み取る利用者には秘匿データの存在を認識し得ない二次元コードに関する構成を提供する。
【解決手段】コード生成処理によって生成される二次元コードでは、ステップS133により、秘匿データコードが埋め草コードの一部または全部に代えて終端識別コードの後に配置される。これにより、終端識別コードの後に配置された秘匿データコードは、一般仕様の読取装置では読み取りの対象にならないので、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードによって秘匿しようとするデータの存在はわからない。したがって、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、秘密にして隠しておきたいデータ(以下「秘匿データ」または「秘匿するデータ」という)を含む二次元コードの生成プログラム及び二次元コードに関するものである。
【背景技術】
【0002】
秘匿データを含んだ二次元コードを生成したり読み取る技術として、例えば、下記特許文献1に開示される「情報送信方法及び携帯端末」がある。この従来技術では、送信側の携帯端末は、キー入力装置から入力された暗号キーにより送信データを暗号化しそれをQRコード(登録商標)に変換してQRコードを生成しそれを表示装置の画面に表示する(特許文献1;段落0020,0021、図4)。
【0003】
これに対し、受信側の携帯端末では、送信側の携帯端末の画面に表示されたQRコードの画像をカメラ等により読み込んでQRコードが暗号化されているか否かを判断した後、暗号化されている場合には暗号キーを要求する。そして、QRコードを逆変換するとともに入力された暗号キーにより送信データを復号して復元データを画面表示する(特許文献1;段落0022、図5)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−147006号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記特許文献1に開示される「情報送信方法及び携帯端末」によると、暗号化されているものをQRコードに逆変換した場合には、通常、暗号化されたデータそのものは文字情報として意味をなさないものであるため、携帯端末等の画面に表示される情報は意味不明なものであったり、画面表示の制御等に影響を与え得る制御コードに相当する情報であったりする。
【0006】
このため、意味不明な情報である場合には、当該携帯端末等の使用者に不信感を与え得るという問題や、それが暗号化された情報であることを認識し得る使用者には対しては、解読を試みようとする不用意な動機を与える可能性があることから、セキュリティ上の問題を生じ得る。
【0007】
また、制御コードに相当する情報である場合には、画面表示が乱れたり、その他のシステム上の問題にもつながり得るという問題がある。
【0008】
本発明は、上述した課題を解決するためになされたもので、その目的とするところは、一般仕様の読取装置で読み取る利用者には秘匿データの存在を認識し得ない二次元コードの生成プログラム及び二次元コードを提供することにある。
【課題を解決するための手段】
【0009】
上記目的を達成するため、第1の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする。
【0010】
請求項2の発明は、開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする。
【発明の効果】
【0011】
請求項1の発明によって生成される二次元コードは、秘匿するデータを表すコード語としてコード化された秘匿データコードを埋め草コードの一部または全部に代えて、終端識別コードの後に配置する。一般に、二次元コードの読取装置は、二次元コードのデコード処理において、コード領域に配置されたデータコードの先頭からコード列の終端を示す終端識別コードまでを読み取ってデコードするアルゴリズム仕様に設定されているため、通常、終端識別コードの後に配置される埋め草コード等は読み取りの対象にならない。このため、終端識別コードの後に、埋め草コードの一部または全部に代えて配置されるデータコードは、たとえそれが読み取り可能なコード語であっても、一般仕様の読取装置ではデコードすることはないので、終端識別コードの後に秘匿したいデータコード(秘匿データコード)を配置することにより、終端識別コードの前に配置されたデータコードは読み取ることはできても、当該秘匿データコードは読み取ることはできない。したがって、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードによって秘匿しようとするデータの存在はわからないので、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。
【0012】
請求項2の発明によれば、請求項1と同様の効果を奏する二次元コードを実現できる。
【図面の簡単な説明】
【0013】
【図1】図1(A) は、本発明の第1実施形態に係るQRコードプリンタとそれに接続されるパソコンとを示す説明図で、図1(B) は、当該QRコードプリンタのハードウェア構成例を示すブロック図である。
【図2】第1実施形態に係るQRコードプリンタにより実行されるコード生成処理の流れを示すフローチャートである。
【図3】図2に示すコード生成処理により情報処理されるデータやコードのフォーマット例を示す説明図で、図3(A) は印刷データのデータレコードの例、図3(B) はステップS115により並び替えた後の例、図3(C) はステップS121〜S137により各コードを付加した後の例、図3(D) は図3(C) に示す秘匿コードの構成例1、図3(E) は図3(C) に示す秘匿コードの構成例2、図3(F) は図3(C) に示す秘匿コードの構成例3、をそれぞれ示すものである。
【図4】1型のQRコードの構成例を示す説明図である。
【図5】QRコードリーダのハードウェア構成例を示すブロック図である。
【図6】図5のQRコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図7】図6に示す復号化処理の流れを示すフローチャートである。
【図8】本発明の第2実施形態に係るQRコードプリンタにより実行されるコード生成処理の流れを示すフローチャートである。
【図9】図8に示すコード生成処理により情報処理されるデータやコードのフォーマット例を示す説明図で、図9(A) は印刷データのデータレコードの例、図9(B) はステップS115により並び替えた後の例、図9(C) はステップS121〜S137により各コードを付加した後の例、図9(D) は図9(C) に示す秘匿コードの構成例1、図9(E) は図9(C) に示す秘匿コードの構成例2、図9(F) は図9(C) に示す秘匿コードの構成例3、をそれぞれ示すものである。
【図10】図6等の例とは異なるQRコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図11】図10に示す復号化処理の流れを示すフローチャートである。
【図12】本発明の第3実施形態に係るQRコードプリンタにより実行されるコード生成処理の流れを示すフローチャートである。
【図13】図12に示す加工処理の流れを示すフローチャートである。
【図14】図13に示す加工処理により情報処理されるコードのフォーマット例を示す説明図で、図14(A) は第2実施形態のコード生成処理により生成されたコードの例(図9(C) 相当)、図14(B) はステップS500により分散配置処理された秘匿コードの例、図14(C) はステップS500によりビットが並替え処理またはビットの値が変換処理された秘匿コードの例、図14(D) は図14(C) に示す秘匿コードの構成例、図14(E) は、図14(D) との比較として第2実施形態のコード生成処理により生成された秘匿コードの構成例(図9(D) 相当)、をそれぞれ示すものである。
【図15】図6、図10等の例とは異なるQRコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図16】図15に示す復号化処理の流れを示すフローチャートである。
【図17】図16に示す抽出処理の流れを示すフローチャートである。
【図18】図6、図10、図15等の例とは異なるQRコードリーダの制御回路により実行されるデコード処理の流れを示すフローチャートである。
【図19】図18のQRコードリーダの制御回路により実行される読取フラグ設定処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0014】
以下、本発明の実施形態について図を参照して説明する。なお、以下説明する各実施形態では、二次元コードの例として、QRコードを挙げるが、本発明に係る二次元コードはこれに限られることはなく、例えば、データマトリクス、マキシコード、CPコード、PDF417やRSSコンポジット等であってもQRコードと同様に本発明を適用することができる。
【0015】
[第1実施形態]
まず、本発明の第1実施形態に係るQRコードプリンタ10の構成を、図1を参照して説明する。なお、図1(A) には、本第1実施形態に係るQRコードプリンタ10とそれに接続されるパーソナルコンピュータ(以下「パソコン」という)1とを示す説明図が図示されており、また図1(B) には、QRコードプリンタ10のハードウェア構成例を示すブロック図が図示されている。
【0016】
図1(A) に示すように、QRコードプリンタ10は、ケーブル5を介してパソコン1に接続されることにより、パソコン1から出力されて当該QRコードプリンタ10に入力される英数字、漢字や記号等の文字データ(以下これらを「印刷データ」と総称する)に基づいてQRコードを生成してラベルP等に印刷する機能を有するものである。なお、ここでいう「QRコード」とは、日本工業規格(JIS)の二次元コードシンボル−QRコード−基本仕様(JIS X 0510:2004)に従うものである。
【0017】
パソコン1は、パソコン本体2およびディスプレイ3により構成されており、パソコン本体2は、図略の、MPU、メインメモリ(主記憶装置)、ハードディスク(補助記憶装置)、入出力インタフェース、通信インタフェース、キーボード、ポインティングデバイス等からなる情報処理装置で、またディスプレイ3は、パソコン本体2に接続されることによりパソコン本体2から出力される情報を画面表示可能な情報表示装置である。
【0018】
なお、このパソコン本体2には、QRコードプリンタ10のデバイスドライバがインストールされて(組み込まれて)おり、当該パソコン1の利用者が、QRコードとしてラベルPに印刷したい文字等を含んだ印刷データを、パソコン本体2からQRコードプリンタ10に対して任意に出力可能にしている。
【0019】
これに対し、QRコードプリンタ10は、図1(B) に示すように、主に、MPU11、メモリ12、インタフェース13、ローラ制御部14、ヘッド制御部15、ローラ17、ヘッド18等から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されている。
【0020】
MPU11は、QRコードプリンタ10全体を制御可能なマイクロコンピュータ(以下「マイコン」という)で、メモリバスを介して接続されるメモリ12とともに情報処理装置を構成し得るもので情報処理機能を有する。このMPU11には、メモリ12のほかに、インタフェース13、ローラ制御部14やヘッド制御部15も接続されている。なお、後述するコード生成処理は、このMPU11およびメモリ12により実行される。
【0021】
メモリ12は、半導体メモリ装置で、例えばRAM(DRAM、SRAM等)やROM(EPROM、EEPROM等)がこれに相当する。このメモリ12のうちのRAMには、前述したパソコン1から送られてくる文字データを蓄積するバッファ領域のほか、MPU11が算術演算や論理演算等の各処理時に利用する作業領域等も確保可能に構成されている。またROMには、後述のコード生成処理等を実行可能な所定プログラムやその他、ローラ制御部14やヘッド制御部15等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
【0022】
インタフェース13は、前述したパソコン1のパソコン本体2から送られてくる印刷データ等を受信可能にする入力インタフェースで、シリアルバス等を介してMPU11に接続されている。このインタフェース13を介してMPU11に入力された印刷データは、コード生成処理によって後述するように情報処理されてコード化される。
【0023】
ローラ制御部14は、ローラ17の駆動機構(図略)を制御し得る制御装置で、シリアルバス等を介してMPU11に接続されている。これにより、MPU11から受けた制御信号に従ってローラ17の回転の開始や停止あるいは回転方向等を制御している。
【0024】
ヘッド制御部15は、例えば、感熱用紙からなるラベルに対して任意のパターンを印刷し得るサーマルヘッドで、シリアルバス等を介してMPU11に接続されている。本実施形態では、後述のコード生成処理によって生成されたQRコードを感熱ラベルに印刷可能にするもので、前述したローラ制御部14による感熱ラベルの紙送りタイミングに同期して、QRコードを構成する位置検出パターン、タイミングパターンやデータコード等を当該ラベルに印刷する。
【0025】
なお、以下、ヘッド制御部15として、サーマルヘッドの場合を例示して説明するが、QRコードを印刷できるものであれば、例えば、インクジェット用やドットインパクト用のヘッドでも良いし、また印刷機構として、レーザプリンタやLEDプリンタ等であっても良い。
【0026】
このようにQRコードプリンタ10を構成することによって、パソコン1から出力されて当該QRコードプリンタ10に入力された印刷データは、インタフェース13を介してメモリ12のバッファ領域に一旦蓄えられた後、次に説明するコード生成処理に渡される。ここで、コード生成処理を図2〜図4を参照して説明する。なお、図2には、コード生成処理の流れを示すフローチャートが図示されている。また図3には、図2に示すコード生成処理により情報処理されるデータやコードのフォーマット例が図示されている。さらに図4には、1型のQRコードの構成例が図示されている。
【0027】
図2に示すように、コード生成処理は、QRコードプリンタ10の電源投入により起動するMPU11およびメモリ12によって開始され、まずステップS101により初期設定処理が行われる。この処理は、メモリ12の作業領域や印刷データを蓄えるバッファ領域をクリアしたり、所定のフラグやカウンタ等をクリアする。
【0028】
ステップS103では、印刷データを受信したか否かを判断する処理で、印刷データを受信するまで、このステップを繰り返す(S103;No)。そして、印刷データを受信したと判断すると(S103;Yes)、続くステップS105によりタイマーのカウント値をクリアする処理を行う。このステップS105でカウンタ値がクリアされるタイマーは、次のステップS107により所定時間の経過を計時するものである。
【0029】
ステップS107では、先のタイマーにより所定時間が経過したか否かを判断する処理が行われる。即ち、パソコン1から送られてくる印刷データに、暗号化等に関するデータが含まれているか否かを次のステップS111により判断する必要上、例えば、所定時間として1秒間が経過したか否かを判断し、この時間が経過するまでに、パソコン1から暗号化に関するデータが送られてこない場合には、所定時間の経過とともにステップS109に処理を移行する(S107;Yes)。
【0030】
これに対し、所定時間が経過していない場合には(S107;No)、次のステップS111により暗号化等に関するデータとして、秘匿する必要のあるデータ(以下「秘匿データ」という)のデータレコード中の位置関係を示す秘匿データ位置情報と暗号するために用いる暗号キー(暗号鍵)とを受信したか否かを判断する処理が行われる。そして、これらを受信していると判断した場合には(S111;Yes)、続くステップS113に処理を移行し、これらを受信していると判断できない場合には(S111;No)、前述したステップS107に処理を戻して、再度、時間の経過を判断する。
【0031】
そして、所定時間が経過したとステップS107により判断した場合には(S107;Yes)、ステップS109により所定のフラグに「0」をセットする。このフラグは、印刷データに秘匿データが含まれているか否かを示すもので、「0」がセットされている場合には、秘匿データが含まれていないことを示し、「1」がセットされている場合には、秘匿データが含まれていることを示す。このため、ステップS111により暗号化等に関するデータを受信していると判断した場合には(S111;Yes)、続くステップS113によりこのフラグに「1」をセットする処理が行われる。
【0032】
ステップS113により所定のフラグに「1」をセットすると、続くステップ115により、開示データおよび秘匿データを並び替える処理が行われる。即ち、印刷データに、第三者に開示するデータ(開示データ)と、第三者には秘密にして隠しておきたいデータ(秘匿データ)と、が含まれており、これらがデータレコード中で混在している場合に、ステップS111により受信した「秘匿データのデータレコード中の位置関係を示す位置情報」に基づいて、データの順番を入れ替えて、開示データの集まりと秘匿データの集まりとに分ける処理を行う。
【0033】
例えば、図3(A) に示すように、例えば、パソコン1から送られてくる印刷データのレコードに、開示データA、秘匿データα、開示データB、秘匿データβの順に並ぶデータが含まれていたとすると、ステップS115により、これらのデータの順番を入れ替えて図3(B) に示すように、開示データA、開示データB、秘匿データα、秘匿データβの順に並び替える処理を行う。これにより、開示データと秘匿データとがそれぞれまとめられるので、後のステップ121による終端識別コードの付加処理や、ステップS125による秘匿識別コードの付加処理等が容易になる。
【0034】
次のステップS117では、開示データや秘匿データ等の各データをJISの基本仕様(JIS X 0510:2004)に従って符号化する処理が行われる。これにより、開示するデータを表すコード語としてコード化された開示データコードが生成され、また秘匿するデータを表すコード語としてコード化された秘匿データコードが生成される。
【0035】
また続くステップS119では、開示データの各データに対する誤り訂正符号をJISの基本仕様(JIS X 0510:2004)に準拠して生成しさらにそれをコード化して誤り訂正コードを生成する処理が行われる。また、秘匿データについても、例えば、開示データと同様に、JISの基本仕様(JIS X 0510:2004)に記載されている誤り訂正コードの生成アルゴリズムを用いて誤り訂正符号を生成しそれをコード化して誤り訂正コードを生成する処理が行われる。
【0036】
そして、続くステップS121により、開示データコードの後に終端識別コードを付加する処理が行われる。終端識別コードは、例えば、4ビットパターンで「0000」であり、図3(C) に示すように、開示データコードAの後に続く開示データコードBの直後に位置する。なお、図3(C) では、便宜上、開示データコードを「開示コード」、終端識別コードを「終端子」、とそれぞれ表現している。
【0037】
次のステップS123では、前述した所定のフラグが「1」にセットされているか否か、即ち秘匿データが含まれているか否かを判断する処理が行われる。そして、秘匿データが含まれている場合には(フラグが「1」にセットされている場合:S123;Yes)、ステップS125に処理を移行し、また秘匿データが含まれていない場合には(フラグが「0」にセットされている場合:S123;No)、一連の秘匿処理(S125〜S133)を飛ばしてステップS135に処理を移行する。
【0038】
ステップS125〜S133は、印刷データに秘匿データが含まれている場合に行われる一連の秘匿処理である。まず、ステップS125により、秘匿識別コードを終端識別コードの直後に付加する処理が行われる。
【0039】
このステップS125による処理は、秘匿識別コードを終端識別コードの直後に配置することで、この終端識別コードの後に配置されているデータコードが「秘匿するデータを表すコード語としてコード化されたものであること」を明示的に表す。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、当該QRコードQに秘匿データコードが含まれていることを認識可能にするので、例えば、読取対象外のデータやデータ化けしたデータ等を秘匿データコードと誤認して読み取ることを防ぎ、またこれに起因する誤動作の発生を防止することもできる。
【0040】
次のステップS127では、秘匿データコードのデータ長を計算して求め、このデータ長をコード化したものを秘匿識別コードの直後に付加する処理が行われる。これにより、秘匿データコードが配置される領域や範囲がわかるので、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、どこまでが秘匿データコードであるか、または暗号データコードであるかを認識可能にする。
【0041】
例えば、図3(C) に示す例では、秘匿データコードαのデータ長と秘匿データコードβのデータ長との和が当該データ長として計算されて秘匿識別コードの直後に付加される。なお、図3(C) では、便宜上、秘匿データコードを「秘匿コード」、秘匿識別コードを「秘匿識別子」、とそれぞれ表現している。
【0042】
続くステップS129では、暗号キーがあるか否かを判断することによって、秘匿データコードを暗号化する必要があるか否かを判断する。即ち、ステップS111によって暗号キーをパソコン1から受信している場合には、暗号キーがあるので(S129;Yes)、ステップS131に移行して暗号化処理を行う。これに対して、ステップS111によって暗号キーをパソコン1から受信していない場合には、暗号キーがないので(S129;No)、ステップS131による暗号化処理を飛ばしてステップS133に移行する。
【0043】
なお、ステップS111により暗号キーを受信していない場合であっても、パソコン1が予め暗号キーをメモリ12やハードディスク等の情報記憶媒体に保持しているときには暗号キーがあるので(S129;Yes)、ステップS131で暗号化処理を行う。
【0044】
ステップS131では、秘匿データコードを暗号化する処理が行われる。この処理は、例えば、公知の視覚復号型暗号技術(視覚復号型秘密分散法)を用いて秘匿データコードを暗号化する。これにより、このような暗号化されていない平文データが付加されている場合に比べてセキュリティの強度を高めることができる。
【0045】
例えば、図3(D) に示す例では、秘匿データコードαを構成する「暗号化データ」の部分が暗号化され、「開始桁」、「文字数」および「復号キー検査データ」も併せて生成される。最初に位置する「開始桁」は、当該暗号化された秘匿データの位置情報として、印刷データの先頭をゼロ番地とした場合に表現可能なアドレス値がこれに相当する。また次の「文字数」は、暗号化されている秘匿データの文字数である。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際において、デコードしたデータをこの位置情報に基づいてコード化前の位置関係に配置することができる。
【0046】
最後に付加されている「復号キー検査データ」は、当該暗号を解読するのに用いる復号キーを特定可能な鍵特定情報で、暗号方式が暗号キーと復号キーとが同じ共通鍵暗号方式(「秘密鍵暗号方式」ともいう)の場合には、当該復号キー検査データは暗号キーも特定できる。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、秘匿データコードを復号キー(復号できる鍵)を容易に特定することができたり、復号キーであるか否かを判断することができる。
【0047】
なお、秘匿データコードβについても秘匿データコードαと同様に構成され、「復号キー検査データ」として、秘匿データコードαを復号する復号キーと同じ情報を付加しても良いし、また秘匿データコードαの暗号キーとは異なった他の暗号キーで秘匿データコードβの秘匿データを暗号化した場合には、他の復号キーを特定する「復号キー検査データ」を付加しても良い。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、各秘匿データコードごとに復号できる鍵を容易に特定することができたり、復号できる鍵であるか否かを判断することができる。
【0048】
ステップS133では、データ長の直後に秘匿データコードを付加する処理が行われる。図3(D) に示す例では、秘匿データコードαおよび秘匿データコードβをデータ長の後に付加する。これにより、一般仕様の二次元コードの読取装置では、二次元コードのデコード処理において、終端識別コードの後に配置される埋め草コード等は読み取りの対象にしないため、このように終端識別コードの後に配置された秘匿データコードは読み取ることはできない。したがって、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードの存在はわからないので、当該読取装置の利用者には秘匿データの存在を認識させないようにすることが可能となる。
【0049】
続くステップS135では、例えば、JISの基本仕様(JIS X 0510:2004)に記載されている処理アルゴリズムに準拠して、秘匿データコードの後に埋め草コードを付加する処理が行われ、さらにステップS137では、誤り訂正コードを付加する処理が行われる。これにより、図3(C) に示すフォーマットのデータコードが生成される。
【0050】
そして、ステップS139では、ステップS137により生成されたデータコードに基づいて、各セルを生成し、図4に示すデータブロックに配置する処理が行われる。即ち、図4に示す1型のQRコードでは、1辺が21セル(モジュール)の正方形状に構成されているため、三隅に設けられている位置検出パターンや形式情報(図4に示す斜線部分)、さらにはタイミングパターンを除いたコード領域に、8個のセルを4行2列に配置して構成されるデータブロックを26ブロック(A0〜A25)配置する。
【0051】
例えば、図3(C) に示す例では、開示データコードAをA0〜A2、開示データコードBをA3〜A6に配置し、終端識別コードをA7に配置する。そして、この終端識別コードの後方で、通常は埋め草コードが配置される位置に相当するA8〜A17に、秘匿識別コード、データ長、秘匿識別コード等を配置する。
【0052】
即ち、A8に秘匿識別コードを配置し、その後のA9にデータ長を配置して、さらにこの後のA10〜A13に秘匿データコードα、A14〜A17に秘匿データコードβをそれぞれ配置する。そして、通常のQRコードと同様に、誤り訂正コードを最後のA20〜A25に配置して、この間の空いている部分であるA18〜A19に埋め草コードを配置する。なお、A15およびA18は、タイミングパターンを挟んで位置していることから、A15はA15とA15’とに、またA18はA18とA18’とに分割されている。
【0053】
なお、ステップS131において、図3(E) に示すように、「復号キー検査データ」に代えて、復号キーそのものを付加しても良い。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、例えば、当該QRコードリーダ等が秘匿データコードαの復号キーを持っていなくても、秘匿データコードαを復号して元の平文に戻すことができる。
【0054】
また、秘匿データコードβについても、同様に「復号キー検査データ」に代えて、復号キーそのものを付加しても良い。付加する復号キーは、秘匿データコードαを復号する復号キーと同じものを付加しても良いし、また秘匿データコードαの暗号キーとは異なった他の暗号キーで秘匿データコードβの秘匿データを暗号化した場合には、この他の暗号キーに対応する他の復号キーを付加しても良い。これにより、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際に、当該QRコードリーダ等が、各秘匿データコードごとに対応するそれぞれの復号キーを持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
【0055】
また、ステップS123により、秘匿データが含まれていないと判断した場合であっても(フラグが「0」にセットされている場合:S123;No)、図3(F) に示すように、暗号化していない平文データの前に、ステップS131で付加した「開始桁」や「文字数」を付加する処理ステップを、ステップS123とステップS135との間に設けても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、本コード生成処理によって生成されたQRコードQを、QRコードリーダ等のデコードする際において、デコードしたデータをこの位置情報に基づいてコード化前の位置関係に配置することができる。
【0056】
以上説明したように、本第1実施形態に係るQRコードプリンタ10によると、MPU11により実行されるコード生成処理によって生成されるQRコードQでは、ステップS133により秘匿データコードが、埋め草コードの一部または全部に代えて、終端識別コードの後に配置されている。これにより、終端識別コードの後に配置された秘匿データコードは、一般仕様の読取装置では読み取りの対象にならないので、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードによって秘匿しようとするデータの存在はわからない。したがって、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。
【0057】
よって、このような秘匿データコードを含んでいても、一般仕様の読取装置には当該秘匿データコードのデコードデータに相当するものが画面表示されないので、利用者に秘匿データの存在を認識させることがなく、当該利用者に対して不信感を与えたり、解読を試みようとする不用意な動機を与えることがない。また、当該秘匿データコードのデコードデータに相当するものが制御データ等であっても、それが画面表示されることがないので、画面表示が乱れたりもしない。
【0058】
なお、上述した第1実施形態では、QRコードプリンタ10により、ラベルPにQRコードQを印刷する例を挙げて説明したが、本発明はこれに限られることはなく、QRコードQを視覚的に表現可能なものであればよく、例えば、図2に示すコード生成処理をパソコン本体2により実行してディスプレイ3にQRコードQを表示するように構成しても良い。この場合、コード生成処理は、コンピュータプログラムとして概念できるので、例えば、「開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする二次元コードの生成プログラム。」と表現可能な技術的思想を把握できる。これにより、この二次元コードの生成プログラムにより二次元コードの生成装置として機能するコンピュータは、上述したQRコードプリンタ10のMPU11等と同様の作用および効果を奏する。
【0059】
また、上述した第1実施形態では、QRコードプリンタ10にパソコン1を接続して当該パソコン1から印刷データを送る構成を例示して説明したが、英数字、漢字や記号等の文字データを出力可能な情報処理装置であれば、このような機能を備えたデジタルカメラや携帯電話機、あるいはハンドヘルドコンピュータやハンディターミナル等を、QRコードプリンタ10に接続する構成を採っても上述した作用および効果を得ることができる。
【0060】
次に、QRコードリーダ20の構成を説明する。このQRコードリーダ20は、第1実施形態で説明したQRコードプリンタ10により印刷されたQRコードQをデコード可能なQRコードリーダ20である。なお、QRコードリーダ20によりデコード可能なQRコードQの構成は、図3および図4を参照して既に説明しているので、ここでは説明を割愛する。
【0061】
まず、QRコードリーダ20の構成を図5を参照して説明する。なお、図5には、QRコードリーダのハードウェア構成例を示すブロック図が図示されている。
【0062】
図5に示すように、QRコードリーダ20は、主に、照明光源21、受光センサ23、結像レンズ27等の光学系と、メモリ35、制御回路40、操作スイッチ42、液晶表示器46等のマイコン系と、電源スイッチ41、バッテリ49等の電源系と、から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されており、ハードウェア的には一般仕様のQRコードリーダ(読取装置)と同様に構成されている。
【0063】
光学系は、照明光源21、受光センサ23、結像レンズ27等から構成されている。照明光源21は、照明光Lfを発光可能な照明光源として機能するもので、例えば、赤色のLEDとこのLEDの出射側に設けられる拡散レンズ、集光レンズ等とから構成されている。この構成では、受光センサ23を挟んだ両側に照明光源21が設けられており、図略のケースの読取口を介してラベルPに向けて照明光Lfを照射可能に構成されている。このラベルPには、第1実施形態で説明したQRコードQが印刷されている。
【0064】
受光センサ23は、ラベルPやQRコードQに照射されて反射した反射光Lrを受光可能に構成されるもので、例えば、C−MOSやCCD等の固体撮像素子である受光素子を2次元に配列したエリアセンサが、これに相当する。受光センサ23は、結像レンズ27を介して入射する入射光をこの受光面23aで受光可能に図略のプリント配線板に実装されている。
【0065】
結像レンズ27は、外部から読取口を介して入射する入射光を集光して受光センサ23の受光面23aに像を結像可能な結像光学系として機能するもので、例えば、鏡筒とこの鏡筒内に収容される複数の集光レンズとにより構成されている。
【0066】
次に、マイコン系の構成概要を説明する。マイコン系は、増幅回路31、A/D変換回路33、メモリ35、アドレス発生回路36、同期信号発生回路38、制御回路40、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48等から構成されている。このマイコン系は、その名の通り、マイコンとして機能し得る制御回路40およびメモリ35と中心に構成される。
【0067】
光学系の受光センサ23から出力される画像信号は、増幅回路31に入力されることで所定ゲインで増幅された後、A/D変換回路33に入力されると、アナログ信号からディジタル信号に変換される。そして、ディジタル化された画像信号、つまり画像データは、メモリ35に入力されると、画像データ蓄積領域に蓄積される。なお、同期信号発生回路38は、受光センサ23およびアドレス発生回路36に対する同期信号を発生可能に構成されており、またアドレス発生回路36は、この同期信号発生回路38から供給される同期信号に基づいて、メモリ35に格納される画像データの格納アドレスを発生可能に構成されている。
【0068】
メモリ35は、半導体メモリ装置で、例えばRAM(DRAM、SRAM等)やROM(EPROM、EEPROM等)がこれに相当する。このメモリ35のうちのRAMには、前述した画像データ蓄積領域のほかに、制御回路40が算術演算や論理演算等の各処理時に利用する作業領域等も確保可能に構成されている。またROMには、後述するデコード処理等を実行可能な所定プログラムやその他、照明光源21、受光センサ23等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
【0069】
制御回路40は、QRコードリーダ20全体を制御可能なマイコンで、CPU、システムバス、入出力インタフェース等からなり、メモリ35とともに情報処理装置を構成し得るもので情報処理機能を有する。この制御回路40には、内蔵された入出力インタフェースを介して種々の入出力装置と接続可能に構成されており、本構成の場合、電源スイッチ41、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48等が接続されている。
【0070】
これにより、例えば、電源スイッチ41や操作スイッチ42の監視や管理、またインジケータとして機能するLED43の点灯・消灯、ビープ音やアラーム音を発生可能なブザー44の鳴動のオンオフ、さらには読み取ったQRコードQによるコード内容を画面表示可能な液晶表示器46の画面制御や外部装置とのシリアル通信を可能にする通信インタフェース48の通信制御等を可能にしている。なお、通信インタフェース48に接続される外部装置には、当該QRコードリーダ20の上位システムに相当するホストコンピュータHST等が含まれる。
【0071】
電源系は、電源スイッチ41、バッテリ49等により構成されており、制御回路40により管理される電源スイッチ41のオンオフによって、上述した各装置や各回路に、バッテリ49から供給される駆動電圧の導通や遮断が制御されている。なお、バッテリ49は、所定の直流電圧を発生可能な二次電池で、例えば、リチウムイオン電池等がこれに相当する。また、バッテリ49によることなく、例えば、通信インタフェース48を介して接続されるホストコンピュータHST等の外部装置から電力供給を受ける構成を採る場合もあり、この場合には当該バッテリ49は不要となる。
【0072】
このようにQRコードリーダ20を構成することによって、例えば、電源スイッチ41がオンされて所定の自己診断処理等が正常終了し、QRコードQの読み取りが可能な状態になると、照明光Lfの発光を指示する操作スイッチ42(例えばトリガースイッチ)の入力を受け付ける。これにより、利用者がトリガースイッチを引いてオンにすることで、制御回路40が同期信号を基準に照明光源21に発光信号を出力するので、当該発光信号を受けた照明光源21は、LEDを発光させて照明光Lfを照射する。
【0073】
すると、QRコードQに照射された照明光Lfが反射し、その反射光Lrが読取口を介して結像レンズ27に入射するため、受光センサ23の受光面23aには、QRコードQの像が結像される。これにより、QRコードQの像が受光センサ23を露光するため、上述したマイコン系によって画像処理された当該QRコードQの画像データが、メモリ35の画像データ蓄積領域を介して、次に説明するデコード処理に渡される。
【0074】
ここで、デコード処理を図4,図6および図7を参照して説明する。なお、図6には、デコード処理の流れを示すフローチャートが図示されている。また図7には、図6に示す復号化処理の流れを示すフローチャートが図示されている。また、図4には、1型のQRコードの構成例を示す説明図が図示されている。
【0075】
図6に示すように、デコード処理は、QRコードリーダ20の電源投入により起動する制御回路40およびメモリ35によって開始され、まずステップS201により初期設定処理が行われる。この処理は、メモリ35の作業領域や画像データを蓄える画像データ蓄積領域をクリアしたり、所定のフラグやカウンタ等をクリアする。なお、ここで説明するQRコードリーダ20は、ホストコンピュータHSTと接続されており、当該ホストコンピュータHSTから設定データとして復号キーのデータを取得するものとする。
【0076】
ステップS203では、タイマーのカウント値をクリアする処理が行われる。このステップS203でカウンタ値がクリアされるタイマーは、次のステップS205により所定時間の経過を計時するものである。
【0077】
ステップS205では、先のタイマーにより所定時間が経過したか否かを判断する処理が行われる。即ち、ホストコンピュータHSTから送られてくる設定データに復号キーのデータが含まれているか否かを次のステップS209により判断する必要上、例えば、所定時間として5秒間が経過したか否かを判断し、この時間が経過するまでに、ホストコンピュータHSTから暗号化に関するデータが送られてこない場合には、所定時間の経過とともにステップS207に処理を移行する(S205;Yes)。
【0078】
これに対し、所定時間が経過していない場合には(S205;No)、次のステップS209により復号キー(復号鍵)を受信したか否かを判断する処理が行われる。そして、これを受信していると判断した場合には(S209;Yes)、続くステップS211に処理を移行し、受信していると判断できない場合には(S209;No)、前述したステップS205に処理を戻して、再度、時間の経過を判断する。
【0079】
そして、所定時間が経過したとステップS205により判断した場合には(S205;Yes)、ステップS207により所定のフラグに「0」をセットする。このフラグは、QRコードQの秘匿データコードを復号キーで復号するか否かを示すもので、「0」がセットされている場合には、復号キーで復号しないことを示し、「1」がセットされている場合には、復号キーで復号することを示す。このため、209により復号キーを受信していると判断した場合には(S209;Yes)、続くステップS211によりこのフラグに「1」をセットする処理が行われる。
【0080】
ステップS211により所定のフラグに「1」をセットすると、続くステップ213により、画像データを取得する処理が行われる。即ち、メモリ35の画像データ蓄積領域から蓄えられている画像データを読み出す処理を行う。これにより、例えば、図4に示すようなQRコードQのコード画像が得られる。
【0081】
続くステップS215では、位置検出パターンを検出する処理が行われる。即ち、QRコードQは、図4に示すように、その三隅に位置検出パターンが設けられているため、これらを検出することによって、次のステップS217によりQRコードQのコード外形を検出する。
【0082】
そして、ステップS219により各セルの中心座標を算出する処理を行うことによって次ステップS221により各セルの白黒を判別する。これにより、図4に示す形式情報(図4に示す斜線部分)やデータブロックを認識可能になるので、続くステップS223により、欠損等しているデータブロックがある場合には、そのブロックを誤り訂正可能であるか否かを判断する。
【0083】
そして、ステップS223により誤り訂正可能であると判断できる場合には(S223;OK)、誤り訂正をして続くステップS300により復号化処理を行う。これに対し、ステップS223により誤り訂正可能であると判断できない場合には(S223;NG)、誤り訂正できないので、ステップS213に処理を移行して再度、画像データを取得してステップS215〜S221の各処理を行う。
【0084】
ステップS300は、その詳細が図7に図示されているので、ここからは図7を参照して復号化処理を説明する。図7に示すように、復号化処理では、ステップS301により、まずカウンタnに0(零)をセットする処理が行われる。このカウンタnは、本復号化処理において、QRコードQを構成するデータコードの順番を示す変数として機能する。
【0085】
ステップS303では、カウンタnが指すn番目のデータコードを取得する処理が行われる。そして、続くステップS305では、ステップS303により取得されたn番目のデータコードが、終端識別コードであるか否かを判断する処理が行われる。これにより、当該データコードが終端識別コードであると判断した場合には(S305;Yes)、終端識別コードよりも前に配置される通常のデータコードはこれ以上、当該QRコードQには含まれていないことになるので、ステップS315に処理を移行する。
【0086】
これに対し、当該データコードが終端識別コードであると判断できない場合には(S305;No)、終端識別コードよりも前にまだ通常のデータコードが存在することになるので、続くステップS307に処理を移行して次のデータコード、つまり(n+1)番目のデータコードをコード数iを取得する。これは、第1実施形態で図3(D) を参照して説明したように、データコードの2文字目相当の位置には、文字数が格納されていることに基づくもので、その詳細は、JISの基本仕様(JIS X 0510:2004)の「8.4データの符号化」に記載されている。
【0087】
ステップS307によりコード数iを取得すると、続くステップS309では、この文字数(i)分だけデータコードを取得する処理が行われ、さらにステップS311により当該データコード、つまり開示データコード(開示するデータを表すコード語としてコード化されたデータコード)を復号(デコード)する処理が行われる。
【0088】
ステップS311による復号処理が終わると、ステップS313により、カウンタnが次のデータコードを指すように「n+i+1」をカウンタnに設定する処理が行われた後、再びステップS303に処理を戻してn番目のデータコードを取得する処理が行われる。
【0089】
このように、ステップS303〜S313では、終端識別コードの前方に配置されて元来デコードされる通常のデータコード(第1のデータコード、開示データコード)を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路40等は、「第1デコード手段」に相当し得るものである。
【0090】
ステップS315は、前述した所定のフラグに「1」がセットされているか否か、つまりQRコードQの秘匿データコードを復号キーで復号するか否かを判断する処理が行われる。そして、当該フラグに「1」がセットされていない場合には(S315;No)、復号キーで復号する必要がないため、本復号化処理を終了して図6に示すステップS300を終えてデコード処理を終了する。
【0091】
これに対し、所定のフラグに「1」がセットされている場合には(S315;Yes)、復号キーで復号する必要があるため、続くステップS317に処理を移行してカウンタnにn+1を設定し、さらにステップS319によりカウンタnが指すn番目のデータコードを取得する処理が行われる。
【0092】
そして、続くステップS321では、ステップS319により取得されたn番目のデータコードが、秘匿識別コードであるか否かを判断する処理が行われる。このため、このステップS321を実行する制御回路40等は、「データコード判断手段」や「秘匿識別コード判断手段」に相当し得るものである。
【0093】
これにより、当該データコードが秘匿識別コードであると判断した場合には(S321;Yes)、秘匿識別コードよりも後には、秘匿データコードが存在することになるので、続くステップS323に処理を移行して次のデータコード、つまり(n+1)番目のデータコードをコード数jを取得する。これも、ステップS309と同様に、データコードの2文字目相当の位置には、文字数が格納されていることに基づくものである。
【0094】
なお、ステップS321により秘匿識別コードが配置されていると判断した場合には、例えば、ホストコンピュータHSTに対して当該QRコードQには、秘匿識別コードが配置されている旨を通知するように構成しても良い。これにより、ホストコンピュータHSTでは、終端識別コードよりも後方のデータコードが秘匿データコードである旨を把握することができる。また、本来、埋め草コードしか配置されない終端識別コードの後のコード領域(コード領域の空き部分)に、埋め草コード以外のもので秘匿データコードではないもの(例えばデータ化けにより埋め草コードに該当しなくなったもの)が配置されている場合には、秘匿データコードである旨の情報がホストコンピュータHSTに対して出力されないので、秘匿データコード以外のものをデコードすることで生じ得る誤動作を防止することができる。
【0095】
これに対し、当該データコードが秘匿識別コードであると判断できない場合には(S321;No)、秘匿識別コードよりも後には、これ以上、秘匿データコードが当該QRコードQには含まれていないことになるので、本復号化処理を終了して図6に示すステップS300を終えてデコード処理を終了する。
【0096】
ステップS323によりコード数jを取得すると、続くステップS325では、この文字数(j)分だけデータコードを取得する処理が行われ、さらにステップS327によりカウンタnが次のデータコード、つまり秘匿データコードを指すように「n+j+2」をカウンタnに設定する処理が行われた後、ステップS329によりn番目の復号キー検査データ(鍵特定情報)を取得する処理が行われる。
【0097】
そして、このステップS329により取得した復号キー検査データに基づいて、先のステップS209によりホストコンピュータHSTから受信した復号キーがこのn番目の秘匿データコードの暗号化データを解読する鍵として適合しているか否かの判断をステップS331により行う。ステップS331に当該復号キーが適合していると判断した場合には(S331;Yes)、続くステップS333により暗号化データを解読する。
【0098】
なお、ここでの暗号化は、第1実施形態で説明した公知の視覚復号型暗号技術(視覚復号型秘密分散法)を用いたもので、これにより、秘匿データコードの暗号化データがこのような視覚復号型暗号技術により暗号化されている場合でも、復号して元の平文に戻すことができる。なお、このステップS333を実行する制御回路40等は、「復号手段」に相当し得るものである。
【0099】
これに対して、ステップS331に当該復号キーが適合していると判断できない場合には(S331;No)、当該n番目の秘匿データコードを解読することなく、その次の秘匿データコードを取得すべく、ステップS337に移行してカウンタnにn+1を設定する。これにより、QRコードリーダ20が有する復号キーが当該n番目の秘匿データコードを解読できる復号キーでない場合には、当該n番目の秘匿データコードは解読も復号されないので、不要な復号処理を抑制することができる。なお、このステップS331を実行する制御回路40等は、「鍵適合判断手段」に相当し得るものである。
【0100】
ステップS335では、秘匿データコードを復号する処理が行われる。即ちその前のステップS333により暗号化データを解読することができているので、このステップS335により解読した暗号化データに基づいて秘匿データコードを復号(デコード)する。
【0101】
ステップS335による復号処理が終わると、ステップS337により、カウントnが次のデータコードを指すように「n+1」をカウンタnに設定する処理が行われた後、続くステップS339により、n番目のデータコードを取得する処理が行われる。
【0102】
そして、ステップS341により、ステップS339で取得したn番目のデータコードが埋め草コードであるか否かを判断する処理が行われる。これにより、もし当該n番目のデータコードが埋め草コードである場合には(S341;Yes)、これ以上、当該QRコードQには秘匿データコードが含まれていないことになるので、本復号化処理を終了して図6に示すステップS300を終えてデコード処理を終了する。
【0103】
これに対し、ステップS341により当該n番目のデータコードが埋め草コードであると判断されない場合には(S341;No)、当該n番目のデータコードは、秘匿データコードであるので、ステップS323に処理を移行して、再び(n+1)番目のデータコードをコード数jを取得することで、前述と同様の処理を行う。
【0104】
このように、ステップS319,S323〜S335では、終端識別コードの後方に配置されて、本来はデコードされないデータコード(第2のデータコード、秘匿データコード)を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路40等は、「第2デコード手段」に相当し得る。
【0105】
以上説明したように、本構成に係るQRコードリーダ20によると、本来、埋め草コードしか配置されない終端識別コードの後のコード領域(コード領域の空き部分)に、秘匿データコード(第2のデータコード)が配置されていても、この秘匿データコードをデコードすることができる。したがって、コード語を配置すべきコード領域の空き部分に存在するデータコードをデコードすることができる。よって、第1実施形態で説明したQRコードプリンタ10により印刷されたQRコードQを、本構成に係るQRコードリーダ20によりデコードすることができる。
【0106】
なお、上述したデコード処理では、ステップS329によりn番目の復号キー検査データを取得するように構成したが、例えば、第1実施形態で図3(E) を参照して説明したように復号キーそのものが秘匿データコードに付加されている場合には、このステップS329に代えて、n番目の復号キーを取得するように構成しても良い。これにより、秘匿データコードの復号キー(復号できる鍵)を当該QRコードリーダ20が持っていなくても、当該秘匿データコードを復号して元の平文に戻すことができる。この場合、「n番目の復号キーを取得する」処理を実行する制御回路40等は、「鍵分離手段」に相当し得る。
【0107】
また、各秘匿データコードごとに異なった暗号キーで暗号化されている場合であっても、各秘匿データコードについてそれぞれの復号キーが付加されているときには、ステップS329に代えて、n番目の復号キーを取得するように構成することで、秘匿データコードの復号キーを当該QRコードリーダ20が持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
【0108】
さらに、上述したデコード処理では、ステップS329によりn番目の復号キー検査データを取得するように構成したが、例えば、第1実施形態で図3(D) を参照して説明したように位置情報としての「開始桁」が秘匿データコードに付加されている場合には、このステップS329に代えて、秘匿データコードから「開始桁」を分離してこの分離された「開始桁」に基づいて秘匿データコードを復号(デコード)した秘匿データをコード化される前のデータレコード中の位置関係に配置するように構成しても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、デコードしたデータを、この位置情報に基づいてコード化前の位置関係に配置することができる。この場合、「秘匿データコードから「開始桁」を分離する」処理を実行する制御回路40等は、「位置情報分離手段」に相当し得る。また、「この分離された「開始桁」に基づいて秘匿データコードを復号(デコード)した秘匿データをコード化される前のデータレコード中の位置関係に配置する」処理を実行する制御回路40等は、「データ配置手段」に相当し得る。
【0109】
[第2実施形態]
次に、本発明の第2実施形態に係るQRコードプリンタ10による他のQRコードの生成処理を図8および図9を参照して説明する。ここで説明する他のQRコードは、図9(C) に示すように、埋め草コード(11101100)の代わりに、任意のコード(例えば00000000や11111111)を空き領域に詰めるフォーマットを採るものである。
【0110】
なお、図8に示すコード生成処理のフローチャートにおいて、既に説明したコード生成処理(図2)を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図9に示すデータやコードのフォーマット例についても、同様に、既に説明したフォーマット例(図3)と実質的に同一のフォーマットについては詳細な説明を省略する。なお、図9では、便宜上、開示データコードを「開示コード」、終端識別コードを「終端子」、とそれぞれ表現している。
【0111】
図8に示すように、コード生成処理は、QRコードプリンタ10の電源投入により起動するMPU11およびメモリ12によって開始され、ステップS101により初期設定処理が行われると、次にステップS103により印刷データを受信する。そして、ステップS107,S111を経て秘匿データを受信すると、ステップS115により開示データおよび秘匿データを並び替え、さらにステップS117により開示データや秘匿データ等の各データを符号化した後、ステップS119により誤り訂正符号を生成してステップS121により開示データコードの後に終端識別コードを付加する。
【0112】
なお、このような終端識別コードを開示データコードの後に付加するのではなく、例えば、図9(C) の括弧内に示すフォーマットのように、全ての開示データコードのデータ長を算出することによって得られる「開示データコードがなすコード列の終端位置」(以下単に「終端位置」という)を特定できる終端位置データ(図9(C) では「終端情報」)を開示データコードの先頭に配置または付加しても良い。
【0113】
そして、印刷データに秘匿データが含まれている場合には(S123;Yes)、ステップS125〜S133によって、終端位置に続けて秘匿識別コード等を付加した後、また印刷データに秘匿データが含まれていない場合には(S123;No)、終端位置の後に、それぞれステップS135’により、前述した任意コードとして、例えば、00000000や11111111を付加する。
【0114】
即ち、ステップS135’による任意コードの付加処理では、終端位置よりも後で誤り訂正コードよりも前の範囲において、秘匿データコードを詰めても空き領域(コード領域の空き部分)が生じる場合に埋め草コードに代えて任意のコード(例えば00000000や11111111)を詰める。このため、例えば、このようなデータフォーマットを構成するメモリ上で、予め全ての範囲をこのような任意のコードで埋める初期化処理をステップS101において処理している場合には、当該ステップS135’を行うことなく省略できる(図8ではステップS135’の枠線は破線で表現されている)。
【0115】
そして、ステップS137により、誤り訂正コードを付加する処理が行われると、図9(C) に示すフォーマットのデータコードが生成されるため、続くステップS139によりこのようなデータコードに基づいて各セルを生成して図4に示して説明したデータブロックに配置される。つまり、本来、埋め草コードが配置される範囲に前述した任意コードが配置されること以外は、図2〜図4を参照して説明したQRコードと同様に配置される。
【0116】
以上説明したように、本第2実施形態に係るQRコードプリンタ10によると、MPU11により実行されるコード生成処理によって生成されるQRコードQでは、ステップS133により秘匿データコードが終端位置の後に配置されている。これにより、終端位置の後に配置された秘匿データコードは、一般仕様の読取装置では読み取りの対象にならないので、このような秘匿データコードが含まれる二次元コードを一般仕様の読取装置で読み取っても、当該秘匿データコードによって秘匿しようとするデータの存在はわからない。したがって、一般仕様の読取装置の利用者には秘匿データの存在を認識させないようにすることができる。
【0117】
よって、このような秘匿データコードを含んでいても、一般仕様の読取装置には当該秘匿データコードのデコードデータに相当するものが画面表示されないので、利用者に秘匿データの存在を認識させることがなく、当該利用者に対して不信感を与えたり、解読を試みようとする不用意な動機を与えることがない。また、当該秘匿データコードのデコードデータに相当するものが制御データ等であっても、それが画面表示されることがないので、画面表示が乱れたりもしない。
【0118】
なお、上述した第2実施形態では、QRコードプリンタ10により、ラベルPにQRコードQを印刷する例を挙げて説明したが、本発明はこれに限られることはなく、QRコードQを視覚的に表現可能なものであればよく、例えば、図8に示すコード生成処理をパソコン本体2により実行してディスプレイ3にQRコードQを表示するように構成しても良い。この場合、コード生成処理は、コンピュータプログラムとして概念できるので、例えば、「開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置、または前記開示データコードがなすコード列の終端位置を特定可能な終端識別情報をこのコード列の所定の位置に配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、秘匿するデータを表すコード語としてコード化された秘匿データコードを、前記終端識別コードの後、または前記終端識別情報により特定される前記終端位置の後、に配置することを特徴とする二次元コードの生成プログラム。」と表現可能な技術的思想を把握できる。これにより、この二次元コードの生成プログラムにより二次元コードの生成装置として機能するコンピュータは、上述したQRコードプリンタ10のMPU11等と同様の作用および効果を奏する。
【0119】
また、上述した第2実施形態では、QRコードプリンタ10にパソコン1を接続して当該パソコン1から印刷データを送る構成を例示して説明したが、英数字、漢字や記号等の文字データを出力可能な情報処理装置であれば、このような機能を備えたデジタルカメラや携帯電話機、あるいはハンドヘルドコンピュータやハンディターミナル等を、QRコードプリンタ10に接続する構成を採っても上述した作用および効果を得ることができる。
【0120】
次に、上述の例とは異なるQRコードリーダ20による他のQRコードのデコード処理を図10および図11を参照して説明する。なお、「他のQRコード」とは、埋め草コード(11101100)の代わりに、任意のコード(例えば00000000や11111111)を空き領域に詰めるフォーマットを採るコードのことで、第2実施形態に係るQRコードプリンタ10により印刷されたQRコードのことである。
【0121】
なお、図10に示すデコード処理のフローチャートにおいて、既に説明したデコード処理(図6)を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図11に示す復号化処理のフローチャートにおいて、既に説明した復号化処理(図7)を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【0122】
図10に示すように、デコード処理は、QRコードリーダ20の電源投入により起動する制御回路40およびメモリ35によって開始され、ステップS201により初期設定処理が行われると、ステップS205により所定時間を経過した後(S205;Yes)、またはステップS209により復号キーを受信した後(S209;Yes)、ステップS213により画像データを取得する。そして、ステップS215,S217,S219,S221によりQRコードQを画像認識してステップS223により誤り訂正可能であるか否かを判断して、誤り訂正可能であると判断できる場合には(S223;OK)、誤り訂正をした後、ステップS300’により復号化処理(図11)を行う。
【0123】
図11に示すように、ステップS300’の復号化処理では、ステップS301〜S313により終端位置(開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの)が見つかると(S305’;Yes)、ステップS315,S317,S319によりカウンタnが指すn番目のデータコードを取得してそれが秘匿識別コードであるか否かをステップS321により判断する。そして、秘匿識別コードであると判断すると(S321;Yes)、S323〜S331により復号キーの適合を調べてその復号キーでS333により暗号化データを解読し、さらにステップS335により秘匿データコードを復号する。
【0124】
なお、ステップS321により秘匿識別コードが配置されていると判断した場合には、例えば、ホストコンピュータHSTに対して当該QRコードQには、秘匿識別コードが配置されている旨を通知するように構成しても良い。これにより、ホストコンピュータHSTでは、終端識別コードよりも後方のデータコードが秘匿データコードである旨を把握することができる。また、本来、埋め草コードしか配置されない終端識別コードの後のコード領域(コード領域の空き部分)に、埋め草コード以外のもので秘匿データコードではないもの(例えばデータ化けにより埋め草コードに該当しなくなったもの)が配置されている場合には、秘匿データコードである旨の情報がホストコンピュータHSTに対して出力されないので、秘匿データコード以外のものをデコードすることで生じ得る誤動作を防止することができる。
【0125】
そして、ステップS336’によりこの復号した秘匿データコードが最後の秘匿データコードであるか否かを判断する。具体的には、例えば、図9(C) に示すように、秘匿識別子の次には、その後に続く秘匿データコードのデータ長が格納されているので、これに基づいて当該秘匿データコードが最後の秘匿データコードに該当するか否かを判断する。また、前述したように、最後の秘匿データコードの後、つまり空き領域(コード領域の空き部分)には任意のコード(例えば00000000や11111111)が詰められているので、このような任意のコードの存在に基づいて当該秘匿データコードが最後の秘匿データコードに該当するか否かを判断する。
【0126】
ステップS336’により当該秘匿データコードが最後の秘匿データコードであると判断されない場合(最後の秘匿データコードでない判断された場合)には(S336’;No)、ステップS337により、カウントnが次のデータコードを指すように「n+1」をカウンタnに設定する処理が行われた後、続くステップS339により、n番目のデータコードを取得する処理が行われて、前述と同様にステップS323〜S331により復号キーの適合を調べる。
【0127】
これに対し、ステップS336’により当該秘匿データコードが最後の秘匿データコードであると判断された場合には(S336’;Yes)、これ以上、当該QRコードQには秘匿データコードが含まれていないことになるので、本復号化処理を終了して図10に示すステップS300’を終えてデコード処理を終了する。
【0128】
なお、ステップS303〜S313では、終端位置の前方に配置されて元来デコードされる通常のデータコード(第1のデータコード、開示データコード)を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路40等は、「第1デコード手段」に相当し得るものである。
【0129】
また、ステップS321では、ステップS319により取得されたn番目のデータコードが、秘匿識別コードであるか否かを判断する処理が行われる。このため、このステップS321を実行する制御回路40等は、「データコード判断手段」や「秘匿識別コード判断手段」に相当し得るものである。さらに、ステップS331やS333を実行する制御回路40等は、「鍵適合判断手段」や「復号手段」に相当し得るものである。
【0130】
さらに、ステップS319,S323〜S335では、終端位置の後方に配置されて、本来はデコードされないデータコード(第2のデータコード、秘匿データコード)を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路40等は、「第2デコード手段」に相当し得るものである。
【0131】
以上説明したように、このQRコードリーダ20によると、本来、データコードが配置されない終端位置の後のコード領域(コード領域の空き部分)に、秘匿データコード(第2のデータコード)が配置されていても、この秘匿データコードをデコードすることができる。したがって、コード語を配置すべきコード領域の空き部分に存在するデータコードをデコードすることができる。よって、QRコードプリンタ10により印刷されたQRコードQを、このQRコードリーダ20によりデコードすることができる。
【0132】
なお、上述したデコード処理では、ステップS329によりn番目の復号キー検査データを取得するように構成したが、例えば、第1実施形態で図3(E) を参照して説明したように第2実施形態でも同様に、復号キーそのものが秘匿データコードに付加されている場合には(図9(E) 参照)、このステップS329に代えて、n番目の復号キーを取得するように構成しても良い。これにより、秘匿データコードの復号キー(復号できる鍵)を当該QRコードリーダ20が持っていなくても、当該秘匿データコードを復号して元の平文に戻すことができる。この場合、「n番目の復号キーを取得する」処理を実行する制御回路40等は、「鍵分離手段」に相当し得る。
【0133】
また、各秘匿データコードごとに異なった暗号キーで暗号化されている場合であっても、各秘匿データコードについてそれぞれの復号キーが付加されているときには、ステップS329に代えて、n番目の復号キーを取得するように構成することで、秘匿データコードの復号キーを当該QRコードリーダ20が持っていなくても、それぞれの秘匿データコードを復号して元の平文に戻すことができる。
【0134】
さらに、上述したデコード処理では、ステップS329によりn番目の復号キー検査データを取得するように構成したが、例えば、第1実施形態で図3(D) を参照して説明したように第2実施形態でも同様に、位置情報としての「開始桁」が秘匿データコードに付加されている場合には(図9(D) 参照)、このステップS329に代えて、秘匿データコードから「開始桁」を分離してこの分離された「開始桁」に基づいて秘匿データコードを復号(デコード)した秘匿データをコード化される前のデータレコード中の位置関係に配置するように構成しても良い。これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、デコードしたデータを、この位置情報に基づいてコード化前の位置関係に配置することができる。この場合、「秘匿データコードから「開始桁」を分離する」処理を実行する制御回路40等は、「位置情報分離手段」に相当し得る。また、「この分離された「開始桁」に基づいて秘匿データコードを復号(デコード)した秘匿データをコード化される前のデータレコード中の位置関係に配置する」処理を実行する制御回路40等は、「データ配置手段」に相当し得る。
【0135】
第3実施形態]
次に、本発明の第3実施形態に係るQRコードプリンタ10による他のQRコードの生成処理を図12〜図14を参照して説明する。ここで説明する他のQRコードは、図14(B) 等に示すように、秘匿データコードα,β等に所定の加工を施して空き領域に詰めるフォーマットを採るものである。
【0136】
なお、図12に示すコード生成処理のフローチャートにおいて、既に説明したコード生成処理(図2)を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図14に示すコードのフォーマット例についても、同様に、既に説明したフォーマット例(図3)と実質的に同一のフォーマットについては詳細な説明を省略する。なお、図14では、便宜上、開示データコードを「開示コード」、終端識別コードを「終端子」、とそれぞれ表現している。
【0137】
図12に示すように、コード生成処理は、QRコードプリンタ10の電源投入により起動するMPU11およびメモリ12によって開始され、ステップS101により初期設定処理が行われると、次にステップS103により印刷データを受信する。そして、ステップS107,S111を経て秘匿データを受信すると、ステップS117により開示データや秘匿データ等の各データを符号化した後、ステップS121’により開示データコードの後に終端識別コード等(開示データコードがなすコード列の終端位置を含む)を付加する。
【0138】
そして、印刷データに秘匿データが含まれている場合には(S123;Yes)、ステップS125,S127により終端位置に続けて秘匿識別コードを付加等した後、ステップS131により秘匿データコードを暗号化し、さらにステップS132により空き領域に埋め草コードを付加する。そして、この後にステップS500による所定の加工処理が行われる。一方、印刷データに秘匿データが含まれていない場合には(S123;No)、これらの各処理(S125,S127,S131,S132,S500)を行うことなく、ステップS133に処理を移行する。
【0139】
ここで、ステップS500による所定の加工処理を図13を参照して説明する。図13に示すように、所定の加工処理では、まずステップS501によりポインタiをゼロクリアする処理が行われる。このポインタiは、ステップS507〜S517による分散配置処理の対象となるビット位置を指すもので、このクリア処理によって0ビット目からスタートする。
【0140】
ステップS503では、終端位置よりも後に存在する空き領域(図14(A)〜(C)参照)、即ち、本来埋め草コードで埋められる領域で誤り訂正コードの範囲を除いた領域のビット数nを求める処理が行われる。この処理は、後述のステップS513により疑似乱数Rを求める際に使用される定数である。
【0141】
続くステップS505では、暗号化データのビット数と復号キー検査データのビット数との和m(図14(D),(E)参照)を求める処理が行われる。即ち、分散配置処理の対象となる秘匿データコードのビット数を把握することにより、後述のステップS519による分散配置完了の可否判断を可能にしている。
【0142】
次のステップS507では、開示データコードと暗号化データとを2バイト単位で排他的論理和(EXOR)演算を行いその結果Sを求める処理が行われ、続くステップS509ではこのような演算結果SをステップS513による疑似乱数のシード値にセットする処理が行われる。このシード値は、所定の演算により疑似乱数を発生させるための種で、このシード値が同じであれば、発生する乱数はまったく同じものとなる。つまり、ステップS513による疑似乱数は、この演算結果Sの値によって発生する値およびその発生順が一義的に定まる。この点で、本加工処理は、開示データコードの内容に基づいて行われることとなる。
【0143】
ステップS511では、ポインタiをインクリメント、つまり1だけカウントアップさせる処理が行われる。これにより、ステップS517等による分散配置処理の対象となるビットの位置(ポインタiが指し示す位置)のカウントがアップされる。先の例では、0から1にカウントアップされることで、1ビット目が指し示めされる。
【0144】
続くステップS513により、疑似乱数Rを求める処理が行われる。この演算は、前述したシード値に基づいて所定の乱数発生アルゴリズムに従った情報処理を行うことにより、擬似的に乱数を発生させるもので、ここでは、1からn(nは、空き領域のビット数)までの範囲で、疑似乱数を発生させる。このため、例えば「R=rand()mod n + 1」なる演算式で演算される。
【0145】
なお、rand()は、シード値Sに対して疑似乱数を返す関数で、また、x mod yは、xに対してモジュロー値yを求める関数である。即ち、先の演算式では、modの前の引数x(rand()のこと)となる疑似乱数の値を、modの後の引数y(nのこと)で割ったときの余りに、1を加えた値として疑似乱数Rが求められる。なお、nは、前述したように、空き領域のビット数である。
【0146】
このようにステップS513によって1〜nまでの疑似乱数Rが求められると、次のステップS515により当該疑似乱数Rが既に発生したものであるか否かの判断処理が行われる。つまり、疑似乱数Rとして同じ値が発生すると、次のステップS517による再配置処理においてビット値の上書きが行われることから、それ以前に同じビット位置に配置された値が破壊されてしまうことを防止するためである。このため、このステップS515により既に疑似乱数Rとして同じ値が発生していると判断された場合には(S515;Yes)、ステップS513に戻って再度、疑似乱数Rを求める。
【0147】
ステップS515により既に発生した疑似乱数Rと同じ値であると判断されない場合には(S515;No)、続くステップS517により暗号化データのiビット目(ポインタiが指し示すビットの位置)の値を空き領域のRビット目にセットする処理、つまり配置処理が行われる。先の例では、1ビット目の値が空き領域のRビット目にセットされる。これにより、本来1ビット目に位置している情報が、乱数により不規則的に発生するRビット目に移動する。
【0148】
続くステップS519では、ポインタiの値が、分散配置処理の対象となる秘匿データコードのビット数の終わり(最終ビット)に達しているか否かを判断する処理、つまり分散配置完了の可否判断が行われる。そして、ポインタiと秘匿データコードの全ビット数とが一致している場合には、秘匿データコードの全てのビットが前述したステップS507〜517による分散配置処理が施されていることになるので(S519;Yes)、本加工処理を終了する。
【0149】
これに対して、ポインタiと秘匿データコードの全ビット数とが一致していない場合には、秘匿データコードにはまだ分散配置処理が施されていないビットが残存することになるので(S519;No)、ステップS511によりポインタiをカウントアップして再度ステップS513による疑似乱数発生処理を行う。
【0150】
このようにステップS513〜S517による処理を秘匿データコードの全ビットに対して繰り返し行うことにより、本来、1ビット目、2ビット目、3ビット目、…、(n−1)ビット目、nビット目というように順番に並ぶ各ビット情報が、不規則的に変動する疑似乱数Rに従った位置にRビット目にそれぞれ移動してしまう。このため、ステップS500による所定の加工処理が終了すると、例えば、図14(B) に示すように、分散配置処理が施される前の秘匿データコードα,β(図14(A) )は、いずれもビット単位でバラバラに分解されて秘匿データコード片として分散して再配置され、また、埋め草コードも同様に分散配置処理よってビット単位でバラバラに分解されるため、秘匿データコード片と混在した状態で、空き領域内に再配置される。
【0151】
これにより、暗号化されている秘匿データコードがさらにスクランブルされてしまうので、セキュリティの強度を一層高めることが可能となる。
【0152】
なお、本加工処理では、このようなステップS507〜S517による分散配置処理に代えて、例えば、ビット位置を変換可能なビット位置変換テーブル(変換テーブル)に基づくビットの並替えでも良い。具体的には、例えば、1ビット目を4ビット目に、2ビット目を13ビット目に、3ビット目を1ビット目に、4ビット目を2ビット目に、5ビット目を15ビット目に、6ビット目を11ビット目に、7ビット目を8ビット目に、8ビット目を3ビット目に、9ビット目を10ビット目に、10ビット目を6ビット目に、11ビット目を12ビット目に、12ビット目を5ビット目に、13ビット目を9ビット目に、14ビット目を16ビット目に、15ビット目を7ビット目に、16ビット目を14ビット目に、それぞれ位置を変換するビット位置変換テーブルを設けその変換規則に従ってビット位置を変換する。これにより、例えば、16ビット構成のデータ「1001011011010110」(96D6h)は、「0101101101100001」(5A61h)に変換される。
【0153】
また、このようなビット位置変換テーブルを通すことによって、例えば、先の例では、16進表記のデータ「96D6h」が、「5A61h」に変換されることから、秘匿データコードを構成するビットにより特定されるデータ値、そのものを所定のデータ値変換テーブル(変換テーブル)に基づいて変換する技術的思想として把握することができる。なお、このデータ値の変換は、例えば、入力データXを2倍にしてから1を減算して出力Y(=X×2−1)するといった所定のデータ値変換式によっても可能である。
【0154】
さらに、例えば、ビット位置を所定ビット数だけLSB側に循環してシフトするように、循環シフトレジスタを通しても良い。先の16ビット構成のデータ例では、「1001011011010110」(96D6h)は、「0110100101101101」(696Dh)に変換される。勿論、シフト量は4ビットに限られることはなく、16ビット構成の場合には、1ビット〜15ビットのうちのいずれでも良く、またシフト方向もMSB側であっても良い。なお、ここで例示した16ビット構成の16ビットは、上述した暗号化データのビット数と復号キー検査データのビット数の和mに相当するものである。なお、図14(D) には、上述したような分散配置処理以外のビットの並替えやビット値の変換によるフォーマット例(暗号化データ+復号キー検査データ)が図示されている(図14(E) は、比較として第2実施形態のコード生成処理により生成された秘匿コードの構成例である。)。
【0155】
また、前述したステップS507では、開示データコードと暗号化データとを2バイト単位で排他的論理和(EXOR)演算を行いその結果Sを求め、それをステップS509により疑似乱数のシード値にセットしたが、開示データコードに代えて、当該QRコードQに付随する固有情報、例えば、誤り訂正レベル(L,M,Q,H)や型番(1〜40)を用いて暗号化データとを排他的論理和(EXOR)演算を行いその結果Sを求めても良い。なお、誤り訂正レベルや型番の詳細や仕様は、例えば、日本工業規格(JIS)の二次元コードシンボル−QRコード−基本仕様(JIS X 0510:2004)に従う。
【0156】
ここで、図12に戻ると、ステップS500により所定の加工処理が終了した後は、続くステップS133により秘匿データコードを付加され、さらにステップS134により秘匿データコードが含まれているか否かを判断する処理が行われる。
【0157】
即ち、ステップS134では、秘匿データコードが含まれている場合には(S134;Yes)、前述したステップS132により埋め草コードが既に付加されていることから、続くステップS135による埋め草コードの付加が不要となる。このため、このような場合には、ステップS135による処理をスキップしてステップS137に処理を移行する。これに対し、秘匿データコードが含まれていない場合、つまり開示データコードのみの場合には(S134;No)、まだ埋め草コードが付加されていないため、続くステップS135により埋め草コードを付加してから、ステップS137に処理を移行する。
【0158】
そして、ステップS137により、誤り訂正コードを付加する処理が行われると、図14(A)〜(C)に示すフォーマットのデータコードが生成されるため、続くステップS139によりこのようなデータコードに基づいて各セルを生成して図4に示して説明したデータブロックに配置される。
【0159】
以上説明したように、本第3実施形態に係るQRコードプリンタ10によると、MPU11により実行されるコード生成処理によって生成されるQRコードQでは、ステップS500による加工処理により秘匿データコードに所定の加工を施して、終端識別コードの後、または終端識別情報により特定される終端位置の後、に配置する。これにより、秘匿データコードは、所定の加工を施されて当該秘匿データコードの存在がわからないように加工されているので、たとえ終端識別コードの後等を読み取る試みがなされても、秘匿データコードが配置されていることすらわからないので、セキュリティの強度を一層高めることができる。
【0160】
なお、上述した第3実施形態では、ステップS113の後に、開示データおよび秘匿データを並び替える処理(図2に示すS115相当)を介在させていないが、印刷データに、第三者に開示するデータ(開示データ)と、第三者には秘密にして隠しておきたいデータ(秘匿データ)と、が含まれており、これらがデータレコード中で混在している場合に、ステップS111により受信した「秘匿データのデータレコード中の位置関係を示す位置情報」に基づいて、データの順番を入れ替えて、開示データの集まりと秘匿データの集まりとに分ける処理を行っても良い。これにより、例えば、パソコン1から送られてくる印刷データのレコードに、開示データA、秘匿データα、開示データB、秘匿データβの順に並ぶデータが含まれていた場合には、ステップS115により、開示データA、開示データB、秘匿データα、秘匿データβの順に並び替える処理を行うことにより、開示データと秘匿データとがそれぞれまとめられるので、後のステップ121による終端識別コードの付加処理や、ステップS125による秘匿識別コードの付加処理等が容易になる。
【0161】
次に、上述の例とは異なるQRコードリーダ20による他のQRコードのデコード処理を図15〜図17を参照して説明する。なお、ここで説明する他のQRコードは、図14(B) 等を参照して前述したように、秘匿データコードα,β等に所定の加工を施して空き領域に詰めるフォーマットを採るものである。
【0162】
なお、図15に示すデコード処理のフローチャートにおいて、既に説明したデコード処理(図10)を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。また、図16に示す復号化処理のフローチャートにおいて、既に説明した復号化処理(図11)を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【0163】
図15に示すように、デコード処理は、QRコードリーダ20の電源投入により起動する制御回路40およびメモリ35によって開始され、ステップS201により初期設定処理が行われると、ステップS205により所定時間を経過した後(S205;Yes)、またはステップS209により復号キーを受信した後(S209;Yes)、ステップS213により画像データを取得する。そして、ステップS215,S217,S219,S221によりQRコードQを画像認識してステップS223により誤り訂正可能であるか否かを判断して、誤り訂正可能であると判断できる場合には(S223;OK)、誤り訂正をした後、ステップS300”により復号化処理(図16)を行う。
【0164】
図16に示すように、ステップS300”の復号化処理では、ステップS301〜S313により終端位置(開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの)が見つかると(S305’;Yes)、ステップS315,S317,S319によりカウンタnが指すn番目のデータコードを取得してそれが秘匿識別コードであるか否かをステップS321により判断する。そして、秘匿識別コードであると判断すると(S321;Yes)、続くステップS323によりコード数jを取得した後、ステップS600による所定の抽出処理が行われる。
【0165】
なお、ステップS321により秘匿識別コードが配置されていると判断した場合には、例えば、ホストコンピュータHSTに対して当該QRコードQには、秘匿識別コードが配置されている旨を通知するように構成しても良い。これにより、ホストコンピュータHSTでは、終端識別コードよりも後方のデータコードが秘匿データコードである旨を把握することができる。また、本来、埋め草コードしか配置されない終端識別コードの後のコード領域(コード領域の空き部分)に、埋め草コード以外のもので秘匿データコードではないもの(例えばデータ化けにより埋め草コードに該当しなくなったもの)が配置されている場合には、秘匿データコードである旨の情報がホストコンピュータHSTに対して出力されないので、秘匿データコード以外のものをデコードすることで生じ得る誤動作を防止することができる。
【0166】
ここで、ステップS600による所定の抽出処理を図17を参照して説明する。なお、図17に示す所定の抽出処理は、既に第3実施形態で説明した所定の加工処理(図13)と情報処理の内容が類似しているので、所定の加工処理を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【0167】
図17に示すように、所定の抽出処理では、ステップS501によりポインタiをゼロクリアする処理、ステップS503により終端位置よりも後に存在する空き領域のビット数n(図14(A)〜(C)参照)を求める処理、ステップS505により暗号化データのビット数と復号キー検査データのビット数との和m(図14(D),(E)参照)を求める処理、ステップS507により開示データコードと暗号化データとを2バイト単位で排他的論理和(EXOR)演算を行いその結果Sを求める処理、がそれぞれ順番に行われ、続くステップS509により疑似乱数のシード値にセットする処理が行われる。
【0168】
このステップS509によりセットされるシード値は、第3実施形態で説明したように、所定の演算により疑似乱数を発生させるための種であり、このシード値が同じであれば、発生する乱数はまったく同じものとなる。このため、同一のQRコードQであれば、所定の加工処理(図13)のシード値と本抽出処理のシード値とは、同じ値となり、次のステップS513による疑似乱数の値およびその発生順も同じになる。
【0169】
ステップS513により疑似乱数Rを求める処理が行われ、ステップS515により既に発生した疑似乱数Rと同じ値であると判断されない場合には(S515;No)、続くステップS617により、空き領域のRビット目の値を暗号化データバッファのiビット目(ポインタiが指し示すビットの位置)にセットする処理が行われる。
【0170】
即ち、第3実施形態の所定の加工処理では、ステップS517により、暗号化データのiビット目(ポインタiが指し示すビットの位置)の値を空き領域のRビット目にセットする処理を行うことによって、例えば、1ビット目の値を空き領域のRビット目にセットしたが、本抽出処理のステップS617では、これとは逆に、空き領域のRビット目の値を暗号化データバッファのiビット目(ポインタiが指し示すビットの位置)にセット、例えば、空き領域のRビット目の値を暗号化データバッファの1ビット目にセットする。
【0171】
これにより、第3実施形態の所定の加工処理により空き領域のRビット目にセットされた暗号化データのiビット目の値は、本抽出処理によって、暗号化データバッファのiビット目にセットされるので、ビット単位でバラバラに分解された秘匿データコード片等を元通りに復元することが可能となる。つまり、ステップS617等では集約復元処理が可能となる。
【0172】
そして、ステップS519により、ポインタiと秘匿データコードの全ビット数とが一致している場合には、秘匿データコードの全てのビットが前述したステップS507〜517による集約復元処理が施されていることになるので(S519;Yes)、本加工処理を終了する。これに対して、ポインタiと秘匿データコードの全ビット数とが一致していない場合には、秘匿データコードにはまだ復元処理が施されていないビットが残存することになるので(S519;No)、ステップS511によりポインタiをカウントアップして再度ステップS513による疑似乱数発生処理を行う。
【0173】
ここで、図16に戻ると、ステップS600により所定の抽出処理が終了した後、ステップS325により文字数(j)分だけデータコードを取得し、続くステップS329’によりj番目の復号キー検査データ(鍵特定情報)を取得する。
【0174】
そして、ステップS329’により取得した復号キー検査データに基づいて、先のステップS209によりホストコンピュータHSTから受信した復号キーがこのj番目の秘匿データコードの暗号化データを解読する鍵として適合しているか否かの判断をステップS331により行い、当該復号キーが適合していると判断した場合には(S331;Yes)、続くステップS333により暗号化データを解読する。
【0175】
これに対して、ステップS331に当該復号キーが適合していると判断できない場合には(S331;No)、当該n番目の秘匿データコードを解読することなく、本復号化処理を終了する。ステップS335により、秘匿データコードを復号する処理が行われると、図15に示すステップS300”を終えてデコード処理を終了する。
【0176】
なお、本抽出処理では、このようなステップS507〜S617による集約復元処理に代えて、例えば、ビット位置を逆方向に変換可能なビット位置逆変換テーブルに基づくビットの並替えでも良い。具体的には、例えば、第3実施形態で説明したビット位置逆変換テーブルにおいては、1ビット目を3ビット目に、2ビット目を4ビット目に、3ビット目を8ビット目に、4ビット目を1ビット目に、5ビット目を12ビット目に、6ビット目を10ビット目に、7ビット目を15ビット目に、8ビット目を7ビット目に、9ビット目を13ビット目に、10ビット目を9ビット目に、11ビット目を6ビット目に、12ビット目を11ビット目に、13ビット目を2ビット目に、14ビット目を16ビット目に、15ビット目を5ビット目に、16ビット目を14ビット目に、それぞれ位置を変換するビット位置逆変換テーブルを設けその逆変換規則に従ってビット位置を変換する。これにより、例えば、16ビット構成のデータ「0101101101100001」(5A61h)は、元の「1001011011010110」(96D6h)に変換される。
【0177】
また、このようなビット位置逆変換テーブルを通すことに代えて、秘匿データコードを構成するビットにより特定されるデータ値を逆方向に変換可能なデータ値逆変換テーブルを用いても良い。例えば、第3実施形態で説明したデータ値変換テーブルの例においては、16進表記のデータ「96D6h」が「5A61h」に変換されることから、これを逆方向の、「5A61h」を「96D6h」に逆変換可能な所定のデータ値逆変換テーブルに基づいて変換することで、復元処理が可能となる。
【0178】
さらに、このようなビット位置逆変換テーブルを通すことに代えて、秘匿データコードを構成するビットにより特定されるデータ値を逆方向に変換可能なデータ値逆変換式を用いても良い。例えば、第3実施形態で説明した所定のデータ値変換式の例においては、入力データXを2倍にしてから1を減算して出力Y(=X×2−1)しているので、これとは逆に、入力データX’に1を加算した結果を2で除算して出力Y’(=(X’+1)/2)することで、復元処理が可能となる。
【0179】
さらに、第3実施形態で説明した循環シフトレジスタを通す場合に対しては、所定の加工処理とは逆方向にシフトする循環シフトレジスタを復元処理に用いることで、復元処理が可能となる。例えば、先の16ビット構成のデータ例では、所定の加工処理においてLSB側に4ビットシフトさせることで「1001011011010110」(96D6h)を「0110100101101101」(696Dh)に変換したので、これを、復元処理では、逆方向のMSB側に4ビットシフトさせることで、「1001011011010110」(96D6h)というように元に戻すことが可能となる。
【0180】
なお、ステップS509によりセットされる疑似乱数のシード値については、第3実施形態と同様に、当該QRコードQに付随する固有情報、例えば、誤り訂正レベル(L,M,Q,H)や型番(1〜40)を用いて暗号化データとを排他的論理和(EXOR)演算を行いその結果Sを求めても良い。なお、誤り訂正レベルや型番の詳細や仕様は、例えば、日本工業規格(JIS)の二次元コードシンボル−QRコード−基本仕様(JIS X 0510:2004)に従う。
【0181】
なお、ステップS303〜S313では、終端位置の前方に配置されて元来デコードされる通常のデータコード(第1のデータコード、開示データコード)を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路40等は、「第1デコード手段」に相当し得るものである。
【0182】
また、ステップS321では、ステップS319により取得されたn番目のデータコードが、秘匿識別コードであるか否かを判断する処理が行われる。このため、このステップS321を実行する制御回路40等は、「データコード判断手段」や「秘匿識別コード判断手段」に相当し得るものである。さらに、ステップS333を実行する制御回路40等は、「復号手段」に相当し得るものである。
【0183】
さらに、ステップS319,S323〜S335では、終端位置の後方に配置されて、本来はデコードされないデータコード(第2のデータコード、秘匿データコード)を取得してデコードする処理が行われる。このため、これらの各ステップを実行する制御回路40等は、「第2デコード手段」に相当し得るものである。
【0184】
以上説明したように、本構成のQRコードリーダ20によると、本来、データコードが配置されない終端識別コードの後のコード領域(コード領域の空き部分)等に、所定の加工が施された秘匿データコード(第2のデータコード)が配置されていても、この第2のデータコードをデコードすることができる。したがって、コード語を配置すべきコード領域の空き部分に存在するデータコードをデコードすることができる。
【0185】
また、上述したデコード処理では、ステップS329’によりj番目の復号キー検査データを取得するように構成したが、例えば、第3実施形態で述べたように、ステップS113の後に、開示データおよび秘匿データを並び替える処理(図2に示すS115相当)を介在させて、ステップS111により受信した「秘匿データのデータレコード中の位置関係を示す位置情報」に基づいて、データの順番を入れ替えて、開示データの集まりと秘匿データの集まりとに分ける処理を行った場合には、ステップS329’に代えて、秘匿データコードから「開始桁」を分離してこの分離された「開始桁」に基づいて秘匿データコードを復号(デコード)した秘匿データをコード化される前のデータレコード中の位置関係に配置するように構成しても良い。
【0186】
これにより、コード語としてコード化される前のデータレコード中の位置関係において前後して混在する場合であっても、デコードしたデータを、この位置情報に基づいてコード化前の位置関係に配置することができる。この場合、「秘匿データコードから「開始桁」を分離する」処理を実行する制御回路40等は、「位置情報分離手段」に相当し得る。また、「この分離された「開始桁」に基づいて秘匿データコードを復号(デコード)した秘匿データをコード化される前のデータレコード中の位置関係に配置する」処理を実行する制御回路40等は、「データ配置手段」に相当し得る。
【0187】
次に、上述の例とは異なるQRコードリーダ20によるQRコードQのデコード処理を図18および図19を参照して説明する。なお、ここで説明するQRコードQは、これまで第1実施形態〜第3実施形態において説明した各秘匿データコードを含むQRコードを意味する。
【0188】
なお、ここでは、デコード処理のフローチャートは図示しないが、図6、図10や図15に示されるステップS300,S300’,S300”の各復号処理を図18に示す復号処理に置き換えることで、これらのデコード処理を本構成に適用することができる。また、図18に示す復号化処理のフローチャートにおいて、既に説明した復号化処理(図11)を構成する処理ステップと実質的に同一の処理ステップについては同一符号を付し詳細な説明を省略する。
【0189】
図18に示すように、復号化処理は、S305’により終端位置(開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの)でないと判断すると(S305’;No)、ステップS307,S309により文字数i分のデータコードを取得した後、ステップS310により開示データコードをデコードするか否かを判断する。
【0190】
即ち、このステップS310では、後で図19を参照して説明する「読取フラグS」の状態((1) 開示データコードだけをデコードするフラグS=1、(2) 秘匿データコードだけをデコードするフラグS=2、(3) 開示データコードと秘匿データコードの双方をデータコードするフラグS=0)に基づいて、開示データコードを復号する情報が当該読取フラグSにセットされているか否かを判断する。この読取フラグSは、例えば、QRコードリーダ20を構成するメモリ35の所定領域またはレジスタに設定されるもので、後述する読取フラグ設定処理(図19参照)により設定される。
【0191】
そして、(1) 開示データコードだけをデコードするフラグS=1、または(3) 開示データコードと秘匿データコードの双方をデータコードするフラグS=0が読取フラグにセットされている場合)には(S310;Yes)、続くステップS311により開示データコードを復号する処理を行い、(2) 秘匿データコードだけをデコードするフラグS=2が読取フラグにセットされている場合には(S310;No)、続くステップS311により開示データコードを復号する処理をスキップして、ステップS313,S303等により次のデータコードを取得する処理を行う。
【0192】
一方、ステップS301〜S313により終端位置(開示データコードがなすコード列の終端位置で、終端識別コードまたは終端位置データにより特定可能なもの)が見つかると(S305’;Yes)、ステップS314により秘匿データコードをデコードするか否かを判断する。
【0193】
即ち、このステップS314は、前述したステップS310とは反対に、秘匿データコードをデコードするか否かを読取フラグSに基づいて判断する。つまり、(2) 秘匿データコードだけをデコードするフラグS=2、または(3) 開示データコードと秘匿データコードの双方をデータコードするフラグS=0が読取フラグにセットされている場合には(S314;Yes)、続くステップS315〜S335により秘匿データコードを復号する処理を行い、(1) 開示データコードだけをデコードするフラグS=1が読取フラグにセットされている場合には(S314;No)、本復号処理を終了する。
【0194】
ここで、読取フラグ設定処理を図19を参照して説明する。なお、この読取フラグ設定処理は、例えば、当該QRコードリーダ20を構成するハードウェアの各種設定状態(例えば、ビープ音のオンオフ、液晶表示器46のバックライトのオンオフ等)を変更、解除または初期化する場合に起動されるメンテナンスプログラムに含まれるもので、通常のデコード処理(図6、図10や図15)には含まれないものである。なおここでは、メンテナンスプログラムによるメンテナンス処理のフローチャートおよびその説明は省略する。
【0195】
図19に示すように、読取フラグ設定処理では、まずステップS901により読取フラグSに0(S=0)をセットする等の所定の初期化処理を行った後、ステップS903によりタイマー値をクリアする処理が行われる。このタイマーは、次のステップS905により所定時間を経過したか否かを判断するためにカウントされるものである。
【0196】
そして、ステップS905により所定時間を経過していないと判断した場合には(S905;No)、続くステップS907によりコマンドを受信したか否かを判断する処理が行われる。このコマンドは、例えば、前述したメンテナンスプログラムにおいて、ホストコンピュータHSTから受信したり、当該QRコードリーダ20を構成する操作スイッチ42から入力されたりするものである。
【0197】
ステップS907によりコマンドを受信したと判断しない(受信していないと判断した)場合には(S907;No)、ステップS905により再び所定時間を経過しているか否かを判断する。これに対し、コマンドを受信したと判断した場合には(S907;Yes)、続くステップS909により受信したコマンドの内容を判断する処理が行われる。
【0198】
即ち、ステップS909により、当該コマンドが(1) 開示データコードだけをデコードするものである場合には、ステップS911により読取フラグSに「1」をセットし(S=1)、当該コマンドが(2) 秘匿データコードだけをデコードするものである場合には、ステップS913により読取フラグSに「2」をセットする(S=2)。これに対し、当該コマンドがこれらのいずれでもない場合には、読取フラグSを「0」のままにして、本読取フラグ設定処理を終了する。つまり、この場合には、前述したステップS901によりデフォルトで設定されている「0」をそのまま引き継ぐことで、(3) 開示データコードと秘匿データコードの双方をデータコードする読取フラグSを維持する。
【0199】
ステップS911,S913により読取フラグがセットされると、本読取フラグ設定処理を終了する。なお、ステップS310,S314は、「デコード機能選択手段」に相当し得るものである。また、ステップS311は、「第1のデータコードのデコード機能」に相当し、ステップS335は、「第2のデータコードのデコード機能」に相当し得るものである。
【0200】
以上説明したように、本構成に係るQRコードリーダ20によると、当該QRコードリーダ20の使用者は、開示データコードをデコードするか、秘匿データコードのデコードするか、の少なくとも一方を選択することができるので、例えば、秘匿データコードは読んでも開示データコードを読みたくない場合や、それとは逆に、開示データコードは読んでも秘匿データコードを読みたくない場合に、不要なデコード処理によるデコード時間を削減することができる。したがって、デコード時間を短縮することができる。
【0201】
なお、上述した実施形態のなかには、例えば、第1実施形態(図2)や第2実施形態(図8)で説明したように、コード生成処理のステップS119において誤り訂正コードを生成しているものがあるが、必ずしもこのステップS119で誤り訂正コードを生成する必要はなく、例えば、当該ステップS119に相当する処理(誤り訂正コード生成処理)を、誤り訂正コードを付加する処理(ステップS137)とともにまたはその前段階で実行するように、コード生成処理の流れを構成しても良い。
【符号の説明】
【0202】
1…パソコン
10…QRコードプリンタ
11…MPU
12…メモリ
20…QRコードリーダ(二次元コードの読取装置)
35…メモリ(第1デコード手段、データコード判断手段、第2デコード手段、秘匿識別コード判断手段、秘匿情報出力手段、復号手段、鍵適合判断手段、鍵分離手段、位置情報分離手段、データ配置手段、抽出手段、デコード機能選択手段)
40…制御回路(第1デコード手段、データコード判断手段、第2デコード手段、秘匿識別コード判断手段、秘匿情報出力手段、復号手段、鍵適合判断手段、鍵分離手段、位置情報分離手段、データ配置手段、抽出手段、デコード機能選択手段)
HST…ホストコンピュータ
P…ラベル
Q…QRコード(二次元コード)

【特許請求の範囲】
【請求項1】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードの生成装置として、コンピュータを機能させるためのプログラムであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする二次元コードの生成プログラム。
【請求項2】
開示するデータを表すコード語としてコード化された開示データコードの総数が、コード語を配置すべきコード領域に収容可能な容量に満たない場合、前記コード領域に配置された前記開示データコードがなすコード列の終端を示す終端識別コードをこのコード列の最後に配置するとともに、前記コード領域の空き部分にデータを表さない埋め草コードを配置する二次元コードであって、
秘匿するデータを表すコード語としてコード化された秘匿データコードを前記埋め草コードの一部または全部に代えて、前記終端識別コードの後に配置することを特徴とする二次元コード。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate


【公開番号】特開2012−89179(P2012−89179A)
【公開日】平成24年5月10日(2012.5.10)
【国際特許分類】
【出願番号】特願2012−26480(P2012−26480)
【出願日】平成24年2月9日(2012.2.9)
【分割の表示】特願2008−41448(P2008−41448)の分割
【原出願日】平成20年2月22日(2008.2.22)
【出願人】(501428545)株式会社デンソーウェーブ (1,155)
【Fターム(参考)】