(57)【特許請求の範囲】
【請求項１】
一意の番号を生成する番号生成部と、
前記一意の番号を、暗号アルゴリズムによって暗号化する暗号作成部と、
前記一意の番号と、前記暗号作成部によって作成された暗号とを連結させた連結列を作成する列作成部と、
所定の規則を用いて、前記連結列を一意の乱数列に変換する変換部と、
を備える乱数列生成装置。
【請求項２】
前記変換部は、前記連結列を構成する要素の順番を並び替え、並び替えた変更連結列を作成し、前記変更連結列を前記乱数列に変換する、請求項１に記載の乱数列生成装置。
【請求項３】
前記暗号作成部は、前記暗号を所定の桁数に変換した変換暗号列を作成し、
前記列作成部は、前記変換暗号列と、前記一意の番号とから前記連結列を作成する、請求項１又は２に記載の乱数列生成装置。
【請求項４】
前記乱数列の要素に基づいてチェックデジットを算出し、算出した前記チェックデジットを前記乱数列に付加するチェックデジット付加部をさらに備える、請求項３に記載の乱数列生成装置。
【請求項５】
前記変換部は、前記連結列を構成する要素ごとを符号に変換する変換表を用いて変換する、請求項１から４のいずれか一項に記載の乱数列生成装置。
【請求項６】
前記番号生成部は、日付と日付ごとのカウンタとを連結した番号を前記一意の番号とする、請求項１から５のいずれか一項に記載の乱数列生成装置。
【請求項７】
前記暗号アルゴリズムに用いられる秘密鍵を記憶するセキュアな保護記憶部をさらに備える請求項１から６のいずれか一項に記載の乱数列生成装置。
【請求項８】
請求項１に記載の乱数列生成装置が実行する方法であって、
前記番号生成部が、一意の番号を生成する番号生成ステップと、
前記暗号作成部が、前記一意の番号を、暗号アルゴリズムによって暗号化する暗号作成ステップと、
前記列作成部が、前記一意の番号と、前記暗号作成ステップによって作成された暗号とを連結させた連結列を作成する乱数列作成ステップと、
前記変換部が、所定の規則を用いて、前記連結列を一意の乱数列に変換する変換ステップと、
を備える方法。
【請求項９】
コンピュータに、請求項８に記載の各ステップを実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数列生成装置、方法及びプログラムに関する。
【背景技術】
【０００２】
従来より、ＵＵＩＤ（Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）など、重複しない値を生成する技術が存在する（非特許文献１）。ＵＵＩＤには複数のバージョンが存在し、バージョン１ではＭＡＣアドレスとタイムスタンプで重複しないことを保証している。また、ＵＵＩＤには他のバージョンとして、乱数を利用するバージョンやハッシュ値を利用するバージョンも標準化されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｐ．Ｌｅａｃｈ，Ｍ．Ｍｅａｌｌｉｎｇ，Ｒ．Ｓａｌｚ，Ａ  Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  ＩＤｅｎｔｉｆｉｅｒ（ＵＵＩＤ）  ＵＲＮ  Ｎａｍｅｓｐａｃｅ  ＲＦＣ４１２２
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ＵＵＩＤのバージョン１では、規則性が高く、だれもが容易に生成できるため、ＰＩＮ（Ｐｅｒｓｏｎａｌ  ｉｄｅｎｔｉｆｉｃａｔｉｏｎ  ｎｕｍｂｅｒ）やパスコードとしての利用には適さない。また、他のバージョンでは、規則性が低いものの、一意性が保証されておらず、だれもが生成可能であるという性質はバージョン１と同様である。
【０００５】
そこで、一意性が保証されていて衝突が起こらず、かつ、第３者による不正発行が困難な乱数列を生成する装置が求められている。
【０００６】
本発明は、一意性が保証され、かつ、不正発行が困難な乱数列を生成できる乱数列生成装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
具体的には、以下のような解決手段を提供する。
（１）  一意の番号を生成する番号生成部と、前記一意の番号を、暗号アルゴリズムによって暗号化する暗号作成部と、前記一意の番号と、前記暗号作成部によって作成された暗号とを連結させた連結列を作成する列作成部と、所定の規則を用いて、前記連結列を一意の乱数列に変換する変換部と、を備える乱数列生成装置。
【０００８】
（１）に係る乱数列生成装置は、一意の番号を生成し、生成した一意の番号を、暗号アルゴリズムによって暗号化し、一意の番号と、作成した暗号とを連結させた連結列を作成し、所定の規則を用いて、連結列を一意の乱数列に変換する。
したがって、（１）に係る乱数列生成装置は、一意の番号を含むことによって一意性が保証され、かつ、変換によって一意の番号の規則性が隠されると共に暗号を含むことによって不正発行が困難な乱数列を生成することができる。
【０００９】
（２）  前記変換部は、前記連結列を構成する要素の順番を並び替え、並び替えた変更連結列を作成し、前記変更連結列を前記乱数列に変換する、（１）に記載の乱数列生成装置。
【００１０】
（２）に係る乱数列生成装置は、連結列の要素の順番を並び替えて変換することにより、さらに規則性を隠すことができるので、不正発行が困難な乱数列を生成することができる。
【００１１】
（３）  前記暗号作成部は、前記暗号を所定の桁数に変換した変換暗号列を作成する暗号列変換部と、前記列作成部は、前記変換暗号列と、前記一意の番号とから前記連結列を作成する、（１）又は（２）に記載の乱数列生成装置。
【００１２】
（３）に係る乱数列生成装置は、指定された桁数の乱数列を生成することができる。
【００１３】
（４）  前記乱数列の要素に基づいてチェックデジットを算出し、算出した前記チェックデジットを前記乱数列に付加するチェックデジット付加部をさらに備える、（３）に記載の乱数列生成装置。
【００１４】
（４）に係る乱数列生成装置は、チェックデジットを付加することにより、ＰＩＮの入力ミスの検出など、正しく発行されたものであることをチェック可能な乱数列を生成することができる。
【００１５】
（５）  前記変換部は、前記連結列を構成する要素ごとを符号に変換する変換表を用いて変換する、（１）から（４）のいずれか一に記載の乱数列生成装置。
【００１６】
（５）に係る乱数列生成装置は、要素ごとを符号に変換することにより、不正発行が困難な乱数列を容易に生成することができる。
【００１７】
（６）  前記番号生成部は、日付と日付ごとのカウンタとを連結した番号を前記一意の番号とする、（１）から（５）のいずれか一に記載の乱数列生成装置。
【００１８】
（６）に係る乱数列生成装置は、日付と日付ごとのカウンタとを連結した番号によって、一意性が保証された乱数列を容易に生成することができる。
【００１９】
（７）  前記暗号アルゴリズムに用いられる秘密鍵を記憶するセキュアな保護記憶部をさらに備える（１）から（６）のいずれか一に記載の乱数列生成装置。
【００２０】
（７）に係る乱数列生成装置は、秘密鍵をセキュアな保護記憶部に記憶することにより暗号化処理の秘匿性が高まるので、不正発行がより困難な乱数列を生成することができる。
【００２１】
（８）  （１）に記載の乱数列生成装置が実行する方法であって、前記番号生成部が、一意の番号を生成する番号生成ステップと、前記暗号作成部が、前記一意の番号を、秘密鍵を用いた暗号アルゴリズムによって暗号化する暗号作成ステップと、前記列作成部が、前記一意の番号と、前記暗号作成部によって作成された暗号とを連結させた連結列を作成する乱数列作成ステップと、前記変換部が、所定の規則を用いて、前記連結列を一意の乱数列に変換する変換ステップと、を備える方法。
【００２２】
（８）に係る方法は、（１）と同様に、一意性が保証され、かつ、不正発行が困難な乱数列を生成することができる。
【００２３】
（９）  コンピュータに、（８）に記載の各ステップを実行させるためのプログラム。
【００２４】
（９）に係るプログラムは、コンピュータに、一意性が保証され、かつ、不正発行が困難な乱数列を生成するように機能させることができる。
【発明の効果】
【００２５】
本発明によれば、一意性が保証され、かつ、不正発行が困難な乱数列を生成することができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の一実施形態に係る乱数列生成装置の構成を示すブロック図である。
【図２】本発明の一実施形態に係る乱数列生成装置の変換表の例を示す図である。
【図３】本発明の一実施形態に係る乱数列生成装置の処理の例を示すフローチャートである。
【発明を実施するための形態】
【００２７】
以下、本発明の実施形態について、図を参照しながら説明する。
図１は、本発明の一実施形態に係る乱数列生成装置１０の構成を示すブロック図である。乱数列生成装置１０は、番号生成部１１と、暗号作成部１２と、列作成部１３と、変換部１４と、チェックデジット付加部１５と、保護記憶部３０と、変換表３１１を記憶する記憶部３１とを備える。各部を詳述する。
【００２８】
番号生成部１１は、一意の番号を生成する。具体的には、番号生成部１１は、日付と日付ごとのカウンタとによる番号を一意の番号とする。例えば、番号生成部１１は、乱数列生成装置１０の処理開始日から日付ごとにカウントアップした３桁の日付番号を作成する。次に、番号生成部１１は、日付ごとに０からカウントアップするカウンタであって、乱数列生成装置１０による乱数列の生成ごとにカウントアップするカウンタ（例えば、５桁のカウンタ）からカウントを取得する。次に、番号生成部１１は、取得したカウントを、日付番号に連結させた８桁の一意の番号を生成する。
カウントアップの方法は、いずれの場合も、１０進（すなわち、０〜９）に限らず、例えば、３０進でもよい。３０進の場合、カウントアップの方法は、例えば、０〜９と、ａ〜ｚのうちの選択された２０個のアルファベットとを用いて順にアップし桁上がりするとしてもよく、他の記号などの符号を用いて順にアップし桁上がりするとしてもよい。一意の番号に出現する符号は、後述する変換部１４で用いられる所定の規則（例えば、変換表３１１など）にも、対応して用いられる。
【００２９】
暗号作成部１２は、番号生成部１１によって生成された一意の番号を、暗号アルゴリズムによって暗号化する。
暗号アルゴリズムは、一方向性関数である鍵付きハッシュ関数などであってよく、秘密鍵Ｋを用いるものであってよい。
【００３０】
暗号作成部１２は、作成した暗号を所定の桁数に変換した変換暗号列を作成するとしてもよい。具体的には、暗号作成部１２は、暗号の一部（例えば、上位６桁）を抜き取った変換暗号列を作成する。すなわち、暗号作成部１２は、暗号を所定の桁数に変換でき、例えば、所定の桁数が指定された場合、指定された桁数の変換暗号列を作成することができる。
【００３１】
列作成部１３は、番号生成部１１によって生成された一意の番号と、暗号作成部１２によって作成された暗号とを連結させた連結列を作成する。
列作成部１３は、暗号作成部１２によって変換暗号列が作成された場合、変換暗号列と、一意の番号とから連結列を作成する。
【００３２】
変換部１４は、所定の規則を用いて、連結列を一意の乱数列に変換し、連結列に一意の番号が含まれていることが分からないようにする。
所定の規則は、一意の乱数列を構成する要素ごとを符号に変換する変換表３１１（後述する図２参照）などであってもよい。
【００３３】
変換部１４は、連結列を構成する要素の順番を並び替え、並び替えた変更連結列を作成し、作成した変更連結列を一意の乱数列に変換するとしてもよい。
【００３４】
保護記憶部３０は、暗号アルゴリズムに用いられる秘密鍵Ｋを、セキュアに記憶する。保護記憶部３０は、変換部１４が用いる所定の規則（例えば、変換表３１１など）も記憶するとしてよい。
保護記憶部３０は、メモリ保護機能及びレジスタ保護機能などを具備したソフトウェアセキュアエレメントであってもよい。ソフトウェアセキュアエレメントは、メモリ上に保管されているデータ、プログラムが行うメモリへのアクセス、ＣＰＵで実行される演算などを保護することが可能である。ソフトウェアセキュアエレメントは、暗号アルゴリズムで利用する秘密鍵Ｋ、秘密鍵Ｋを含む処理、計算、及び変換表３１１（後述する図２参照）を安全に処理又は保管することが可能であり、攻撃者による解析などから保護する。
【００３５】
チェックデジット付加部１５は、連結列から、変換部１４によって変換された一意の乱数列の要素に基づいてチェックデジットを算出し、算出したチェックデジットを一意の乱数列に付加する。具体的には、チェックデジット付加部１５は、暗号作成部１２によって作成された所定の桁数の変換暗号列から変換部１４によって変換された一意の乱数列に基づいて、チェックデジットを付加する。
このように桁数が適切に調整され、チェックデジットが付加されて作成された乱数列は、一意性が保証され、かつ、不正発行が困難な乱数列なので、カードなどに印刷されて利用されることが可能である。
【００３６】
図２は、本発明の一実施形態に係る乱数列生成装置１０の変換表３１１の例を示す図である。図２の変換表３１１は、連結列に出現する符号が３０進であることに対応した例である。図２の変換表３１１は、行が３０文字（英数字０〜９及びａ〜ｚのうちの３０文字）と、列が３０文字（英数字０〜９及びａ〜ｚのうちの３０文字）とに構成されている。
変換部１４は、変換対象の連結列の２桁ずつをそれぞれ変換表３１１の行と列とに対応させ、対応する行及び列の交点に記憶されている符号に変換する。例えば、変換部１４は、変換対象の連結列が「０ａｃ１・・・」の場合、「０」と「ａ」とを「ｃ０」に、「ｃ」と「１」とを「ｄｓ」のように、変換表３１１を用いて変換する。
【００３７】
＜１６桁の一意の乱数列の生成の例＞
乱数列生成方法の一例として、乱数列生成装置１０が、英数字のうち３０文字を利用して１６桁の乱数列を生成する場合を説明する。乱数列の構成は次のとおりとする。
Ｓ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ｜｜Ｔｒｕｎｃ（ＥＫ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ），ｎ））｜｜ｃｈｋｓｍ
ここで、ｙｍｄは発行日、ｃｏｕｎｔｅｒはその日の発行数を管理するカウンタ、ＥＫは暗号アルゴリズムである。ＥＫは鍵付きハッシュ関数などの一方向性関数であってもよい。
Ｔｒｕｎｃ（ｘ，ｎ）は、ｘから上位ｎビットを抜き取り、英数字を割り当てる関数である。Ｓは入力値の並び替えと表変換を行う関数である。ｃｈｋｓｍは、チェックデジットである。なお、記号「｜｜」は、前後の文字列を連結することを表している。
【００３８】
乱数列生成装置１０は、一意の番号（ｙｍｄ｜｜ｃｏｕｎｔｅｒ）を生成する。
すなわち、乱数列生成装置１０は、発行日ｙｍｄに３桁を割り当て、開始日を「０００」とし、１日ごとにカウントアップする。乱数列生成装置１０は、カウンタｃｏｕｎｔｅｒに５桁を割り当て、その日の一意の乱数列の発行を「０００００」から順にカウントアップする。
【００３９】
次に、乱数列生成装置１０は、暗号ＥＫ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ）を作成する。
すなわち、乱数列生成装置１０は、「発行日｜｜カウンタ」を、秘密鍵Ｋを利用する暗号アルゴリズム（例えば、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）など）又は一方向性関数に入力する。
【００４０】
次に、乱数列生成装置１０は、関数Ｔｒｕｎｃ（ＥＫ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ），ｎ）（例えば、ｎ＝６）により、作成した暗号の上位６桁を抜き取る。
すなわち、乱数列生成装置１０は、暗号部分に６桁を割り当て、得られた暗号から上位の６桁を抜き取る。
【００４１】
次に、乱数列生成装置１０は、（ｙｍｄ｜｜ｃｏｕｎｔｅｒ）を連結させた連結列ｙｍｄ｜｜ｃｏｕｎｔｅｒ｜｜Ｔｒｕｎｃ（ＥＫ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ），ｎ）を作成する。
【００４２】
次に、乱数列生成装置１０は、連結列を、変換表３１１により２桁ずつ変換し、一意の乱数列Ｓ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ｜｜Ｔｒｕｎｃ（ＥＫ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ），ｎ））を生成する。関数Ｓは、連結列の要素を並び替えてもよい。
すなわち、乱数列生成装置１０は、発行日（３桁）、カウンタ（５桁）、暗号部分（６桁）によって作成した連結列に対して、２桁ずつを変換表３１１を用いて変換し、変換した１４桁のコードを、一意の乱数列の上位１４桁とする。
【００４３】
次に、乱数列生成装置１０は、チェックデジットが付加された一意の乱数列Ｓ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ｜｜Ｔｒｕｎｃ（ＥＫ（ｙｍｄ｜｜ｃｏｕｎｔｅｒ），ｎ））｜｜ｃｈｋｓｍを生成する。
すなわち、乱数列生成装置１０は、一意の乱数列の各要素の和を３０で割った余りを、チェックデジットとする。例えば、乱数列生成装置１０は、１４桁のコードを上位の７桁と下位７桁とに分けてそれぞれチェックデジットを算出し、算出したチェックデジットをそれぞれ１５桁目、１６桁目とする。
【００４４】
このように作成された乱数列は、他の装置によって作成することができないものである。例えば、他の装置は、同様の手順で一意の乱数列を生成しようとしても、秘密鍵Ｋが得られないので、生成できない。すなわち、乱数列生成装置１０は、他の装置では生成できない、かつ、同じ乱数列が存在しない一意の乱数列を生成する。
【００４５】
図３は、本発明の一実施形態に係る乱数列生成装置１０の処理の例を示すフローチャートである。乱数列生成装置１０は、コンピュータ及びその周辺装置が備えるハードウェア並びに該ハードウェアを制御するソフトウェアによって構成される。以下の処理は、制御部（例えば、ＣＰＵ）が、所定のソフトウェアに従い実行する処理である。
【００４６】
ステップＳ１０１において、ＣＰＵ（番号生成部１１）は、一意の番号を生成する。より具体的には、ＣＰＵは、日付ごとのカウンタをカウントアップし、カウントアップしたカウントと、日付に基づく日付番号とを連結させた一意の番号を生成する。
【００４７】
ステップＳ１０２において、ＣＰＵ（暗号作成部１２）は、一意の番号から、暗号アルゴリズムにより暗号を作成する。より具体的には、ＣＰＵは、ステップＳ１０１で生成された一意の番号を、秘密鍵Ｋを用いた暗号アルゴリズムによって暗号化する。
【００４８】
ステップＳ１０３において、ＣＰＵ（暗号作成部１２）は、暗号を所定の桁数に変換する。より具体的には、ＣＰＵは、ステップＳ１０２において作成した暗号の上位の所定の桁数を抜き取る。
【００４９】
ステップＳ１０４において、ＣＰＵ（列作成部１３）は、連結列を作成する。より具体的には、ＣＰＵは、ステップＳ１０３において変換した暗号と、ステップＳ１０１で生成した一意の番号とを連結する。
【００５０】
ステップＳ１０５において、ＣＰＵ（変換部１４）は、連結列の要素を並び替える。より具体的には、ＣＰＵは、ステップＳ１０４において作成した連結列の要素を並び替える。
【００５１】
ステップＳ１０６において、ＣＰＵ（変換部１４）は、連結列を、変換表３１１により変換し、一意の乱数列を生成する。より具体的には、ＣＰＵは、ステップＳ１０５で作成した連結列を構成する要素の２桁ずつを、変換表３１１により変換し、一意の乱数列を生成する。
【００５２】
ステップＳ１０７において、ＣＰＵ（チェックデジット付加部１５）は、一意の乱数列からチェックデジットを算出し、算出したチェックデジットを一意の乱数列に付加する。より具体的には、ＣＰＵは、ステップＳ１０６において生成した一意の乱数列の要素に基づいてチェックデジットを算出し、算出したチェックデジットを一意の乱数列に付加する。その後、ＣＰＵは、処理を終了する。
【００５３】
本実施形態によれば、乱数列生成装置１０は、変換表３１１によって変換されて一意の番号の規則性が隠された文字列と暗号とを含むことによって不正発行が困難な一意の乱数列を生成する。さらに、乱数列生成装置１０は、連結列の要素の順番を並び替えて変換することにより、さらに規則性を隠し、不正発行が困難な一意の乱数列を生成する。乱数列生成装置１０は、指定された桁数の一意の乱数列を生成する。乱数列生成装置１０は、チェックデジットを付加した一意の乱数列であって、ＰＩＮの入力ミスの検出など、正しく発行されたものであることをチェック可能な一意の乱数列を生成する。乱数列生成装置１０は、要素ごとを符号に変換した、不正発行が困難な乱数列を容易に生成する。乱数列生成装置１０は、日付と日付ごとのカウンタとを連結した番号によって、一意性が保証された乱数列を容易に生成する。乱数列生成装置１０は、秘密鍵Ｋをセキュアな保護記憶部３０に記憶し、暗号化処理の秘匿性を高め、不正発行がより困難な一意の乱数列を生成する。
このように、乱数列生成装置１０は、一意性が保証されて衝突が起こらず、かつ、第３者による不正発行が困難な一意の乱数列を生成する。
さらに、乱数列生成装置１０は、電子マネーへのチャージや有料サービスの利用などが受けられるカードであって、小売店などで販売されＰＩＮやパスコードが印刷されるカードなどに適した、所定の桁数の乱数列を生成可能である。
【００５４】
以上、本発明の実施形態について説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態に記載されたものに限定されるものではない。
【００５５】
乱数列生成装置１０による一連の処理は、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータなどにインストールされる。また、当該プログラムは、コンピュータ読み取り可能な記録媒体（例えば、ＣＤ−ＲＯＭのようなリムーバブルメディアなど）に記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。
【符号の説明】
【００５６】
１０    乱数列生成装置
１１    番号生成部
１２    暗号作成部
１３    列作成部
１４    変換部
１５    チェックデジット付加部
３０    保護記憶部
３１    記憶部
３１１  変換表
【図１】
0006735062.tif 000002
【図２】
0006735062.tif 000003
【図３】
0006735062.tif 000004