(57)【要約】【課題】  不揮発性記憶媒体に、シードの設定に必要な乱数列を効率的に書き込むこと。【解決手段】  複合機は、受信パケットの数及び受信時刻に基づき、乱数列を生成し、これをシードに設定するが、起動時に限っては、ＮＶＲＡＭに記録された乱数列に基づき、シードを設定する。尚、乱数列の記録は、複合機の稼動中、継続的に実行される乱数記録処理により実現される。この処理では、生成された最新の乱数列を、ＮＶＲＡＭに記録するが（Ｓ５５０）、それに先駆け、装置の平均稼動時間Ｔａを算出し、算出値に基づき、乱数列のＮＶＲＡＭへの書込周期（乱数保存周期Ｔｃ）を決定する。そして、周期Ｔｃで、最新の乱数列を、ＮＶＲＡＭに記録する。また、当該処理では、所定時間（５分）毎に、ＮＶＲＡＭ１７におけるカウンタ値をカウントアップし、このカウンタ値に基づいて、次回の起動時に、前回稼動時間Ｔｂを算出し、これに基づいて平均稼動時間を更新する。【選択図】  図５
2008059177.tif 000002
【特許請求の範囲】
【請求項１】
乱数を、繰返し出力する乱数出力手段
を備える情報処理装置であって、
前記乱数出力手段により出力された乱数を記憶可能な不揮発性の記憶媒体と、
当該情報処理装置が起動してから停止するまでの稼動時間を計測する計測手段と、
前記計測手段の計測結果の履歴に基づき、前記乱数出力手段により出力された乱数を、前記記憶媒体に書き込む周期を決定する決定手段と、
前記決定手段により決定された周期で、前記記憶媒体に、前記乱数出力手段にて出力された最新の乱数を書き込んで、前記記憶媒体に、前記最新の乱数を記憶させる記憶制御手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記決定手段は、前記計測手段の計測結果の履歴に基づき、前記稼動時間の平均値としての平均稼働時間を算出し、前記周期を、前記算出した平均稼動時間より短い周期に、決定する構成にされていることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記記憶制御手段は、前記決定手段により決定された周期で、前記記憶媒体に、前記乱数出力手段にて出力された最新の乱数を、既に前記記憶媒体に記憶されている乱数に追加するようにして、書き込む構成にされていることを特徴とする請求項１又は請求項２記載の情報処理装置。
【請求項４】
ネットワークに接続され、前記ネットワーク上の他装置から送信されたデータを、前記ネットワークを介して受信する受信手段
を備え、
前記乱数出力手段は、前記受信手段により受信したデータの個数及びデータの受信時刻に基づいて、乱数を生成し、生成した乱数を出力する構成にされていることを特徴とする請求項１〜請求項３のいずれかに記載の情報処理装置。
【請求項５】
乱数を記憶可能な不揮発性の記憶媒体を備える情報処理装置のコンピュータに、
乱数を、繰返し出力する乱数出力機能と、
当該情報処理装置が起動してから停止するまでの稼動時間を計測する計測機能と、
前記計測機能により得られる計測結果の履歴に基づき、前記乱数出力機能により出力された乱数を、前記記憶媒体に書き込む周期を決定する決定機能と、
前記決定機能により決定された周期で、前記記憶媒体に、前記乱数出力機能により出力された最新の乱数を書き込んで、前記記憶媒体に、前記最新の乱数を記憶させる記憶制御機能と、
を実現させるためのプログラム。
【請求項６】
前記計測機能により得られる計測結果の履歴に基づき、当該情報処理装置が起動してから停止するまでの稼動時間の平均値としての平均稼働時間を算出し、前記乱数出力機能により出力された乱数を前記記憶媒体に書き込む周期を、前記算出した平均稼動時間より短い周期に、決定する機能
を、前記決定機能としてコンピュータに実現させるための請求項５記載のプログラム。
【請求項７】
前記決定機能により決定された周期で、前記記憶媒体に、前記乱数出力機能により出力された最新の乱数を、既に前記記憶媒体に記憶されている乱数に追加するようにして、書き込む機能
を、前記記憶制御機能としてコンピュータに実現させるための請求項５又は請求項６記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数を生成する機能を有した情報処理装置に関する。
【背景技術】
【０００２】
周知のように、暗号通信等を実現する際には、乱数が用いられるが、この乱数生成に際しては、所定のアルゴリズムにより、入力パラメータに演算処理を施して、擬似的に、乱数を生成する乱数生成プログラムが用いられる。即ち、従来知られる情報処理装置としては、この乱数生成プログラムに、乱数の種として機能するビットパターン（所謂シード）を、入力パラメータとして設定して、上記演算処理により擬似乱数を得る装置が知られている。
【０００３】
但し、上述したシードと呼ばれるビットパターンは、乱数を生成する元となる基本情報であるため、上記乱数生成プログラムに、一定のビットパターンを与えた場合には、特定のパターンで、乱数が生成されることになる。
【０００４】
従って、上記のようにして、乱数を生成する場合には、プログラムに、ランダムなシードを与えることで、より理想的な乱数が生成されるようにする。この点に関し、従来技術としては、受信パケットのＣＲＣコードに基づいて、シードを生成する技術が知られている（例えば、特許文献１参照）。
【特許文献１】特表２００４−５２３９３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来装置では、ランダムなシードを生成するのに必要なデータ（ＣＲＣコード等）を、ＲＡＭに一時記憶する程度であるため、一旦装置の電源がオフにされると、その後、電源がオンにされた直後には、ランダムなシードを設定することができないといった問題があった。
【０００６】
装置起動の度、乱数を用いずに固定値に基づいてシードを設定すると、悪意のものによりシードを予測されやすい。このため、シードとしては、装置起動の度、新しい乱数列を用いるのが好ましいが、ＥＥＰＲＯＭやフラッシュメモリなどの不揮発性メモリでは、書込回数に制限が有り、頻繁に、これらの不揮発性メモリに、装置の稼動中に生成した乱数列を書き込むと、不揮発性メモリの寿命が短くなる。即ち、装置の突然のシャットダウンに備えて、装置の稼動中に、乱数が生成される度、これを不揮発性メモリに書き込むと、装置の寿命が非常に短くなる。
【０００７】
また、不揮発性メモリについては、周知のように、動作速度が遅いため、頻繁に不揮発性メモリにアクセスすると、装置全体の処理速度が遅くなる。
本発明は、こうした問題に鑑みなされたものであり、不揮発性の記憶媒体に、シードの設定に必要な乱数列を、効率的に書き込むことで、装置の起動直後から、従来方式より理想的なシードを設定することができ、これによって、高いセキュリティで暗号通信を実現可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
かかる目的を達成するためになされた請求項１記載の情報処理装置は、乱数を、繰返し出力する乱数出力手段を備えると共に、乱数出力手段により出力された乱数を記憶可能な不揮発性の記憶媒体を備える。
【０００９】
この情報処理装置においては、当該情報処理装置が起動してから停止するまでの稼動時間を、計測手段が計測し、計測手段の計測結果の履歴に基づき、乱数出力手段により出力された乱数を上記記憶媒体に書き込む周期を、決定手段が決定する。
【００１０】
そして、この情報処理装置においては、記憶制御手段が、決定手段により決定された周期で、上記記憶媒体に、乱数出力手段にて出力された最新の乱数（一つ又は複数）を書き込んで、上記記憶媒体に、上記最新の乱数を記憶させる。
【００１１】
このように、本発明の情報処理装置では、不揮発性の記憶媒体に、乱数出力手段により出力された乱数を、記録するので、情報処理装置の起動時には、記憶媒体に記憶された乱数を用いて、迅速に、ランダムなシードを設定することができる。また、本発明によれば、当該装置の稼働時間を計測し、この稼働時間の履歴に基づいて、乱数を記憶媒体に書き込むタイミングを決定するので、効率的に、ランダムなシードを設定するのに必要な乱数を、記憶媒体に書き込むことができる。
【００１２】
従って、本発明によれば、乱数を記憶媒体に書き込む周期が短すぎることにより、記憶媒体への書込回数が、必要以上に多くなるのを防止することができると共に、乱数を記憶媒体に書き込む周期が長すぎるために、情報処理装置が稼動している間に、記憶媒体に、乱数を書き込むことができず、情報処理装置の起動時に、毎回同じ値のシードが設定されてしまうのを抑制することができる。即ち、本発明によれば、情報処理装置の起動時に、毎回同じ値のシードが設定されないように、適切な周期で、記憶媒体に、シードの生成に必要な乱数を書き込むことができる。よって、本発明によれば、情報処理装置の起動直後から、従来方式より高いセキュリティにて、暗号通信を実現できる。
【００１３】
尚、具体的に、決定手段は、計測手段の計測結果の履歴に基づき、稼動時間の平均値としての平均稼働時間を算出し、上記乱数を記憶媒体に書き込む周期を、算出した平均稼動時間より短い周期に、決定する構成にされるとよい（請求項２）。このように決定手段を構成すれば、概ね、情報処理装置の稼動中に一度は、乱数出力手段により出力された乱数を、記録媒体に書き込むことができて、この乱数に基づいて、次回の起動時に、前回とは異なる新しいシードを設定することができる。よって、本発明によれば、装置の起動直後から、従来方式より高いセキュリティにて、暗号通信を実現できる。
【００１４】
また、乱数出力手段は、シードのデータ長に対応する桁数の乱数を、一度に出力する構成にされてもよいし、シードの構成ビットを、上記乱数として、複数回に分けて出力する構成にされてもよい。
【００１５】
その他、乱数出力手段が出力した乱数を複数個結合して、シードを生成する場合には、乱数出力手段により出力された乱数を、シードのデータ長に対応する個数記憶可能な記憶媒体を、当該情報処理装置に搭載し、記憶制御手段を、次のように構成するとよい。即ち、記憶制御手段は、決定手段により決定された周期で、上記記憶媒体に、乱数出力手段にて出力された最新の乱数を、既に、この記憶媒体に記憶されている乱数に追加するようにして書き込むことで、所定数（例えば、シードのデータ長に対応する数）の乱数を、記憶媒体に記憶させる構成にされるとよい（請求項３）。このように構成された情報処理装置によれば、起動時に毎回同一のシードが設定されないように、シードの設定に必要な乱数を、効率的に記録することができる。よって、本発明によれば、装置の起動直後から、従来方式より高いセキュリティにて、暗号通信を実現できる。
【００１６】
また、情報処理装置が、ネットワークに接続され、ネットワーク上の他装置から送信されたデータを、ネットワークを介して受信する受信手段を備える場合には、乱数出力手段を、次のように構成するとよい。
【００１７】
即ち、乱数出力手段は、受信手段により受信したデータの個数及びデータの受信時刻に基づいて、乱数を生成し、生成した乱数を出力する構成にされるとよい（請求項４）。ネットワークには、通常複数の通信装置が接続されており、ネットワーク上では、これら複数の通信装置が個別に動作すると共に、通信等で各通信装置が相互に影響し合い、ネットワークトラフィック等が時々刻々と変化する。このため、当該情報処理装置におけるネットワークを介したデータの受信量及び受信タイミングは、予測困難であり、略ランダムである。
【００１８】
従って、この情報処理装置のように、ネットワークを通じて他装置から送信されたデータの受信時刻及び受信個数を、乱数の生成に用いれば、一様に乱数を生成することができ、当該情報処理装置にて生成される乱数の予測を、困難にすることができる。よって、この情報処理装置によれば、従来よりも、理想的な乱数を生成することができ、この乱数に基づいたシードを、暗号通信等に用いれば、従来よりも、セキュリティの高い暗号通信を実現することができる。
【００１９】
具体的に、当該情報処理装置には、受信時刻検出手段と、受信データ数計測手段と、データ決定手段と、を設けて、受信時刻検出手段が、受信手段によるデータの受信時刻を検出し、受信データ数計測手段が、受信手段により受信されたデータの個数を計測し、データ決定手段が、受信データ数計測手段の計測結果に基づき、乱数の生成に用いる受信手段の受信データを決定し、乱数出力手段が、データ決定手段により決定された受信データに関して、受信時刻検出手段により検出された受信時刻に対応する値を、乱数として出力するように、情報処理装置を構成するとよい。
【００２０】
また、データ決定手段は、受信手段が受信したデータの個数が、予め設定された閾値に達したときの受信手段の受信データを、乱数の生成に用いる受信データに決定する構成にする構成にされるとよい。ネットワークから受信したデータの個数が閾値に達したときの受信データの受信時刻は、実質、ランダムとみなせるので、この情報処理装置のように、乱数を生成すれば、理想的な乱数を生成することができる。
【００２１】
その他、受信手段が、ネットワーク上の他装置から送信されたデータを、宛先に拘らず受信した後、データの宛先を判別して、自装置宛以外のデータを破棄する構成にされている場合には、自装置宛のデータだけでなく自装置宛以外のデータも対象として、受信手段が受信したデータの受信時刻を検出するように、受信時刻検出手段を構成すると共に、自装置宛のデータだけでなく自装置宛以外のデータも対象として、受信手段が受信したデータの個数を計測するように、受信データ数計測手段を構成するとよい。
【００２２】
このように、受信時刻検出手段及び受信データ数計測手段を構成すれば、乱数の生成に影響を与える外因が増え、自装置宛のデータのみを対象として、受信時刻及び受信データ数を検出し、これに基づいて乱数を生成する場合よりも、一層、理想的な乱数を生成することができる。
【００２３】
また、上述した各発明は、乱数書込対象の記憶媒体が、フラッシュメモリやＥＥＰＲＯＭなどの、電気的にデータ書換可能な不揮発性メモリである場合に、特に有用である。フラッシュメモリやＥＥＰＲＯＭなどの不揮発性メモリは、少量のデータを書換可能に記録するための記憶媒体として優れているが、書込回数に制限があるため、高頻度に、データを書き込むと、短い期間で、これらの不揮発性メモリが使用できなくなる。一方、本発明によれば、効率的に、データを、記憶媒体に書き込むことができるので、これらの発明を、記憶媒体がフラッシュメモリやＥＥＰＲＯＭなどの不揮発性メモリである情報処理装置に適用すれば、製品を長寿命化することができる。
【００２４】
また、情報処理装置（請求項１〜請求項４）が備える各手段は、プログラムにより、コンピュータに実現させることができる。
請求項５記載のプログラムは、乱数を記憶可能な不揮発性の記憶媒体を備える情報処理装置のコンピュータに、乱数を、繰返し出力する乱数出力機能と、当該情報処理装置が起動してから停止するまでの稼動時間を計測する計測機能と、計測機能により得られる計測結果の履歴に基づき、乱数出力機能により出力された乱数を、記憶媒体に書き込む周期を決定する決定機能と、決定機能により決定された周期で、記憶媒体に、乱数出力機能により出力された最新の乱数を書き込んで、記憶媒体に、この最新の乱数を記憶させる記憶制御機能と、を実現させるためのプログラムである。このプログラムによれば、情報処理装置の稼働時間を計測し、この稼働時間の履歴に基づいて、乱数を記憶媒体に書き込むタイミングを決定するので、効率的に、乱数を記憶媒体に書き込むことができる。
【００２５】
また、請求項６記載のプログラムは、コンピュータに、計測機能により得られる計測結果の履歴に基づき、当該情報処理装置が起動してから停止するまでの稼動時間の平均値としての平均稼働時間を算出し、乱数出力機能により出力された乱数を上記記憶媒体に書き込む周期を、算出した平均稼動時間より短い周期に、決定する機能を、上記決定機能として実現させるためのプログラムである。このプログラムによれば、概ね、情報処理装置の稼動中に一度は、乱数出力手段により出力された乱数を、記録媒体に書き込むことができ、情報処理装置では、この乱数に基づいて、次回起動時に、前回とは異なる新しいシードを設定することができる。
【００２６】
また、請求項７記載のプログラムは、コンピュータに、決定機能により決定された周期で、記憶媒体に、乱数出力機能により出力された最新の乱数を、既に記憶媒体に記憶されている乱数に追加するようにして、書き込む機能を、上記記憶制御機能として実現させるためのプログラムである。このプログラムによれば、乱数出力手段が出力した乱数を複数個結合して、シードを生成する場合に、シードの生成に必要な乱数を、効率的に、記憶媒体に記録することができる。
【００２７】
尚、上記の各プログラムは、磁気ディスクや光ディスクなどのコンピュータ読取可能な記録媒体に記録して、ユーザに提供することができる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の実施例について、図面と共に説明する。
図１は、本実施例の通信システム１の構成を表すブロック図である。本実施例の通信システム１は、ネットワークＮＴに、複数の通信装置３が接続されてなる。ネットワークＮＴとしては、有線ネットワーク、無線ネットワークを挙げることができ、通信装置３としては、パーソナルコンピュータ（ＰＣ）、ディジタル複合機、データベースサーバ装置等、各種の通信装置を挙げることができる。
【００２９】
本実施例では、通信装置３として、パーソナルコンピュータ５と、ディジタル複合機１０と、がネットワークＮＴに接続され、パーソナルコンピュータ５及びディジタル複合機１０が、ＳＳＬ通信可能な構成にされているものとし、ディジタル複合機１０は、ＳＳＬ通信等に用いる乱数の種となるシードを生成し、本発明の手法で、これをＮＶＲＡＭ１７に記録する機能を有するものとする。
【００３０】
本実施例のディジタル複合機１０は、ネットワークプリンタ機能、スキャナ機能、コピー機能等を有する多機能装置であり、主に、各種プログラムを実行するＣＰＵ１１と、ＣＰＵ１１が実行するプログラムを記憶するＲＯＭ１３と、作業用メモリとしてのＲＡＭ１５と、電気的にデータ書換可能なＥＥＰＲＯＭ又はフラッシュメモリで構成されるＮＶＲＡＭ１７と、印刷部１９と、読取部２１と、表示操作部２３と、通信インタフェース２５と、を備える。
【００３１】
印刷部１９は、ＣＰＵ１１に制御されて、インクジェット方式又はレーザプリンタ方式により、ＣＰＵ１１から指定された画像データを印刷処理し、その画像データに基づく画像を、用紙に形成するものである。この印刷部１９は、ネットワークプリンタ機能やコピー機能を実現する際に用いられる。一方、読取部２１は、ＣＰＵ１１に制御されて、載置部に載置された原稿を、光学的に読み取り、読取画像を表す画像データを生成して、この画像データを、ＣＰＵ１１に提供するものである。この読取部２１は、スキャナ機能やコピー機能を実現する際に用いられる。
【００３２】
その他、表示操作部２３は、ユーザが操作可能な各種キーを備えると共に、液晶ディスプレイ等からなる表示部を備え、ユーザからの指令を受け付けると共に、ユーザに向けて各種情報を表示するユーザインタフェースとして機能する。
【００３３】
また、通信インタフェース２５は、ネットワークＮＴに接続され、ネットワークＮＴ上の通信装置３と双方向通信可能な構成にされている。図２は、通信インタフェース２５の処理動作を示した説明図である。
【００３４】
本実施例の複合機１０が備える通信インタフェース２５は、ネットワークＮＴ上の他装置から送信された当該ネットワークＮＴを流れるパケットを逐次受信して、パケットに付された宛先アドレスに基づき、受信パケットが自装置宛のパケットであるか否かを判断し、受信パケットが自装置宛のパケットである場合には、上位の通信モジュールに、このパケットを転送し、受信パケットが自装置宛以外のパケットである場合には、このパケットを破棄して、上位の通信モジュールにパケットを転送しないよう動作する。
【００３５】
その他、通信インタフェース２５は、通信モジュールから入力された送信対象データを格納したパケットであって、宛先アドレスを付したパケットを、ネットワークＮＴに送出することにより、上記送信対象データを、宛先アドレスに対応する通信装置３に向けて送信する。
【００３６】
尚、上記通信モジュールとしては、ＩＰ（インターネットプロトコル）モジュールを挙げることができ、通信インタフェース２５が送受信するパケットとしては、宛先アドレスに、宛先のＭＡＣアドレスを有するイーサネット（登録商標）フレームを挙げることができる。
【００３７】
また、通信インタフェース２５から通信モジュールに転送されたパケットは、通信モジュールにて処理された後、上位の通信アプリケーションソフトウェアに提供される。その他、上位の通信アプリケーションソフトウェアにて生成された送信対象データは、通信モジュールを介して、通信インタフェース２５に入力され、これにより、複合機１０と他の通信装置３との通信が、実現される。尚、上記通信アプリケーションソフトウェアとしては、ＳＳＬ通信を実現するアプリケーションソフトウェア等を挙げることができる。
【００３８】
また、本実施例の複合機１０は、上述したように、通信インタフェース２５の受信動作を監視し、ＳＳＬ通信等に必要な乱数の種となるシードを生成すると共に、当該複合機１０の起動時に用いるシードを記憶しておくために、シードの構成ビットを、ＮＶＲＡＭ１７に用意されたリングバッファ構造のシード保存領域に逐次記録する機能を有する。尚、この機能は、複合機１０が、ＣＰＵ１１にて、シード生成プログラム（図２参照）を実行することにより実現される。
【００３９】
以下、この機能について、図２〜図５を用いて説明する。図３は、ＣＰＵ１１が、シード生成プログラムに基づいて実行するシード生成処理を表すフローチャートであり、図４及び図５は、ＣＰＵ１１が、複合機１０の起動時（電源オン時）に、上記シード生成処理に先駆けて実行を開始するシードの初期設定手順を含む乱数記録処理を表すフローチャートである。ここでは、まず先に図３を用いてシード生成処理を説明し、その後、図４及び図５を用いて乱数記録処理を説明する。
【００４０】
シード生成処理を開始すると、ＣＰＵ１１は、まず初期化処理を行って（Ｓ１１０）、受信パケット数を表すパラメータｎ、及び、乱数の生成回数を表すパラメータｒをゼロに初期化すると共に、後述する閾値ＴＨを、デフォルト値に設定する。尚、閾値ＴＨのデフォルト値は、設定情報として、ＮＶＲＡＭ１７に記憶されている。その他、Ｓ１１０において、ＣＰＵ１１は、後述する乱数生成間隔Ｔｓを、ＮＶＲＡＭ１７が記憶する指定値に設定すると共に、システムクロックＣＬＫが示す現在時刻を、乱数生成時刻及びシード更新時刻の初期値として、ＲＡＭ１５に記憶する。
【００４１】
また、Ｓ１１０での処理を終えると、ＣＰＵ１１は、Ｓ１２０に移行し、ネットワークＮＴ上の他装置がパケットをネットワークＮＴに送出したことにより、ネットワークＮＴを流れるパケットを、通信インタフェース２５がネットワークＮＴを介して受信したか否かを判断する（Ｓ１２０）。尚、ここでは、自装置宛のパケットのみならず、自装置宛以外のパケットも対象として、パケットを受信したか否かを判断する。
【００４２】
そして、通信インタフェース２５によりパケットが受信されていない場合には（Ｓ１２０でＮｏ）、通信インタフェース２５によりパケットが受信されるまで待機し、通信インタフェース２５によりパケットが受信された場合には（Ｓ１２０でＹｅｓ）、Ｓ１３０に移行して、パラメータｎの値を１加算し（ｎ←ｎ＋１）、受信パケット数ｎを、カウントアップする。
【００４３】
また、この処理を終えると、ＣＰＵ１１は、Ｓ１４０に移行し、受信パケット数ｎが、閾値ＴＨ以上である否かを判断する。そして、受信パケット数ｎが閾値ＴＨ未満であると判断すると（Ｓ１４０でＮｏ）、Ｓ１２０に移行して、通信インタフェース２５が新たにパケットを受信するまで待機する。そして、通信インタフェース２５が新たにパケットを受信した場合には、受信パケット数ｎをカウントアップし（Ｓ１３０）、再び、Ｓ１４０での判断を行う。
【００４４】
Ｓ１４０において、受信パケット数ｎが閾値ＴＨ以上であると判断すると（Ｓ１４０でＹｅｓ）、ＣＰＵ１１は、システムクロックＣＬＫにおける現在時刻を表すビット列の最小位ビットを参照し（Ｓ１５０）、参照値（最小位ビットの値）を、乱数として、ＲＡＭ１５に用意されたリングバッファ構造のシード生成領域に、書き込む。これにより、参照値を一時記憶する（Ｓ１６０）。尚、シード生成領域は、シードのデータ長に対応するサイズの記憶領域として構成されている。
【００４５】
本実施例の複合機１０は、データ長が、数バイト（例えば４バイト）のシードを生成する構成にされており、Ｓ１６０で一時記憶した参照値は、シードの構成ビットとして用いられる。また、本実施例では、このようにしてシードの構成ビットを決定するため、受信パケット数ｎが閾値ＴＨに到達するまでの所要時間が、システムクロックＣＬＫが刻む時間の最小単位よりも十分長くなるように、閾値ＴＨを設定する（詳細後述）。
【００４６】
また、Ｓ１６０での処理を終えると、ＣＰＵ１１は、Ｓ１６５に移行し、パラメータｒを１加算する（ｒ←ｒ＋１）。
また、Ｓ１６５での処理を終えると、ＣＰＵ１１は、前回シードの設定時から、シードのデータ長に対応する数の乱数を、Ｓ１６０で生成したか否かを判断する（Ｓ１７０）。即ち、Ｓ１６０の処理を、シードのデータ（ビット）長に対応する回数、実行したか否かを判断する。例えば、シードが３２ビット（４バイト）である場合には、３２回、Ｓ１６０の処理を実行したか否かを判断する。
【００４７】
そして、データ長に対応する数の乱数を生成したと判断すると（Ｓ１７０でＹｅｓ）、ＣＰＵ１１は、ＲＡＭ１５のシード生成領域に一時記憶しているシードのデータ長に対応する数の乱数を生成順に配列してなる乱数列を、新たなシードに設定する（Ｓ１７５）。その後、Ｓ１９０に移行する。
【００４８】
一方、データ長に対応する数の乱数を生成していないと判断すると（Ｓ１７０でＮｏ）、ＣＰＵ１１は、ＲＡＭ１５が記憶するシード更新時刻に基づき、前回シードを設定した時点から所定時間ＴＬが経過したか否かを判断し（Ｓ１８０）、所定時間ＴＬが経過していないと判断すると（Ｓ１８０でＮｏ）、Ｓ２００に移行し、所定時間ＴＬが経過していると判断すると（Ｓ１８０でＹｅｓ）、Ｓ１８５に移行する。
【００４９】
Ｓ１８５に移行すると、ＣＰＵ１１は、Ｓ１７５での処理と同様に、ＲＡＭ１５のシード生成領域に一時記憶しているシードのデータ長に対応する数の乱数を生成順に配列してなる乱数列を、新たなシードに設定する。尚、ここでは、前回シードの設定後にシード生成領域に書き込まれた乱数の数が、シードのデータ長に及ばないため、不足分に相当する量の前回設定したシードの下位ビットの末尾に、新たにシード生成領域に書き込まれた乱数を生成順に配列してなる乱数列を、新たなシードとして設定する。
【００５０】
また、このようにしてＳ１８５の処理を終えると、ＣＰＵ１１は、Ｓ１９０に移行し、現在時刻を、シード更新時刻として、ＲＡＭ１５に一時記憶する。その後、Ｓ２００に移行する。
【００５１】
この他、Ｓ２００に移行すると、ＣＰＵ１１は、Ｓ１１０又はＳ２５０にてＲＡＭ１５に記憶した乱数生成時刻に基づいて、前回乱数を生成した時刻（又はシード生成処理を開始した時刻）からの経過時間を算出する。そして、この経過時間と、現在の受信パケット数ｎとに基づき、現在のネットワークトラフィックとして、単位時間当たりの受信パケット数Ｎｐを算出する（Ｓ２１０）。
【００５２】
Ｎｐ＝受信パケット数ｎ／経過時間
また、Ｓ２１０での処理を終えると、ＣＰＵ１１は、Ｓ２２０に移行し、算出した上記単位時間当たりの受信パケット数Ｎｐに、乱数生成間隔Ｔｓを掛けて、次に設定する閾値ＴＨ１を算出する。
【００５３】
閾値ＴＨ１＝単位時間当たりの受信パケット数Ｎｐ×乱数生成間隔Ｔｓ
そして、この処理を終えると、ＣＰＵ１１は、Ｓ２３０に移行して、上記算出した閾値ＴＨ１を、新たな閾値ＴＨとして設定する（ＴＨ←ＴＨ１）。尚、閾値ＴＨとしては、上述した要件を満足する必要があることから、本実施例において、乱数生成間隔Ｔｓは、システムクロックＣＬＫの時間分解能（システムクロックＣＬＫが刻む時間の最小単位）よりも、十分長い時間間隔に、設定されているものとする。例えば、最小単位がμ秒であるシステムクロックＣＬＫに対して、乱数生成間隔Ｔｓを、数秒に、設定する。
【００５４】
また、Ｓ２３０での処理を終えると、ＣＰＵ１１は、Ｓ２４０に移行して、受信パケット数ｎ（パラメータｎ）をゼロにリセットし、その後、現在時刻を、新しい乱数生成時刻として、ＲＡＭ１５に記憶する（Ｓ２５０）。
【００５５】
また、この処理を終えると、ＣＰＵ１１は、Ｓ１２０に移行し、通信インタフェース２５が新たにパケットを受信するまで待機する。そして、通信インタフェース２５が新たにパケットを受信した際には、再びＳ１３０以降の処理を実行する。このようにして、当該シード生成処理では、複合機１０の電源が落とされるまで繰返し、受信パケット数ｎが閾値ＴＨに到達したときのパケット受信時刻の最小位ビットの値を、乱数としてＲＡＭ１５に出力し、この乱数列を、上述したように、Ｓ１７５又はＳ１８５でシードとして設定する。
【００５６】
続いて、乱数記録処理について説明する。この乱数記録処理は、シードの初期設定手順を含み、上述したシード生成処理に先駆けて、当該複合機１０の起動時（電源オン時）に、ＣＰＵ１１により実行される。
【００５７】
ＣＰＵ１１は、シード生成プログラムに基づいて乱数記録処理を開始すると、まず、乱数記録処理の実行が初めてであるか否かを判断する（Ｓ３００）。具体的に、本実施例では、ＮＶＲＡＭ１７に、初期化実行済フラグがセットされているか否かに基づき、上述の判断を行う。
【００５８】
また、乱数記録処理の実行が初めてであると判断すると（Ｓ３００でＹｅｓ）、ＣＰＵ１１は、ＮＶＲＡＭ１７における平均稼働時間Ｔａ及び標本数Ｓの記憶領域を初期化して、平均稼働時間Ｔａ及び標本数Ｓをゼロに設定する（Ｓ３１０）。また、この処理を終えると、ＮＶＲＡＭ１７におけるシード保存領域を初期化し（Ｓ３２０）、更に、ＮＶＲＡＭ１７における稼動時間記録カウンタ領域を、初期化する（Ｓ３３０）。
【００５９】
尚、シード保存領域は、ＮＶＲＡＭ１７において、シードの設定に用いる乱数列を記憶するための領域であり、シードのデータ長に対応する数の乱数を記憶可能で、リングバッファとして機能する領域として構成にされている。また、稼動時間記録カウンタ領域は、複合機１０の稼動時間を記憶するための領域であり、この領域においては、後述するように、所定時間Ｔｄが経過する度に、ＣＰＵ１１により、ビットがセットされて、セットされたビットの数により、稼動時間が記憶される。
【００６０】
また、Ｓ３３０での処理を終えると、ＣＰＵ１１は、シード生成処理にて生成された乱数をＮＶＲＡＭ１７へ保存する周期である乱数保存周期Ｔｃを、ＮＶＲＡＭ１７に記憶されたデフォルト値に、設定する（Ｓ３４０）。
【００６１】
その後、ＣＰＵ１１は、Ｓ３５０に移行し、シードを、予め定められたデフォルト値に設定すると共に、このデフォルト値を、ＲＡＭ１５内のシード生成領域にセットする。また、同様に、このデフォルト値を、ＮＶＲＡＭ１７のシード保存領域にセットする（Ｓ３６０）。
【００６２】
また、Ｓ３６０での処理を終えると、ＣＰＵ１１は、シード保存領域において、次に乱数を書き込む位置（乱数書込開始位置）を、シード保存領域の先頭位置に設定し（Ｓ３７０）、その後、Ｓ３８０に移行して、ＮＶＲＡＭ１７に、上記初期化実行済フラグをセットする。また、この処理を終えると、Ｓ４９０に移行する。
【００６３】
一方、Ｓ３００で、乱数記録処理の実行が二回目以降であると判断すると（Ｓ３００でＮｏ）、ＣＰＵ１１は、Ｓ４１０に移行し、ＮＶＲＡＭ１７に記憶されたカウント値から、前回稼動時間Ｔｂを算出する。尚、本実施例の複合機１０は、Ｓ５１０〜Ｓ５３０の処理により、所定時間Ｔｄ毎に、稼動時間記録カウンタ領域のビットを、順に立て、稼動時間をカウントする。このため、Ｓ４１０では、稼動時間記録カウンタ領域のカウント値を、ＮＶＲＡＭ１７から読み出し、前回稼動時間Ｔｂを、次のように算出する。
【００６４】
前回稼動時間Ｔｂ＝カウント値×所定時間Ｔｄ
また、Ｓ４１０での処理を終えると、ＣＰＵ１１は、上記稼動時間記録カウンタ領域をリセットし（Ｓ４２０）、その後、ＮＶＲＡＭ１７に記憶されている平均稼動時間Ｔａ及び標本数Ｓを読み出す（Ｓ４３０）。そして、読み出した平均稼動時間Ｔａ及び標本数Ｓと、前回稼動時間Ｔｂと、に基づいて、最新の平均稼動時間を算出する（Ｓ４４０）。
【００６５】
Ｔａ←（Ｔａ×Ｓ＋Ｔｂ）／（Ｓ＋１）
また、Ｓ４４０での処理を終えると、ＣＰＵ１１は、Ｓ４５０に移行して、最新の標本数として、ＮＶＲＡＭ１７から読み出した標本数Ｓに１加えた値を求め（Ｓ←Ｓ＋１）、
Ｓ４４０で算出した最新の平均稼動時間Ｔａと、最新の標本数Ｓとを、前回値に上書きするように、ＮＶＲＡＭ１７に書き込む。その後、Ｓ４６０に移行する。
【００６６】
Ｓ４６０に移行すると、ＣＰＵ１１は、シード生成処理にて生成された乱数をＮＶＲＡＭ１７へ保存する周期としての乱数保存周期Ｔｃを、Ｓ４４０で算出した平均稼動時間Ｔａより短い周期に設定して、複合機１０の稼動中（複合機１０の電源がオンにされてからオフにされるまでの間）に、概ね１回は、シード生成処理にて生成された乱数がＮＶＲＡＭ１７に保存されるようにする。例えば、本実施例では、乱数保存周期Ｔｃとして、平均稼動時間Ｔａの二分の一の値を設定し、複合機１０の稼動中に概ね１回は、シード生成処理にて生成された乱数をＮＶＲＡＭ１７に保存できるようにする。
【００６７】
Ｔｃ＝Ｔａ／２
また、この処理を終えると、ＣＰＵ１１は、シード保存領域において、次に乱数を書き込む位置（乱数書込開始位置）を、前回の書込終端位置の次ビットに設定する（Ｓ４７０）。尚、前回の書込終端位置は、ＮＶＲＡＭ１７に記憶されているため、ＣＰＵ１１は、このＮＶＲＡＭ１７に記憶された情報に基づいて、乱数書込開始位置を設定する。
【００６８】
そして、Ｓ４７０での処理を終えると、ＣＰＵ１１は、シード保存領域の前回書込終端位置から遡ってシードのビット長に対応する数の乱数を生成順に配列してなる乱数列を、シードの初期値に設定する（Ｓ４８０）。また、この際には、ＲＡＭ１５内のシード生成領域に、上記乱数列を書き込んで、シード生成領域を、設定されているシードと同一の値にする。そして、このＳ４８０での処理を終えると、Ｓ４９０に移行する。
【００６９】
また、Ｓ４９０に移行すると、ＣＰＵ１１は、上述した図３に示すシード生成処理の実行を開始して、以後、シード生成処理を、乱数記録処理と並列に行う。また、シード生成処理の実行を開始した後には、Ｓ５００に移行して、前回乱数保存時刻ｗ１及び前回時間記録時刻ｗ２の初期値として、現在時刻を、ＲＡＭ１５に書き込む。
【００７０】
また、この処理を終えると、ＣＰＵ１１は、Ｓ５１０に移行し、前回時間記録時刻ｗ２から所定時間Ｔｄ（例えば、５分）が経過したか否かを判断する。そして、所定時間Ｔｄが経過したと判断すると（Ｓ５１０でＹｅｓ）、Ｓ５２０に移行して、ＮＶＲＡＭ１７における稼動時間記録カウンタ領域のカウント値を、カウントアップする。具体的に、本実施例では、Ｓ５２０の処理を実行する度、稼動時間記録カウンタ領域のビットを順に立てて、カウント値（稼動時間）を更新、記録する。
【００７１】
また、Ｓ５２０での処理を終えると、ＣＰＵ１１は、Ｓ５３０に移行し、現在時刻を、前回時間記録時刻Ｔｗ２として、ＲＡＭ１５に一時記憶する。その後、Ｓ５４０に移行する。
【００７２】
また、前回時間記録時刻ｗ２から所定時間Ｔｄが経過していないと判断するか（Ｓ５１０でＮｏ）、Ｓ５３０での処理を終えて、Ｓ５４０に移行すると、ＣＰＵ１１は、前回乱数保存時刻Ｔｗ１から、乱数保存周期Ｔｃに相当する時間が経過したか否かを判断する。
【００７３】
そして、乱数保存周期Ｔｃに相当する時間が経過していないと判断すると（Ｓ５４０でＮｏ）、Ｓ５１０に移行し、乱数保存周期Ｔｃに相当する時間が経過したと判断すると（Ｓ５４０でＹｅｓ）、Ｓ５５０に移行する。
【００７４】
また、Ｓ５５０に移行すると、ＣＰＵ１１は、シード生成処理のＳ１６５でカウントアップされているパラメータｒの現在値を読み出し、ＲＡＭ１５のシード生成領域に最近書き込まれた合計ｒ個の乱数を、生成時期の古いものから順に、ＮＶＲＡＭ１７のシード保存領域に書き込む。即ち、予め設定された乱数書込開始位置を基点として、乱数書込開始位置から、最近生成されたｒ個の乱数を、生成順に、ＮＶＲＡＭ１７に書き込む。但し、パラメータｒの値が、シードのビット数を超える場合には、シードのビット数分の乱数を、生成時期の古い乱数から順に、ＮＶＲＡＭ１７のシード保存領域に書き込む。
【００７５】
また、最新の乱数列を、上述したように、ＮＶＲＡＭ１７のシード保存領域に書き込んだ後には、この書き込みにより進んだ上記シード保存領域の書込終端位置を、ＮＶＲＡＭ１７に書き込む。その後、Ｓ５６０に移行する。
【００７６】
Ｓ５６０に移行すると、ＣＰＵ１１は、パラメータｒの値をリセットして、乱数書込開始位置を、書込終端位置の次ビットに設定する（Ｓ５７０）。また、この処理を終えると、現在時刻を、前回乱数保存時刻Ｔｗ１として、ＲＡＭ１５に一時記憶する（Ｓ５８０）。その後、Ｓ５１０に移行する。
【００７７】
本実施例では、この乱数記録処理を、当該複合機１０の電源が落とされるまで継続的に実行して、乱数保存周期Ｔｃが到来する毎に、シード生成処理にて生成された最新の乱数列を、ＮＶＲＡＭ１７に保存する。
【００７８】
以上、本実施例について説明したが、本実施例の複合機１０によれば、通信インタフェース２５により受信されたパケットの個数を計測して、受信パケットの個数が閾値に達したときの時刻の最小位ビットを、乱数として出力する。そして、この動作を繰り返すことにより、シードを生成する。従って、本実施例の複合機１０によれば、装置の稼動中において、理想的な乱数を生成することができ、この乱数列からなるシードを用いることで、セキュリティの高い暗号通信を実現することができる。
【００７９】
即ち、本実施例によれば、乱数の生成に影響を与える外因が多数に及ぶため、偏りがなく、理想的な乱数を生成することができる。例えば、本実施例において、乱数の生成に影響を与える外因としては、各通信装置のパケット送信動作、及び、ネットワークトラフィック等を挙げることができるが、各通信装置のパケット送信動作は、通信相手の通信装置によるパケット送信動作の影響を受けて変化する。このため、本実施例のように、パケットの受信時刻及び受信個数を、乱数の生成に用いれば、一様に乱数を生成することができ、当該複合機１０にて生成される乱数（強いてはシード）の予測を、困難にすることができる。よって、本実施例によれば、例えば、ＳＳＬ通信の際に、悪意のものが予測困難な乱数データを暗号鍵の生成に用いることができ、セキュリティの高い暗号通信を実現することができる。
【００８０】
その他、本実施例では、閾値ＴＨに対応する数のパケットを受信するまでに要する時間が、ネットワークトラフィックの影響を受けて変化するため、閾値ＴＨを、ネットワークトラフィックに応じて更新するようにし、概ね一定周期で、シードを生成できるようにした。従って、本実施例によれば、ネットワークトラフィックの変化により、シードの更新間隔が長くなるのを防止しながら、ネットワークを流れるパケットを利用して、シードを適切に生成することができる。
【００８１】
また、本実施例の複合機１０では、ＮＶＲＡＭ１７に、シード生成処理により生成された乱数列を記録するので、従来のように、複合機１０の起動時において、固定値をシードに設定する必要がなく、複合機１０の起動時においても、ＮＶＲＡＭ１７に記憶された乱数列を用いて、ランダムなシードを設定することができる。
【００８２】
特に、本実施例では、当該複合機１０の平均稼動時間を算出して、ＮＶＲＡＭ１７への乱数保存周期Ｔｃを、平均稼動時間Ｔａよりも短い周期Ｔａ／２に設定するようにした。従って、本実施例によれば、概ね１回は、複合機１０の稼動中に、生成された乱数列を、ＮＶＲＡＭ１７に記録でき、効率的に、ランダムなシードを設定するのに必要な乱数列を、ＮＶＲＡＭ１７に書き込むことができる。従って、本実施例によれば、ＮＶＲＡＭ１７の寿命が短くならないようにしつつ、常に新しい乱数列を用いて、起動時にシードを設定できる。
【００８３】
換言すると、本実施例によれば、乱数列をＮＶＲＡＭ１７に書き込む周期が短すぎることにより、ＮＶＲＡＭ１７への乱数列の書込（上書き）回数が、必要以上に多くなるのを防止することができると共に、乱数をＮＶＲＡＭ１７に書き込む周期が長すぎるために、複合機１０の稼動中に、ＮＶＲＡＭ１７に、乱数を書き込むことができず、複合機１０の起動時に、毎回同じ値のシードが設定されてしまうのを抑制することができる。
【００８４】
また、本実施例によれば、シード保存領域において、次に乱数を書き込む位置を、前回の書込終端位置の次ビットに設定するため、乱数を書き込む際に、今まで記憶していた前回までの乱数列を後方にシフトさせるといった処理が不要となり、それにより、シード保存領域の書き換え回数を抑えることができる。それにより、ＮＶＲＡＭ１７の寿命が短くなることを抑制することができる。
【００８５】
尚、本発明の乱数出力手段は、Ｓ１６０の処理にて実現され、計測手段は、Ｓ５１０〜Ｓ５３０の処理にて実現され、決定手段は、Ｓ４１０〜Ｓ４６０の処理にて実現されている。また、記憶制御手段は、Ｓ５４０〜Ｓ５８０の処理にて実現されている。
【００８６】
また、本発明は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、上記実施例では、本発明を、ディジタル複合機に適用した例を説明したが、本発明は、その他の各種通信装置にも適用することができる。
【００８７】
この他、上記実施例では、シードがＳＳＬ通信に用いられることを例に挙げて、発明の効果を説明したが、シードの用途は、上記用途に限定されるものではない。例えば、シードは、無線通信の際にも用いられるので、セキュリティに関する上記効果は、無線ネットワークに対しても、同様に言うことができる。
【図面の簡単な説明】
【００８８】
【図１】通信システム１の構成を表すブロック図である。
【図２】通信インタフェース２５の処理動作を示した説明図である。
【図３】ＣＰＵ１１が実行するシード生成処理を表すフローチャートである。
【図４】ＣＰＵ１１が実行する乱数記録処理を表すフローチャートである。
【図５】ＣＰＵ１１が実行する乱数記録処理を表すフローチャートである。
【符号の説明】
【００８９】
１…通信システム、３…通信装置、５…パーソナルコンピュータ、１０…ディジタル複合機、１１…ＣＰＵ、１３…ＲＯＭ、１５…ＲＡＭ、１７…ＮＶＲＡＭ、１９…印刷部、２１…読取部、２３…表示操作部、２５…通信インタフェース、ＣＬＫ…システムクロック、ＮＴ…ネットワーク
【図１】
2008059177.tif 000003
【図２】
2008059177.tif 000004
【図３】
2008059177.tif 000005
【図４】
2008059177.tif 000006
【図５】
2008059177.tif 000007