(57)【特許請求の範囲】
【請求項１】
コンピュータプロセッサによって実行される、コンピュータに実装されたデータを暗号化する方法において、前記方法は、
少なくとも１つの計算装置上のメモリに、データを暗号化するために使用される少なくとも１つの暗号化キーを作成および管理するように構成されたキー管理プログラムを実装する工程と、
前記少なくとも１つの計算装置上のメモリに、少なくとも１人の許可されたユーザに関連づけられた少なくとも１つのキーファイルであって、疑似ランダムバイト列を含むキーフィールドを含むキーファイルを実装する工程と、
前記キーフィールドからランダムに選択される、基本文字セットを構築する工程と、
前記基本文字を暗号化アルゴリズムに入力して前記暗号化キーを生成する工程と、
暗号化されるデータを受信する工程と、
前記暗号化キーを用いて前記データを暗号化する工程と、
を含み、
前記基本文字セットは、前記キーフィールドからランダムに選択された少なくとも１つの文字と、前記キーフィールドからランダムに選択された少なくとも１つの他の文字とを有し、前記キーフィールドからランダムに選択された少なくとも１つの文字および前記キーフィールドからランダムに選択された少なくとも１つの他の文字は、前記キーフィールド内で、前記キーフィールドから選択された不連続な文字となる、前記キーフィールドのサブセットである方法。
【請求項２】
前記キー管理プログラムを用いて、疑似ランダムバイト列として前記キーフィールドを生成する工程をさらに含む、請求項１に記載の方法。
【請求項３】
前記ユーザが新しいと判定するとすぐに、ユーザ名、パスフレーズ、前記ユーザの計算装置に関連する現在の日付、前記ユーザの計算装置に関連する現在の時間、前記ユーザの計算装置に関連するオペレーティングシステムのバージョン、および前記ユーザの計算装置に関連するＩＰアドレスのうちの少なくとも１つを含む選ばれたユーザに固有の情報を前記ユーザから得る工程をさらに含む、請求項１に記載の方法。
【請求項４】
前記ユーザに固有の情報の少なくとも一部をハッシュ関数に入力して固有のハッシュ値を生成する工程をさらに含む、請求項３に記載の方法。
【請求項５】
前記ユーザが新しくないと判定するとすぐに、前記ハッシュ値に基づいて前記ユーザの識別を確認する工程をさらに含む、請求項４に記載の方法。
【請求項６】
前記ユーザに前記パスフレーズの再入力を促す工程と、
以前に前記ハッシュ値を生成するために使用された同じユーザ固有情報を用いて、前記ハッシュ関数を実施する工程と、
前記結果を前記ユーザに関連づけられた前記キーファイルに格納された前記ハッシュ値と比較して、前記結果および前記ハッシュ値が同一であるか否かを判定する工程と、
をさらに含む、請求項５に記載の方法。
【請求項７】
基本文字セットを構築する前記工程は、前記キーフィールドから連続しない文字をランダムに選択する工程をさらに含む、請求項１に記載の方法。
【請求項８】
基本文字セットを構築する前記工程は、キー抽出アルゴリズムを用いて、前記キーフィールドから文字をランダムに選択する工程をさらに含む、請求項１に記載の方法。
【請求項９】
前記キー抽出アルゴリズムが危険に曝されていると判定するとすぐに、前記キー抽出アルゴリズムを修正し、かつそれを前記少なくとも１人の許可されたユーザに配信する工程をさらに含む、請求項８に記載の方法。
【請求項１０】
疑似乱数発生器（「ＰＲＮＧ」）を用いて、前記キーフィールドを生成する工程をさらに含む、請求項１に記載の方法。
【請求項１１】
長い疑似ランダムバイト配列（「ＬＰＲＳ」）を生成する工程と、
前記ＬＰＲＳ内の疑似ランダム入口点を選択し、かつ前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数のバイトを選択することにより、疑似ランダム列を構築する工程と、
をさらに含む、請求項１０に記載の方法。
【請求項１２】
疑似ランダム列を構築する前記工程は、前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数の連続したバイトを選択する工程をさらに含む、請求項１１に記載の方法。
【請求項１３】
疑似ランダム列を構築する前記工程は、前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数の連続しないバイトを選択する工程をさらに含む、請求項１１に記載の方法。
【請求項１４】
前記少なくとも１つの計算装置上のメモリに前記ＰＲＮＧを実装する工程をさらに含む、請求項１０に記載の方法。
【請求項１５】
前記少なくとも１つの計算装置上のメモリに、前記キー管理プログラムおよび前記機微なデータを暗号化／復号化するための暗号化モジュールと通信するように構成された少なくとも１つのクライアントアプリケーションを実装する工程をさらに含む、請求項１に記載の方法。
【請求項１６】
前記データを暗号化する前記工程は、
既知の値を有するトークンを生成する工程と、
前記トークンの第１のインスタンスを前記データの開始点に挿入する工程と、
チェックサム値をランダムに生成する工程と、
前記チェックサム値を第１の部分と第２の部分に分ける工程と、
前記チェックサム値の前記第１の部分を前記トークンの前記第１のインスタンスと前記データの開始点との間に挿入する工程と、
前記チェックサム値の前記第２の部分を前記データの終了点に挿入する工程と、
前記トークンの第２のインスタンスを前記チェックサム値の前記第２の部分の後ろに挿入する工程と、
前記暗号化キーを用いて、前記トークンの前記第１のインスタンス、前記チェックサム値の前記第１の部分、データ、前記チェックサム値の前記第２の部分、および前記トークンの前記第２のインスタンスからなる列全体を暗号化する工程と、
をさらに含む、請求項１に記載の方法。
【請求項１７】
チェックサム値をランダムに生成する前記工程は、前記第１の部分が前記第２の部分と既知の関係を有するように、前記チェックサム値の前記第１の部分で始まり、かつ前記チェックサム値の前記第２の部分に引き継がれる一連の整数を生成する工程をさらに含む、請求項１６に記載の方法。
【請求項１８】
正しくない暗号化キーで復号化されたことにより破損しているか部分的に破損しているトークンを検出するとすぐに、読取り可能であるが偽のデータを出力する工程をさらに含む、請求項１６に記載の方法。
【請求項１９】
コンピュータプロセッサによって実行される、コンピュータに実装されたデータを暗号化する方法において、前記方法は、
少なくとも１つの計算装置上のメモリに、データを暗号化するために使用される少なくとも１つの暗号化キーを作成および管理するように構成されたキー管理プログラムを実装する工程と、
長い疑似ランダムバイト列（「ＬＰＲＳ」）を生成し、前記ＬＰＲＳ内の疑似ランダム入口点を選択し、かつ前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数のバイトを選択することにより疑似ランダム列を構築して、キーフィールドを生成する工程と、
前記キーフィールドからランダムに選択される、基本文字セットを構築する工程と、
前記基本文字を暗号化アルゴリズムに入力して前記暗号化キーを生成する工程と、
暗号化されるデータを受信する工程と、
前記暗号化キーを用いて前記データを暗号化する工程と、
を含み、
前記基本文字セットは、前記キーフィールドからランダムに選択された少なくとも１つの文字と、前記キーフィールドからランダムに選択された少なくとも１つの他の文字とを有し、前記キーフィールドからランダムに選択された少なくとも１つの文字および前記キーフィールドからランダムに選択された少なくとも１つの他の文字が、前記キーフィールド内で、前記キーフィールドから選択された不連続な文字となる、前記キーフィールドのサブセットである方法。
【請求項２０】
コンピュータプロセッサによって実行される、コンピュータに実装されたデータを暗号化する方法において、前記方法は、
少なくとも１つの計算装置上のメモリに、データを暗号化するために使用される少なくとも１つの暗号化キーを作成および管理するように構成されたキー管理プログラムを実装する工程と、
キーフィールドからランダムに選択される、前記キーフィールドのサブセットである基本文字セットを構築する工程と、
前記基本文字を暗号化アルゴリズムに入力して前記暗号化キーを生成する工程と、
既知の値を有するトークンを生成する工程と、
前記トークンの第１のインスタンスを前記データの開始点に挿入する工程と、
チェックサム値をランダムに生成する工程と、
前記チェックサム値を第１の部分と第２の部分とに分ける工程と、
前記チェックサム値の前記第１の部分を前記トークンの前記第１のインスタンスと前記データの開始点との間に挿入する工程と、
前記チェックサム値の前記第２の部分を前記データの終了点に挿入する工程と、
前記トークンの第２のインスタンスを前記チェックサム値の前記第２の部分の後ろに挿入する工程と、
前記暗号化キーを用いて、前記トークンの前記第１のインスタンス、前記チェックサム値の前記第１の部分、データ、前記チェックサム値の前記第２の部分、および前記トークンの前記第２のインスタンスからなる列全体を暗号化する工程と、
を含む、コンピュータに実装されるデータを暗号化する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本出願は、２０１３年４月１８日に出願された「データを暗号化するシステムおよび方法」という発明の名称の米国仮出願第６１／８１３，１８６号の優先権を主張し、かつ出願日によりその権利を有する。上記出願の開示内容は、参照により本明細書に組み込まれる。
【０００２】
出願人は、本出願において引用または参照される、ありとあらゆる特許および公開特許出願を参照により本明細書に組み込む。
【０００３】
本発明の態様は一般に、コンピュータ暗号法に関し、より詳細には、データを暗号化する改良されたシステムおよび関連方法に関する。
【背景技術】
【０００４】
背景としては、電子データへのアクセスおよび関連する通信を保護するために、ここ何年間にわたって様々な方法が開発されてきた。一般的な方法では、データを暗号化および復号化するためにキーを用いる対称暗号化アルゴリズムが使用される。キーは、それがなければデータを容易に復号化することができないように使用される。そのような方法に関する主要な問題は、キーを所有するものは誰でも、キーを使用してデータを復号化できるという点にある。いくつかのキー難読化技術により、ブラックキーまたはキー暗号化キー（「ＫＥＫ」）としても知られているマスターキーを使用してキーを暗号化する方法を用いて、この問題を解決することが試みられてきた。言い換えると、データを暗号化するために使用されるキー自体がＫＥＫにより暗号化される。しかし、そのようなシステムは通常、比較的高価なハードウェアを必要とするため、多様な用途において有用でないことが多い。さらに、この種のシステムは、「ブラックボックス」が比較的安全であるハードウェアベースのシステムにおいて良好に機能する傾向があり、通常、ソフトウェアベースのシステムまたは家庭／消費者環境では、どこにＫＥＫを安全に格納するかが問題となるため、良好に機能しない。これは、ＫＥＫが常に危険に曝されていれば、発行される全てのキーがそれにより脆弱になることに起因する。従って、多くの暗号化方法は、ＫＥＫによるキーの暗号化に依存する代わりに、単に、ランダムに生成されるキーに依存している。
【０００５】
コンピュータなどの電子装置は多くの場合、賭博、統計的サンプリング、コンピューターシミュレーション、および予測不可能な結果を生成するのにランダム配列が有用な他の分野などの様々な他の目的に沿った暗号法のために、ランダム配列を生成することができる。電子装置は、ハードウェア乱数発生器を用いてランダム配列を生成するように構成されているものもあれば、ソフトウェアに依存するものもある。これらのソフトウェアベースの技術は多くの場合、所定数のランダム配列を生成する。この種のソフトウェアは一般に、典型的なハードウェア乱数発生器と比較した場合、完全にランダムな配列を生成しないため、疑似乱数発生器（「ＰＲＮＧ」）とも呼ばれる。あらゆるＰＲＮＧの動作において欠陥が露呈される少なくとも２つの主要な事例がある。第１に、配列を生成するために使用されているシードが十分に多様でない場合、得られる疑似ランダム配列は潜在的に予測可能であり、従って、推測されるという脅威の下にあり危険である。第２に、環境を配慮して十分に多様なシードを生成することができたとしても、それらの条件を決定して再生成することができれば、得られる疑似ランダム配列は、なお推測されるという脅威の下にあり危険である。公知の先行技術の改良への試みは、ランダムシードのエントロピーを増加させることに関する各種手段により、ＰＲＮＧ自体を改良する試みを中心に行われている。ところが、この種の解決方法に関する問題は、この改良を使用中のＰＲＮＧに組み込まなければならないという点にある。従って、ＰＲＮＧの機能の変更を必要とすることなく、そのようなＰＲＮＧのセキュリティおよび性能を高める必要がある。
【０００６】
先行技術のＰＲＮＧに関連するさらなる問題は、疑似ランダム値に含まれている特定の数字または文字に関連する相対的確率である。もう少し詳しく言うと、数列を生成する場合、ＰＲＮＧは、１０個の整数値、すなわち０、１、２、３、４、５、６、７、８または９のうちの１つを選択しなければならない。疑似ランダム値を生成するために使用される手段に関わらず、その最終値は、この範囲内でなければならない。同じことが、疑似ランダム英数字値（すなわち、０〜９およびＡ〜Ｚ、場合により、他のＡＳＣＩＩ文字までも含む）にも当てはまる。ＰＲＮＧの強度に応じて、１０桁のランダム配列は、例えば７５２６４３５７４４と同程度に脆弱になり得る。生成される配列の長さが増えるに従って、含められている数の尤度は高まる。従って、２倍の長さの配列は、元の配列において選択されたもの以外の数を含む可能性が高い（例えば、３０８２０９１３００７５０４７９６９７７）。疑似ランダム配列の長さが増加するにつれて、この尤度は高まる。さらに、キーの長さが決定されると、暗号化キーのクラッキングは、その長さのキーの数の組み合わせの各順列を一通り実行するのと同定に簡単である。
【０００７】
公知の先行技術の対称暗号化アルゴリズムに関連する別の問題は、設計またはそれらの実装のどちらか一方において、正しくないキーの使用が試みられた際に何も出力しなかったりエラーまたは異常を起こしたりするという点にある。次いで、これにより、正しいキーを判定するための自動化または半自動化された総当たりクラッキング技術の使用が容易になる。クラックを試みている人は全て、読取り可能な出力が達成されるまで、潜在的にキーを含む全ての可能な文字の組み合わせを一通り試す必要がある。読取り可能なデータを出力する理論上の暗号化アルゴリズムは、不良なキーが提示された場合に暗号化されたデータが不明であるという性質により実行不可能であるため、却下されている。
【０００８】
本発明の態様は、これらの問題の全てを解決し、かつ以下の発明の概要に記載されているさらなる関連する利点を提供することに関する。
【発明の概要】
【０００９】
本発明は、データを暗号化するシステムおよび関連方法を提供することにより、上記問題を解決する。少なくとも１つの実施形態では、キー管理プログラムは、少なくとも１つの計算装置上のメモリに位置し、データを暗号化するために使用される少なくとも１つの暗号化キーを作成および管理するように構成されている。少なくとも１つのキーファイルも少なくとも１つの計算装置上のメモリに位置し、そのファイルは、少なくとも１人の許可されたユーザに関連づけられている。キーファイルは、疑似ランダムバイト列と、キーファイルをユーザに関連づけるために使用される固有のハッシュ値とを含むキーフィールドを含む。基本文字セットがキーフィールドのサブセットであるように、基本文字セットをキーフィールドからランダムに選択する。次いで、基本文字セットを暗号化アルゴリズムに入力して、暗号化キーを生成する。次いで、暗号化キーを用いてデータを暗号化する。
【００１０】
上記装置および使用方法の主要な目的は、先行技術によって教示されていない利点を提供することにある。
【００１１】
本発明の態様の他の特徴および利点は、例えば本発明の態様の原理を示す添付の図面と関連させた以下のより詳細な説明から明らかになるであろう。
【００１２】
添付の図面は、本発明の態様を示す。
【図面の簡単な説明】
【００１３】
【図１】少なくとも１つの実施形態に係る、データを暗号化する例示的なシステムのアーキテクチャ図である。
【図２】少なくとも１つの実施形態に係る、例示的なキーファイルデータ構造を示すブロック図である。
【図３】少なくとも１つの実施形態に係る、例示的なキーフィールドの図である。
【図４】少なくとも１つの実施形態に係る、例示的なハッシュ値の図である。
【図５】少なくとも１つの実施形態に係る、データを暗号化する例示的な方法のフローチャートである。
【図６】少なくとも１つの実施形態に係る、例示的なキーフィールドに由来する例示的な基本文字セットの図である。
【図７】少なくとも１つの実施形態に係る、疑似ランダムバイト列を生成する例示的な方法のフローチャートである。
【図８】少なくとも１つの実施形態に係る、例示的な長い疑似ランダム配列に由来する例示的な疑似ランダム列の図である。
【図９】少なくとも１つの実施形態に係る、既知のトークンにより暗号化された機微なデータの例示的な断片の図である。
【図１０】少なくとも１つの実施形態に係る、総当たりクラッキングの試みに対抗する例示的な方法のフローチャートである。
【００１４】
上記図面は、以下の説明においてさらに詳細に定められているその例示的な実施形態の少なくとも１つにより本発明の態様を示す。異なる図において同じ符号で参照されている本発明の特徴、要素および態様は、１つ以上の実施形態に係る、同じ、同等または同様の特徴、要素または態様を表わす。
【発明を実施するための形態】
【００１５】
上記図面は、以下の説明においてさらに詳細に定めされているその例示的な実施形態の少なくとも１つにより本発明の態様を示す。
【００１６】
図１を参照すると、少なくとも１つの実施形態に係る、データを暗号化する例示的なシステム２０のアーキテクチャ図が示されている。システム２０は、例示的な実施形態では、それぞれが少なくとも１つの計算装置３４上のメモリ３２に存在する、キー管理プログラム２２、疑似乱数発生器（「ＰＲＮＧ」）２４、暗号化モジュール２６、少なくとも１つのキーファイル２８、および少なくとも１つのクライアントアプリケーション３０を備える。なお、「メモリ」という用語は、ローカルハードドライブ、ＲＡＭ、フラッシュメモリ、外部記憶装置、ネットワークまたはクラウド記憶装置などの、現在知られているか後に開発されるあらゆる種類の電子記憶媒体（または記憶媒体の組み合わせ）を含むものとする。さらに、システム２０の各種構成要素は、１つの計算装置３４上のメモリ３２に存在しても、２つ以上の計算装置３４上に別々に存在してもよい。さらに、「計算装置」という用語は、デスクトップコンピュータ、スマートフォン、ラップトップコンピュータ、タブレットコンピュータ、ゲーム装置などの、現在知られているか後に開発されるあらゆる種類の計算装置を含むものとする。
【００１７】
図１を続けて参照すると、少なくとも１つの実施形態では、キー管理プログラム２２は、機微なデータ３６を暗号化するために使用される１つ以上の暗号化キーを作成および管理し、許可されたユーザのみに、機微なデータ３６を公開させるか、そうでなければ、そこにアクセスすることを許可する。以下でさらに説明するように、少なくとも１つの実施形態では、キー管理プログラム２２は、暗号化キーを作成する際の特定の工程の間に、ＰＲＮＧ２４を利用する。
【００１８】
少なくとも１つの実施形態では、暗号化モジュール２６は、機微なデータ３６を受信し、その代わりに使用されるトークン３８を生成するプロセスを実施する。言い換えると、暗号化モジュール２６は、関連する暗号化キーを用いてトークン３８を生成し、元の機微なデータ３６を暗号化し、かつ暗号化されたデータ４０をメモリ３２に格納する。トークン３８は単に、暗号化されたデータ４０の参照であり、トークン３８と暗号化されたデータ４０との間に数学的関係は存在しない。従って、トークン３８は、システム２０全体を通して安全に使用することができ、それが表わす暗号化されたデータ４０は、メモリ３２に格納されたままである。暗号化モジュール２６は、機微なデータ３６と生成されたトークン３８との間に１対１の関係があることを保証し、従って、システム２０全体を通して参照整合性が維持される。
【００１９】
少なくとも１つのクライアントアプリケーション３０は、機微なデータ３６の収集、操作または処理に関わる、現在知られているか後に開発される様々なアプリケーションまたはプラットフォームのいずれであってもよく、機微なデータ３６を暗号化および復号化するためのキー管理プログラム２２および暗号化モジュール２６と通信するように構成されている。例えば、クライアントアプリケーション３０は、企業が受け取る支払いを処理または分析するための金融アプリケーションであってもよい。別のクライアントアプリケーション３０は、レジまたは支払いカード読取装置などのＰＯＳ装置であってもよい。
【００２０】
図２に示すように、少なくとも１つのキーファイル２８の例示的な実施形態は、例えば、暗号化キーに関連する特定の値を格納するデータ構造として示されている。少なくとも１つの他の実施形態では、キーファイル２８は、テキストファイルである。キーファイル２８は、少なくとも１つの実施形態では、ヘッダ４２、キーフィールド４４、ハッシュ値４６、および所有者情報４８を含む。ヘッダ４２は、キーファイル２８の特定のバージョン情報を含む。図３の例示的な図に示すように、キーフィールド４４は、疑似ランダムバイト列である。例示的な実施形態では、キーフィールド４４は、ＰＲＮＧ２４により生成されるが、他の実施形態では、キーフィールド４４は、ランダムまたは疑似ランダムバイト列を生成することができる現在知られているか後に開発されるあらゆる他の好適な手段により生成してもよい。図４の例示的な図に示すように、ハッシュ値４６は、生成される固有の識別子であり、キーファイル２８をその関連する所有者（すなわち、ユーザ）および送信元の計算装置３４にロックする。但し、少なくとも１つの実施形態では、システム２０は、キーファイル２８を異なる計算装置で使用するために携帯可能にすることができるエクスポート機能を提供する。少なくとも１つの実施形態においてキーフィールド４４およびハッシュ値４６のそれぞれがどのように導出されるかについての詳細は（関連する暗号化キーと共に）以下に記載する。図２を再び参照すると、所有者情報４８は、ユーザ名、ＩＰアドレスなどのキーファイル２８の所有者に関する詳細を含む。
【００２１】
上述のように、システム２０は、暗号化キーを暗号化しない。従って、システム２０は、ＫＥＫに依存しない。その代わり、図５のフローチャートに示すように、キー管理プログラム２２は最初に、疑似ランダムバイト（または文字）列としてキーフィールド４４を生成する（１００）。使用時に、少なくとも１つの実施形態では、さらなる処理の前に、システム２０は、ユーザが新しいか否かを確認する（１０２）。新しいユーザの場合、システム２０は、ユーザにユーザ名およびパスフレーズなどの特定のユーザ固有変数の入力を促す（１０４）。キーフィールド４４、パスフレーズならびに他の環境変数および／またはユーザ提供変数（すなわち、計算装置の日付および／または時間、オペレーティングシステムのバージョン、ユーザ名、ＩＰアドレスなど）などの選ばれたデータをハッシュ関数に入力し、次いで、ここから固有のハッシュ値４６を導出する（１０６）。システム２０を再び使用すると、ハッシュ値４６に基づき、ユーザの識別および関連するアクセス権を確認する（１０８）。そのような一実施形態では、ユーザは、自身のパスフレーズの再入力を促され、再入力されるとすぐに、システム２０は、同じ変数を用いてハッシュ関数を実行して、その結果をユーザのキーファイル２８に格納されているハッシュ値４６と比較する。他の実施形態では、システム２０は単に、ユーザがメモリ３２に既に格納されているキーファイル２８を有するか否かを確認する。
【００２２】
次に、図６に示すように、キー管理プログラム２２は、キー抽出アルゴリズムを用いて、キーフィールド４４からランダムに選択される基本文字セット５０を構築する（１１０）。基本文字セット５０は、キーフィールド４４よりも比較的小さく、各種環境変数および／またはユーザ提供変数に基づき、本キー抽出アルゴリズムにより、キーフィールド４４からランダムに（かつ、好ましくは不連続に）選択される特定の文字を決定する。このように、キーファイル２８は、キーフィールド４４においてランダムに生成される文字の数を増やし、次いで基本文字セット５０に到達するようにこの拡大した群の中から必要な列の長さをランダムに選択することにより、エントロピーを増加させる。言い換えると、キーファイル２８の使用により、システム２０の異なるインストールで所与のキーフィールド４４が重複する確率を大きく低下させる。基本文字セット５０を構築するために使用される本キー抽出アルゴリズムに関しては、機微なデータ３６を暗号化するシステム２０および関連方法の保全性を保護するために、そのアルゴリズムの詳細は、本明細書に開示しない。さらに、基本文字セット５０は目に見えないため、本キー抽出アルゴリズムの仕組みを解析するあらゆる試みは、どう見ても困難であろう。
【００２３】
図５を続けて参照すると、基本文字セット５０を構築したら、暗号化アルゴリズムに入力し、次いで、これにより暗号化キーを導出する（１１２）。次いで、暗号化モジュール２６は、暗号化キーを用いて機微なデータ３６を暗号化することができる。例示的な実施形態では、キー管理プログラム２２は、所望の長さの暗号化キーを指定することもでき、これによりシステム２０は、実質的にあらゆる暗号化モジュールで使用される実質的にあらゆる暗号化アルゴリズムに適合可能な暗号化キーを生成することができる。
【００２４】
また、十分な時間やリソースがあり、かつ本明細書に記載されている例示的なシステム２０などの特定の暗号化システムにアクセス可能であれば、熱心な個人または個人の集団ならば、その仕組みを理解することができるものと十分に考えられる。これを念頭に置いて、大部分の暗号化アルゴリズムは公開されており、難読化のために数学的複雑性に依存している。一方、本システム２０は、拡張可能な難読なアルゴリズム暗号化の形態を利用しており、ここでは、暗号化キーを作成するアルゴリズム（すなわち、キー抽出アルゴリズム）が隠されている。さらに、十分な暗号化キーにアクセス可能であれば、熱心に努力すれば、最後には、本キー抽出アルゴリズムを理解することができるものと考えられる。但し、本キー抽出アルゴリズムの要素は拡張可能であり（すなわち、それらを簡単に変更することができ）（１１６）、本キー抽出アルゴリズムの基本的な仕組みを変える必要もない。従って、本キー抽出アルゴリズムは、既知の集団によって使用されるように作られているため、所定の時間で（本キー抽出アルゴリズムがクラックされるのに要する推定時間に基づく）、あるいは、本キー抽出アルゴリズムが実際に危険に曝されているという判定がなされるとすぐに、本キー抽出アルゴリズムの更新版が、この集団に利用可能な状態になり得る（１１４）。既存の暗号化キーをエクスポートし、新しい暗号化キーが、更新された本キー抽出アルゴリズムを用いて、ユーザに送られる。従って、本キー抽出アルゴリズムのクラックを試みているものは全て、始めからやり直すことを強いられる。そのような各変数が有し得る広範囲の潜在的に固有の値は言うまでもなく、本キー抽出アルゴリズムが利用することができる各種環境変数および／またはユーザ提供変数の多くの可能な組み合わせがあれば、本キー抽出アルゴリズムの設計により、ほぼ無限数のパターンが可能になる。
【００２５】
上述のように、少なくとも１つの実施形態では、ＰＲＮＧ２４により、キーフィールド４４を生成する。そのような一実施形態では、図７のフローチャートに示すように、ＰＲＮＧ２４は、数字および／または文字からなる長い疑似ランダム配列（「ＬＰＲＳ」）５２を最初に生成する（２００）。ＬＰＲＳ５２の例示的な図が図８に示されている。次に、ＰＲＮＧ２４は、疑似ランダム入口点５６を選択し（２０２）、かつ疑似ランダム入口点５６で始まるＬＰＲＳ５２内の所定数の連続した数字（および／または文字）を選択して、疑似ランダム列５４を構築する（２０４）。一例として、図８の例示的な図に示すように、ＰＲＮＧ２４が疑似ランダム入口点５６を「３」、疑似ランダム列５４の長さを「１０」として選択すれば、図８のＬＰＲＳ５２から導出されて得られる疑似ランダム列５４は、「１０４３７２６８７９」となる。必要に応じて、さらなる疑似ランダム列５４を生成してもよい（２０６）。なおさらなる実施形態では、ＰＲＮＧ２４は、疑似ランダム入口点５６で始まるＬＰＲＳ５２内の所定数の連続しない数字（および／または文字）を選択して、疑似ランダム列５４を構築する。このように、ＬＰＲＳ５２をメモリ３２に格納し、そこから比較的短い長さの疑似ランダム列５４を構築して、それによりＰＲＮＧ２４のエントロピーを増加させる。さらに、システム２０のメモリ３２がＰＲＮＧ２４をホストする計算装置３４内にない実施形態では、ＬＰＲＳ５２は、疑似ランダム列５４を推測することを試みているものが、その推測の根拠として計算装置３４のハードウェアの知識を用いることを防止する抽象化レイヤを形成する。簡単に言うと、少なくとも１つの実施形態では、ＬＰＲＳ５２を１つの計算装置３４で生成し、別の装置で利用することができる。
【００２６】
ＰＲＮＧ２４の上記実施形態の１つの考えられる制限は、ＬＰＲＳ５２の自動更新を許可しない点にある。もう少し詳しく言えば、図８の例示的なＬＰＲＳ５２を続けて参照すると、単に疑似ランダム入口点５６を選択して前方の１０個の文字を数えることにより使用することができる、１０個の文字からなる固有の疑似ランダム列５４が９０種類存在し得る。これを達成するために使用されるあらゆる計算装置３４は、ＰＲＮＧ２４を使用して疑似ランダム入口点５６を選択するため、繰り返しが生じる前に選択することができる固有の疑似ランダム列５４の実際の数は、さらに小さくなるであろう。この制限を避けるために、少なくとも１つの実施形態では、拡張したアーキテクチャを利用し、ＬＰＲＳ５２を作成するために使用した文字セットの格納および検索を可能にする。これにより、文字セットに基づき、ＬＰＲＳ５２の自動の定期的更新が可能になり（２０８）、特定の疑似ランダム列５４が繰り返される可能性が低下する。
【００２７】
なお、本明細書では、例示的なデータ暗号化システム２０との関連でＰＲＮＧ２４について述べてきたが、実際には、疑似ランダムバイトまたは一連の疑似ランダムバイトが必要とされるあらゆる他の用途において、ＰＲＮＧ２４を別個に利用してもよい。
【００２８】
少なくとも１つの実施形態では、システム２０は、本暗号化キーおよび／またはキー抽出アルゴリズムのクラッキングの際の総当たり攻撃に対抗し、その確率を減少させるために、さらなる工程を用いる。手短に言うと、図９の例示的な図に示すように、システム２０は、暗号化される機微なデータ３６の開始点および終了点にトークン３８を含む。トークン３８は既知の値であり、かつトークン３８は、同じ暗号化キーを用いて作成されているため、機微なデータ３６を暗号化するために使用されるキーではないあらゆる暗号化キー（従って、トークン３８）は、復号時にトークン３８を正確に再構築しない。このように、暗号化キーが正しいキーであるか否かを容易に判定することができる。さらなる実施形態では、暗号化されたデータ４０以外のデータを出力する方法が用いられる。その結果、暗号化されたデータ４０の総当たりクラックを試みる人が、自身が見ているデータが暗号化された機微なデータ３６と同一であるか否かを知る方法が存在しないため、本暗号化キーおよび／またはキー抽出アルゴリズムをクラックするために必要なサイクル数は、極めて大きくなる。
【００２９】
そのような一実施形態では、図１０のフローチャートに示すように、暗号化モジュール２６は最初に、既知の値を有するトークン３８を生成し（３００）、既知のトークン３８の第１のインスタンス５８を暗号化される機微なデータ３６の開始点に挿入する（３０２）。次に、チェックサム値６０をランダムに生成する（３０４）。例示的な実施形態では、上記方法に従って、ＰＲＮＧ２４によりチェックサム値６０を生成するが、他の実施形態では、そのようなランダムまたは疑似ランダムバイト列を生成することができる、現在知られているか後に開発されるあらゆる他の好適な手段により、チェックサム値６０を生成してもよい。次いで、チェックサム値６０を、第１の部分６２と第２の部分６４とに分ける（３０６）。チェックサム値６０の第１の部分６２をトークンの第１のインスタンス５８の後に挿入し（３０８）、その後に機微なデータ３６を挿入し（３１０）、その後にチェックサム値６０の第２の部分６４を挿入し（３１２）、その後にトークン３８の第２のインスタンス６６を挿入する（３１４）。次いで、暗号化キーを用いて、データ列全体を暗号化する（３１６）。従って、暗号化される機微なデータ３６に後続するチェックサム値６０の第２の部分６４は、チェックサム値６０の第１の部分６２と既知の関係を有する。図９の例示的な図では、チェックサム値６０は、第１の部分６２で始まり、かつ第２の部分６４に引き継がれる一連の整数を含む。このようにして、暗号化キー内のあらゆる分散により、トークン３８またはチェックサム値６０のいずれか一方において検出可能な破損を生じさせる。トークン３８の値は既知であるため、暗号化モジュール２６は、部分的に復号化されていることにより破損または部分的に破損しているか否かを検出することができる。これにより、暗号化モジュール２６は、読取り可能であるが偽のデータを出力する各種技術を用いることができる。
【００３０】
要約すると、本明細書に図示および記載されている本発明の例示的な実施形態に関して、データを暗号化するシステムおよび方法が開示されていることが分かる。本発明の原理を、図示および記載されているもの以外の多くの構成で実施することができるため、当然のことながら、本発明は、決して例示的な実施形態によって限定されず、一般にデータを暗号化するシステムおよび方法に関し、本発明の趣旨および範囲を逸脱することなく、数多くの形態をそのために利用することができる。また、当業者には理解されるように、本発明は、開示されている構造物の特定の幾何学的形状および材料に限定されず、代わりに、本発明の趣旨および範囲を逸脱することなく、現在知られているか後に開発される他の機能的に類似した構造または材料を包含してもよい。さらに、上記各実施形態の各種特徴を、あらゆる論理的な方法で組み合わせてもよく、それらも本発明の範囲に含まれるものとする。
【００３１】
当然のことながら、各方法のそれぞれの要素が実施される、論理コード、プログラム、モジュール、プロセス、方法および順序は、単に例示である。その実装に応じて、本開示に特に明記しない限り、それらを任意の順序で、あるいは同時に実施してもよい。さらに、論理コードは、あらゆる特定のプログラミング言語に関するものでも、それらに限定されるものでもなく、分散処理、非分散処理または多重処理環境において１つ以上の処理装置で実行する１つ以上のモジュールを含んでもよい。
【００３２】
上記方法を集積回路チップの製作で使用してもよい。得られる集積回路チップは、未加工のウェーハ形態で（すなわち、複数のパッケージ化されていないチップを有する単一のウェーハとして）、ベアダイとして、あるいはパッケージ化された形態で流通させることができる。後者の場合、このチップは、単一のチップパッケージ（リード線がマザーボードまたは他のより高レベルのキャリアに取り付けられたプラスチックキャリアなど）またはマルチチップパッケージ（表面相互接続または埋設相互接続のいずれか一方または両方を有するセラミックキャリアなど）に搭載されている。いずれの場合も、次いで、チップを、（ａ）マザーボードなどの中間製品または（ｂ）最終製品のいずれか一方の一部として、他のチップ、ディスクリート回路素子および／または他の信号処理装置と一体化させる。最終製品は、おもちゃや他の低価格の用途から、表示装置、キーボードまたは他の入力装置および中央制御装置を有する高度なコンピュータ製品に至るまでの、集積回路チップを含むあらゆる製品であってもよい。
【００３３】
本明細書の態様は、以下のように記載することもできる。
【００３４】
１．少なくとも１つの計算装置上のメモリに、データを暗号化するために使用される少なくとも１つの暗号化キーを作成および管理するように構成されたキー管理プログラムを実装する工程と、前記少なくとも１つの計算装置上のメモリに、少なくとも１人の許可されたユーザに関連づけられた少なくとも１つのキーファイルであって、疑似ランダムバイト列と前記キーファイルを前記少なくとも１人のユーザに関連づけるために使用される固有のハッシュ値とを含むキーフィールドを含むキーファイルを実装する工程と、前記キーフィールドからランダムに選択される、前記キーフィールドのサブセットである基本文字セットを構築する工程と、前記基本文字を暗号化アルゴリズムに入力して前記暗号化キーを生成する工程と、暗号化されるデータを受信する工程と、前記暗号化キーを用いて前記データを暗号化する工程とを含む、コンピュータに実装されたデータを暗号化する方法。
【００３５】
２．前記キー管理プログラムを用いて、疑似ランダムバイト列として前記キーフィールドを生成する工程をさらに含む、実施形態１に記載の方法。
【００３６】
３．前記ユーザが新しいと判定するとすぐに、ユーザ名、パスフレーズ、前記ユーザの計算装置に関連する現在の日付、前記ユーザの計算装置に関連する現在の時間、前記ユーザの計算装置に関連するオペレーティングシステムのバージョン、および前記ユーザの計算装置に関連するＩＰアドレスのうちの少なくとも１つを含む選ばれたユーザに固有の情報を前記ユーザから得る工程をさらに含む、実施形態１〜２に記載の方法。
【００３７】
４．前記ユーザに固有の情報の少なくとも一部をハッシュ関数に入力して前記固有のハッシュ値を生成する工程をさらに含む、実施形態１〜３に記載の方法。
【００３８】
５．前記ユーザが新しくないと判定するとすぐに、前記ハッシュ値に基づいて前記ユーザの識別を確認する工程をさらに含む、実施形態１〜４に記載の方法。
【００３９】
６．前記ユーザに前記パスフレーズの再入力を促す工程と、以前に前記ハッシュ値を生成するために使用された同じユーザ固有情報を用いて、前記ハッシュ関数を実施する工程と、前記結果を前記ユーザに関連づけられた前記キーファイルに格納された前記ハッシュ値と比較して、前記結果および前記ハッシュ値が同一であるか否かを判定する工程とをさらに含む、実施形態１〜５に記載の方法。
【００４０】
７．基本文字セットを構築する前記工程は、前記キーフィールドから連続しない文字をランダムに選択する工程をさらに含む、実施形態１〜６に記載の方法。
【００４１】
８．基本文字セットを構築する前記工程は、キー抽出アルゴリズムを用いて、前記キーフィールドから文字をランダムに選択する工程をさらに含む、実施形態１〜７に記載の方法。
【００４２】
９．前記キー抽出アルゴリズムが危険に曝されていると判定するとすぐに、前記キー抽出アルゴリズムを修正し、かつそれを前記少なくとも１人の許可されたユーザに配信する工程をさらに含む、実施形態１〜８に記載の方法。
【００４３】
１０．疑似乱数発生器（「ＰＲＮＧ」）を用いて、前記キーフィールドを生成する工程をさらに含む、実施形態１〜９に記載の方法。
【００４４】
１１．長い疑似ランダムバイト配列（「ＬＰＲＳ」）を生成する工程と、前記ＬＰＲＳ内の疑似ランダム入口点を選択し、かつ前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数のバイトを選択することにより、疑似ランダム列を構築する工程とをさらに含む、実施形態１〜１０に記載の方法。
【００４５】
１２．疑似ランダム列を構築する前記工程は、前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数の連続したバイトを選択する工程をさらに含む、実施形態１〜１１に記載の方法。
【００４６】
１３．疑似ランダム列を構築する前記工程は、前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数の連続しないバイトを選択する工程をさらに含む、実施形態１〜１２に記載の方法。
【００４７】
１４．前記少なくとも１つの計算装置上のメモリに前記ＰＲＮＧを実装する工程をさらに含む、実施形態１〜１３に記載の方法。
【００４８】
１５．前記少なくとも１つの計算装置上のメモリに、前記キー管理プログラムおよび前記機微なデータを暗号化／復号化するための暗号化モジュールと通信するように構成された少なくとも１つのクライアントアプリケーションを実装する工程をさらに含む、実施形態１〜１４に記載の方法。
【００４９】
１６．前記データを暗号化する前記工程は、既知の値を有するトークンを生成する工程と、前記トークンの第１のインスタンスを前記データの開始点に挿入する工程と、チェックサム値をランダムに生成する工程と、前記チェックサム値を第１の部分と第２の部分に分ける工程と、前記チェックサム値の前記第１の部分を前記トークンの前記第１のインスタンスと前記データの開始点との間に挿入する工程と、前記チェックサム値の前記第２の部分を前記データの終了点に挿入する工程と、前記トークンの第２のインスタンスを前記チェックサム値の前記第２の部分の後ろに挿入する工程と、前記暗号化キーを用いて、前記トークンの前記第１のインスタンス、前記チェックサム値の前記第１の部分、データ、前記チェックサム値の前記第２の部分、および前記トークンの前記第２のインスタンスからなる列全体を暗号化する工程とをさらに含む、実施形態１〜１５に記載の方法。
【００５０】
１７．チェックサム値をランダムに生成する前記工程は、前記第１の部分が前記第２の部分と既知の関係を有するように、前記チェックサム値の前記第１の部分で始まり、かつ前記チェックサム値の前記第２の部分に引き継がれる一連の整数を生成する工程をさらに含む、実施形態１〜１６に記載の方法。
【００５１】
１８．正しくない暗号化キーで復号化されたことにより破損しているか部分的に破損しているトークンを検出するとすぐに、読取り可能であるが偽のデータを出力する工程をさらに含む、実施形態１〜１７に記載の方法。
【００５２】
１９．少なくとも１つの計算装置上のメモリに、データを暗号化するために使用される少なくとも１つの暗号化キーを作成および管理するように構成されたキー管理プログラムを実装する工程と、前記少なくとも１つの計算装置上のメモリに、少なくとも１人の許可されたユーザに関連づけられた少なくとも１つのキーファイルであって、疑似ランダムバイト列と、前記キーファイルを前記少なくとも１人のユーザに関連づけるために使用される固有のハッシュ値とを含むキーフィールドを含むキーファイルを実装する工程と、長い疑似ランダムバイト列（「ＬＰＲＳ」）を生成し、前記ＬＰＲＳ内の疑似ランダム入口点を選択し、かつ前記疑似ランダム入口点で始まる前記ＬＰＲＳ内の所定数のバイトを選択することにより疑似ランダム列を構築して、前記キーフィールドを生成する工程と、前記キーフィールドからランダムに選択される、前記キーフィールドのサブセットである基本文字セットを構築する工程と、前記基本文字を暗号化アルゴリズムに入力して前記暗号化キーを生成する工程と、暗号化されるデータを受信する工程と、前記暗号化キーを用いて前記データを暗号化する工程とを含む、コンピュータに実装されたデータを暗号化する方法。
【００５３】
２０．少なくとも１つの計算装置上のメモリに、データを暗号化するために使用される少なくとも１つの暗号化キーを作成および管理するように構成されたキー管理プログラムを実装する工程と、前記少なくとも１つの計算装置上のメモリに、少なくとも１人の許可されたユーザに関連づけられた少なくとも１つのキーファイルであって、疑似ランダムバイト列と、前記キーファイルを前記少なくとも１人のユーザに関連づけるために使用される固有のハッシュ値とを含むキーフィールドを含むキーファイルを実装する工程と、前記キーフィールドからランダムに選択される、前記キーフィールドのサブセットである基本文字セットを構築する工程と、前記基本文字を暗号化アルゴリズムに入力して前記暗号化キーを生成する工程と、既知の値を有するトークンを生成する工程と、前記トークンの第１のインスタンスを前記データの開始点に挿入する工程と、チェックサム値をランダムに生成する工程と、前記チェックサム値を第１の部分と第２の部分とに分ける工程と、前記チェックサム値の前記第１の部分を前記トークンの前記第１のインスタンスと前記データの開始点との間に挿入する工程と、前記チェックサム値の前記第２の部分を前記データの終了点に挿入する工程と、前記トークンの第２のインスタンスを前記チェックサム値の前記第２の部分の後ろに挿入する工程と、前記暗号化キーを用いて、前記トークンの前記第１のインスタンス、前記チェックサム値の前記第１の部分、データ、前記チェックサム値の前記第２の部分、および前記トークンの前記第２のインスタンスからなる列全体を暗号化する工程とを含む、コンピュータに実装されるデータを暗号化する方法。
【００５４】
本発明の態様について少なくとも１つの例示的な実施形態を参照して説明してきたが、本発明はそれらに限定されないことを当業者であれば明確に理解することができる。むしろ、本発明の範囲は、添付の特許請求の範囲のみと合わせて解釈されるものであり、本発明者らは、特許請求されている主題が本発明であるとみなすことを、ここに明らかにするものである。
【図１】
0006285536.tif 000002
【図２】
0006285536.tif 000003
【図３】
0006285536.tif 000004
【図４】
0006285536.tif 000005
【図５】
0006285536.tif 000006
【図６】
0006285536.tif 000007
【図７】
0006285536.tif 000008
【図８】
0006285536.tif 000009
【図９】
0006285536.tif 000010
【図１０】
0006285536.tif 000011