(57)【要約】      （修正有）【課題】メモリディスクに簡単に利用できる高性能の暗号化復号化の必要が増大している。  本発明は小規模コンピュータシステム、携帯端末にて使用できる効率の良い疑似乱数を生成するものである。  疑似乱数発生装置に対して、ｎ個の暗号鍵を備え、この暗号鍵の組み合わせで疑似乱数の性能を最大限引き出せるようし、堅牢なメモリディスク用の暗号化復号化を行うものである。【解決手段】再現性のある疑似乱数の生成する乱数列はN-1の周期を備える事から、生成する乱数列をこの周期の中で使用するようにし、次の周期にまたがらない機構を開発した。  また、疑似乱数が生成する乱数列N-1の中で重複無く乱数列を取り出す機構を備え、乱数の無秩序性が最大になるようにして、乱数発生装置の性能を最大に引き出すようにしたものである。【選択図】図１
2009258141.tif 000002
【特許請求の範囲】
【請求項１】
疑似乱数の発生機構を備え、一つのシードで生成する乱数列（以後乱数表と呼称する）に対して使用できる上限の要素番号ｎを定め、ｎ個目以降の乱数表の要素
を使用しないように制限する機構を備える事を特徴とした乱数表発生装置。
【請求項２】
疑似乱数の発生機構を備え、暗号鍵をｎ個生成して格納もしくは保存する機構を備え、このｎ個の暗号鍵をシードとして乱数表を生成する事を特徴とする請求項
１の装置。および乱数表発生装置。
【請求項３】
時間情報を暗号鍵として格納する機能を備えた請求項２の装置。
【請求項４】
生成した乱数表に対して、時間情報を任意の演算をかけることを特徴とする請求項３の装置。
【請求項５】
請求項１、請求項２、請求項３、請求項４のいづれかの機構を内蔵し実現したデータの暗号化復号化装置であること。
加えて、暗号化および復号化するデータ毎に暗号化に使用する疑似乱数表を個別に生成し、一度使用した乱数は以後使わない機構を備え、乱数表を使いきった時
もしくは一定量使った時点でその乱数表を廃棄し異なるシードにより新しい乱数表を作る機構を備えることを特徴とする装置。
【請求項６】
暗号化および復号化を行うデータ単位で時間情報を格納する機能を備えた事を特徴とし、暗号化と復号化に使用する暗号鍵の一つにこの時間情報を使用できるよ
うにした事を特徴とする請求項５の装置。
【請求項７】
メルセンヌ素数を使用した疑似乱数発生機構もしくはメルセンヌ・ツイスタによる疑似乱数発生機構を備えた事を特徴とする請求項１，２，３，４，５，６の装
置。
【請求項８】
携帯端末およびコンピュータシステムに接続している機材の固有のユニーク情報を読む機構を備え、その機材のユニーク情報を暗号鍵の一つとして利用すること
を特徴とする請求項１，２，３，４，５，６，７の装置。
【請求項９】
携帯端末およびコンピュータシステム自体の固有のユニーク情報を読む機構を備え、そのユニーク情報を暗号鍵の一つとして利用することを特徴とする請求項
１，２，３，４，５，６，７の装置。
【請求項１０】
生体データを読み取る装置を備え、読み取った生体情報を暗号鍵とする特徴とする請求項１，２，３，４，５，６，７の装置。
【請求項１１】
手動ないし自動にて設定したデータを暗号鍵の一つとして設定する機能を備えることを特徴とする請求項１，２，３，４，５，６，７の装置。
【請求項１２】
請求項１記載の疑似乱数の発生機構を主とする疑似乱数機構とし、これにより生成したｎ個の乱数表の要素の組み合わせにより新しい乱数系列を生成する高速の
補助疑似乱数機構を備えた事を特徴とする請求項２の装置。
【請求項１３】
全ての請求項を備える事を特徴とするアプリケーションソフトウェアおよび基本制御ソフト（OperatingSystem）および基本制御ソフトのファイ
ル管理装置に組み込み作動するソフトウェア。
【請求項１４】
全ての請求項を備える事を特徴とするROM若しくはRAM及び外部記憶媒体への組み込み式制御基盤、制御ソフト及び制御データ保護を特徴とする装置。
【請求項１５】
読み取った生体データを複数の記憶装置に登録する機能を備え、認証で読み取った生体データが複数件のどれかに一致した場合、最初に登録した生体データを暗
号鍵とする特徴とする請求項１，２，３，４，５，６，７の装置。
【請求項１６】
読み取った生体データを複数に記憶装置へ登録する機能を備え、複数の生体データのただ一つを暗号鍵として指定する機構を備え、記憶装置に登録する時にただ
一つ認証で読み取った生体データが複数件のどれかに一致した場合、ただ一つの暗号鍵を生体データの暗号鍵とする特徴とする請求項１，２，３，４，５，６，
７の装置。
【請求項１７】
組込機器、家電品、携帯機器、小型情報端末、小型ゲーム端末機器およびコンピュータシステム自体の固有のユニーク情報としてその内蔵するディスク装置のシ
リアル番号を取得することを特徴とした請求項９の装置。
【請求項１８】
暗号化したデータを記憶装置に保存する処理を、基本制御ソフトのファイル管理システムによりファイルとして保存するものとし、時間情報の保存を、そのファ
イルの生成用もしくは書き込みの時間情報として保存することを特徴とした請求項４の装置。
【請求項１９】
暗号鍵として使用する時間情報が同一の時に時間情報に対する枝版として連続番号に代表されるユニークコードを格納する機能を備え、異なるシードを生成でき
るようにした事を特徴とした請求項３の装置。
【請求項２０】
時間情報を暗号鍵としてｎ個格納する機能を備えた請求項３の装置。
【請求項２１】
全ての請求項を備える事を特徴とする通信自体の情報を暗号化及び複合化させる機能を備えた装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、認証装置、被認証装置、認証システム、認証方法、被認証方法、プログラムまたはプログラムを記録したコンピュータ読み取り可能な記録媒体に関す
るものである。特に、少リソースな、組込機器、家電品、携帯機器、小型情報端末、小型ゲーム端末機器に用いられる認証及び被認証装置等に関するものであ
る。
【背景技術】
【０００２】
一般的な乱数生成の技術として、タイマーを備え電源起動からの時間情報および、これに前回の最終情報を加えるシードとし乱数生成を行い、外部からの解析に
も耐えるための手段が開示されている（特許文献１参照）。
【０００３】
また、直近の乱数のやり取りを覚えておき、使った乱数値を使わないようにすることで認証の安全性を高めようとする方法が開示されている（特許文献２参
照）。
【０００４】
また、少ないリソースで乱数生成を実現しようとするもので、自装置内で乱数生成する手段が開示されている（特許文献３参照）。
【０００５】
メルセンヌ素数を利用したメルセンヌ・ツイスタ(Mersenne
twister)は1997年（論文発表は1998年1月）に松本眞と西村拓士によって開発された擬似乱数生成器である。周期が2の19937乗-1つま
り６２３ワード（19937ビット、2492バイト）の表現力で、623次元超立方体の中に 均等に分布することが証明されている。
【０００６】
メルセンヌ・ツイスタは内部構造として３２ビット版は、１ワード増やし、６２４ワード（19968ビット、2496バイト）の内部変数を持つ。
【０００７】
この内部変数の組み合わせで６２４ワード（19968ビット、2496バイト）の乱数表を生成する。
【０００８】
この乱数表は、内部の６２４ワード（19968ビット、 2496バイト）の組み合わせだけ異なる乱数表が存在する。
【０００９】
以上より、均等に分布することを証明された最低でも６２４ワード（19968ビット、
2496バイト）の乱数表が２の19937乗-1の個数が存在すると説明できる（非特許文献１参照）。
【００１０】
外務省により公開している暗号の紹介のページである。有限乱数式、無限乱数式暗号を判りやすく紹介している。ここでは無限乱数式暗号は論理的に解読できな
いという事実を述べている（非特許文献２参照）。
【００１１】
【特許文献１】特開２０００−２４２４７０号公報
【特許文献２】特開２００１−１７７５１９号公報
【特許文献３】特開平１０−２４７１４０号公報
【非特許文献１】M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-dimensionallyequidistributed uniform pseudorandom number generator", ACM Trans. onModeling and Computer Simulation Vol. 8, No. 1, January pp.3-30(1998)http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
【非特許文献２】外務省大臣官房情報通信課  非常勤講師  奥村定夫「外交と暗号」http://www.mofa.go.jp/mofaj/annai/shocho/e_seifu/toukou2004.html
【発明の開示】
【発明が解決しようとする課題】
【００１２】
当発明はデータに対してｎ個の暗号鍵を設定し、特定個人、特定のコンピュータシステム、特定の機材の接続の全条件を満たした時にデータを読めるようにする
ものである。
条件を満たした時だけデータを正しく復号化できるようにして、データ盗難・データ改ざん・ウイルスやスパイウェア・ピアツーピアによるアプリケーションか
らなる被害を最小にしようというものである。
【課題を解決するための手段】
【００１３】
データの暗号化においては、有限乱数式と無限乱数式が存在する。
有限乱数式とは同じ乱数表を繰り返し暗号化に使用する方式である。効率が良い反面一度乱数表を解読されると後は簡単に解読ができる。
無限乱数式は一度使用した乱数表は２度と使わないという方式である。
無限乱数式は同じ乱数を2度使わず1度限りの使用においては絶対に解読できないことが情報理論により証明されている暗号である。
本発明は、疑似乱数の発生装置をきめ細かく制御し重複する乱数の発生を防ぎ、毎回異なる乱数を生成するようにして無限乱数式の強度を取り入れたものであ
る。
【発明を実施するための最良の形態】
【００１４】
本発明の実施例について図面を用いて説明する。
【実施例１】
【００１５】
これは暗号化と復号を行うプログラムおよび装置である。
図１８に本発明の第1実施例のコンピュータシステムの電子機器としての全体構成図を示す。
【００１６】
情報処理装置S1811は計算機の全体制御、および各種プログラムを実行する中央処理装置（以下ＣＰＵ）、各種プログラムやデータがロードされるメモリ装
置S1813、ＲＯＭＢＩＯＳのS1812、アダプタS1815、S1816で構成されていて、それらはシステムバスS1814で接続される。
アダプタS1815を介してHDDのS1830のホストインタフェースS1820に接続する。アダプタS1816を介して装着可能なストレージデバイスを
接続するリーダライタS1819が接続する。
【００１７】
この実施例ではストレージデバイスとして、USB装置S1840を用いる。装置S1840はストレージデバイス機能を備える。なお、本実施例では記憶装置
としてメモリディスク装置を例に説明するが、本実施例の効果を奏する範囲内であれば任意の装置でよい。
【００１８】
ＲＯＭＢＩＯＳのS1812には、HDDのS1830あるいはストレージデバイスなどのシステムブート可能デバイスから一つのデバイスを選択する手段、当
該デバイスからシステムブートローダをメモリ装置S1813に読出す手段、読み出したシステムブートローダに分岐する手段（いわゆるシステムブート機能）
を備える。
HDDのS1830あるいは任意のストレージデバイスから読み出されたOSプログラムは、メモリ装置S1813に格納され、ＣＰＵにより実行される。
【００１９】
図1に本実施例の乱数の管理方式を説明する。本実施例では疑似乱数発生装置としてメルセンヌ・ツイスタを使用する。疑似乱数はその欠点として周期を持つこ
とである。一定周期で同じ乱数を生成する。図１のS１１０はそれをリング状にして現したものである。
【００２０】
メルセンヌ・ツイスタは、2の19937乗-1。十進法の場合は約10の6000乗の周期を持つ。つまり、約10の6000乗の数の乱数表を繰り返し生成
する。
【００２１】
S111にそれを直線に表したものである。2の19937乗-1を要素Nとする巨大な乱数表が存在する。
S112はこの要素数ｎの重なり合わない事を特徴とする小テーブルである。本実施例の暗号化はこの小テーブルを使用して行う。
【００２２】
小テーブルは一度使ったなら
ば２度と使わない。これにより疑似乱数の周期の中で無限乱数式の暗号化と復号化を行う。
また、S112は隙間無く連続して並んでいることが効率上このましいが、空隙があっても良い。
【００２３】
メルセンヌ・ツイスタはその内部仕様として内部で2496バイト（624ワード）のテーブルを備え、一つのシードを与えた時発生させる乱数が2496バイ
ト以下とした時S112として使用できる。この場合、一つのシードにおいて生成する乱数を2496バイト以下とし、同じシードを二度と使わないという条件
において重複の起きない乱数を生成し管理できる。
【００２４】
下記簡素計算式を1テーブルと見なし上記理論を確立するものとする。
【００２５】
(a ≒ s + a' = a'')  × n = ∞
a = 10の6000乗
a'= 2492バイト
a'' = 623ワード数
s = 1つのシード
n = テーブル数
∞ = 無限数値
【００２６】
図２に本実施例の暗号化の方法を説明する。
【００２７】
S210は暗号化したい平文である。
【００２８】
S２１１は乱数表である。乱数表は一つ一つ異なるシードで生成したS112の集合体である。S210の各要素と
S211の各要素を１対１、つまりバイト単位で排他的論理和をとった結果がS212である。
【００２９】
このようにS210とS211の間で演算を行うことにより暗号化ができる。演算の種類としては排他的論理和の他に加算ないし減算をしても良いが処理が簡単
と言う理由で排他的論理和を本実施例では採用する。
【００３０】
排他的論理和を使用した場合、復号も同一の排他的論理和でよくコンピュータ処理に向いているからである。従い、S210は暗号化されたデータを、S２１１
は暗号化した時に使用した乱数表を指定したとき、S212に平文を生成することが出来る。
【００３１】
図３に本実施例の物理的全体像を示す。
S310はコンピュータのUSBコネクタである。S311は指紋認証装置を内蔵したUSBメモリ装置である。
本実施例は指紋認証装置を内蔵したUSBメモリ装置により試作を行った。
【００３２】
本発明はこの指紋認証装置専用ではない。実施例の一つであることを明示する。
【００３３】
図４に本実施例で採用したUSBメモリ装置の使い方を説明する。基本制御ソフトには米マイクロソフト社のものを使用している。
【００３４】
本USB装置を接続するとコンピュータシステム上にS410のごとく出現する。CD-ROM装置S411とリムーバブルディスクS412が出現する。
【００３５】
次にS416の指紋認証を促す画面が出現する。認証を選択するとS417の指紋認証画面が出現する。ここでUSBメモリ装置内蔵のセンサーに指をスライド
させ、認証が通るとS410はS413に切り替わる。
S414とS415は指紋認証した時に始めて出現する保護されたディスク領域である。
【００３６】
また、この一連の処理を行うためには同USBメモリ装置付属のツールで指紋を登録しておく必要がある。
【００３７】
なお、この指紋認証、同USBメモリ装置付属の使い方をここで述べるのは本発明の理解を促進するためであり、本発明とは直接関係ないことを明示する。
【００３８】
図５にｎ個の暗号鍵の生成を図にて示す。
本実施例では、静的に定まる暗号鍵を持つ。これらは、本装置が作動する上で必須の情報である。
【００３９】
S510は、本実施例が暗号化生成用に確保したメモリである。本実施例では６２４ワード（2496バイト）のサイズを持つ。このサイズは本実施例が採用し
ているメルセンヌ・ツイスタ公開プログラム（2002年版(mt19937ar.c)）に設定できるシードの最大桁数にあわしている。
【００４０】
６２４ワードのサイ
ズを確保しているが全てを使う必要はない。誤動作を防ぐためこのメモリ領域を確保した時に一度全てゼロを格納するものとする。その上で内部の各要素を格納
するものとする。
【００４１】
またS510の静的に定まる各要素は全て使用するか否かは任意とする。使用する項目には有値を格納する。使わない項目はゼロであるものとする。静的に定ま
る各要素とは、後述する時間情報および連続番号以外の要素のことである。
【００４２】
S511は、本発明が作動するコンピュータシステムに記憶する値である。任意の文字列である。本実施例では１２８バイト以内のアスキー文字列である。この
文字列はヌルコードで終端するものとする。
【００４３】
入力項目S515はS511を設定するためのプログラム画面である。このようにして、初期値として設定しコン
ピュータシステムの不揮発性の記憶装置に保存する。
【００４４】
S512は、本実施例が動作しているコンピュータシステムもしくは端末のユニークコードを読み取り格納する本実施例では、４バイトの領域とする。
【００４５】
米マイク
ロソフト社の基本制御ソフトはディスク装置を使用するにあたり初期化する毎にボリュームシリアル番号と呼称する４バイトのユニークコードを定義する。
【００４６】
本実
施例ではこの４バイトの値をS512に書き込むものとする。S516にこの４バイトのユニークコードを示す。S516はディスクの一覧情報を採取したもの
である、ここにS517で表す１６進コードがこの４バイトコードである。
【００４７】
また、本実施例において、コンピュータシステムのユニークコードのチェックをしたくない場合は常にここにゼロを格納しておくものとする。この場合、どのコ
ンピュータシステムに接続してもゼロとなり暗号鍵のチェックが緩くなる。
【００４８】
S513にはS311の製造会社番号、製品番号、シリアル番号を登録するものとする。USB装置は本来の仕様では製造会社番号、製品番号、シリアル番号を
備える。この３つのコードの組み合わせを格納するものとする。
【００４９】
通常はこのコードは合計で２４バイトである。余裕を持ち64バイトの大きさをS513に割り
振る。
【００５０】
S513に登録するUSBの製造会社番号、製品番号は事前に定義しておくものとする。これは異なる会社のUSBを接続した時にその製造会社番号、製品番号
が格納されないようにするための安全装置である。
【００５１】
ここでは、USBメモリ装置を接続した時に限り正しくS513に格納するものとする。
【００５２】
S514には４バイ
トの生体認証キーを登録する。これは、生体認証の結果出現するS415のボリュームシリアル番号を読み取るものとする。
【００５３】
本来生体認証キーを直接読み取るの
が好ましいが、指紋認証の場合は管理者を含め複数の人間が指紋を登録する場合が考えられる。この場合、指紋登録を行った人物毎に異なる生体認証データが出
現する。これより生体認証の結果出現するコードを生体認証コードとして登録する。
【００５４】
図６にｎ個の動的暗号鍵の生成を示す。
【００５５】
S610はS510に内包される項目である。
【００５６】
S611は８バイトのメモリ領域である。ここにはコンピュータシステム
の時間情報を格納する。基本制御ソフトによるが通常は４バイトないし８バイトで示すシステム秒数を備え、現在の年月日時分秒を一意に決定できる。
【００５７】
良くある
システム秒数は１秒単位で西暦1970年1月1日の00:00:00から現在に至るまでの秒数になっている。４バイトの表現力で約１３０年の幅を確保して
いるので2100年までの日時を表現できるので都合が良い。
【００５８】
S611は暗号化を行う時にはその時の現在時間を格納する。この時間情報は、本変換プログラム
が変換したデータを記憶装置に保存する時に、必ず暗号鍵に使用した時間情報を同時に保存するものとする。
【００５９】
この保存作業は本変換プログラムを呼び出す上位の
役割であり、本プログラムに属さないことを明記する。また、この時間情報がないと暗号化したデータを復号できない。ゆえに暗号化と復号化をセットで行うう
えで上位のプログラムないし装置は必ず時間情報を保存する必要があることを明記する。
本実施例ではS611は８バイトの領域を確保するものとする。
【００６０】
S611は復号化を行う時には、暗号化が行われた時の時間を格納する。時間情報はかならず上位プログラムにより暗号化したデータ一つずつに存在している。
その時間情報をここに登録する。
【００６１】
S612にはゼロから始る連続番号を格納する。いま、S613という暗号化もしくは復号化したいデータを与えた時、S614のようにして得られる数字が
S612である。本実施例ではRND_SIZEバイト単位で連続番号を振る。S613の最初のRND_SIZEの時ゼロ、次のRND_SIZEの時１、以
後一つずつ数字が上がっていく。S612は本実施例では４バイトの領域を持つものとする。
※RND_SIZEは2048バイトを示すものとする。
【００６２】
RND_SIZEは、任意の大きさで良いのであるが、使用する疑似乱数が保障する重複の無い乱数表の幅に納まる事が好ましい。本実施例ではメルセンヌ・ツ
イスタを使用しており、これの安全な幅が2496バイトなので16進法で切りの良い2048バイトとしている。この幅は使用する疑似乱数発生装置の特性に
合わせて最良の値を選ぶべきものである。
【００６３】
S620は空き領域である。全体の領域であるS510が６２４ワード（２４９６バイト）確保している。静的決定暗号鍵およびS611,S612を割り振っ
た残りの領域である。
【００６４】
本実施例ではこの領域にS611とS６１２を繰り返し保存する。S620はゼロでクリアしていても本発明は問題なく動作する。本実施
例で、このように値を設定するのは、S510の取る値をできるだけ、かく乱し、より品質の良い乱数の生成をための工夫である。
【００６５】
図７に実際に行う暗号化復号化の考え方を示す。S710は暗号化ないし復号化を行いたいデータである。Nバイトの長さを持つものとする。S711は
S510をシードとして生成したRND_SIZEの大きさを持つ乱数表である。先頭からの位置によりS612に格納する連続番号が変化しているので常に異
なる乱数表を生成している。
【００６６】
S712は排他的論理和を取った結果である。S710とS711の排他的論理和により生成する。S710が平文の時は暗号化した結果がS712になる。
S710が暗号文の時は復号化し解読した結果がS712となる。
【００６７】
図８に本実施例の入出力を示す。
本発明による暗号復号化装置を実現したプログラムの入出力を表したものである。
本実施例では暗号化と復号化は同一の処理を行うので以後、単に変換と記載する。
ここでアドレス型メモリ領域を定義しておく。アドレス型メモリ領域コンピュータシステムおよび携帯端末において実装するメモリ領域を参照する位置を格納す
る物であり、そのコンピュータシステムにより変化する。
【００６８】
本実施例は米マイクロソフト社の３２ビットの基本制御ソフトで試作したので４バイトである。
【００６９】
S810はアドレス型メモリ領域である。その内容としてS510の存在するメモリアドレスを格納する。
【００７０】
S811はアドレス型メモリ領域である。その内容は、暗号化もしくは復号化したいデータを格納したS814の存在するメモリアドレスを格納する。
【００７１】
S814は暗号化もしくは復号化するデータを格納したテーブルである。
本プログラムは暗号復号化を行う部品である。実際にはプログラムを利用する上位のプログラムが別途存在する。上位プログラムは変換を行うときS817によ
り表すデータの全体像を持つ。
【００７２】
S814はS817の任意の写像であるものとする。上位プログラムはS817の変換したい場所をメモリ上のテーブルの形で確保格納しこのメモリアドレスを
S811に格納するものとする。
【００７３】
S815はS814に格納したデータがS817のどこから始るデータかを表す位置情報である。先頭であればゼロである。１００バイト目であれば１００であ
る。
【００７４】
S816はS814に格納したデータが何バイトであるかを表す情報である。
【００７５】
S812は8バイトのメモリ領域である。内容としてS815を格納する。３２ビットの基本制御ソフトにおいて通常は４バイトで十分であるが、本プログラム
は余裕を持ち８バイトとする。S817単純にファイルもしくはメモリ上の小さなデータであれば４バイトで十分である。しかし、ハードディスクを丸ごと変換
する場合がある。この場合変換するデータ全体は数十Gバイトになる。これより８バイトとしている。
【００７６】
S813は4バイトのメモリ領域である。内容としてS816を格納する。
【００７７】
図９に本実施例の制御の流れを示す。
【００７８】
本出願の流れ図の特殊記号はコンピュータ言語であるC言語に準拠する。
％・・・剰余計算を示す記号である。
＾  ・・・排他的論理輪を示す記号である。
++ ・・・インクリメント、値を一つ増加を意味する記号である。
[n ] ・・・配列を意味する記号である。ｎは配列の添字である。
* ・・・アドレス型変数の前に記す場合は、変数の示すアドレス上の値を示す。
【００７９】
図８により入出力を定めたプログラムの実際の流れを示す。
【００８０】
S910は初期化処理を行なっている。ここでは、４バイトのサイズを持つ変数no、４バイトのサイズを持つ変数ipおよびRND_SIZEの大きさを持つ
配列変数rnd_tblを確保している。no,ip,rnd_tblの内容は初期化する必要はない。
【００８１】
S911では、noにS812が格納する値をRNT_TBLで割り算した結果を格納している。これにより、変換に必要な乱数テーブルの連続番号を算出して
いる。
【００８２】
S912はS812の剰余を求め、ipに代入している。
【００８３】
S913では、S612にnoを代入している。つまり、ここでS612に連続番号を格納している。S612は、S810が格納しているメモリアドレスから
その位置を算出できる。
【００８４】
S1010では、メルセンヌ・ツイスタにより乱数表を発生させている。詳細は図１０にて説明する。
【００８５】
S915はループである。初期値として変数i=ゼロとし、一回りするごとにiを１加算する。そして、iがRND_SIZE回ループする。つまりi=
0...i=RND_SIZE-1の値の間でループを繰り返す。
【００８６】
S916は制限子である。ipは、現在使用している乱数表rnd_tblの参照位置を示す。ipがRND_SIZE以下の値を取る時、正しく乱数表を参照
している。オーバーした時は乱数表を使い切ったときである。
【００８７】
S917は、実際の変換処理を行っている。S811の示すメモリアドレスの上からi番目の要素とrnt_tblの上からip番目の要素の排他的論理和をと
り、代入している。代入先はS811の示すメモリアドレスの上からi番目の要素である。
【００８８】
S918ではipを１つ増加している。これにより、利用する乱数の要素を次にずらしている。
【００８９】
S919は連続番号を１つ増加している。この処理はいままで使っていた乱数を使い切った時の処理である。次の乱数表を生成の準備を行っている。
【００９０】
S920はipにゼロを代入している。新しい乱数を生成するにあたり使用開始位置を示すipをクリアしている。
【００９１】
S921では、S612にnoを代入している。つまり、ここでS612に連続番号を格納している。
【００９２】
図１０に乱数生成プログラムの入出力を示す。
本発明が内蔵した乱数生成プログラムの入出力を表したものである。
【００９３】
S1010はアドレス型メモリ領域である。その内容としてS510の存在するメモリアドレスを格納する。
【００９４】
S1011はアドレス型メモリ領域である。その内容は、乱数表の存在するメモリアドレスを格納する。この乱数表は図９に記載のrnt_tblのことであ
る。S910で確保したRND_SIZEの大きさを持つメモリ領域である。
【００９５】
図１１に乱数生成プログラムの処理を示す。
【００９６】
S1110は初期化処理を行う。ここでは、内部で使用する変数を確保している。
noは４バイトサイズの変数である。
ptrはアドレス型変数であり、４バイト単位のメモリを参照する目的で確保する。
iは４バイトサイズの変数である。
【００９７】
また、メルセンヌ・ツイスタが使用する内部作業メモリもここで初期化する。これは、内部作業メモリの初期値が不定のためにメルセンヌ・ツイスタの生成する
乱数が不定になることを避けるためである。
【００９８】
S1111では乱数のシードを与えている。メルセンヌ・ツイスタが公開している標準関数init_by_array()を実行している。この関数には、
S510をシード発生の鍵として与えている。同関数はシード発生の鍵となるデータを格納しているメモリ領域のアドレスとその長さを指定して呼び出すもので
ある。ここではS510の開始アドレスとその領域の長さを与えている。
【００９９】
S1112では変数noにRND_SIZEを４で割った値を代入している。メルセンヌ・ツイスタは１ワードつまり４バイト単位で乱数を発生さ
せる。従いこ
こで、RND_SIZEを充填するのに必要な乱数の発生回数を算出している。
【０１００】
S1113は、変数ptrにS1011の値を代入している。
【０１０１】
S1114はno回ループ処理をしている。
【０１０２】
S1115は、乱数を発生させている。メルセンヌ・ツイスタの公開関数genrand_int32()を実行している。この関数の帰り値は４バイトの乱数
である。この４バイトの乱数をptrの示すアドレス領域に代入している。一度に４バイトの乱数を格納している。
【０１０３】
S1116は任意のブラックボックス処理である。この処理はなくても良い。
メルセンヌ・ツイスタが生成する乱数をそのまま採用すると、アルゴリズムが公開しているので暗号用乱数としては好ましくない。これを是正するために任意の
変形をかけるのが好ましい。その変形処理をS1116で行っている。
【０１０４】
S1116がなくても問題なく動作する。しかし入れることにより信頼性を上げることができる。
【０１０５】
S1117は変数ｐｔｒを増加している。ここでは、ptrの示すメモリアドレスの値を４バイト分加算している。変数ptrは４バイトを参照するアドレス型
変数である。ゆえに、指示する値を一つ増やすと言うことは次の４バイトの領域を示すこととなり、実際にはメモリアドレスが４つ程増加する。
表記上１加算であるが、バイト換算では４加算であることをここに付記する。
【０１０６】
図１２に固有機器のユニークコードを取得するプログラムを記述する。
本実施例は暗号化復号化を行う装置であり、固有機器のユニークコードは上位プログラムないし上位装置にて取得を行い、S513に格納するものである。ここ
では、試作にあたり実装した上位プログラムのユニークコードを取得するプログラムを記述する。ここにおいてユニークコードを取得の取得が可能であることを
証明し、その機構を表す。
固有機器として指紋認証機能内蔵のUSBメモリ装置の認識とその固有コードの識別を行っている。
【０１０７】
S1220はUSB機器の持つ、製造会社コード、製品番号、シリアル番号を表にして表したものである。１６進４バイトの製造会社を識別するコードを持つ。
【０１０８】
同様に１６進４バイトのの製品番号を持つ。そして、16バイトのシリアル番号を持つ。本試作ではシリアル番号の桁数は余裕を持たせ５４バイ
ト、合計で６４
バイトとしている。
【０１０９】
S1221は、この会社番号、製造番号、製品番号を米マイクロソフト社の３２ビットの基本共通ソフトのレジストリに登録している文字列を参考に表してい
る。
【０１１０】
基本共通ソフトにより表現方法は異なるが、このように登録して管理している。各コードをアスキー文字列に変換して一つの文字列に連結して管理してい
る。
基本共通ソフトはこのようにして現在接続しているUSB装置のユニークコードを取得できるようにしている。
※レジストリは基本共通ソフトが管理用に内蔵しているデータベースである。
【０１１１】
S1210は初期化を行っている。当プログラムが終了し、呼び出しもとの上位プログラムに渡す値をゼロクリアするものとする。
【０１１２】
S1211は永久ループである。
【０１１３】
S1212は基本共通ソフトから現在接続しているUSB機器のユニークコードを取得する。
本試作では初回は最初の接続機器を取得。ループして２回目には２つめの接続機器を取得。これを繰り返し接続機器の取得を全て行うと取得失敗の動作をする。
【０１１４】
S1313の接続機器の有無を判定する。なしの場合は、プログラムを終了する。この時、S1210で設定しているゼロクリアしたメモリ領域を上位プログラ
ムに返り値として格納している。
【０１１５】
S1214では、取得したS1221のごとき値の会社番号を判定する。
【０１１６】
事前に本プログラムに書き込んでいる製造会社コードとの一致を判定する。プログラム
に組み込む製造会社コードは本プログラムを製造販売する時に純正指定もしくは対応する会社のコードを埋め込むものとする。
【０１１７】
S1215では、取得したS1221のごとき値の製品番号を判定する。事前に本プログラムに書き込んでいる製品番号コードとの一致を判定する。プログラム
に組み込む製品番号コードは本プログラムを製造販売する時に純正指定もしくは対応する会社のコードを埋め込むものとする。
【０１１８】
S１２１６において、製造会社コード、製品番号コード、シリアル番号を帰り値に格納する。
【０１１９】
本プログラムの機構を利用することによりS５１３に接続機器のユニークコードを登録し、本実施例の接続機器を利用した暗号鍵の使用を行う。
【実施例２】
【０１２０】
これは乱数表を発生する装置およびプログラムである。
実施例１における図１０、図１１で説明しているものである。本プログラムは請求項１、請求項２、請求項３をみたした独立した機構と言えるので、ここに実施
例２として上げる。
【０１２１】
詳細はすでに実施例１の中で説明しているので記載しない。
【実施例３】
【０１２２】
これは乱数表を発生する装置およびプログラムである。
実施例１の乱数の生成方法を請求項１２にして実現したものである。
実施例１に比し、高速である特徴を持つ。
【０１２３】
図１３に本実施例の変換の簡単な概要を説明する。
S1310,S1311,S1312はRND_SIZEの乱数表である。この乱数表は大きさはそれぞれ任意で良いが管理しやすいという理由でここでは
RND_SIZEとしている。
【０１２４】
また３つ用意しているのも本来はｎ個となり任意で良いがRND_SIZEの大きさから現実的な数としと３を割り出している。
【０１２５】
今、S1310,S1311,S1312にはそれぞれ異なる乱数表を格納しているものとする。
【０１２６】
S1313は変換を行いたい任意のデータである。
【０１２７】
S1319は変換を行った結果のデータである。
【０１２８】
S1314はS1310,S1311,S1312の排他的論理和を取り生成したRND_SIZEの大きさを持つ乱数表である。
S1314の最初の１バイトは、S1310,S1311,S1312それぞれの最初の１バイトと排他的論理和の結果である。S1314の各要素は、
S1310,S1311,S1312の同じ位置の要素と排他的論理和の結果である。
【０１２９】
S1315は、S1314と同一の工程で生成した乱数表である。ただし、生成する前に、S1314のリングを１バイト回転させた上で生成したものである。
この回転は時計、反時計どちらでも良い。ここでは反時計回りに一バイトしたものとする。
【０１３０】
S1316、S1317は同様にしてS1311を１バイト回転させてから生成している。このようにして乱数を生成していくとRND_SIZE
回繰り返すとS1311は循環して同じ乱数を生成するようになる。この時、S1312を１バイト反時計回りで回転させる。
【０１３１】
このようにして、n個の乱数表の組み合わせで長周期の乱数を生成できる。ここでは、RND_SIZEが３個あるので、2048×2048×2048=
8,589,934,592つまり約８Gバイトで循環して元に戻る、つまり周期を持つ乱数表を作ることが出来る。
一つの変換したいデータに対して個別に生成するのであれば８Gバイトは十分な大きさである。
【０１３２】
S1310,S1311,S1312は、S1319一つごとにそれぞれ乱数表を生成できると最も好ましい。しかし、S1311,S1312を事前に生成し
ておき、S1310だけS1319一つごとに生成しても品質の良い乱数を生成できる。
【０１３３】
本実施例はこの方式を採用した暗号化復号化を行うプログラムである。暗号化と復号化を行う装置を提供するものである。
図１４に本実施例の入出力を示す。
本発明による暗号復号化装置を実現したプログラムの入出力を表したものである。
本実施例では暗号化と復号化は同一の処理を行うので以後、単に変換と記載する。
【０１３４】
ここでアドレス型メモリ領域を定義しておく。アドレス型メモリ領域コンピュータシステムおよび携帯端末において実装するメモリ領域を参照する位置を格納す
る物であり、そのコンピュータシステムにより変化する。本実施例は米マイクロソフト社の３２ビットの基本制御ソフトで試作したので４バイトである。
【０１３５】
S1410はアドレス型メモリ領域である。その内容は、S1416のメモリ上のアドレスを格納する。
【０１３６】
S1411はアドレス型メモリ領域である。その内容は、S1417のメモリ上のアドレスを格納する。
【０１３７】
S1412はアドレス型メモリ領域である。その内容は、S1418のメモリ上のアドレスを格納する。
【０１３８】
S1413はアドレス型メモリ領域である。その内容は、暗号化もしくは復号化したいデータを格納したS814の存在するメモリアドレスを格納する。
【０１３９】
S1414は8バイトのメモリ領域である。内容としてS815を格納する。３２ビットの基本制御ソフトにおいて通常は４バイトで十分であるが、本プログラ
ムは余裕を持ち８バイトとする。S817単純にファイルもしくはメモリ上の小さなデータであれば４バイトで十分である。しかし、ハードディスクを丸ごと変
換する場合がある。この場合変換するデータ全体は数十Gバイトになる。これより８バイトとしている。
【０１４０】
S1415は4バイトのメモリ領域である。内容としてS816を格納する。
【０１４１】
S1416はRND_TBLのサイズを持つ乱数表である。図１０、図１１のプログラムにより格納データを生成するものとする。
【０１４２】
S1417はRND_TBLのサイズを持つ乱数表である。図１０、図１１のプログラムにより格納データを生成するものとする。
【０１４３】
S1418はRND_TBLのサイズを持つ乱数表である。図１０、図１１のプログラムにより格納データを生成するものとする。
【０１４４】
図１５に本実施例の制御の流れを示す。
図１４により入出力を定めたプログラムの実際の流れを示す。
【０１４５】
S1510は初期化処理を行う。ここでは、４バイト型の変数i,ip1,ip2,ip3,lwkを確保している。
ip1はS1416が示す乱数表を管理する。
ip2はS1417が示す乱数表を管理する。
ip3はS1418が示す乱数表を管理する。
【０１４６】
S1511はS1416の示す乱数表の最初に使用する位置を算出しip1に代入している。S1511の乱数はRND_SIZEの大きさのバッファを巡回利
用する。従い、RND_SIZEで剰余を取った結果が最初の使用開始点となる。
【０１４７】
S1512はS1417の示す乱数表の最初に使用する位置を算出しip2に代入している。S1512はS1416を一回循環することで１バイト循環する。
従い、S1314をRND_SIZEで割り算出している。
【０１４８】
S1513はS1418の示す乱数表の最初に使用する位置を算出しip3に代入している。S1513はS1517が一回循環することで１バイト循環する。
従い、ip2をRND_SIZEで割り算出している。
【０１４９】
S1514で、ip2をRND_SIZEで剰余を取り、ip2に代入している。S1512でのip2への代入計算は、S1417が１回転以上循環した時の
処置をしていない。ここで、剰余を取り循環した結果を算出している。
【０１５０】
S1515で、ip3をRND_SIZEで剰余を取り、ip3に代入している。S1513でのip3への代入計算は、S1418が１回転以上循環した時の
処置をしていない。ここで、剰余を取り循環した結果を算出している。S1418が１回転する自体とは、同じ乱数を発生して再利用することを意味する。従い
本来発生してはいけない事態であるが安全装置として存在している。この安全装置が意味をなす時とは８Gバイトを越す変換したいデータが発生した時である。
通常はまず考えられない。
【０１５１】
S1516では変数lwkにS１４１４つまり変換データの位置情報を格納している。
【０１５２】
S1517はループ処理をする。S1415に格納されている値だけループする。変数iをループカウンタとし、i=0に始まりループごとにiを一つずつ増加
させながらループする。
【０１５３】
S1518とS151９で、３つの乱数表より変換情報を生成している。
具体的にはS1518で、S1416の上でip1の示す値を要素番号とする値と、S1417の上でip2の示す値を要素番号とする値との排他的論理輪を
wkに格納する。
【０１５４】
S1519では、wkとS1318の上でip3の示す値を要素番号とする値との排他的論理輪を取りwkに格納している。
【０１５５】
S1520において、変換したいデータを格納しているS1413の先頭からi番目のデータにwkの排他的論理和を代入している。これにより、S1413
の変換を１バイト行う。
【０１５６】
S1521では変数ip1の格納値を一つ増加している。乱数表S1416の次に使用する値を設定している。
【０１５７】
S1522では変数ip2の格納値を一つ増加している。乱数表S1417の次に使用する値を設定している。
【０１５８】
S1522Aでは変数ip3の格納値を一つ増加している。乱数表S1418の次に使用する値を設定している。
【０１５９】
S1523では変数lwkの格納値を一つ増加している。lwkは変換したいデータの全体像の中の最初からの位置を示すものである。
【０１６０】
S1524では、ip1とRND_SIZEと大小比較を行う。
【０１６１】
S1525では、ip1の格納値がRND_SIZEと同じか大きい時に行う処理である。この判定は乱数表S1416の要素数を超えた時の処理である。
ip1にゼロを設定し、乱数表S1416の使用を先頭に戻している。
【０１６２】
S1526では、変数ip2の格納値を一つ増加している。乱数表S1417の次に使用する値を設定している。乱数表S1416が一回転したので、
S1417を１バイトずらす処置をここでしている。
【０１６３】
S1527では、lwkをRND_SIZE2にて剰余求める。結果がゼロの時は、lwkの値はRND_SIZE2の整数倍の時である。この時は、乱数表
S1416,S1417の全組み合わせがなされた時である。有値の時は、乱数表S1416,S1417の全組み合わせが一巡していないときである。
【０１６４】
S1528では、乱数表S1416,S1417の組み合わせが全組み合わせがなされたとみなし、乱数表S1418を１バイトずらす処理をしている。変数
ip2の格納値を一つ増加している。
【０１６５】
S1529では、ip2とRND_SIZEと大小比較を行う。
【０１６６】
S1530では、変数ip2にゼロを代入している。乱数表S1417の使用領域が最後に至ったので初期化して先頭に戻す処理をしている。
【０１６７】
S1531では、ip3とRND_SIZEと大小比較を行う。
【０１６８】
S1532では、変数ip3にゼロを代入している。乱数表S1418の使用領域が最後に至ったので初期化して先頭に戻す処理をしている。
【実施例４】
【０１６９】
これは暗号化復号化を行う簡単なアプリケーションプログラムである。
暗号化には実施例１のプログラムを暗号化装置、復号化装置として使用している。
【０１７０】
図１６に本実施例の処理の流れを記述する。
本実施例は基本制御ソフトより実行し、変換をかけたいファイルを指定する。変換したいファイルを読み変換をし、変換結果をファイルとして記憶装置に保存す
る。
【０１７１】
本実施例の示すアプリケーションに一回かけると暗号化を行う。生成結果を再度本アプリケーションにかけると復号を行うものである。
【０１７２】
S1610は初期化を行う。４バイト変数のipとnoとiを確保している。同様にS510として使用するメモリ領域を確保している。同様にファイルの読み
書きの作業用メモリ領域としてdat_tblを確保している。dat_tblはRND_SIZEの大きさである。
【０１７３】
S1611は変数ipにゼロを代入している。
【０１７４】
S1612では、S512の記憶領域をゼロクリアしている。S512の領域がメモリの初期値の不定で変換結果が不定になることをここ回避している。
【０１７５】
S1613で変換元のファイル名を入力している。これは、ディスク上のファイル名パスを対話形式で当アプリケーションの実行者に質問するものである。ここ
で指定したファイルを変換の対象とする。
【０１７６】
S1614で、変換元のファイル名をバイナリのリードモードでオープン処理する。
【０１７７】
S1615で、変換先のファイル名をバイナリのライトモードでオープン処理する。オープンする時のファイル名は本実施例では、S1613で取得したファイ
ル名の最後に".enc"という文字列を追加したもので、S1613と同じパスに保存するものとする。
【０１７８】
S1617では、端末情報を取得している。具体的には本実施例が動くコンピュータシステムの固有情報を取得するものとする。ここでは、S512に
S517を保存するものとする。
【０１７９】
S1618ではコンピュータシステムに接続している機器情報を取得している。図１２のプログラムを実行し、S513に機器情報を登録する。機器が接続して
いない時はここにゼロクリアされた値が入るものとする。
【０１８０】
S1619では、S1613で取得したファイルのクリエートタイムを取得している。クリエートタイムとはそのファイルを生成した時の時間情報である。この
時間情報をS611に格納する。
【０１８１】
※ここではクリエートタイムを使用しているがライトタイムつまり、最後に書き込みの発生した時間を使用しても良い。重要なことは暗号鍵として利用する時間
情報を統一することである。本実施例ではクリエートタイムで統一している。
【０１８２】
S510を構成するこれ以外の暗号鍵はここでは使用しない。未使用の領域にはゼロを値として持つものとする。
【０１８３】
S1620はiをカウンタとして構成する永久ループである。iの初期値をゼロとし、１回ループするごとにiの値を一つ加算する。
【０１８４】
S1621では、変換元のファイルをRND_SIZEの大きさだけシーケンシャルにてバイナリモードで読み込みを行う。読み込みデータはdat_tbl
に格納する。ファイルの残りのデータ量がRND_SIZEに満たない時には、存在するだけ読み取るものである。
【０１８５】
S1622では読み込み１バイトでも成立したかを判定する。１バイトでも読めたときはYesとする。読み込みがゼロバイトの時は全ファイルデータ読み込み
終了とみなしNoに分岐する。
【０１８６】
S1623で、変数noに、S1621で読み込みに成功したバイト数を代入する。
【０１８７】
S1624ではS612に連続番号としてiを格納している。乱数のシードを構成するS510の中の動的暗号鍵をここで設定している。
【０１８８】
S1625では図８、図９で記述の変換プログラムを実行している。S810にはシード情報を格納したS510を格納するものとする。S811には
dat_tblのメモリ開始アドレスを格納するものとする。S812にはipの値を格納するものとする。S813にはnoの値を格納するものとする。
【０１８９】
S1626では、dat_tblを変換先ファイルにライトする。シーケンシャルでバイナリモードで書き込みを行う。
【０１９０】
S1627では次のループに備え、ipの値にnoの値を加算している。S1628では変換先ファイルに時間情報をセットする。この時間情報はS1619で
取得した時間情報である。変換先ファイルに対してクリエートタイムとしてこの時間情報を書き込む。
この時間情報をセットすることにより、次回本実施例でこの変換先ファイルを呼んだときに復号ができるのである。
【０１９１】
S1629では変換元ファイルをクローズ処理する。
【０１９２】
S1630では変換先ファイルをクローズ処理する。
【実施例５】
【０１９３】
これは暗号化復号化を行う簡単なアプリケーションプログラムである。
暗号化には実施例３のプログラムを暗号化装置、復号化装置として使用している。
【０１９４】
図１７に本実施例の処理の流れを記述する。
本実施例は基本制御ソフトより実行し、変換をかけたいファイルを指定する。変換したいファイルを読み変換をし、変換結果をファイルとして記憶装置に保存す
る。
【０１９５】
本実施例の示すアプリケーションに一回かけると暗号化を行う。生成結果を再度本アプリケーションにかけると復号を行うものである。
【０１９６】
S1710は初期化を行う。４バイト変数のipとnoとiを確保している。同様にS510として使用するメモリ領域を確保している。同様にファイルの読み
書きの作業用メモリ領域としてdat_tblを確保している。
【０１９７】
dat_tblはRND_SIZEの大きさである。同様に乱数表格納用の配列変数として
rnd_tbl1,rnd_tbl2,rnd_tbl3を確保する。大きさは３つともRND_SIZEである。
【０１９８】
S1711は変数ipにゼロを代入している。
【０１９９】
S1712では、S512の記憶領域をゼロクリアしている。S512の領域がメモリの初期値の不定で変換結果が不定になることをここ回避している。
【０２００】
S1713で変換元のファイル名を入力している。これは、ディスク上のファイル名パスを対話形式で当アプリケーションの実行者に質問するものである。ここ
で指定したファイルを変換の対象とする。
【０２０１】
S1714で、変換元のファイル名をバイナリのリードモードでオープン処理する。
【０２０２】
S1715で、変換先のファイル名をバイナリのライトモードでオープン処理する。オープンする時のファイル名は本実施例では、S1713で取得したファイ
ル名の最後に".enc"という文字列を追加したもので、S1713と同じパスに保存するものとする。
【０２０３】
S1716では、端末情報を取得している。具体的には本実施例が動くコンピュータシステムの固有情報を取得するものとする。ここでは、S512に
S517を保存するものとする。
【０２０４】
S1717ではrnd_tbl1に乱数表を格納している。図１０、図１１のプログラムを実行して乱数を生成rnd_tbl1に格納している。
【０２０５】
図１０のS1010にS510の存在するメモリアドレスを格納する。S1011にrnd_tbl1の存在するメモリアドレスを格納する。そしてこのプログ
ラムを実行してrnd_tbl1に乱数表を得る。
【０２０６】
S1718ではコンピュータシステムに接続している機器情報を取得している。
【０２０７】
図１２のプログラムを実行し、S513に機器情報を登録する。機器が接続して
いない時はこの領域をゼロクリアした後、先頭の４バイトに１６進コードの
FFFFの値が入るものとする。
【０２０８】
これはゼロであった場合S510の全体の値がS1717で設定したS510と同じとなり、つまり同一のシードを与えること
になり、結果、rnd_tbl1とrnd_tbl2の乱数表の内容が同一となり好ましくない。
【０２０９】
従い、機器情報を取得できない時にはゼロ以外になるように
FFFFを与えている。
【０２１０】
S1719ではrnd_tbl2に乱数表を格納している。図１０、図１１のプログラムを実行して乱数を生成rnd_tbl2に格納している。
【０２１１】
図１０のS1010にS510の存在するメモリアドレスを格納する。S1011にrnd_tbl2の存在するメモリアドレスを格納する。そしてこのプログ
ラムを実行してrnd_tbl2に乱数表を得る。
【０２１２】
S1720では、S1713で取得したファイルのクリエートタイムを取得している。クリエートタイムとはそのファイルを生成した時の時間情報である。この
時間情報をS611に格納する。ここではクリエートタイムを使用しているがライトタイムつまり、最後に書き込みの発生した時間を使用しても良い。重要なこ
とは暗号鍵として利用する時間情報を統一することである。本実施例ではクリエートタイムで統一している。
【０２１３】
S510を構成する未設定の暗号鍵はここでは使用しない。未使用の領域にはゼロを値として持つものとする。
【０２１４】
S1721ではrnd_tbl3に乱数表を格納している。図１０、図１１のプログラムを実行して乱数を生成rnd_tblに格納している。
【０２１５】
図１０のS1010にS510の存在するメモリアドレスを格納する。S1011にrnd_tbl3の存在するメモリアドレスを格納する。そしてこのプログ
ラムを実行してrnd_tbl3に乱数表を得る。
【０２１６】
S1722はiをカウンタとして構成する永久ループである。iの初期値をゼロとし、１回ループするごとにiの値を一つ加算する。
【０２１７】
S1723では、変換元のファイルをRND_SIZEの大きさだけシーケンシャルにてバイナリモードで読み込みを行う。読み込みデータはdat_tbl
に格納する。ファイルの残りのデータ量がRND_SIZEに満たない時には、存在するだけ読み取るものである。
【０２１８】
S1724では読み込み１バイトでも成立したかを判定する。１バイトでも読めたときはYesとする。読み込みがゼロバイトの時は全ファイルデータ読み込み
終了とみなしNoに分岐する。
【０２１９】
S1725で、変数noに、S1723で読み込みに成功したバイト数を代入する。
【０２２０】
S1726ではS612に連続番号としてiを格納している。乱数のシードを構成するS510の中の動的暗号鍵をここで設定している。
【０２２１】
S1727では図１４、図１５で記述の変換プログラムを実行している。図１４の各入出力への設定を次に記述する。
【０２２２】
S1410にはrnd_tbl3の存在するメモリ領域開始アドレスを格納する。
【０２２３】
S1411にはrnd_tbl2の存在するメモリ領域開始アドレスを格納する。
【０２２４】
S1412にはrnd_tbl1の存在するメモリ領域開始アドレスを格納する。
【０２２５】
S1413にはdat_tblのメモリ開始アドレスを格納するものとする。S1414にはipの値を格納するものとする。S1415にはnoの値を格納す
るものとする。
【０２２６】
S1728では、dat_tblを変換先ファイルにライトする。シーケンシャルでバイナリモードで書き込みを行う。
【０２２７】
S1729では次のループに備え、ipの値にnoの値を加算している。
【０２２８】
S1730では変換先ファイルに時間情報をセットする。この時間情報はS1713で取得した時間情報である。さらに変換先ファイルに対してクリエートタイ
ムとしてこの時間情報を書き込む。
【０２２９】
この時間情報をセットすることにより、次回本実施例でこの変換先ファイルを呼んだときに復号ができるのである。
【０２３０】
S1731では変換元ファイルをクローズ処理する。
【０２３１】
S1732では変換先ファイルをクローズ処理する。
【実施例６】
【０２３２】
これは実施例２に請求項４の機構を組み込んだ実施例である。
実施例２において、疑似乱数を発生する装置に対して、常に異なるシードを与える装置およびプログラムを実現している。
【０２３３】
しかし、内蔵する疑似乱数発生装置に異なるシードを与えた時に発生する乱数にさらに常に異なるかく乱を加え、生成する乱数表毎に重複の可能性を排除するも
のである。
【０２３４】
実施例２が前提としている乱数発生装置であるメルセンヌ・ツイスタは内部に６２４ワード（１ワードは４バイト）の内部メモリを備え、非特許文献１によるな
らば、論理上はシードが異なればそのシードに属する６２４ワード(2496バイト)のうち最低でも１ワードは異なる乱数表を生成することを保障している。
つまり、2496バイト単位で異なる乱数表を生成を保障している。
【０２３５】
これより、2496以下の小さな表においては部分的に同一の乱数表が出現する可能性を示している。
本実施例は2496バイト単位以下の小さな乱数表の範囲で、時系列変化に従い重複の発生しないかく乱を行い、乱数表内の部分的な重複の可能性を排除する機
構を組み込んだものである。
【０２３６】
図１９にこの機構をプログラムにより実現したものである。図１１のS1116の処理を抽出し示した物が図１９である。
【０２３７】
本実施例は実施例２のS1116に図１９のプログラムを組み込み実現したものである。
【０２３８】
S1910はループカウンタiの示す値の３の剰余を調べている。  そして、剰余ゼロの場合はS1911へ分岐。剰余１の場合はS1912に分岐。剰余２の
場合はS1913に分岐する。
【０２３９】
S1911ではS611つまり時間情報の上位４バイトと変数ptrの示すアドレスのメモリの格納値４バイトと排他的論理和をとり、ptrの示すアドレスに
格納している。
【０２４０】
S1912ではS611つまり時間情報の下位４バイトと変数ptrの示すアドレスの４バイトと排他的論理和をとり、ptrの示すアドレスに格納している。
【０２４１】
S1913ではS612つまり４バイトの連続番号と変数ptrの示すアドレスの４バイトと排他的論理和をとり、ptrの示すアドレスに格納している。
【０２４２】
以上により、１２バイト（４バイト×３）単位でかく乱をかけている。この１２バイト単位のかく乱は時系列変化の中で重複のないかく乱を行うことが出来る。
【０２４３】
結果、乱数発生装置が生成した乱数に対して、さらに３バイト単位の間隔で重複のない乱数を生成する事ができる。
【図面の簡単な説明】
【０２４４】
【図１】擬似乱数の周期を示した説明図である。
【図２】データの暗号化を示した説明図である。
【図３】実施例の物理的全体像を示した図である。
【図４】指紋認証記憶装置の説明を示した図である。
【図５】ｎ個の静的決定暗号鍵を説明した図である。
【図６】動的暗号鍵の説明した図である。
【図７】実際の暗号化復号化の考え方を説明した図である。
【図８】暗号化復号化装置および関数ｆの入出力を説明した図である。（実施例１）
【図９】変換プログラムの処理を説明した図である。（実施例１）
【図１０】乱数表生成プログラムの入出力を表した説明図である。（実施例2）
【図１１】乱数表の発生プログラムを表した説明図である。（実施例2）
【図１２】固有機器のユニークコードを取得するプログラムの説明図である。
【図１３】ｎ個の乱数表による乱数表の合成を示した説明図である。
【図１４】暗号化復号化プログラムの入出力を示した説明図である。（実施例３）
【図１５】変換プログラムの流れを示した説明図である。（実施例３）
【図１６】変換アプリケーションを示した説明図である。（実施例４）
【図１７】変換アプリケーションを示した説明図である。（実施例５）
【図１８】ホストとなる装置を示した説明図である。
【図１９】S1116処理の実施例を示した説明図である。（実施例６）
【符号の説明】
【０２４５】
S1811…中央処理装置（ＣＰＵ）。
S1812…ＲＯＭＢＩＯＳ。
S1813…メモリ装置。
S1814,S1817,S1818…システムバス。
S1815,S1816…アダプタ。
S1820…ホストＩ／Ｆ。
S1830…HDD。
S1819…リーダライタ。
S1840…USB装置。
【図１】
2009258141.tif 000003
【図２】
2009258141.tif 000004
【図３】
2009258141.tif 000005
【図４】
2009258141.tif 000006
【図５】
2009258141.tif 000007
【図６】
2009258141.tif 000008
【図７】
2009258141.tif 000009
【図８】
2009258141.tif 000010
【図９】
2009258141.tif 000011
【図１０】
2009258141.tif 000012
【図１１】
2009258141.tif 000013
【図１２】
2009258141.tif 000014
【図１３】
2009258141.tif 000015
【図１４】
2009258141.tif 000016
【図１５】
2009258141.tif 000017
【図１６】
2009258141.tif 000018
【図１７】
2009258141.tif 000019
【図１８】
2009258141.tif 000020
【図１９】
2009258141.tif 000021
【手続補正書】
【提出日】平成18年7月1日(2006.7.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１３
【補正方法】変更
【補正の内容】
【請求項１３】
任意の請求項を備える事を特徴とするアプリケーションソフトウェアおよび基本制御ソフト（OperatingSystem）および基本制御ソフトのファイ 
ル管理装置に組み込み作動するソフトウェア。
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2009258141.tif 000022
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図９
【補正方法】変更
【補正の内容】
【図９】
2009258141.tif 000023
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2009258141.tif 000024
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
S911では、noにS812が格納する値をRND_SIZEで割り算した結果を格納している。これにより、変換に必要な乱数テーブルの連続番号を算出し 
て いる。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
S914では、メルセンヌ・ツイスタにより乱数表を発生させている。図１０、図１１の処理を行う。
後述するS1010にS810の値を格納する。S1011にはrnd_tblのメモリ上の開始アドレスを格納する。
図１０、図１１の処理を行う。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００８７
【補正方法】変更
【補正の内容】
【００８７】
S917は、実際の変換処理を行っている。S811の示すメモリアドレスの上からi番目の要素とrnd_tblの上からip番目の要素の排他的論理和をと 
り、代入している。代入先はS811の示すメモリアドレスの上からi番目の要素である。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００９４
【補正方法】変更
【補正の内容】
【００９４】
S917は、実際の変換処理を行っている。S811の示すメモリアドレスの上からi番目の要素とrnd_tblの上からip番目の要素の排他的論理和をと 
り、代入している。代入先はS811の示すメモリアドレスの上からi番目の要素である。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１６４
【補正方法】変更
【補正の内容】
【０１６４】
S1528では、乱数表S1416,S1417の組み合わせが全組み合わせがなされたとみなし、乱数表S1418を１バイトずらす処理をしている。変数 ip3の格納値を一つ増加している。
【手続補正書】
【提出日】平成18年7月1日(2006.7.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１４
【補正方法】変更
【補正の内容】
【請求項１４】
任意の請求項を備える事を特徴とするROM若しくはRAM及び外部記憶媒体への組み込み式制御基盤、制御ソフト及び制御データ保護を特徴とする装置。
【手続補正書】
【提出日】平成18年7月1日(2006.7.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項２１
【補正方法】変更
【補正の内容】
【請求項２１】
任意の請求項を備える事を特徴とする通信自体の情報を暗号化及び複合化させる機能を備えた装置。