(57)【要約】【課題】再現性のない乱数値を生成することのできる乱数生成方法を提供する。【解決手段】電源投入時に、日時情報とＡ／Ｄ変換値とを読み込み、これらの現在値からオフセットアドレスを求めた後、ＲＯＭ３内のプログラム領域の先頭アドレスにオフセットアドレスを加えて読込先アドレスを求め、その後タイマー割り込み機能を初期化して一定周期でタイマー割り込みを発生させ、一定周期のタイマー割り込みの発生毎に、読込先アドレスを奇数づつシフトした後、乱数値の読込要求が発生した場合に、読込先アドレスをさらに奇数シフトし、このシフトした読込先アドレスに記憶されているコードの所定単位を乱数値とする。【選択図】      図４
2004185207.tif 000002
【特許請求の範囲】
【請求項１】
電源投入時に、日時情報とそれ以外の任意の情報のＡ／Ｄ変換値とのそれぞれの現在値を読み込みこれらの現在値からオフセットアドレスを求めた後、ＲＯＭ内のプログラム領域の先頭アドレスを読み込み、その後、先頭アドレスにオフセットアドレスを加えてＲＯＭ内のプログラム領域における読込先アドレスを求め、その後、タイマー割り込み機能を初期化して一定周期でタイマー割り込みを発生させて一定周期のタイマー割り込みの発生毎に読込先アドレスを奇数シフトし、その後、乱数値の読込要求が発生する毎に直前の読込先アドレスをさらに奇数シフトし、このシフトした読込先アドレスに記憶されているコードの所定単位を乱数値とすることを特徴とする乱数生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、乱数生成方法に係り、特に、再現性のない乱数値を生成することのできる乱数生成方法に関する。
【０００２】
【従来の技術】
近年、社会における急速な情報関連技術の発展にともない、乱数を用いた暗号化技術が、携帯電話機、携帯情報端末などの移動体端末、情報家電、ネットワーク端末などの通信システムにおける認証、不正使用防止、データの暗号化などの目的で用いられている。このような乱数は、初期値とタイマーを用いて生成されているのが一般的である（例えば、特許文献１参照）。
【０００３】
ここで、従来の乱数生成方法の一例について、上位モジュールから８バイトの乱数値を不定期に要求される場合を例示して説明する。
【０００４】
従来の乱数発生方法は、システム内で時計ＩＣおよびカレンダＩＣがバックアップ電源などにより常時稼働している場合、電源投入により開始する。つぎに、日時情報を読み込む。例えば、日時が２００２年５月１８日１６時３２分４０秒の場合、「２００２０５１８１６３２４０」の数値を読み込む。つぎに、日時情報をＢＣＤ値に変換する。この時、変換したＢＣＤ値の上位に１バイト付加して８バイトのＢＣＤ値とし、この８バイトのＢＣＤ値を、電源投入時の８バイトの乱数値（Ｒａｎｄ−Ｄａｔａ）として初期設定する。つぎに、１００ｍｓのタイマなどにより、タイマー割り込み機能を初期化し、１００ｍｓ毎などの一定周期でタイマー割り込みを発生させる。そして、一定周期のタイマー割り込み毎に、タイマー割り込み処理内において、初期設定した乱数値に対して、例えば３などの固定値を加算演算する固定演算処理を行うことで乱数値を順次更新するようになっている。すなわち、タイマー割り込み毎に固定演算処理を行うことで新しい乱数値を生成することができるようになっている。
【０００５】
そして、このような乱数発生方法においては、上位モジュールから乱数値の読込要求が発生した場合には、その時点での乱数値を上位モジュールに渡すように構成されている。
【０００６】
なお、乱数値の初期設定には、日時情報の他に、装置のシリアル番号などの固定値を用いる方法もある。
【０００７】
【特許文献１】
特開２０００−２４２４７０号公報
【０００８】
【発明が解決しようとする課題】
しかしながら、前述した従来の乱数生成方法においては、乱数値の再現性があるという問題点があった。
【０００９】
例えば、時計ＩＣおよびカレンダＩＣの供給電源をリセットして、電源再供給時からの時間をロジックアナライザなどにより正確に計測することで、電源投入時からのタイミングにより乱数値を再現できる可能性がある。
【００１０】
本発明はこのような点に鑑みてなされたものであり、再現性のない乱数値を生成することのできる乱数生成方法を提供することを目的とする。
【００１１】
【課題を解決するための手段】
前述した目的を達成するため本発明に係る乱数生成方法の特徴は、電源投入時に、日時情報とそれ以外の任意の情報のＡ／Ｄ変換値とのそれぞれの現在値を読み込みこれらの現在値からオフセットアドレスを求めた後、ＲＯＭ内のプログラム領域の先頭アドレスを読み込み、その後、先頭アドレスにオフセットアドレスを加えてＲＯＭ内のプログラム領域における読込先アドレスを求め、その後、タイマー割り込み機能を初期化して一定周期でタイマー割り込みを発生させて一定周期のタイマー割り込みの発生毎に読込先アドレスを奇数シフトし、その後、乱数値の読込要求が発生する毎に直前の読込先アドレスをさらに奇数シフトし、このシフトした読込先アドレスに記憶されているコードの所定単位を乱数値とする点にある。そして、このような構成を採用したことにより、再現性のない乱数値を生成することができる。
【００１２】
【発明の実施の形態】
以下、本発明を図面に示す実施形態により説明する。
【００１３】
図１は本発明に係る乱数生成方法を用いた乱数生成装置の実施形態の要部の構成を示すブロック図である。
【００１４】
本実施形態は、本発明の乱数生成方法を用いた乱数生成装置を、携帯電話機に適用したものを例示している。
【００１５】
図１に示すように、本実施形態の乱数生成装置１は、ＣＰＵ２を有しており、このＣＰＵ２には、不揮発性メモリにより形成されたＲＯＭとしてのプログラムＲＯＭ３、時計ＩＣ４、カレンダＩＣ５、割り込みに用いるタイマとしての周期タイマ６および環境温度サーミスタ７がバス８を介して接続されている。また、環境温度サーミスタ７は、Ａ／Ｄ変換器９を介してバス８に接続されている。なお、ＣＰＵ２には、図示しないＲＡＭなどの各種のものが設計コンセプトなどの必要に応じてバス８を介して接続されるようになっている。さらに、時計ＩＣ４およびカレンダＩＣ５は、図示しないバックアップ電源により常に稼働状態に保持されるようになっている。さらにまた、周期タイマ６としては１００ｍｓ周期のものが用いられている。さらに、本実施形態の乱数生成装置１は、図示しない携帯電話機の本体ケースの内部に配置されるようになっている。
【００１６】
つぎに、前述した構成からなる本実施形態の作用について本発明の乱数生成動作とともに図２から図４のフローチャートにより説明する。
【００１７】
本実施形態の乱数生成装置１における乱数値の生成は、第１手順、第２手順、第３手順の３つの手順に区分することができるので、これらの３つの手順について以下に順に説明する。
【００１８】
まず、本実施形態の乱数生成方法における乱数値の生成の第１手順について図２のフローチャートにより説明する。
【００１９】
本実施形態の乱数生成方法における乱数値の生成の第１手順は、読込先アドレスの初期化動作とタイマー割り込み処理機能の初期化動作である。この第１で順は、電源投入により開始する。そして、ステップＳＴ０１において、システム内で時計ＩＣ４およびカレンダＩＣ５がバックアップ電源などにより常時稼働しているので、電源投入時の時計ＩＣ４およびカレンダＩＣ５から日時情報（Ｏｆｆｓｅｔ−Ｔｉｍｅ）  を読み込み、つぎのステップＳＴ０２に進行する。なお、必要に応じて時計ＩＣ４からの時刻情報のみを用いてもよい。
【００２０】
つぎに、ステップＳＴ０２において、環境温度サーミスタ７およびそのＡ／Ｄ変換器９が存在するので、電源投入時の環境温度サーミスタ７による温度の計測結果をＡ／Ｄ変換器９によってＡ／Ｄ変換したＡ／Ｄ変換値（Ｏｆｆｓｅｔ−Ａｄ）  を読み込み、つぎのステップＳＴ０３に進行する。
【００２１】
なお、Ａ／Ｄ変換値としては、環境温度以外のシステム内の時系列において変化するものを用いることが好ましい。また、Ａ／Ｄ変換器９の分解能を細かくすることで、得られる乱数値のランダム性を向上できる。
【００２２】
つぎに、ステップＳＴ０３において、電源投入時における現在値の日時情報とＡ／Ｄ変換値とを加えてオフセットアドレス（Ｏｆｆｓｅｔ−Ａｄｒｓ）  を求めて決定し、つぎのステップＳＴ０４に進行する。
【００２３】
つぎに、ステップＳＴ０４において、プログラムＲＯＭ３内のプログラム領域（コード領域）の先頭アドレス（Ｔｏｐ−Ａｄｒｓ）を読み込み、つぎのステップＳＴ０５に進行する。
【００２４】
つぎに、ステップＳＴ０５において、先頭アドレスにオフセットアドレスを加えて読込先アドレス（Ｒｅａｄ−Ａｄｒｓ）  を求める。すなわち、読込先アドレスの初期化と初期値とを決定し、つぎのステップＳＴ０６に進行する。
【００２５】
つぎに、ステップＳＴ０６において、周期タイマ６によるタイマー割り込み機能を初期化するとともに、タイマー割り込みドライバソフトウエアであるハンドラをＯＳに登録することで終了する。
【００２６】
ここで、本実施形態の乱数生成方法における乱数値の生成の第２手順について図３のフローチャートにより説明する。
【００２７】
本実施形態の乱数生成方法における乱数値の生成の第２手順は、タイマー割り込み処理による読込先アドレスの更新動作である。この第２手順は、タイマー割り込みによって開始する。そして、ステップＳＴ１１において、周期タイマ６の可動による１００ｍｓ周期のタイマー割り込み処理内において、前記読込先アドレスを奇数アドレス、本実施形態においては３アドレスだけシフトし、シフトしたアドレスを新たな読込先アドレス（（Ｒｅａｄ−Ａｄｒｓ）  ＋Ｈ３→（Ｒｅａｄ−Ａｄｒｓ）  ）とし、つぎのステップＳＴ１２に進行する。なお、タイマー割り込みの周期は、設計コンセプトなどの必要に応じて任意の値から選択することができる。また、読込先アドレスのシフトを奇数とすることで、ランダム性が上がる。
【００２８】
つぎに、ステップＳＴ１２において、新たな読込先アドレスがプログラムＲＯＭ３内のプログラム領域の末尾アドレスと等しいかあるいは末尾アドレスより大きいか否か（（Ｒｅａｄ−Ａｄｒｓ）≧（Ｅｎｄ−Ａｄｒｓ）  ）を判断し、新たな読込先アドレスが末尾アドレスと等しいかあるいは末尾アドレスより大きいＹＥＳの場合には、つぎのステップＳＴ１３に進行し、ステップＳＴ１３において、先頭アドレスを読込先アドレス（（Ｔｏｐ−Ａｄｒｓ）→（Ｒｅａｄ−Ａｄｒｓ）  ）として終了する。これにより、読込先アドレスをプログラムＲＯＭ３内のプログラム領域内に設定することができる。すなわち、読込先アドレスがプログラムＲＯＭ３内のプログラム領域と等しい場合およびプログラム領域を越えた場合には、それぞれ読込先アドレスをプログラム領域の先頭アドレスとしている。
【００２９】
前記ステップＳＴ１２の判断が、新たな読込先アドレスが末尾アドレスより小さいＮＯの場合には、新たな読込先アドレスがプログラムＲＯＭ３内のプログラム領域内に配置されるので、新たな読込先アドレスをそのまま読込アドレスとして終了する。
【００３０】
ここで、本実施形態の乱数生成方法における乱数値の生成の第３手順について図４のフローチャートにより説明する。
【００３１】
本実施形態の乱数生成方法における乱数値の生成の第３手順は、乱数値の生成動作である。この第３手順は、上位モジュールからの乱数値の読込要求の発生により開始する。そして、ステップＳＴ２１において、読込先アドレス、詳しくは乱数値の読込要求の発生する直前の読込先アドレスを奇数、本実施形態においては３アドレスだけシフトし、シフトしたアドレスを新たな読込先アドレス（（Ｒｅａｄ−Ａｄｒｓ）  ＋Ｈ３→（Ｒｅａｄ−Ａｄｒｓ）  ）とし、つぎのステップＳＴ２２に進行する。
【００３２】
つぎに、ステップＳＴ２２において、新たな読込先アドレスが末尾アドレスと等しいかあるいは末尾アドレスより大きいか否か（（Ｒｅａｄ−Ａｄｒｓ）≧（Ｅｎｄ−Ａｄｒｓ）  ）を判断し、新たな読込先アドレスが末尾アドレスと等しいかあるいは末尾アドレスより大きいＹＥＳの場合には、つぎのステップＳＴ２３に進行し、ステップＳＴ２３において、先頭アドレスを読込先アドレス（（Ｔｏｐ−Ａｄｒｓ）→（Ｒｅａｄ−Ａｄｒｓ）  ）とし、つぎのステップＳＴ２４に進行する。これにより、読込先アドレスをプログラムＲＯＭ３内のプログラム領域（コード領域）内に設定することができる。
【００３３】
前記ステップＳＴ２２の判断が、新たな読込先アドレスが末尾アドレスより小さいＮＯの場合には、新たな読込先アドレスをそのまま読込先アドレスとし、つぎのステップＳＴ２４に進行する。
【００３４】
つぎに、ステップＳＴ２４において、プログラムＲＯＭ３内のプログラム領域における読込先アドレスに記憶されている機械語で記述されているコードの所定単位、本実施形態においては８バイトを読み込んで乱数値（Ｒａｎｄ−Ｄａｔａ）  として生成し、この生成した乱数値を上位モジュールに渡すことで終了する。この時コードから８バイトを選択するのは、ポインタの位置を移動して読み込むことにより実行する。なお、乱数値のバイト数は、使用機器の仕様や設計コンセプトなどの必要に応じて任意の整数から選択できる。
【００３５】
したがって、本実施形態の乱数生成装置１よる乱数の生成は、電源投入時に、日時情報とそれ以外の任意の情報のＡ／Ｄ変換値とのそれぞれの現在値を読み込みこれらの現在値からオフセットアドレスを求めた後、プログラムＲＯＭ３内のプログラム領域の先頭アドレスを読み込み、その後、先頭アドレスにオフセットアドレスを加えてプログラムＲＯＭ３内のプログラム領域における読込先アドレスを求め、その後、タイマー割り込み機能を初期化して一定周期でタイマー割り込みを発生させて一定周期のタイマー割り込みの発生毎に読込先アドレスを奇数シフトし、その後、乱数値の読込要求が発生する毎に直前の読込先アドレスをさらに奇数シフトし、このシフトした読込先アドレスに記憶されているコードの所定単位を乱数値として生成し、この生成した乱数値を上位モジュールに渡すことができるように形成されている。
【００３６】
なお、本実施形態の乱数生成方法は、プログラムＲＯＭ３に記憶されたプログラムによって実行している。
【００３７】
このように、本実施形態の乱数生成方法によれば、電源投入時に、従来の時計ＩＣ４およびカレンダＩＣ５による現在の日時情報を読み込むことに加えて、環境温度サーミスタ７による現在の温度のＡ／Ｄ変換値を読み込んで、プログラムＲＯＭ３内のプログラム領域における読込先アドレスを決定し、この読込先アドレスに記憶されているコードの所定単位を読み込んで乱数値としているから、電源投入時からのタイミングによる再現性のない乱数値の生成を容易かつ確実に行うことができる。
【００３８】
また、本実施形態の乱数生成方法によれば、環境温度サーミスタ７は、携帯電話機の本体ケースの内部に環境温度サーミスタ７が配置されているので、温度のＡ／Ｄ変換値は、通信の間隔により変化することと、Ａ／Ｄ変換器９の分解能をあげることで、さらにランダム性が確保できる。
【００３９】
さらに、本実施形態の乱数生成方法によれば、タイマー割り込み処理内において従来の固定演算処理を行わず、読込先アドレスをシフトして、シフトした読込先アドレスに記憶されているコードの所定単位を読み込むことで乱数値を生成しているから、タイマー割り込み処理内におけるＣＰＵ２の負荷を低減できる。その結果、乱数値を効率よく生成することができる。
【００４０】
さらにまた、本実施形態の乱数生成方法によれば、乱数値の読込要求毎にその直前の読込先アドレスを奇数、本実施形態においては３アドレスだけシフトしている。すなわち、タイマー割り込み処理毎と、乱数値の読込要求の発生毎にそれぞれ読込先アドレスをシフトしているので、タイマー割り込みとそれにつづくタイマー割り込みとの間に複数の乱数値の読込要求が発生した場合においても、乱数値が同一になるのを確実に防止できる。
【００４１】
また、本実施形態の乱数生成方法によれば、プログラムＲＯＭ３内のプログラム領域のコード域に記憶されているコードは、一般的に、２バイト固定長などの固定長であるので、プログラムＲＯＭ３内のプログラム領域のコード域に設定した読込先アドレスを奇数アドレスシフトすることで、プログラムＲＯＭ３内のプログラム領域から高いランダム性の乱数値を効率よく生成することができる。
【００４２】
本発明の乱数生成方法は、携帯電話機、携帯情報端末などの移動体端末、情報家電、ネットワーク端末などの通信システムにおける認証、不正使用防止、データの暗号化などに用いることができる。
【００４３】
なお、本発明は、前記実施形態に限定されるものではなく、必要に応じて種々変更することができる。
【００４４】
【発明の効果】
以上説明したように本発明に係る乱数生成方法によれば、再現性のない乱数値を生成することができるなどの極めて優れた効果を奏する。
【図面の簡単な説明】
【図１】本発明に係る乱数生成方法を用いた乱数生成装置の実施形態の要部の構成を示すブロック図
【図２】本発明に係る乱数生成方法における乱数値の生成の第１手順を示すフローチャート
【図３】本発明に係る乱数生成方法における乱数値の生成の第２手順を示すフローチャート
【図４】本発明に係る乱数生成方法における乱数値の生成の第３手順を示すフローチャート
【符号の説明】
１  乱数生成装置
２  ＣＰＵ
３  プログラムＲＯＭ
４  時計ＩＣ
５  カレンダＩＣ
６  周期タイマ
７  環境温度サーミスタ
９  Ａ／Ｄ変換器
【図１】
2004185207.tif 000003
【図２】
2004185207.tif 000004
【図３】
2004185207.tif 000005
【図４】
2004185207.tif 000006