• ポートフォリオ機能


ポートフォリオを新規に作成して保存
既存のポートフォリオに追加保存

  • この表をプリントする
PDF PDFをダウンロード
審決分類 審判 査定不服 2項進歩性 特許、登録しない。 G09C
管理番号 1296901
審判番号 不服2013-8489  
総通号数 183 
発行国 日本国特許庁(JP) 
公報種別 特許審決公報 
発行日 2015-03-27 
種別 拒絶査定不服の審決 
審判請求日 2013-05-08 
確定日 2015-01-28 
事件の表示 特願2010-506480「擬似乱数生成器のための初期シード管理」拒絶査定不服審判事件〔平成20年10月30日国際公開、WO2008/131444、平成22年 7月22日国内公表、特表2010-525417〕について、次のとおり審決する。 
結論 本件審判の請求は、成り立たない。 
理由 1.手続の経緯
本願は、2008月4月23日を国際出願日(優先権主張2007年4月23日;米国)とする出願であって、出願後の手続の経緯の概略は次のとおりである。

拒絶理由の通知 (起案日)平成24年6月7日
意見、手続補正 (提出日)平成24年12月12日
拒絶査定 (起案日)平成25年1月4日
同謄本送達 (送達日)平成25年1月8日
審判請求 (提出日)平成25年5月8日
手続補正 (提出日)平成25年5月8日
前置報告 (作成日)平成25年5月31日
審尋 (起案日)平成25年11月5日

2.本願発明
本願の請求項1に係る発明は、平成25年5月8日付けの手続補正書により補正された特許請求の範囲の請求項1に記載されたとおりの次の事項により特定されるものである。(以下「本願発明」という。)

「【請求項1】
擬似乱数生成器を動作させるための方法であって、
前記擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化することと、
前記記憶された原始シードを一度使用された後に破棄することと、
エントロピーの1つまたは複数の予測不可能なソースから新たなシードを取得することと、
前記擬似乱数生成器の前記内部状態を前記新たなシードで予測不可能な状態に変更することと、
前記擬似乱数生成器の前記変更された内部状態に基づいて擬似ランダム出力を生成することと、
前記擬似ランダム出力を前記擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶することと、
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すことと、
信頼できるソースから時間値を取得することと、
前記時間値と初期化シードを組み合わせて、変更された初期化シードを取得することと、
前記シードファイルの前記コンテンツを前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えることと、
を備え、
前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わされ、
前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のプライマリシードファイルに記憶すること、および前記擬似ランダム出力を前記セキュアなファイルシステム内のシャドーシードファイルに記憶することを含み、前記プライマリシードファイルの完全性(integrity)が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記プライマリシードファイルの完全性が首尾よく検証されるなら、前記プライマリシードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記プライマリシードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を前記シャドーシードファイルの初期化シードで初期化することにより記憶する、
方法。」

3.引用文献
3.1 原審の拒絶の理由で引用された本願の優先権主張日前に頒布または電気通信回線を通じて公衆に利用可能となった文献である国際公開第2007/037869号( 以下、「引用文献1」という。)には、図面とともに次の記載がある。(日本語は、パテントファミリーである特表2009-506438号公報の対応部分を掲げた。)
ア.「SUMMARY
[0012] A method is provided for operating a secure pseudo-random number generator. The method comprises (1) obtaining one or more unpredictable sources of entropy to provide a seed, (2) accumulating entropy in an internal state of the number generator by modifying the internal state as a function of a current internal state of the number generator and the seed, and (3) generating a pseudo-random number based on the modified internal state of the number generator. The modified internal state may be obtained by using non-linear feedback shift register operations on the current internal state and the seed. The one or more unpredictable sources of entropy may be combined into the seed.
[0013] An initialization seed may be stored upon shutdown of the number generator, wherein the initialization seed is a pseudo-random number generated by the number generator. A startup internal state of the number generator can then be initialized with the stored initialization seed upon startup of the number generator. The initialization seed is stored in a secure file system. Prior to initialization of the startup internal state of the number generator, a determination is made as to whether the integrity of the initialization seed has been compromised. If the integrity of the stored initialization seed has been compromised. An alternative unpredictable source is employed to initialize the startup internal state of the number generator.
・・・(中略)・・・
[0015] The number generator may be continuously reseeded from the one or more unpredictable sources to change the internal state of the number generator. The unpredictable sources include physical sources having quantifiable information. Additionally, the number generator may be reseeded with a new seed received from a calling application to change the internal state for the number generator.
[0016] The modified internal state of the number generator may be obtained by (1) loading the seed into one or more state registers of the number generator by exclusive-OR operations with a current content of the one or more state registers, (2) feeding the bit-shifted content of a plurality of the state registers to a non-linear function to obtain a result, (3) performing an exclusive-OR operation between the result and one of the one or more state registers to obtain a feedback number, and (4) modifying the one or more state registers by shifting the content from a first state register to a second state register and loading a third state register with the feedback number.
・・・(中略)・・・
[0018] An additional feature maintains an interval counter that changes each time a pseudo-random number is generated. The number generator is reseeded from the one or more unpredictable sources to change the internal state of the number generator only at an interval defined by the interval counter. The number generator may be reseeded with a system time at the interval defined by the interval counter. The seed may be at least one hundred twenty-eight bits long and the internal state of the number generator is eighteen word-size registers.
[0019] Another embodiment provides a cryptographically secure number generator comprising: (1) a seed loader configured to obtain one or more unpredictable sources of seed information to provide a seed, (2) a plurality of state registers for storing an internal state of the number generator, wherein the seed loader reseeds the state registers based on a current content of the state registers and the seed to modify the internal state of the number generator and accumulate entropy, and (3) a pseudo-random number generator configured to generate a pseudorandom number based on the modified internal state of the number generator. The modified internal state is obtained by using non-linear feedback shift register operations on the content of the state registers and the seed. The pseudo-random number generator may be further configured to (1) generate an initialization seed upon shutdown of the number generator, and (2) store the initialization seed. The seed loader may also be configured to initialize the plurality of state registers with the stored initialization seed upon restarting of the number generator. The seed loader may be further configured to continuously modify the plurality of state registers with additional seeds obtained from the one or more unpredictable sources. The unpredictable sources may include physical sources having quantifiable information.」
ア.の公表公報の対応部分;「【発明の概要】
【0012】
安全な擬似乱数生成器を操作する方法が与えられる。方法は、(1)エントロピーの1つ以上の予測不可能な源を得て、シードを与えることと、(2)数生成器の現在の内部状態とシードとの関数として内部状態を修正することによって、数生成器の内部状態においてエントロピーを蓄積することと、(3)数生成器の修正された内部状態に基づいて、擬似乱数を生成することとを含む。修正された内部状態は、現在の内部状態とシードとに対して非線形フィードバック シフトレジスタの動作を使用することによって得ることができる。エントロピーの1つ以上の予測不可能な源は、シードに結合され得る。
【0013】
初期化シードは、数生成器のシャットダウン時に記憶され得る。初期化シードは、数生成器によって生成された擬似乱数である。次に、数生成器のスタートアップの内部状態は、数生成器のスタートアップ時に、記憶されている初期化シードを用いて初期化することができる。初期化シードは、セキュア ファイル システム(secure file system)に記憶されている。数生成器のスタートアップの内部状態の初期化前に、初期化シードの完全性が損なわれているかどうかについて判断される。記憶されている初期化シードの完全性が損なわれているときは、別の予測不可能な源を使用して、数生成器のスタートアップの内部状態を初期化する。
・・・(中略)・・・
【0015】
数生成器は、1つ以上の予測不可能な源から連続的に再びシードを与えられ、数生成器の内部状態を変更し得る。予測不可能な源は、量子化可能な情報をもつ物理的な源を含む。さらに、数生成器は、呼び出しアプリケーションから受信した新しいシードを用いて再びシードを与えられ、数生成器の内部状態を変更し得る。
【0016】
数生成器の修正された内部状態は、(1)1つ以上の状態レジスタの現在の内容との排他的論理和演算によって、数生成器の1つ以上の状態レジスタにシードをロードすることと、(2)複数の状態レジスタのビットシフトされた内容を非線形関数に供給し、結果を得ることと、(3)結果と1つ以上の状態レジスタの1つとの間で排他的論理和演算を行って、フィードバックの数を得ることと、(4)第1の状態レジスタから第2の状態レジスタへ内容をシフトし、第3のレジスタにフィードバックの数をロードすることによって1つ以上の状態レジスタを修正することとによって得ることができる。
・・・(中略)・・・
【0018】
追加の特徴は、擬似乱数が生成されるたびに変更する間隔カウンタ(interval counter)を維持する。数生成器は、1つ以上の予測不可能な源から再びシードを与えられ、間隔カウンタによって定義された間隔においてのみ、数生成器の内部状態を変更する。数生成器は、システム時間を用いて、間隔カウンタによって定義された間隔で再びシードを与えられ得る。シードは、少なくとも128ビット長であり、数生成器の内部状態は、18ワードサイズのレジスタである。
【0019】
別の実施形態は、暗号的に安全な数生成器であって、(1)シード情報の1つ以上の予測不可能な源を得て、シードを与えるように構成されたシードローダと、(2)数生成器の内部状態を記憶する複数の状態レジスタとを含み、シードローダは状態レジスタの現在の内容とシードとに基づいて、状態レジスタに再びシードを与え、数生成器の内部状態を修正し、エントロピーを蓄積し、(3)数生成器の修正された内部状態に基づいて、擬似乱数を生成するように構成された擬似乱数生成器をさらに含む、暗号的に安全な数生成器を与える。修正された内部状態は、状態レジスタの内容とシードとに対して非線形フィードバック シフトレジスタの動作を使用することによって得られる。擬似乱数生成器は、(1)数生成器のシャットダウン時に初期化シードを生成し、(2)初期化シードを記憶するようにさらに構成され得る。シードローダは、数生成器の再始動時に、記憶されている初期化シードを用いて、複数の状態レジスタを初期化するようにさらに構成され得る。シードローダは、1つ以上の予測不可能な源から得た追加のシードを用いて、複数の状態レジスタを連続的に修正するようにさらに構成され得る。予測不可能な源は、量子化可能な情報をもつ物理的な源を含み得る。」

イ.「[0048] Figure 2 illustrates how a pseudo-random number generator 202 may be represented as separate functions according to one implementation. A seed function SEED( ) 204 uses one or more unpredictable source 206 as the seed to configure the generator 202. In particular, one or more unpredictable sources 206 may include one or more different physical sources from which the seed is generated. In some implementations, the information from each unpredictable source 206 may be quantified into separate seeds that are sequentially fed to the seed function SEED( ) 204. In other implementations, the information from two or more of the unpredictable sources 206 may be quantified and combined (e.g., multiplexed, XORed, etc.) into a single seed that is fed to the seed function SEED( ) 204 as a parameter. Each time the seed function SEED( ) is invoked with a "seed" as a parameter, the internal state of the number generator 202 is updated (i.e., "reseeded") by a nonlinear operation involving shifting of internal state registers.
[0049] A pseudo-random sequence generation function RAND( ) 208 uses the internal state of the number generator 202 to obtain a pseudo-random output 210. The generated pseudo-random number (output) 210 may be used as nonces, initialization vectors, etc.
・・・(中略)・・・
[0052] Figure 3 is a block diagram illustrating one example of a seed function 204. A state register initializer 302 (NLS_INITSTATE) initializes the state registers of a number generator when the number generator is first started. For example, Fibonacci numbers are used to initialize state registers r[0] to r[16]. A Konst register is also initialized to a randomly chosen number (e.g., 0x6996c53a). For instance, a particular fixed value may be used for Konst for interoperability purposes. Second, a seed loader 304 (NLS_LOADKEY) loads a seed 300 into the state registers (r[0] to r[16]) word by word using exclusive-ORs (logical XOR operations, denoted by "○+○"(当審注;この○+○は「+」を「○」で囲ったシンボルを示す。以下同様。). The length of seed 300 may also be loaded as a word. The seed loader 304 also shifts the state registers (r[0] to r[16]) in a nonlinear feedback mode simultaneously, allowing for the seed 300 to be of any length. Third, a Konst generator 306 (GENKONST) updates the Konst register with a new Konst value based on the current generator state and the current Konst value. This Konst value is used as a constant during pseudorandom number output 210.
[0053] Figure 4 is a block diagram illustrating one example of a state register initializer 302 used by a seeding function 204. When a number generator is first started, its state registers are initialized. The state register initializer 302 may include a Fibonacci Number Table 402 with which the number generator state registers r[0] ... r[ 16] are initialized. For example, r_( t )[0] = r_( t )[l] = 1, and r_( t) [i] = r _(t) [i-l] + r_( t )[i-2], for 2 ≦ i ≦16. A constant 404 is used to initialize a Konst register. The constant 404 value may be any number that preferably has some entropy in its bit sequence.
[0054] Figure 5 is a block diagram illustrating functions performed by a seed loader 304 that may be used to seed and/or reseed a number generator according to one example. The seed loader 304 may include a non-linear mechanism that ensures every bit of seed input affects every bit of the resulting state registers.
・・・(中略)・・・
[0058] Figure 6 illustrates a method for executing a seed function modified from NLS key scheduling. A seed is obtained based on one or more unpredictable sources 602 and passed to the seed function as a parameter. A seed is defined as a byte string, of any length, that contains some entropy but is not required to be perfectly random. For example, sources for generating seeds may be obtained by quantifying measurements from physical sources, such as processor temperature, communication link errors, detected frequency peaks within a channel, etc.
[0059] When the seed function is invoked, a state_initialized flag is checked 604 to determine if the generator state registers have been initialized. A conventional stream cipher NLS algorithm resets or clears the state registers upon reseeding, thereby failing to accumulate entropy. By contrast, the present modified algorithm accumulates entropy by combining new seeds with current state register (e.g., without clearing the state registers). If it is the first time the seed function has been invoked after the generator is started, the internal state registers are initialized 606 (e.g., r[0] to r[16], Konst, etc.) and the state_initialized flag is set 608 to indicate that the state registers for the generator have been initialized. For example, a NLS_INITSTATE function may be called to initialize the internal state registers predefined for an NLS algorithm. Otherwise, if the he state registers have already been initialized (as denoted by the state_initialized flag being set), the initialization step is skipped.
[0060] The seed is passed to the NLS_LOADKEY function where a new state for the number generator is obtained as a function of the current state and the seed 610. For example, the seed and its length are loaded into state registers using XORs so that the new state is a function of both current state and the seed. Consequently, it is not feasible to use the knowledge of a current seed to deduce the previous, current, or next state of the generator. The system continually adds entropy from new, unpredictable seeds, to the number generator. Additionally, the seed function may be invoked by applications calling the number generator. In this sense, an application calls the seed function to contribute entropy for randomness and changes the generator state in an unpredictable way. As a result, reseeding with the same input seeds leads to different outputs at different times. This is distinguishable from a general PRNG, which produces the same output sequence whenever the same seed is used. The value of Konst is then updated based on the current generator state 612. For example, a NLS_GENKONST function may be invoked to obtain the new Konst from the evolving generator state. Konst may be used to mask the output as illustrated previously. The output buffer is flushed 514 to hold new pseudo-random bits for generating the next seed.
・・・(中略)・・・
[0064] Depending on the nature of physical sources, the seeding procedure during power-up may be quite time consuming. One improvement is to use a Secure File System (SFS) to store a seed file right before power shutdown. Figure 7 illustrates a method for storing a seed in a secure file system associated with a pseudo-random number generator. A secure file system makes use of cryptographic primitives to protect confidentiality and integrity of file contents. If a secure file system is available 702, before a device is turned off, the system calls RAND( ) to generate a string of 128 bits as a seed 704. The seed is stored in the SFS as a file 706.
[0065] Figure 8 illustrates a method for using a seed stored in a seed file to initialize a pseudo-random number generator upon startup. For example, a CSPRNG in a CDMA mobile phone may be initialized using this seed file upon startup. Upon power up initialization of a device 802, the system determines if a secure file system is available 804. If the SFS is available during power-up, the seed file is decrypted with integrity verification 806. If successful 808, the content is restored from the seed file 810 and used to seed the SEED() function 812. The seed file is removed from SFS once its content has been extracted. When the normal power-down procedure is compromised, such arrangement prevents the same seed from being used for the next time that the phone powers up. If either an SFS is unavailable or the seed file fails the integrity test, an unpredictable source is used to provide 128 bits (for example) as the first seed 814.[0066] According to one feature, an application can add its own entropy by using the SEED( ) function. The seed provided by the application is not required to be perfectly random but only has to include some new entropy. It can be any sort of information, e.g., the system time or CPU cycle counter, for a random number request. Reseeding with predictable data is safe, so the application does not need to "trim" the input data in any way. If predictable data is used to add entropy, it may be used sporadically or in an irregular reseeding pattern so that the application can add its own entropy while preventing a hacker from compromising the generator.
[0067]・・・(中略)・・・, the number generator is reseeded using the SEED( ) function taking system time 」

イ.の公表公報の対応部分;「【0038】([0048];[]内は国際公開の対応する段落番号を示す。)
図2は、1つの実施にしたがって、擬似乱数生成器202が別々の関数としてどのように表わされ得るかを示している。シード関数SEED( )204は1つ以上の予測不可能な源206をシードとして使用し、生成器202を構成する。具体的には、1つ以上の予測不可能な源206は、シードを生成する1つ以上の異なる物理的な源を含み得る。幾つかの実施において、各予測不可能な源206からの情報は、別々のシードに量子化され、別々のシードは、シード関数SEED( )204に順次に供給される。他の実施において、予測不可能な源206の2つ以上からの情報は量子化され、1つのシードに結合され(例えば、乗算、XOR、等)、その1つのシードがシード関数SEED( )204にパラメータとして供給される。シード関数SEED( )204が、パラメータとして“シード”により呼び出される(invoke)されるたびに、数生成器202の内部状態は、内部状態レジスタのシフティングに関与する非線形動作によって更新される(すなわち、“再びシードを与えられる(reseeded)”)。
【0039】([0049])
擬似ランダム列生成関数RAND( )208は、数生成器202の内部状態を使用し、擬似ランダム出力210を得る。生成された擬似乱数(出力)210は、ナンス、初期化ベクトル、等として使用され得る。
・・・(中略)・・・
【0042】([0052])
図3は、シード関数204の一例を示すブロック図である。数生成器が最初に始動されるとき、状態レジスタイニシャライザ302(NLS_INITSTATE)は、数生成器の状態レジスタを初期化する。例えば、フィボナッチ数は、状態レジスタr〔0〕ないしr〔16〕を初期化するのに使用される。コンスト(Konst)レジスタもランダムに選択された数(例えば、0x6996c53a)に初期化される。例えば、特定の固定値が、相互運用性のためにコンストに使用され得る。第2に、シードローダ304(NLS_LOADKEY)は、排他的論理和
【数2】
(“○+○”によって示される論理的XOR演算)
を使用して、シード300を状態レジスタ(r〔0〕ないしr〔16〕)へ1ワードずつロードする。シード300の長さも、ワードとしてロードされ得る。シードローダ304は、さらに、非線形フィードバックモードにおいて状態レジスタ((r〔0〕ないしr〔16〕)を同時にシフトし、シード300が任意の長さをもつことを可能にする。第3に、コンスト(Konst)生成器306(Konst generator, GENKONST)は、現在の生成器の状態と現在のコンスト値とに基づいて、新しいコンスト値でコンストレジスタを更新する。このコンスト値は、擬似乱数の出力210中に定数として使用される。
【0044】([0053])
図4は、シーディング関数204によって使用される状態レジスタイニシャライザ302の一例を示すブロック図である。数生成器が最初に始動されると、その状態レジスタが初期化される。状態レジスタイニシャライザ302は、数生成器の状態レジスタr〔0〕...r〔16〕を初期化するフィボナッチ数テーブル402を含み得る。例えば、r_(t)〔0〕=r_(t)〔1〕=1、およびr_(t)〔i〕=r_(t)〔i-1〕+r_(t)〔i-2〕(なお、2≦i≦16)。定数404は、コンスト(Konst)レジスタを初期化するのに使用される。定数404の値は、そのビット列内に幾つかのエントロピーをもつことが好ましい任意の数であり得る。
【0045】([0054])
図5は、一例にしたがって数生成器にシードを与える(seed)、および/または再びシードを与える(reseed)のに使用され得るシードローダ304によって行われる関数を説明するブロック図である。シードローダ304は、シード入力の全ビットが結果の状態レジスタの全ビットに確実に影響を与えるようにする非線形機構を含み得る。
・・・(中略)・・・
【0049】([0058])
図6は、NLS鍵スケジューリングから修正されたシード関数を実行する方法を示している。シードは、1つ以上の予測不可能な源に基づいて得られ(602)、パラメータとしてシード関数に渡される。シードは、幾つかのエントロピーを含むが、完全にランダムである必要のない、任意の長さをもつバイトストリングとして定義される。例えば、シードを生成する源は、プロセッサの温度、通信リンクエラー、チャネル内における検出された周波数ピーク、等のような物理的な源からの測定値を量子化することによって得ることができる。
【0050】([0059])
シード関数が呼び出されると、state_initializedフラグがチェックされ(604)、生成器の状態レジスタが初期化されたかどうかを判断する。従来のストリーム暗号NLSアルゴリズムは、再シーディング時に状態レジスタをリセットまたはクリアし、それによって、エントロピーを蓄積しない。対照的に、現在の修正されたアルゴリズムは、(例えば、状態レジスタをクリアせずに)現在の状態レジスタと新しいシードを結合することによって、エントロピーを蓄積する。生成器が始動した後で、シード関数が始めて呼び出されると、内部状態レジスタ(例えば、r〔0〕ないしr〔16〕、コンスト(Konst)、等)は初期化され(606)、state_initializedフラグは、生成器の状態レジスタが初期化されたことを示すように設定される(608)。例えば、NLS_INITSTATE関数が呼び出されて、NLSアルゴリズムのために予め定められた内部状態レジスタを初期化し得る。そうでなければ、状態レジスタは、(設定されたstate_initializedフラグによって示されているように)既に初期化されており、初期化ステップはスキップされる。
【0051】([0060])
数生成器の新しい状態が現在の状態とシードとの関数として得られると、シードはNLS_LOADKEY関数に渡される(610)。例えば、シードおよびその長さは、XORを使用して、状態レジスタにロードされ、新しい状態は、現在の状態とシードとの両者の関数になる。したがって、現在のシードの知識を使用して、生成器の前の状態、現在の状態、または次の状態を推定するのは、実現不可能である。システムは、新しい予測不可能なシードからのエントロピーを数生成器に加え続ける。さらに、シード関数は、数生成器を呼び出すアプリケーションによって呼び出され(invoke)され得る。この意味で、アプリケーションは、シード関数を呼び出して(call)、ランダム性のためにエントリピーを与え、予測不可能なやり方で生成器状態を変更する。その結果、同じ入力シードを用いた再シーディングは、異なる時間において、異なる出力をもたらす。このことは、同じシードが使用されるときは必ず同じ出力列を生成する一般的なPRNGと区別できる。次に、現在の生成器の状態に基づいて、コンスト(Konst)値が更新される(612)。例えば、NLS_GENKONST関数を呼び出して、漸進的に変化する(evolving)生成器の状態から新しいコンスト(Konst)を得ることができる。コンストは、既に説明したように、出力にマスクするのに使用され得る。出力緩衝器は、フラッシュされ(614)、次のシードを生成するために新しい擬似ランダムビットを保持する。
・・・(中略)・・・
【0055】([0064])
物理的な源の性質に応じて、パワーアップ中のシーディング手続きは、相当に時間がかかり得る。1つの改良では、セキュア ファイル システム(Secure File System, SFS)を使用し、パワー シャットダウン前に、シードファイルの権利(seed file right)を記憶する。図7は、擬似乱数生成器に関連付けられたセキュア ファイル システムにシードを記憶する方法を示している。セキュア ファイル システムは、暗号プリミティブを使用し、ファイル内容の機密性および完全性を保護する。デバイスがオフにされる前に、セキュア ファイル システムが利用可能であるとき(702)、システムはRAND( )を呼び出し、128ビットのストリングをシードとして生成する(704)。シードは、SFSにファイルとして記憶される(706)。
【0056】([0065])
図8は、スタートアップ時に、シードファイルに記憶されたシードを使用して、擬似乱数生成器を初期化する方法を示している。例えば、CDMA移動電話におけるCSPRNGは、スタートアップ時に、このシードファイルを使用して初期化され得る。デバイスの初期化をパワーアップするとき(802)、システムは、セキュア ファイル システムが利用可能であるかどうかを判断する(804)。SFSがパワーアップ中に利用可能であるとき、シードファイルは完全性検証のために解読される(806)。成功すると(808)、内容はシードファイルから回復され(810)、SEED( )関数にシードを与えるのに使用される(812)。シードファイルは、その内容が抽出されると、SFSから取り去られる。正常なパワーダウン手続きが損なわれると、このような構成は、同じシードが、次に電話がパワーアップするときに使用されるのを防ぐ。SFSが利用可能でないか、またはシードファイルが完全性の試験に失敗すると、予測不可能な源を使用し、(例えば)128ビットを第1のシードとして与える(814)。
【0057】([0066])
1つの特徴によると、アプリケーションは、SEED( )関数を使用することによって、それ自身のエントロピーを加えることができる。アプリケーションによって与えられるシードは、完全にランダムである必要はなく、幾つかの新しいエントロピーを含まなければならないだけである。これは、乱数の要求に対する任意のタイプの情報、例えば、システム時間またはCPUサイクルカウンタであり得る。予測可能なデータを用いた再シーディングは安全であり、アプリケーションは、任意のやり方で入力データを“削除(trim)”する必要はない。予測可能なデータを使用して、エントロピーを加えるとき、それはばらばらに、または不規則な再シーディングパターンで使用され、アプリケーションがそれ自身のエントロピーを加える一方で、ハッカーが生成器を危険にさらすのを防ぐことができる。
【0058】([0067])
・・・(中略)・・・
数生成器は、system timeを入力源として用いるSEED( )関数を使用して、再びシードを与えられる」

ウ.「[0071]・・・(中略)・・・
The processor may be further configured to (1) store an initialization seed upon shutdown of the number generator, wherein the initialization seed is a pseudo-random number generated by the number generator, (2) determine whether the integrity of the initialization seed has been compromised prior to initializing a startup internal state of the number generator, and (3) reseed the startup internal state of the number generator with: (a) an alternative unpredictable source if the integrity of the stored initialization seed has been compromised, and (b) the stored initialization seed otherwise.」
ウ.の公表公報の対応部分;「【0062】([0071])
・・・(中略)・・・
プロセッサは、(1)数生成器によって生成された擬似乱数である初期化シードを、数生成器のシャットダウン時に記憶し、(2)数生成器のスタートアップ時の内部状態を初期化する前に、初期化シードの完全性が損なわれているかどうかを判断し、(3)(a)記憶されている初期化シードの完全性が損なわれているときは、別の予測不可能な源を用いて、(b)そうでなければ、記憶されている初期化シードを用いて、数生成器のスタートアップの内部状態に再びシードを与えるようにさらに構成され得る。」

引用文献1に記載された事項を検討する。
(ア)ア.の「擬似乱数生成器を操作する方法」、「数生成器の修正された内部状態に基づいて、擬似乱数を生成することとを含む」との記載から、「数生成器の内部状態に基づいて擬似乱数を生成する擬似乱数生成器を操作する方法」をよみとることができる。

(イ)イ.の段落[0052]の「数生成器が最初に始動されるとき、状態レジスタイニシャライザ302(NLS_INITSTATE)は、数生成器の状態レジスタを初期化する。例えば、フィボナッチ数は、状態レジスタr〔0〕ないしr〔16〕を初期化するのに使用される。コンスト(Konst)レジスタもランダムに選択された数(例えば、0x6996c53a)に初期化される」との記載、段落[0052]の予め記憶されていることが通常である「フィボナッチ数テーブル」や前記「コンストレジスタ」との記載、段落[0059]の「生成器が始動した後で、シード関数が始めて呼び出されると、内部状態レジスタ」「は初期化され」るとの記載から、「生成器が始動した後でシード関数が始めて呼び出されると、予め記憶されているコンストレジスタとフィボナッチ数テーブルを用いて内部状態レジスタを初期化すること」をよみとることができる。

(ウ)ア.の「(1)エントロピーの1つ以上の予測不可能な源を得て、シードを与えること」、「(2)数生成器の現在の内部状態とシードとの関数として内部状態を修正することによって、数生成器の内部状態においてエントロピーを蓄積すること」、「(3)数生成器の修正された内部状態に基づいて、擬似乱数を生成することとを含む」との記載、「状態レジスタに再びシードを与え、数生成器の内部状態を修正し、エントロピーを蓄積し」との記載から、「エントロピーの1つまたは複数の予測不可能なソースから新たなシードを取得すること」をよみとることができる。

(エ)さらに、前記(ウ)で言及した記載から「数生成器の現在の内部状態と前記新たなシードとの関数として内部状態を修正することによって、前記数生成器の内部状態においてエントロピーを蓄積すること」をよみとることができる。

(オ)さらに前記(ウ)で言及した「(3)数生成器の修正された内部状態に基づいて、擬似乱数を生成すること」との記載から「数生成器の修正された内部状態に基づいて、擬似乱数を生成すること」は明らかである。

(カ)ア.の「初期化シードは、数生成器のシャットダウン時に記憶され得る。初期化シードは、数生成器によって生成された擬似乱数である。次に数生成器のスタートアップの内部状態は、数生成器のスタートアップ時に、記憶されている初期化シードを用いて初期化することができる。初期化シードは、セキュア ファイル システム(secure file system)に記憶されている」との記載、イ.の「スタートアップ時に、シードファイルに記憶されたシードを使用して、擬似乱数生成器を初期化する」との記載から、「前記擬似ランダム出力を前記擬似乱数生成器のシャットダウン後の、後続の始動内部状態用の初期化シードとしてシードファイル中に記憶すること」をよみとることができる。

(キ)前記(カ)の言及において、「数生成器のスタートアップ時に、記憶されている初期化シードを用いて初期化することができる」ことから、「前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すこと」ができることは明らかである。

(ク)ア.の「予測不可能な源(ソース;当審注)は、量子化可能な情報をもつ物理的な源を含む」との記載、イ.の段落[0066]の「シードは、」「新しいエントロピーを含まなければならない」、乱数の要求に対する任意のタイプの情報、例えば、「システム時間」との記載、段落[0067]の「system time(システム時間;当審注)を入力源として用いるSEED( )関数を使用して、再びシードを与えられる」との記載、および、通常、システム時間値は、正確で狂わないタイマ等の「信頼できる」源からのものであることは慣用のものであり記載されているに等しいことを加味すれば、「信頼できるソースから時間値を取得すること」をよみとることができる。

(ケ)前記(ク)での言及から前記「予測不可能な源」の「情報」の例として「システム時間値」が含まれる。ア.の「数生成器は、1つ以上の予測不可能な源から連続的に再びシードを与えられ」、段落[0048]の「予測不可能な源206の2つ以上からの情報は量子化され、1つのシードに結合され」、「その1つのシードがシード関数SEED( )204にパラメータとして供給される。シード関数SEED( )204が、パラメータとして“シード”により呼び出される(invoke)されるたびに、数生成器202の内部状態は、」「更新される(すなわち、“再びシードを与えられる(reseeded)”」との記載から、「2つ以上からのシステム時間値を含む情報は1つのシードに結合され1つの結合されたシードがシード関数SEED( )にパラメータとして取得されること」をよみとることができる。

(コ)前記(カ)で言及したように「前記擬似ランダム出力を前記擬似乱数生成器のシャットダウン後の、後続の始動内部状態用の初期化シードとしてシードファイル中に記憶すること」、及び、(キ)で言及したように「前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すこと」をよみとることができるとともに、イ.の段落[0065]の「内容はシードファイルから回復され(810)、SEED( )関数にシードを与えるのに使用される(812)。シードファイルは、その内容が抽出されると、SFSから取り去られる。正常なパワーダウン手続きが損なわれると、このような構成は、同じシードが、次に電話がパワーアップするときに使用されるのを防ぐ」との記載から、シードを与えるのに抽出され使用されたシードファイルは同じシードが使用されないように取り出され、換言すればSFSに戻されることなく取り去られて使い捨ての如き使用が含まれると解され、且つ、シャットダウン時に後続の始動内部状態用の初期化シードとしてシードファイルが記憶されることから、スタートアップ時に取り出され使用され取り去られたシードファイル(初期化シード)は、その後のシャットダウン時に新たに記憶されるシードファイル(初期化シード)に「置き換え」られるとみることができる。よって「前記シードファイルの内容(コンテンツ)を前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えること」をよみとることができる。

(サ)前記(カ)で言及した「前記擬似ランダム出力を前記擬似乱数生成器のシャットダウン後の、後続の始動内部状態用の初期化シードとしてシードファイル中に記憶すること」に関連し、ア.の「初期化シードは、セキュア ファイル システム(secure file system;SFS。当審注)に記憶されている」との記載、「スタートアップの内部状態の初期化前に、初期化シードの完全性が損なわれているかどうかについて判断される」との記載、イ.の段落[0065]の「スタートアップ時に、このシードファイルを使用して初期化され得る。デバイスの初期化をパワーアップするとき(802)、システムは、セキュア ファイル システムが利用可能であるかどうかを判断する(804)。SFSがパワーアップ中に利用可能であるとき、シードファイルは完全性検証のために解読される(806)。成功すると(808)、内容はシードファイルから回復され(810)、SEED( )関数にシードを与えるのに使用される(812)。」「SFSが利用可能でないか、またはシードファイルが完全性の試験に失敗すると、予測不可能な源を使用し、」「第1のシードとして与える」との記載、ウ.にも同様の記載があることから、「前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のシードファイルに記憶することを含み、前記シードファイルの完全性が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記シードファイルの完全性が首尾よく検証されるなら、前記シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を予測不可能なソースを使用し第1のシードとして与え初期化することにより記憶する」ことをよみとることができる。

よって、前記(ア)ないし(サ)によれば、引用文献1には、次の発明(以下「引用文献1発明」と呼ぶ。)が示されている。

数生成器の内部状態に基づいて擬似乱数を生成する擬似乱数生成器を操作する方法であって、
前記数生成器が始動した後でシード関数が始めて呼び出されると、予め記憶されているコンストレジスタとフィボナッチ数テーブルを用いて内部状態レジスタを初期化することと、
エントロピーの1つまたは複数の予測不可能なソースから新たなシードを取得することと、
前記数生成器の現在の内部状態と前記新たなシードとの関数として内部状態を修正することによって、前記数生成器の内部状態においてエントロピーを蓄積することと、
前記数生成器の修正された内部状態に基づいて、擬似乱数を生成することと、
前記擬似ランダム出力を前記擬似乱数生成器のシャットダウン後の、後続の始動内部状態用の初期化シードとしてシードファイル中に記憶することと、
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すことと、
信頼できるソースから時間値を取得することと、
2つ以上からのシステム時間値を含む情報は1つのシードに結合され1つの結合されたシードがシード関数SEED( )にパラメータとして取得されることと、
前記シードファイルの内容(コンテンツ)を前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えることと、
を備え、
前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のシードファイルに記憶することを含み、前記シードファイルの完全性が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記シードファイルの完全性が首尾よく検証されるなら、前記シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を予測不可能なソースを使用し第1のシードとして与え初期化することにより記憶する、
方法。

3.2 原審の拒絶の理由で引用された本願優先権主張日前に頒布または電気通信回線を通じて公衆に利用可能となった文献である米国特許出願公開第2006/0104443号明細書( 以下、「引用文献2」という。)には、図面とともに次の記載がある。
「[0043] The APRNG is executed once per activation (e.g., once per power up) of the card or chip. This PRNG is according to the specification of a "General Purpose Random Number Generation"in FIPS 186-2. The APRNG 108 has two inputs. One input includes a unique 160-bit random secret seed value e, which is held in NVM 103 . The initial value of e is a 160-bit random number, which is generated and installed in the chip during the chip initialization phase by the chip manufacturer; each chip has its own unique value of e. The APRNG 108 uses an "optional user input" feature 107 of the FIPS 186-2 standard; 160 bits generated by the TRNG may be used for this input in block 206 .
・・・(中略)・・・
[0045] The two inputs to the APRNG are combined in block 208 . The combining step may include a mathematical or logical operation, for example. The output from APRNG may include a 160-bit value (or other value), Out1, which is used for two purposes in block 210 :
1) It is used to generate a value e':
[0046] e'=e XOR Out1 XOR 1
[0047] This value e' is then written to NVM 103 , replacing e. Thus, each time the chip is activated it will have a different value for e. This implementation minimizes the number of writes to NVM 103 ; therefore, reducing the hotspot problem.
2) It is used as the initial value for f, the seed 122 for the second PRNG 110 .」
訳;「[0043]APRNG(アクチベーション疑似乱数生成器;当審注)はカードあるいはチップについて起動毎に1度(例えば、パワーアップ毎に1度)実行される。このPRNGはFIPS186-2で「汎用目的の乱数生成」の仕様による。APRNG108は2つのインプットを持っている。1つのインプットがNVM103に拘束されるユニークな160ビットの任意の秘密のシード値eを含む。eの初期値はチップ製造業者によって生成されて、そしてチップ初期化フェーズの間にチップにインストールされる160ビットの乱数である;それぞれのチップがそれ自身のユニークな値eを持っている。APRNG108はFIPS186-2標準の「オプションのユーザーインプット」特性107を使う;TRNG(真正乱数生成器;当審注)によって生み出された160ビットがブロック206でこのインプットのために使われてもよい。
・・・(中略)・・・
[0045]APRNGへの2つの入力はブロック208で結合される。結合ステップは例えば数学的か、あるいは論理的なオペレーションを含んでもよい。APRNGからの出力は160ビットの値(あるいは他の値)、ブロック210における2つの目的のために使われるOut1を含んでもよい:

1)それは値e’を生成するために使われる:

[0046]e’ = e XOR Out1 XOR 1

[0047]この値e’はそれから、eに置き換えて、NVM103に書き込まれる。かくして、チップが始動するたびに、それはeの異なった値を置き換えて持つであろう。このインプリメンテーションはNVM103への書き込みの数を最小にし;従って、ホットスポット問題を減らす。

2)それはfのための初期値、すなわち第2のPRNG110のためのシード122として使用される。」

前記記載によれば、チップ初期時間にチップ製造業者により不揮発性メモリに置かれたユニークなランダム秘密値(秘密のシード値e)を、アクティベーション擬似乱数生成器のシードとして用い、そのアクティベーション擬似乱数生成器の出力を用いて、不揮発性メモリに置かれた値を置き換えることで、チップが活性化されるごとに、その値を異なるものとすることが記載されており、この引用文献2に記載の技術は、チップ初期時間にチップ製造業者により不揮発性メモリに置かれたユニークなランダム秘密値を、一度使用された後に破棄するものである。

3.3 原審の拒絶の理由で引用された本願優先権主張日前に頒布または電気通信回線を通じて公衆に利用可能となった文献である特開2004-158924号公報( 以下、「引用文献3」という。)には、図面とともに次の記載がある。

「【0043】
次に、キーサーバ装置111は、種を生成する(ステップS303)。種の生成には、上記のようなアルゴリズムを用いても良いし、識別子の送受信時刻、種の生成時刻、種の生成に用いるプログラムのプロセスID(Identifier)、宛先の識別子、ファイル送信装置121に割り当てられている識別子、これらの情報を組み合わせ等により生成したものでも良い。たとえば、これらの情報をバイト列としてみたときに、これに各種のハッシュ関数を適用したもの、これのチェックサム、これのMD(Message Digest)5値、これのCRC(Cyclic Redundancy Check)値などを採用することができる。
【0044】
そして、ステップS302で取得したプログラムを実行することにより、生成された種に所定の乱数生成関数を適用してファイルの暗号化に用いる乱数を生成する(ステップS304)。」

前記記載によれば、生成した種に乱数生成関数を適用して乱数を生成するものにおいて、種の生成には、種の生成時刻等の情報を組み合わせにより生成したものでも良く、たとえば、これらの情報をバイト列としてみたときに、これに各種のハッシュ関数を適用したもの、あるいはそのMD5値を、採用できることが記載されている。

3.4 原審の拒絶の理由で引用された本願優先権主張日前に頒布または電気通信回線を通じて公衆に利用可能となった文献である実願平5-12440号(実開平6-75041号)のCD-ROM( 以下、「引用文献4」という。)には、図面とともに次の記載がある。
a.「【0003】
【考案が解決しようとする課題】
ところで、ディスク書き込み動作中に停電等の異常が発生したときは、このデータ書き込み動作は中断されるが、第三者には、どちらのディスクが書き込み中断になったか認識できず、また、第1ディスクD1内のデータと第2ディスクD2内のデータとが不一致となることがあった。
更に、第1ディスクD1の内容と第2ディスクD2の内容との不一致を検出したとき、不一致となった原因が停電であるのか、その他の原因によるものか把握できないため、修復方法を特定することができない、という問題もあった。
【0004】
本考案は、このような問題を課題として解決したものであり、停電等の例外的な事象が発生しても装置の復元処理が容易となるように改善を施すことを目的とする。」

b.「【0007】
【実施例】
以下、図面を用いて本考案を詳細に説明する。
図1は本考案を実施したデータ二重化装置であり、第1ディスクD1、第2ディスクD2は図6に示した従来のものと同様なデータ格納領域を持つ補助記憶であり、コントローラCNTも図6のものと同機能を有するものである。
コンピュータCOMは、新たに、フラグ設定部f、不揮発メモリmと、これらのフラグ設定部f、不揮発メモリmを制御する制御部ctlを備える。
【0008】
フラグ設定部fは、制御部ctlの制御により、第1ディスクD1のデータ格納領域、第2ディスクD2のデータ格納領域の2領域につき、データ書き込み時に、2領域とも書き込み未完,一方の領域に書き込み完かつ他方の領域に書き込み未完,2領域とも書き込み完の3種類の状態を表すフラグが設定されるブロックである。
【0009】
不揮発メモリmは、制御部ctlにおいて停電等の異常事態、即ち例外事象が検出されたときに、その時の書き込み処理に関連する情報として、ファイル名、レコード番号、書き込みサイズ、フラグ設定部f内のフラグが書き込まれる記憶手段である。
停電後、復電があった場合のような、例外事象が解除されてシステムが再スタートする場合は、この不揮発メモリmの内容が参照される。
【0010】
このように構成された本考案装置の動作を次に説明する。
図2は、本考案装置における書き込み動作を表すフローチャートである。
尚、以下の動作の説明にあっては、第1ディスクD1を第1系統、第2ディスクD2を第2系統と呼ぶこととする。
書き込み動作を開始すると、第1,第2系統につきフラグ設定部fに設定するフラグを、第1,第2系統書き込み未完とする。
続いて、フラグとは別に、第1系統、第2系統の正常異常を表すエラー・コードを初期化する。
はじめに、コントローラCNTは、第1系統にデータを書き込む。
この書き込み動作に異常(エラー)がなければ、フラグに第1系統書き込み完を設定し、書き込み異常(エラー)が発生した場合は第1系統に対してエラー・コードを設定する。
続いて、第2系統にデータを書き込む。この第2系統書き込み動作に異常(エラー)がなければ、第1系統に対応するフラグ内容をそのままとして、フラグに第2系統書き込み完を設定し、書き込み動作に異常(エラー)が発生した場合は第2系統に対してエラー・コードを設定する。
最後に、制御部ctlは、第1系統、第2系統の両方のエラー・コードを参照して書き込みが終了したことを表すリターン・コードを設定する。
以上が本考案装置によるデータ二重書き込み動作である。
【0011】
図3は、本考案装置における読み出し動作を表すフローチャートである。
読み出し動作は、通常、どちらか一方の系統を対象に行われる。
第1系統に読み出し起動をかけたときは、この第1系統に異常を表すエラー・コードが設定されていなければ読み出し動作を実行し、この読み出し動作自体に異常(エラー)がなければこの動作は終了する。
第1系統にエラー・コードが設定されているとき、または、第1系統の読み出し動作中に異常(エラー)が発生したときは、第2系統側に読み出し起動をかける。
第2系統に読み出し起動をかけて第2系統異常を表すエラー・コードが設定されていなければ読み出し動作を実行し、この読み出し動作にエラーが発生しなければ、この動作は終了する。
更に、この第2系統にエラー・コードが設定されているとき、または、第2系統読み出し動作中に異常(エラー)が発生したときは、第1系統、第2系統とも異常であるとして、エラーを設定し、上位へ通知する。
以上が本考案装置におけるデータ読み出し動作である。
【0012】
このように、本考案装置にあっては、データ書き込みは常に二つの領域に同一のデータを書き込み、データ読み出しはいずれか一方の領域から読み出しエラーがあると他方の領域から読み出しを行う構成である。
また、データ書き込み時は、第1系統の書き込みが終了するまで第2系統への書き込みを開始することはなく、同時に書き込みをすることはない。従って、第1系統または第2系統のいずれかのデータ内容について新旧の差はあるが、その内容を保証できる。」

a.b.の記載によれば、「ファイルを第1系統に書き込むと共に第2系統にも書き込み、第1系統に読み出し起動をかけて、第1系統にエラーコードが設定されているか第1系統の読み出し動作中にエラーが発生したときは、第2系統に読み出し起動をかけること」でファイル多重化によるファイル書き込み中の異常に対処する技術が示されている。

4.対比
本願発明と引用文献1発明とを対比する。
(1)引用文献1発明の「数生成器の内部状態に基づいて擬似乱数を生成する擬似乱数生成器を操作する方法」と本願発明の「擬似乱数生成器を動作させるための方法」とに実質的な差異はない。
また、引用文献1発明の「前記数生成器が始動した後でシード関数が始めて呼び出されると、予め記憶されているコンストレジスタとフィボナッチ数テーブルを用いて内部状態レジスタを初期化すること」と本願発明の「前記擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化すること」とに実質的な差異はない。

(2)引用文献1発明の「エントロピーの1つまたは複数の予測不可能なソースから新たなシードを取得することと、
前記数生成器の現在の内部状態と前記新たなシードとの関数として内部状態を修正することによって、前記数生成器の内部状態においてエントロピーを蓄積することと、
前記数生成器の修正された内部状態に基づいて、擬似乱数を生成することと、
前記擬似ランダム出力を前記擬似乱数生成器のシャットダウン後の、後続の始動内部状態用の初期化シードとしてシードファイル中に記憶することと、
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すことと、
信頼できるソースから時間値を取得すること」と本願発明の「エントロピーの1つまたは複数の予測不可能なソースから新たなシードを取得することと、
前記擬似乱数生成器の前記内部状態を前記新たなシードで予測不可能な状態に変更することと、
前記擬似乱数生成器の前記変更された内部状態に基づいて擬似ランダム出力を生成することと、
前記擬似ランダム出力を前記擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶することと、
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すことと、
信頼できるソースから時間値を取得すること」とに実質的な差異はない。
(3)引用文献1発明の「2つ以上からのシステム時間値を含む情報は1つのシードに結合され1つの結合されたシードがシード関数SEED( )にパラメータとして取得されること」と本願発明の「前記時間値と初期化シードを組み合わせて、変更された初期化シードを取得すること」とは、上位概念において「シードを取得すること」において共通する。

(4)引用文献1発明の「前記シードファイルの内容(コンテンツ)を前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えること」と本願発明の「前記シードファイルの前記コンテンツを前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えること」とに実質的な差異はない。

(5)本願発明の「プライマリシードファイル」、「シャドーシードファイル」は何れも上位概念では「シードファイル」である。この点をふまえれば、引用文献1発明の「前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のシードファイルに記憶することを含み、前記シードファイルの完全性が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記シードファイルの完全性が首尾よく検証されるなら、前記シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を予測不可能なソースを使用し第1のシードとして与え初期化することにより記憶する」ことと本願発明の「前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のプライマリシードファイルに記憶すること、および前記擬似ランダム出力を前記セキュアなファイルシステム内のシャドーシードファイルに記憶することを含み、前記プライマリシードファイルの完全性(integrity)が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記プライマリシードファイルの完全性が首尾よく検証されるなら、前記プライマリシードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記プライマリシードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を前記シャドーシードファイルの初期化シードで初期化することにより記憶する」こととは、上位概念において「前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のシードファイルに記憶することを含み、前記シードファイルの完全性(integrity)が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記シードファイルの完全性が首尾よく検証されるなら、前記シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態をシードで初期化することにより記憶する」ことにおいて共通する。

(1)ないし(5)の対比によれば、引用文献1発明と本願発明とは次の点で一致し、そして相違する。

〈一致点〉
「擬似乱数生成器を動作させるための方法であって、
前記擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化することと、
エントロピーの1つまたは複数の予測不可能なソースから新たなシードを取得することと、
前記擬似乱数生成器の前記内部状態を前記新たなシードで予測不可能な状態に変更することと、
前記擬似乱数生成器の前記変更された内部状態に基づいて擬似ランダム出力を生成することと、
前記擬似ランダム出力を前記擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶することと、
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すことと、
信頼できるソースから時間値を取得することと、
前記シードを取得することと、
前記シードファイルの前記コンテンツを前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えることと、
を備え、
前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のシードファイルに記憶することを含み、前記シードファイルの完全性(integrity)が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記シードファイルの完全性が首尾よく検証されるなら、前記シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態をシードで初期化することにより記憶する、
方法。」

〈相違点1〉
本願発明は「前記記憶された原始シードを一度使用された後に破棄すること」を有しているのに対し引用文献1発明は有していない点。

〈相違点2〉
シードを取得することに関し、本願発明は「前記時間値と初期化シードを組み合わせて、変更された初期化シード」を取得するのに対し、引用文献1発明はそのようなシードの取得はされていない点。

〈相違点3〉
本願発明は「前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わされ」ているのに対し、引用文献1発明はそのように組み合わされていない点。

〈相違点4〉
前記擬似ランダム出力をシードファイル中に記憶することに関し、本願発明は、「プライマリ」シードファイルと「シャドー」シードファイルとを有しそれらを所定の順序で用いているのに対し引用文献1発明はそのようではない点。即ち、本願発明が、前記擬似ランダム出力をセキュアなファイルシステム内の「プライマリ」シードファイルに記憶すること、「および前記擬似ランダム出力を前記セキュアなファイルシステム内のシャドーシードファイルに記憶する」ことを含み、前記「プライマリ」シードファイルの完全性(integrity)が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記「プライマリ」シードファイルの完全性が首尾よく検証されるなら、前記「プライマリ」シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記「プライマリ」シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を前記「シャドーシードファイルの初期化」シードで初期化することにより記憶するのに対し、引用文献1発明はそのような「プライマリ」シードファイルや「シャドー」シードファイルを有し、完全性検査が失敗した場合、「シャドーシードファイルの初期化」シードで初期化するものではない点。

5.当審の判断
(1)〈相違点1〉について
引用文献2には、引用文献1と共通する疑似乱数生成器にシードを与える技術に関し、チップ初期時間にチップ製造業者により不揮発性メモリに置かれたユニークなランダム秘密値(秘密のシード値e)を、一度使用された後に破棄する技術が示されており、この技術は「記憶された原始シードを一度使用された後に破棄する」技術とみることができる。
引用文献1発明において「記憶された原始シードを一度使用された後に破棄する」と成すことは、前記引用文献2に記載の技術を参酌することにより当業者が容易になし得ることである。

(2)〈相違点2〉について
引用文献3には引用文献1と共通するシードの生成に関する技術であって、生成した種に乱数生成関数を適用して乱数を生成するものにおいて、種の生成には、種の生成時刻等の情報を組み合わせにより生成したものでも良く、たとえば、これらの情報をバイト列としてみたときに、これに各種のハッシュ関数を適用したもの、あるいはそのMD5値を、採用できることが記載されている。
引用文献1発明において、シードを取得することに関し、「前記時間値と初期化シードを組み合わせて、変更された初期化シード」を取得すると成すことは前記引用文献3に示された、種の生成には、種の生成時刻等の情報を組み合わせにより生成する技術を参酌することにより当業者が容易になし得ることである。

(3)〈相違点3〉について
引用文献3には、前記「〈相違点2〉について」において言及した技術として、当該「種の生成には、種の生成時刻等の情報を組み合わせにより生成したものでも良く、たとえば、これらの情報をバイト列としてみたときに、これに各種のハッシュ関数を適用したもの、あるいはそのMD5値を、採用」した技術が記載されており、当該各種のハッシュ関数を適用した場合には、「時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わされている」ものであることは、各種のハッシュ関数の機能から当然の事項であり、本願明細書段落【0056】に「混合関数706の一例はハッシュアルゴリズム(hashalgorithm)である」と記載され、時間値と初期化シードにハッシュアルゴリズムを適用することで自ずと実現されるものと変わるものではない。即ち、引用文献1発明において引用文献3の前記技術を採用するということは、前記の如く、システム時間値と、シードファイルから取り出した初期化シードファイルとを組み合わせ、その情報をバイト列としたものに、各種のハッシュ関数を適用したもの、あるいは、そのMD5値は、各種のハッシュ関数がハッシュアルゴリズムであり、MD5もまたハッシュアルゴリズムであることから、「前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わされ」たものであることを意味する。
よって、引用文献1発明において、「前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わされ」と成すことは前記引用文献3の技術を参酌することにより当業者が容易になし得ることである。

(4)〈相違点4〉について
引用文献4には、「ファイルを第1系統に書き込むと共に第2系統にも書き込み、第1系統に読み出し起動をかけて、第1系統にエラーコードが設定されているか第1系統の読み出し動作中にエラーが発生したときは、第2系統に読み出し起動をかけること」でファイル多重化によるファイル書き込み中の異常に対処する技術が示されている。
引用文献1発明は、「前記擬似ランダム出力をシードファイル中に記憶することは、前記擬似ランダム出力をセキュアなファイルシステム内のシードファイルに記憶することを含み、前記シードファイルの完全性が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記シードファイルの完全性が首尾よく検証されるなら、前記シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を予測不可能なソースを使用し第1のシードとして与え初期化することにより記憶する」との異常に対処する構成を有するものであるところ、ファイルを多重化することでファイル書き込み中の異常に対処することは、引用文献4の技術に示された様に本願出願前に普通に行われていたことである。
してみれば、引用文献1発明において、シードのセキュアファイルへの記憶と読み出しに、この引用文献4に記載の技術を適用し、「前記擬似ランダム出力を前記セキュアなファイルシステム中のシャドーシードファイル中に記憶する」ものとし、
プライマリシードファイルの完全性が損なわれている場合に「前記シャドーシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化する」ように構成すること、即ち、前記擬似ランダム出力をセキュアなファイルシステム内の「プライマリ」シードファイルに記憶すること、「および前記擬似ランダム出力を前記セキュアなファイルシステム内のシャドーシードファイルに記憶する」ことを含み、前記「プライマリ」シードファイルの完全性(integrity)が前記擬似乱数生成器の再始動時に損なわれていたか否かを決定することにより、前記「プライマリ」シードファイルの完全性が首尾よく検証されるなら、前記「プライマリ」シードファイルの初期化シードで前記擬似乱数生成器を初期化することにより記憶し、および前記「プライマリ」シードファイルの完全性検査が失敗した場合、前記擬似乱数生成器の始動内部状態を前記「シャドーシードファイルの初期化」シードで初期化することにより記憶すると成すことは、前記引用文献4の技術を参酌することにより当業者が容易になし得ることである。

そして、本願発明により奏する効果も、引用文献1発明及び引用文献2ないし4に記載された技術から当然予想される範囲内のものにすぎず、格別顕著なものとは認めることはできない。

よって、本願発明は引用文献1発明及び引用文献2ないし4に記載された技術に基いて当業者が容易に発明し得たものである。

6.むすび
上記のとおり、本願請求項1に係る発明は、その出願前に日本国内又は外国において頒布された刊行物に記載された発明又は電気通信回線を通じて公衆に利用可能となった発明に基いて、当業者が容易に発明をすることができたものであるから、特許法第29条第2項の規定により特許を受けることができないものであり、本願を拒絶すべきものとした原審の拒絶査定は妥当なものである。

よって、結論のとおり審決する。
 
審理終結日 2014-08-26 
結審通知日 2014-09-02 
審決日 2014-09-16 
出願番号 特願2010-506480(P2010-506480)
審決分類 P 1 8・ 121- Z (G09C)
最終処分 不成立  
前審関与審査官 中里 裕正  
特許庁審判長 石井 茂和
特許庁審判官 田中 秀人
山崎 達也
発明の名称 擬似乱数生成器のための初期シード管理  
代理人 砂川 克  
代理人 白根 俊郎  
代理人 野河 信久  
代理人 赤穂 隆雄  
代理人 福原 淑弘  
代理人 峰 隆司  
代理人 蔵田 昌俊  
代理人 堀内 美保子  
代理人 幸長 保次郎  
代理人 竹内 将訓  
代理人 河野 直樹  
代理人 井関 守三  
代理人 佐藤 立志  
代理人 中村 誠  
代理人 岡田 貴志  
代理人 井上 正  

プライバシーポリシー   セキュリティーポリシー   運営会社概要   サービスに関しての問い合わせ