(57)【要約】データを保存し、当該データに対し論理比較及びその他動作を実行する方法及び装置であって、当該比較及び動作の結果では保存データについて限定された情報しか開示されない。保存データは、パスワード、生体認証データ、クレジットカードデータ、個人を一意に識別する個人識別子、エンティティが所定レベルでのアクセス権または認証を請求する認証レベル、選挙での投票数、及び暗号鍵などの機密情報を含んでもよいが、これらに限定されない。装置内の制御ロジックは、データが開示されるのを防ぐ制限コマンドインタフェースを介さずにデータストアに直接アクセスすることを防ぐ。例えば、推定上のパスワードをデータストアのパスワードに照らしてチェックするなどの動作を装置が実行し、成功または失敗を返すが、保存パスワードを開示しない。【選択図】図３
2016531508.tif 000002
【特許請求の範囲】
【請求項１】
装置において、
複数のユーザに関連するデータを保護する前記装置を使用するアプリケーションサーバとメッセージを受送信するよう構成されたインタフェース、及び
メモリに保存された情報に対し限定数の所定動作を実行するよう構成されたプロセッサを備え、前記情報は、前記複数の独立したユーザに関連し、不正アクセスから安全に守られるべきデータを備え、
前記インタフェースは、前記複数の独立ユーザの一人に関連するデータを備える前記アプリケーションサーバからメッセージを受信するよう構成され、前記データは別のデバイスから前記アプリケーションサーバが受信したものであり、
前記プロセッサは、前記受信データに基づくデータを前記メモリに保存された前記セキュアデータに対し比較することを含め、前記メモリの前記情報に対し動作を実行し、前記比較に基づき、前記アプリケーションサーバに前記インタフェースを介して応答するよう構成され、
前記限定数の所定動作は、前記アプリケーションサーバへの前記メモリに保存された前記セキュアデータの提供を含まない、装置。
【請求項２】
前記複数の独立ユーザに関連する情報を保存するように構成されたメモリを備える、請求項１又は２に記載の装置。
【請求項３】
前記メモリに保存された前記情報は、インデックス、及び、各インデックスに関連するデータを備え、前記プロセッサは、前記インデックスを使用して前記情報に対し前記限定数の所定動作を実行するよう構成された、請求項１、２又は３に記載の装置。
【請求項４】
前記メモリに保存された前記情報は、ユーザＩＤ、及び、各ユーザＩＤに関連するユーザ認証用の認証データを備え、前記アプリケーションサーバは、前記装置からの応答に基づきユーザを認証するよう配置された認証サーバである、先行する請求項のいずれかに記載の装置。
【請求項５】
前記メモリに保存された前記情報は、1または複数の外部リソース用のユーザＩＤ、並びに、前記ユーザＩＤに関連するパスワード、生体認証データ、及び個人識別番号のうちの1または複数を備え、前記アプリケーションサーバは、前記装置からの応答に基づき前記1または複数の外部リソースへのアクセスを許可または拒否するよう構成された、先行する請求項のいずれかに記載の装置。
【請求項６】
前記プロセッサは、実行中にプログラムできないよう構成された、先行する請求項のいずれかに記載の装置。
【請求項７】
前記プロセッサは、前記アプリケーションサーバから所定長までしかメッセージを受け付けず、前記所定長を超える入力メッセージを拒否、または切り捨てるよう構成された、先行する請求項のいずれかに記載の装置。
【請求項８】
前記限定数の所定動作は、前記メモリの前記セキュアデータを前記アプリケーションサーバから受信したデータでアップデートする操作を備えた、先行する請求項のいずれかに記載の装置。
【請求項９】
前記プロセッサは、前記限定数動作の結果を前記アプリケーションサーバに提供するよう構成され、前記結果は成功、失敗、またはエラー状態についての情報に限られた、先行する請求項のいずれかに記載の装置。
【請求項１０】
前記インタフェースは第一インタフェースを提供し、前記装置はさらにバックアップエンティティに情報を提供する第二インタフェースを備え、
前記プロセッサは、暗号化形式のセキュアデータを前記バックアップエンティティに前記第二インタフェースを介して提供するよう構成された、先行する請求項のいずれかに記載の装置。
【請求項１１】
前記メモリは、前記セキュアデータを保存するハッシュテーブルとして組織されるフラッシュメモリを備え、前記フラッシュメモリは、それぞれがユーザプロファイルを収める一律な空間ブロックとして組織された、先行する請求項のいずれかに記載の装置。
【請求項１２】
前記メモリは、ユーザプロファイルに関連するデータ及びメタデータを前記一律空間ブロックの同一ブロックに保存するよう構成された、請求項１１に記載の装置。
【請求項１３】
先行する請求項のいずれかに記載の装置、及び
複数のユーザに関連するデータを保存するために前記メモリを使用するよう構成されたアプリケーションサーバを備え、
前記アプリケーションサーバは、前記複数の独立ユーザに関連する複数のデバイスからデータを受信し、前記複数のデバイスから受信したデータを、前記メモリに保存されたデータに対し比較する前記プロセッサに、前記インタフェースを介し送信するよう構成される、システム。
【請求項１４】
前記複数デバイスと前記アプリケーションサーバとの間を仲介するよう構成されたプリサーバをさらに備え、前記プリサーバは、前記メモリに保存されたセキュアデータに対し比較されるように前記複数デバイスから受信したデータを書換え、前記複数デバイスから受信した前記実際データではなく前記書換えデータを前記アプリケーションサーバに転送するよう構成され、前記プリサーバは前記データを、
前記データの暗号化、
テンポラリ・タグへの前記データの書換え、並びに、前記インタフェースを介した前記プロセッサへの前記タグ及びデータの送付、及び前記アプリケーションサーバへの前記タグのみの送付、並びに
前記プリサーバと前記プロセッサとの共有鍵を使用したハッシュ値への前記データの書換え、
のいずれかにより書き換えるよう構成された、請求項１３に記載のシステム。
【請求項１５】
複数の独立ユーザに関連するデータを不正アクセスから保護する装置を使用するアプリケーションサーバから前記装置にメッセージを受信し、前記メッセージは、前記アプリケーションサーバが別のデバイスから受信したデータを備え、
前記メッセージに応じて、メモリに保存した情報に対し動作を実行し、前記情報は、前記複数独立ユーザに関連し、不正アクセスから安全に守られるべきデータを備え、
前記比較に基づき前記アプリケーションサーバに応答を返し、前記動作は、前記装置のプロセッサが前記メモリの情報に対し実行可能な限定数の所定動作のいずれかである、コンピュータ実施方法。
【請求項１６】
前記限定数所定動作は前記セキュアデータをアップデートすることを含み、前記方法ではさらに、不正アクセスから保護されるべきデータとともにアプリケーションサーバからメッセージを受信し、前記メモリを前記受信データでアップデートする、請求項１５に記載のコンピュータ実施方法。
【請求項１７】
暗号化形式の前記セキュアデータを外部バックアップデバイスに、前記アプリケーションサーバとのメッセージの受送信を介するインタフェースとは別のインタフェースを介して提供する、請求項１５または１６に記載のコンピュータ実施方法。
【請求項１８】
命令を備え、プロセッサにより実行されると前記命令は前記プロセッサに、
複数のユーザに関連したデータを保護するために前記プロセッサを備える装置を使用するよう構成されたアプリケーションサーバからインタフェースを介して受信したメッセージを受信及び解釈させ、前記メッセージは別のデバイスから前記アプリケーションサーバが受信したデータを備え、
前記複数ユーザに関連し、不正アクセスから安全に守るべきデータを備える情報を保存するメモリに対し限定数の所定動作を実行させ、前記限定数動作は、前記受信データに基づくデータをメモリに保存されたセキュアデータに対し比較することを含み、
前記限定数所定動作の動作結果に基づき、前記アプリケーションサーバに前記インタフェースを介し応答を返させ、前記限定数動作では前記アプリケーションサーバにセキュアデータを返すことを含まない、コンピュータプログラム。
【請求項１９】
セキュアメモリに保存されたデータに対し比較されるべきデータをクライアントデバイスから受信するアプリケーションサーバ、及び
前記セキュアメモリの前記データに対し比較されるべき、前記クライアントデバイスから受信したデータを書換え、使用中の前記データも保護するために、前記実受信データではなく前記書換え済受信データを前記アプリケーションサーバに転送するよう構成されたプリサーバを備え、
前記保存データは複数ユーザに関連し、前記セキュアメモリは前記アプリケーションサーバの一部を形成するか前記アプリケーションサーバの外部デバイスの一部を形成し、保存中の前記保存データを保護する、不正アクセスから安全に守るべきデータの保護システム。
【請求項２０】
ハッシュテーブルとして組織されるフラッシュメモリを備え、前記フラッシュメモリは、それぞれがユーザプロファイルを収める一律な空間ブロックを備える、ユーザデバイスを認証するための証明書データを保存するメモリ。
【請求項２１】
ユーザ証明書保存のためのフラッシュメモリ使用方法において、
前記フラッシュメモリは、ハッシュテーブルとして組織され、それぞれがユーザプロファイルを収める一律空間ブロックを備え、前記フラッシュメモリ使用方法では、
ユーザプロファイルに関連するデータ及びメタデータの双方を前記一律空間ブロックの一ブロックに保存し、
前記ユーザプロファイルをアップデートするために、コマンドに応じて個別ブロック書込み動作を実行する、フラッシュメモリ使用方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不正アクセスからデータを安全に守るデータ処理に関する。特に、しかし排他的でなく、本発明は、アプリケーションサーバがユーザを認証できるようにするために、複数ユーザに関連しセキュアメモリに保存された情報に対しアプリケーションサーバからのコマンドに応じて動作を実行する装置に関する。
【背景技術】
【０００２】
本特許明細書は、様々な工夫や機能を説明するだけでなく、創造的な表現もする。そのため、本特許文書の開示では一部に、著作権の請求がなされた文献の内容を含んでおり、著作権  Ｓｉｌｉｃｏｎ  Ｓａｆｅ  Ｌｉｍｉｔｅｄ  ２０１３及び２０１４（１７  Ｕ．Ｓ．Ｃ．第４０１条に基づく）に基づき本明細書で公表する。著作権保護請求の対象は、本特許出願に示され記載された本発明の実施形態に関連する保護可能な表現全てである。
【０００３】
著作権者は、誰に対しても特許文献または特許開示文献の複製については、特許商標庁の特許ファイルや記録にあり異論はないが、それ以外では全ての著作権は無断の複写転載を禁じる。あらゆる著作権のもといかなるライセンス表示も暗示も許諾しない。
【０００４】
機密データを安全に保存する必要があるのは、例えば、コンピュータパスワードの保存が必要な場合である。パスワードは、コンピュータまたはリソースへのアクセスのために本人確認に使用される秘密の単語、或いは、数字及びまたは文字のストリングである。パスワードは、アクセスが許諾されていない人には秘匿にすべきであり、セキュアデータストアに保存されなければならない。本ストアは従来、認証システムによるアクセスのみを意図したパスワードファイルである。
【０００５】
パスワードファイルは、コンピュータハッカには攻撃対象となるハニーポットであり、適切に保護されなければ、コンピュータまたはネットワークを脆弱化にされかねない。現在のところ、商業界でよくあるサイバー攻撃形式の一つに、パスワードファイルの盗難がある。一般的に、脆弱さを悪用してインターネット経由で（または、ワーム経由や、ネットワーク内にインストールされたトロイの木馬プログラムにより）ウェブサイトに侵入され、パスワードファイルが盗まれる。そうしたパスワードは悪戯や犯罪行為に使われる。
【０００６】
パスワードファイルが盗難されると、組織及び個人ユーザの双方に多大な迷惑がかかるだけでなく（ユーザはパスワードをリセットする必要があるので）、ユーザが実際にどれほどパスワードを新しくしたか（例えば、ユーザがパスワードをｊｊｊ５から単純にｊｊｊ６に変更する場合など）について不確実であるためにシステムの脆弱性に将来的に疑問が生じる。
【０００７】
また、ユーザの傾向として、部分的に変更しただけのパスワードを、ソーシャルメディアウェブサイトからオンラインショッピングウェブサイトまで様々なシステムで使用しているため、他のシステムの安全性にも副次的に損害が発生してしまうという重大な問題もある。さらに、パスワードファイルの盗難という問題点は、その盗難の発生時にわかることもあるが、盗難が発生していないと確信できないことにある。よって、盗難が発生したことを最初に発見した時が、システムが大規模に危殆化される時なのである。
【０００８】
当業者であれば、先行技術による様々な、パスワードファイル及びファイル内容のセキュア方法がわかるであろう。そういった方法では、パスワードハッシュと呼ばれるオリジナルの平文パスワードを暗号化し保存、またはソルト化パスワードのハッシュ値の保存といった方法が最も一般的である。
【０００９】
ハッシュチェーン及びレインボーテーブルといった暗号化パスワードをオリジナルの平文に復号化する方法が開発されたが、双方とも不十分である。そのため、パスワードストア自体危殆化されず、まずは盗まれないことが最重要である。
【００１０】
本発明は、上記脆弱性、及び、上には記述の無いその他の問題にも対処する。
【発明の概要】
【００１１】
本発明により提供される装置は、複数のユーザに関連するデータを不正アクセスから保護する装置を使用するアプリケーションサーバとメッセージを受送信するよう構成されたインタフェース、及び、メモリに保存された情報に対し限定数の所定動作を実行するよう構成されたプロセッサを備え、情報は、複数の独立したユーザに関連し、不正アクセスから安全に守られるデータを備え、インタフェースは、複数の独立ユーザの一人に関連するデータを備えるアプリケーションサーバからメッセージを受信するよう構成され、データは別のデバイスからアプリケーションサーバが受信したものであり、プロセッサは、受信データをメモリに保存されたセキュアデータに照らし比較することを含め、メモリの情報に対し動作を実行し、比較に基づきアプリケーションサーバにインタフェースを介して応答するよう構成され、限定数の所定動作は、アプリケーションサーバへのメモリに保存されたセキュアデータの提供を含まない。
【００１２】
装置はさらに、複数の独立ユーザに関連する情報を保存するメモリを備える。プロセッサ及びメモリは、単一集積回路として提供してもよい。また、メモリは例えば、装置に接続可能な独立したデバイスであってもよい。メモリは、プロセッサにのみアクセス可能に配置されてもよい。装置は、プロセッサとメモリの間の接続部を備えてもよく、接続部はメモリにだけ接続して提供してもよい。
【００１３】
本発明は、特定プロセッサのみアクセス可能な証明書情報を保存する秘匿メモリまたはプライベートメモリを提供する。プロセッサは、ローカルプロセッサであってもよい。
【００１４】
プロセッサは、アプリケーションサーバの処理ロジックから分離され、アプリケーションサーバがタスクを実行するのに必要なメモリ内のデータとの連携は、プロセッサによる限られた動作を通して実行されるという点で、メモリ内データの安全な保存を確実にする。複数ユーザに関連する秘匿データを盗もうとアプリケーションサーバに対し攻撃しても、秘匿データは秘匿メモリに保存され、装置のプロセッサは、アプリケーションサーバの処理ロジックが秘匿データには決してアクセスできないため、失敗に終わる。
【００１５】
プロセッサは、受信データを直接保存データに照らし比較してもよい。また、プロセッサは、保存データに照らして比較する前に、受信データを処理してもよい。比較には、完全マッチング、統計的マッチング、変換マッチング、または検証マッチングなどを含んでもよいが、これらに限定されない。検証マッチングは、保存データを使って受信データのデジタル署名を確認してもよい。
【００１６】
メモリに保存された情報は、インデックス及び各インデックスに関連するデータを備えてもよく、プロセッサはインデックスを使用し情報に対し限定数の所定動作を実行するよう構成されてもよい。
【００１７】
メモリに保存された情報は、ユーザＩＤ、及び、各ユーザＩＤに関連する、ユーザ認証用の認証データを備えてもよく、アプリケーションサーバは、当該装置からの応答に基づきユーザを認証するよう配置された認証サーバであってもよい。
【００１８】
メモリに保存された情報は、1または複数の外部リソース用の、ユーザＩＤ、並びに、ユーザＩＤに関連するパスワード、生体認証データ、及び個人識別番号のうち1または複数を備えてもよく、アプリケーションサーバは、装置からの応答に基づき当該1または複数の外部リソースへのアクセスを許可または拒否するよう構成されてもよい。
【００１９】
メモリに保存された情報は、宝くじチケット識別番号、及び、宝くじチケットの購入時に登録された購入者識別情報を備えてもよい。
【００２０】
ユーザとは人またはパーソナルデバイスであってよいが、ユーザは必ずしも一人の人に関連付けられなくてもよい。例えば、ある実施形態において、複数の独立したユーザがセンサなどの複数のデータ保存デバイスであり、アプリケーションサーバが当該デバイスに使用され、受信データが実際に所与のデバイスから来たことを確認する。複数独立ユーザの数が大きくなり、特定の実施及び用途次第では、例えば、何十万、何億ということもあり得る。また、複数ユーザの数は、少数もあり得る。
【００２１】
プロセッサは、実行中にプログラムできないよう構成されてもよい。
【００２２】
プロセッサは、使用中にはプログラムも変更も不可にしてもよい。つまり、一旦配置されると、遠隔からプログラムをプロセッサにダウンロードできなくてもよく、別のタスクまたは変更タスクを実行させるよう、プロセッサを遠隔から変更をできなくてもよい。
【００２３】
プロセッサは、当該アプリケーションサーバから所定長までしかメッセージを受け付けず、当該所定長を超える入力メッセージを拒否または切り捨てるよう構成されてもよい。
【００２４】
限定数の所定動作は、メモリのセキュアデータをアップデートする動作を備えてもよい。装置は、アプリケーションサーバから新規データを受信しメモリをアップデートしてもよい。
【００２５】
ある実施形態において、プロセッサは外部への限定した特定インタフェースを提供してもよく、当該インタフェースは、データの保存、比較、アップデート及び削除を行う動作のみ許諾し、また、データに影響せずデータを開示しない管理機能の追加のみ許諾する。
【００２６】
プロセッサは、限定数動作による結果をアプリケーションサーバにインタフェースを介して提供するよう構成されてもよく、結果は成功、失敗、またはエラー状態についての情報に限定されてもよい。
【００２７】
プロトコル処理、暗号化及び符号化、またはバックアップなどの処理の異なる態様の間の分離に限定されないが、そういった処理の実装を、プロセッサにおいて分けてもよい。そういった処理を、物理的に独立した処理ユニットにおいて実施し、当該処理ユニットは、独立したプロセッサ同士がメモリを共有しない内部通信システムを使用して互いに通信する。
【００２８】
プロセッサは、ハーバードアーキテクチャ型プロセッサ、特定の目的の書換え可能ゲートアレイ（ＦＰＧＡ）または特定用途向けＩＣ（ＡＳＩＣ）プロセッサとして実施されてもよく、プロセッサへのコード注入攻撃を禁じる。
【００２９】
装置は、追加して内部ストレージに、または、プライベートネットワーク接続または暗号化ネットワーク接続を使って外部ストレージに、セキュアデータを確実にバックアップするよう構成されてもよい。このため、ある実施例において、装置はさらにバックアップメモリを備えてもよい。
【００３０】
インタフェースは、第一インタフェースを提供してもよく、装置はさらに、外部バックアップデバイスに情報を提供する第二インタフェースを備えてもよく、プロセッサは、セキュアデータをバックアップデバイスに第二インタフェースを介して提供するよう構成されてもよい。セキュアデータは、暗号化形式でバックアップデバイスに提供されてもよい。バックアップデバイスは、上に定義したように別の装置であってもよく、プライベートネットワークまたは別のセキュアメモリであってもよい。
【００３１】
メモリは、セキュアデータを保存するハッシュテーブルとして組織されたフラッシュメモリを備えてもよく、フラッシュメモリは、それぞれがユーザプロファイルを収める一律空間ブロックとして組織される。
【００３２】
メモリは、ユーザプロファイルに関連するデータ及びメタデータを一律空間ブロックの同一ブロックに保存するよう構成されてもよい。単一ブロックへの書込みが可能なフラッシュメモリを使用することで、メタデータ用第二テーブルが必要なくなり、書込み読出し時間が改善し、メモリ寿命が延び、データの不連続性リスクも減少する。
【００３３】
ユーザプロファイルは、ユーザアイデンティティデータ、証明書データ、及びユーザアイデンティティに関連するメタデータ、並びに、ユーザアイデンティティに関連する稀に変更されるデータを備えてもよい。
【００３４】
また、本発明により提供されるシステムは、上で定義した装置、及び、複数のユーザに関連するデータを保存するために装置を使用するアプリケーションサーバを備え、アプリケーションサーバは、複数の独立ユーザに関連する複数のデバイスからデータを受信し、複数のデバイスから受信したデータをメモリに保存されたデータに照らし比較する装置に送信するよう構成される。アプリケーションサーバは、リソースを共有して、クライアントサーバネットワークの1または複数のアプリケーションに提供してもよい。
【００３５】
システムは、装置とアプリケーションサーバとの間の接続を暗号化してもよい。
【００３６】
システムはさらに、複数デバイスとアプリケーションサーバとの間を仲介するプリサーバを備える。プリサーバは、複数デバイスのいずれかから受信したデータをセキュアメモリに保存されたデータに照らし比較されるよう書換え、デバイスから受信したデータではなく書換えデータをアプリケーションサーバに転送するよう構成される。プリサーバは、データの暗号化、テンポラリ・タグへのデータの書換え、並びに、チャネル外での装置へのタグ及びデータの送付、及びアプリケーションサーバへのタグのみの転送、または、プリサーバと装置で共有鍵を使用したハッシュ値へのデータの書換え、のいずれかにより、データを書き換えるよう構成される。プロセッサは、書換えデータからオリジナルデータに復元させ、メモリに保存されたセキュアデータに対し復元データを比較するよう構成されてもよい。
【００３７】
また、本発明により提供されるコンピュータ実施方法では、複数のユーザに関連するデータを保護する装置を使用するアプリケーションサーバからのメッセージであって、メッセージはアプリケーションサーバが別のデバイスから受信したデータを備え、メモリに保存した情報であって、複数独立ユーザに関連し不正アクセスから安全に守られるデータを備えた情報に対し動作をメッセージに応じて実行し、比較に基づきアプリケーションサーバに応答を返す。動作は、装置のプロセッサがメモリの情報に対し実行可能な限定数の所定動作のいずれかである。
【００３８】
限定数の所定動作では、セキュアデータをアップデートすることを含んでもよく、当該方法ではさらに、不正アクセスから保護されるデータとともにアプリケーションサーバからメッセージを受信し、メモリを受信データでアップデートすることを備えてもよい。
【００３９】
当該方法ではさらに、暗号化形式のセキュアデータを外部バックアップデバイスに、アプリケーションサーバとのメッセージの受送信を介するインタフェースとは別のインタフェースを介して提供してもよい。
【００４０】
当該方法ではさらに、所定長を超えるメッセージを受信すると、当該メッセージを拒否または切り捨てを備えてもよい。
【００４１】
また、本発明により提供されるコンピュータプログラムは命令を備え、プロセッサにより実行されると命令はプロセッサに、複数のユーザに関連したデータを保護するためにプロセッサを備える装置を使用するよう構成されたアプリケーションサーバからインタフェースを介して受信したメッセージであって、別のデバイスからアプリケーションサーバが受信したデータを備えたメッセージを受信及び解釈させ、当該プロセッサのみがアクセス可能なメモリに保存された情報であって、複数ユーザに関連し不正アクセスから安全に守られるデータを備えた情報に対し限定数の所定動作を実行させ（当該限定数動作では、受信データに基づくデータをメモリに保存されたセキュアデータに照らして比較し）、限定数所定動作の動作結果に基づき、アプリケーションサーバにインタフェースを介し応答を返させる（当該限定数動作では、アプリケーションサーバにセキュアデータを返すことを含まない）。
【００４２】
また、本発明により提供される非一時的コンピュータ読取可能媒体は、コンピュータプログラムを保存し有する。
【００４３】
また、本発明により提供される不正アクセスから安全にデータを守るデータ保護システムは、セキュアメモリに保存されたデータに照らし比較されるデータをクライアントデバイスから受信するアプリケーションサーバ、及び、クライアントデバイスとアプリケーションサーバとの間を仲介するプリサーバを備える。当該保存データは複数ユーザに関連付けられ、当該セキュアメモリはアプリケーションサーバの一部を形成するかアプリケーションサーバの外部デバイスの一部を形成し、保存中の保存データを保護する。当該プリサーバは、クライアントデバイスから受信し、セキュアメモリのデータに照らし比較されるデータを書換え、使用中のデータも保護するために、クライアントサーバからの実受信データではなく書換え済受信データをアプリケーションサーバに転送するよう構成される。プリサーバは、データの暗号化、テンポラリ・タグへのデータの書換え、または、プリサーバと装置で共有鍵を使用したハッシュ値へのデータの書換えのいずれかによりデータを書き換えるよう構成されてもよい。システムは、クライアントデバイスからのデータをセキュアメモリに保存されたデータに比較するプロセッサを備えてもよく、プロセッサは、比較を実行する前に、書換えデータからオリジナルデータに復元するよう構成されてもよい。
【００４４】
また、本発明により提供されるプリサーバは、上記のようにシステムで使用され、またはシステムに備えられる。当該プリサーバは、クライアントデバイスから受信したデータを書換え、書換えたデータをアプリケーションサーバに転送するよう構成される。
【００４５】
またさらに、本発明により提供されるメモリは、ユーザデバイスを認証する証明書データを保存し、ハッシュテーブルとして組織されるフラッシュメモリであって、それぞれがユーザプロファイルを収める一律空間ブロックを備えるフラッシュメモリを備える。
【００４６】
各ブロックは、ユーザアイデンティティデータ、証明書データ、及び、ユーザアイデンティティに関連するメタデータを保存してもよい。従って、プロファイルがアップデートを要する場合、単一ブロックのみの書込み動作を要してもよい。
【００４７】
また、本発明により提供される、ユーザ証明書保存のためのフラッシュメモリ使用方法では、フラッシュメモリは、ハッシュテーブルとして組織され、それぞれがユーザプロファイルを収める一律空間ブロックを備える。当該フラッシュメモリ使用方法では、ユーザプロファイルに関連するデータ及びメタデータの双方を一律空間ブロックの一ブロックに保存し、ユーザプロファイルをアップデートするために、コマンドに応じて単一ブロックの書込み動作を実行することを備える。
【００４８】
ユーザプロファイルのデータ及びメタデータが単一ブロックに書込まれる構造を使用することで、アップデートのための別の第二テーブルが必要なくなり、書込み／読出し性能が改善し、データの不連続性リスクが減少し、フラッシュメモリの寿命も延びる。
【００４９】
また、本発明により提供される比較記憶装置はアプリケーションサーバに対する手段を備え、秘匿情報を保存し秘匿情報に対する選択動作を実行し、これらの動作の結果を取得し、一方では、一旦保存された秘匿情報は、アプリケーションサーバが比較記憶装置から直接取得できないという意味において、情報の秘匿性を維持する。
【００５０】
秘匿情報の保存が許諾され、別の情報を当該保存秘匿情報に比較する場合、比較記憶装置は、比較結果の成功または失敗のみ開示してもよく、さらに要求があれば、失敗の理由について情報量を限定して開示してもよい。
【００５１】
秘匿情報は、比較記憶装置から秘匿情報を読み出す手段を確実に無くすか、比較記憶装置から読み出された秘匿情報が比較記憶装置内で保存される暗号鍵で確実に暗号化されるかのいずれかにより維持されてもよい。
【００５２】
ある実施形態において、秘匿情報に対して実施可能な動作はアプリケーションサーバにより変更可能であり、実際こういった動作はデバイスの搭載時には事前に定義されている。
【００５３】
比較記憶装置は、アプリケーション専用比較手段を可能にしてもよく、当該比較手段では、比較記憶装置の保存秘匿情報とアプリケーションにより提供される情報とを比較する。
【００５４】
比較記憶装置は、アプリケーションサーバが比較記憶装置に既に保存されている特定の秘匿情報について既知であることを証明でき、既知情報であるといった証明が比較記憶装置により実行されるアプリケーション専用情報比較の精度「まで」あるのであれば、アプリケーションサーバが比較記憶装置に保存された秘匿情報をアップデートする手段を提供してもよい。
【００５５】
比較記憶装置は、アプリケーションサーバが比較記憶装置に既に保存されている特定の秘匿情報について既知であることを証明でき、既知情報であるといった証明が比較記憶装置により実行されるアプリケーション専用情報比較の精度「まで」あるのであれば、アプリケーションサーバが比較記憶装置に保存された秘匿情報を削除する手段を提供してもよい。
【００５６】
比較記憶装置は、比較記憶装置内での冗長保存を支援して障害許容力を備えてもよい。
【００５７】
比較記憶装置は、システムで同時に使用される複数の当該比較記憶装置を支援して障害許容力を達成してもよい。
【００５８】
比較記憶装置は、秘匿情報のバックアップ手段を備え、比較記憶装置に保存された当該秘匿情報の個別暗号化バックアップを支援してもよい。
【００５９】
比較記憶装置は、アプリケーションサーバへの送信応答についてのインテグリティ検証手段を備え、比較記憶装置から送信される情報のデジタル署名を支援してもよい。
【００６０】
比較記憶装置は、比較記憶装置からアプリケーションサーバに送信される情報の秘匿性維持手段を備え、比較記憶装置から送信される情報の暗号化を支援してもよい。
【００６１】
比較記憶装置は、複数のアプリケーションサーバとの接続手段、及び当該アプリケーションサーバからの複数要求の受信手段を備えてもよい。
【００６２】
接続手段は、複数の要求と対応する複数の応答とのペア形成手段を備えてもよく、その手段は当該アプリケーションサーバからの要求メッセージ内の識別子を使用し、当該識別子が、当該要求に対応する比較記憶装置からアプリケーションサーバへの応答に含まれるようにする。
【００６３】
接続手段は、アプリケーションサーバと比較記憶装置との間における複数の様々なプロトコルの支援手段を備えてもよい。
【００６４】
プロトコル手段は、アプリケーションサーバと比較記憶装置との間における当該プロトコルの同時接続支援手段を備えてもよい。
【００６５】
比較記憶装置は、比較記憶装置のナノウォールコンポーネントと比較記憶装置の保存コンポーネントとの間における複数の様々なプロトコルの支援手段を備えてもよい。
【００６６】
プロトコルは、プロトコルのナノウォールコンポーネントとプロトコルの保存コンポーネントとの間における当該プロトコルの同時接続支援手段を備えてもよい。
【００６７】
接続手段は、バッファーオーバーフロー攻撃に対する防止手段を備えてもよい。
【００６８】
比較記憶装置のアーキテクチャは、コード注入攻撃に対する防止手段を備えてもよい。
【００６９】
比較記憶装置のアーキテクチャは、スタックスマッシング攻撃に対する防止手段を備えてもよい。
【００７０】
比較記憶装置は、ウェブサーバ、ゲームサーバ、データベースサーバ、またはその他演算及び／または保存リソースとして使用される汎用コンピュータが収集秘匿情報を保存する手段を提供してもよく、当該手段では、比較記憶装置への物理的アクセスを持たない人が比較記憶装置から当該収集秘匿情報を取得できないようにする。
【００７１】
比較記憶装置は、保存秘匿情報をメタデータに関連付けさせる手段を備えてもよく、当該メタデータは、保存秘匿情報が比較記憶装置による様々な動作でどのように使用されるかを記録し、具体的には、保存秘匿情報が特定の動作で利用可能か否かをメタデータが示してもよい。
【００７２】
メタデータは、比較記憶装置の動作により動的に修正されてもよい。
【００７３】
比較記憶装置は、保存秘匿情報からのチャレンジ列取得手段を備えてもよい。
【００７４】
本発明の実施形態は、関連インデックスでインデックス化されたデータのセキュア保存方法及び装置を提供し、当該インデックスを使用した保存データに対する動作性能を支援し、動作結果は保存データについての情報を限定して開示するようにする。
【図面の簡単な説明】
【００７５】
本発明の実施形態について添付図を参照し実施例で説明する。本明細書を通し参照する図は、下記の通りである。
【図１】本発明のある実施形態による装置の主要コンポーネントを示す概略図である。
【図２】本発明の別の実施形態による、セキュアデータストアとしてプライベートストレージネットワークを使用する装置のコンポーネントを示す概略図である。
【図３】本発明のある実施形態の実現による、ウェブサーバとインタフェースで接続するパスワードセーフ（ｐａｓｓｗｏｒｄ  ｓａｆｅ）の実施を示す概略図である。
【図４】図１及び図２の装置の処理ロジックを記載したフローチャートである。
【図５】セキュアデータの処理及びバックアップシステムの概略図である。
【図６】本発明の実施形態による証明書保存メモリの概略図である。
【図７ａ】「保存中の証明書」を保護するシステム、及び、プリサーバを備え「使用中の証明書」も保護するシステムを示す概略図である。
【図７ｂ】「保存中の証明書」を保護するシステム、及び、プリサーバを備え「使用中の証明書」も保護するシステムを示す概略図である。
【図８】図７ｂのシステムを使用した秘匿データの処理方法を示すフローチャートである。
【発明を実施するための形態】
【００７６】
図１を参照して厳重に情報を保存する装置を示す。装置は、装置へのメッセージ１を受信し、応答２を送信するフロントエンド・インタフェース３、及び多数の操作を実行するプロセッサ４を備える。図１の装置はさらに、複数のユーザに関する情報を保存するメモリ６も備える。情報は、パスワード、生体認証及び個人識別番号データなどがあるが、これらに限定されない秘匿または機密データであり、当該データへのアクセスが許可されていない者には機密にされる。また、装置は、プロセッサがメモリ内の情報の操作の実行に使用するバックエンド・インタフェース５も備える。プロセッサは、データを処理するよう構成されたデバイス、1または複数のコンポーネント、またはロジックであってもよく、固定ハードウェアとして、或いはハードウェアまたはソフトウェアの組合せとして実施されてもよい。プロセッサは、ロジック、プログラムメモリ、及び命令をプログラムメモリに保存したデータメモリを備えてもよい。フロントエンド・インタフェース３はフロントエンド・プロトコルを提供し、装置によるコマンド１の受信及び応答２の送信を可能にしている。バックエンド・インタフェース４はバックエンド・プロトコルを提供し、プロセッサによるメモリ６へのアクセスを可能にしている。メモリはプロセッサからのみアクセス可能である。つまり、メモリへの物理的なアクセスを持たない人は、プロセッサ４を介してしかメモリに接することができない。プロセッサは、メモリ内の秘匿情報に対し限定数の動作しか実行できないよう事前にプログラムされる。さらに実施例において、プロセッサを再プログラムして使用することはできない。プロセッサは、メモリに保存したデータを保護し、データを厳重に保存している。
【００７７】
装置はアプリケーションサーバと接続可能であり、当該アプリケーションサーバは、装置を使用し複数のユーザそれぞれに関する秘匿データを保護してもよい。アプリケーションサーバは装置を使用し、例えば、ユーザ認証、及び／または、ユーザによるデータへのアクセス制御を行ってもよい。プロセッサは、アプリケーションサーバからフロントエンド・インタフェース３を介して受信するコマンド１を解釈し実施し、フロントエンド・インタフェース３を介してアプリケーションサーバに応答２を返すよう構成される。プロセッサが実行するよう構成された限定動作では、アプリケーションサーバに秘匿データを返すことを含まない。反対に、装置は、アプリケーションサーバからメッセージ１で秘匿データを受信し、受信した秘匿データをメモリに保存された秘匿データと比較し、比較結果に基づき応答２を返してもよい。応答には、秘匿データが一致したあるいは検証された旨示してもよいが、秘匿データ自体を含めない。保存データに対する受信データの比較が成功しない場合、応答には装置がデータ一致に失敗した旨示してもよく、失敗理由についての情報も限定して提供してもよい。装置は、メモリの保存データをアプリケーションサーバから受信した新規データでアップデートしてもよい。
【００７８】
以降、装置を「比較記憶装置」、プロセッサを「ナノウォール」、メモリを「記憶装置」、「ストレージ装置」または「データストア」と呼ぶことがある。用語：アプリケーションサーバを使う場合は一貫して、比較記憶装置に接続可能または接続された装置であって、比較記憶装置を使用して秘匿情報を保護する装置を意味する。用語：アプリケーションサーバは、特定形式の装置を提示するものではなく、汎用コンピュータ、または本明細書に記載する以外の特定用途モードであってもよい。アプリケーションサーバは、クライアントサーバネットワークの1または複数のアプリケーションとリソースを共有してもよい。アプリケーションサーバは、例えば、クラウドにアプリケーションを提供するサーバであってもよい。追加して、あるいは代わりに、別のサーバ及び／またはデータベースに接続し、その接続管理を行ってもよい。上に挙げたように、ユーザデバイスがアクセスを要求するリソースへのアクセス管理を含んでもよい。アプリケーションサーバには、ウェブサーバ、ディレクトリサーバ、認証サーバ、または識別サーバを含むが、これらに限定されない。アプリケーションサーバは、複数のデバイスと通信するよう構成されてもよい。アプリケーションサーバは、例えば、複数のデバイスと、インターネットなどのデータ通信ネットワークを通してデータを受送信するよう構成されてもよい。アプリケーションサーバは、デバイスからデータを受信し、比較記憶装置に転送し、比較記憶装置がメモリに保存された秘匿データと比較する。アプリケーションサーバは、比較記憶装置を使用して、複数のユーザに関連するデータを保護するが、それは誰か特定のユーザに属する、または特定のユーザについて関連付けられたデータではない。比較記憶装置は、ユーザデバイスでもパーソナルデバイスでなくてもよく、システム内で使用されて複数の独立ユーザに関する情報を保存してもよい。
【００７９】
さらに、比較記憶装置は、自ハウジングに収められ物理的に独立したデバイスであってもよく、下に詳細を示すが、アプリケーションサーバと同じハウジング内で物理的に独立したエンティティであってもよい。アプリケーションサーバは、比較記憶装置とは別の自処理ロジック及び自メモリを備えるものである。アプリケーションサーバの1または複数のプロセッサ及びメモリを比較記憶装置とは別にしてもよいが、これは、比較記憶装置のチップとは別のチップ上に設置されることを意味する。また、同じシリコンデバイス上に配置することも可能であるが、アプリケーションサーバの処理ロジックと比較記憶装置の処理ロジックを物理的に別のロジックにし、アプリケーションサーバのメモリと比較記憶装置のメモリもまた物理的に別にする。例えば、比較記憶装置を含むクライアントサーバネットワークは、単一基板または単一シリコンデバイス、システム・オン・チップ（ＳＯＣ）、或いはクライアントサーバネットワーク・オン・チップ上で実施されてもよい。プロセッサもメモリも共有されないが、物理的に別のロジック及び別のメモリとしてチップ上に設置される。
【００８０】
図１は、本発明の実施形態の比較記憶装置における一般的な実施例を示しており、図１のハードウェア全体にわたる。
【００８１】
図１のハードウェアは、デバイスに送られたコマンドを解釈し実施するドメイン専用ロジックを備えるナノウォール４、データが収められる記憶装置６を備える。データは、ナノウォールと記憶装置との間をバックエンド・インタフェース５がサポートするバックエンド・プロトコルを使って転送される。フロントエンド・インタフェース３は、内部への動作要求メッセージ１、及び、成功応答及び失敗応答に限定された外部への応答メッセージ２の形式を規定するフロントエンド・プロトコルをサポートする。メッセージは、例えば、ウェブサーバなどの外部システムが、比較記憶装置へのコマンドを送信し、比較記憶装置からの応答を受信する手段である。
【００８２】
図２は、本発明による別の実施形態の実現であり、図１に示される構造の変形を示す。図１および図２において、参照番号が同じものは、同じコンポーネントを示す。しかし、本実現において、プライベートストレージネットワークをデータストアとして使用する。本実現において、比較記憶装置の構造を単純化してもよく、その構造では、比較記憶装置をアプリケーションドメインと記憶ネットワークを接続するナノウォールインタフェースに単純化する。
【００８３】
比較記憶装置は、アプリケーションサーバの処理ロジック及びメモリとは物理的に独立したエンティティである。比較記憶装置は、アプリケーションサーバのメイン処理ロジック及びメモリとは別のチップに実装されてもよい。比較記憶装置は、自ハウジングに収められ物理的に独立したデバイスであってもよい。アプリケーションサーバは当該デバイスと離間し、当該デバイスは、例えば、アプリケーションサーバにリモート接続を使用する接続が可能であってもよい。比較記憶装置は、イーサネット接続を使用するアプリケーションサーバに接続可能であってもよい。また、比較記憶装置は、アプリケーションサーバ内に物理的に独立して形成されてもよい。その場合、比較記憶装置は、例えば周辺装置相互接続バス（ＰＣＩ−バス）または内蔵汎用シリアルバス（ＵＳＢ）などのバスで、アプリケーションサーバのメイン処理ロジックに接続されてもよい。ある実施形態において、ローカルバスで比較記憶装置とアプリケーションサーバとの間を接続しなくてもよく、これは比較記憶装置と同一チップ上には設置されないことを意味する。別の実施例において、アプリケーションサーバ及び比較記憶装置を同一チップ上に設置してもよいが、秘匿データがセキュアであることを保証するために比較記憶装置のロジック及びメモリはアプリケーションサーバのロジック及びメモリとは物理的に別にする。
【００８４】
図１に示す実施において、プロセッサ４及びメモリ６は通常同じハウジング内に設置されるものである。さらに、比較記憶装置は、プロセッサ４及びメモリ６を備える集積回路として実施されてもよい。しかし、図２に示す実施において、メモリを比較記憶装置と別にしてもよく、自ハウジング内に独立したメモリとして設置してもよい。或いは、メモリが比較記憶装置の一部を形成し、同一集積回路の一部としてではなく比較記憶装置のプロセッサとして同一ハウジング内に設置されてもよい。以下の説明において、メモリ、データストア、または記憶／ストレージ装置６といった言及は、図１に示すように、比較記憶装置の一部を形成するメモリ、または図２に示す比較記憶装置に接続可能なメモリを意味する。
【００８５】
上記のように、アプリケーションサーバと比較記憶装置との間のインタフェースは、アプリケーションサーバのインタフェース、比較記憶装置のインタフェース、２つのインタフェース間の接続部、並びに、通信管理用ソフトウェア及びプロトコルを備えてもよい。以降、比較記憶装置のフロントエンド・インタフェース３を、アプリケーションサーバと通信する、ハードウェア及び／またはソフトウェアを含む比較記憶装置に設置されたインタフェースとする。比較記憶装置をアプリケーションサーバのハウジングとは別のハウジング内に設置する場合、フロントエンド・インタフェース３は、比較記憶装置のハウジング内に配置されてもよい。プロセッサ４とメモリ６との間のインタフェースは、プロセッサ用インタフェース、メモリ用インタフェース、この２つのインタフェース間の接続部、並びに、通信管理用ソフトウェア及びプロトコルを備えてもよい。以降、バックエンド・インタフェース５を、比較記憶装置に設置されたバックエンド・インタフェースのコンポーネントとする。メモリが独立したデバイスであれば、バックエンド・インタフェース５は、比較記憶装置のハウジング内でプロセッサ側インタフェースのみ備え、メモリへの接続部も独立メモリデバイス内のインタフェースも備えなくてもよい。
【００８６】
メモリ６は、複数のインデックス及びインデックスに関連するデータを保存するよう構成される。メモリ内の少なくとも複数あるデータは、不正アクセスから安全に守られる。インデックス化して保存されるデータは、パスワード、生体認証データ、個人識別番号データまたはその他ユーザ認証データ、クレジットカード情報または投票情報を含んでもよいが、これらに限定されない。メモリは、複数のユーザについてのセキュア情報または「秘匿」情報を保存し、ユーザ毎に１インデックスを保存してもよい。インデックスは、ユーザの名前またはユーザＩＤであってもよい。或いは、インデックスは、例えば、セキュアハッシュ値など、コンピュータ上で作成されたデータストリング及び／または数字ストリングであってもよく、ユーザＩＤは当該インデックスに関連付けられたデータとして保存されてもよい。例えば、個々にインデックス化して保存されたデータは、ユーザＩＤ、及び、パスワード、またはインデックスに関連付けられたユーザのその他識別情報を含んでもよい。
【００８７】
インデックス及び秘匿データに対し実施する動作を下に詳述する。
【００８８】
図３は、ウェブアプリケーションの一部を「パスワードセーフ（Ｐａｓｓｗｏｒｄ  ｓａｆｅ）」とした比較記憶装置の配置を示す。この配置では、ウェブブラウザを提供するユーザデバイスを有する番号７を付したユーザは、ＨＴＴＰＳプロトコルを使ってリンク８を介しインターネット９に接続し、さらにＨＴＴＰＳを使ってリンク１０を介し最終的にウェブサーバ１２に接続する。ウェブサーバは、ストレージ装置１４に保存されたウェブページを使用し、プロトコル１３を介してストレージ装置１４にアクセスする。ウェブサーバは、比較記憶装置（番号１５で示し、図１の実施において番号３から６が付された各コンポーネントから成る）を使用し、保存ウェブページへのアクセスを許可する前に、ユーザが入力したパスワードを検証する。図３において番号１及び２が付されたメッセージは、比較記憶装置１５のフロントエンド・インタフェース３が受信及び送信するメッセージである。図３のシステムにおいて、比較記憶装置は図１の実施での番号３から６が付された個別コンポーネントで構成されると記載したが、比較記憶装置は、図２の実施での番号３から５が付された個別コンポーネントで構成され、図３のシステムでもセキュアデータ保存用の独立したプライベートネットワークで構成されることも可能である。
【００８９】
図４は、ＡＶＲアーキテクチャで実施されるパスワードセーフとして実現した比較記憶装置でのメインループのフローチャートである。
【００９０】
パスワードセーフ及び他の使用など、比較記憶装置の実現を下に詳述する。
【００９１】
まずは、インタフェース、ナノウォール、プロトコル、及び、ナノウォールがメモリ内の情報に対し実行する動作の実施を個別に記述する。
【００９２】
動作及びインタフェースについて
以下の記述を通し、用語：インデックスは索引の意味で用い、用語：データは保存動作によりインデックスに関連付けられた情報の意味で用いる。
【００９３】
下に示す例示的な実現において、比較記憶装置に対するインタフェースは、一連の動作である。動作に提供する情報を、動作に対するパラメータという。動作に対するパラメータは、データ、インデックスなどであってもよく、すなわち、パラメータはデータとしての使用意図も、インデックスとしての使用意図もない情報のことである。以降、その他のパラメータを動作に対する引数という。比較記憶装置は、現在のインデックス数、インデックス名などインデックスに関して情報を返す動作を実施するが、返すデータの情報に関しては制限される。特に、保存インデックス化データを直接検索するような動作は行わない。
【００９４】
比較記憶装置がサポートする主要動作は、
１.   新規インデックスでインデックス化してデータを保存する。
２.   保存インデックス化データに対し引数を比較する。
３.   ある引数が保存インデックス化データと一致すれば、保存インデックス化データを新規データでアップデートする。
４.   ある引数が保存インデックス化データと一致すれば、保存インデックス化データ及びインデックスを削除する。
【００９５】
保存インデックス化データに対する引数のマッチング動作または比較動作は、アプリケーションドメインに依存し、アプリケーションドメインが違えば異なるマッチング規則を使用する必要がある。そういった規則の実施例に、完全マッチング、統計的マッチング、変換マッチング、及び検証マッチングを含むが、これらに限定されるものではない。完全マッチングでは、動作に対する引数として提供された情報が特定のインデックスでインデックス化されたデータに完全に一致しなければならない。統計的マッチングでは、引数が特定のインデックスでインデックス化され保存されたデータとエラー許容限界以下で一致しなければならない。変換マッチングでは、完全マッチングまたは統計的マッチングを実施する前に、処理を行って引数データ、及び／または、特定のインデックスでインデックス化され保存されたデータを変換する。検証マッチングでは、インデックスの関連データを、例えば引数のデジタル署名をチェックするなど、引数の検証に使用すべきであるとインデックスが示している。
【００９６】
ある実施形態において、そのような動作によって得られる結果は、指定のデフォルトインデックス設定以外の、動作で言及されないインデックスでインデックス化された保存データから独立させる必要があり、特定のデータから独立させる必要があるが、その意味を下記を例に示す。
【００９７】
引数値ＡがインデックスＫでインデックス化された保存データと同一かどうかをテストする動作「ｅｑＡＫ」を呼び出す場合を考える。ｅｑＡＫの結果は、以下による。
・インデックスＫはデータ値Ａをインデックス化し、結果Ｘを得る。
・インデックスＫはＡ以外のデータ値をインデックス化し、結果Ｙを得る。
【００９８】
保存秘匿データを変更する（例えば、値Ａを値Ｂに書換える）場合、呼び出し動作に互換性のある変更をしても（例えば、データＡをデータＢに置き換えてコール「ｅｑＢＫ」にする）、変更前のインデックスでの旧コール「ｅｑＡＫ」と同様の結果を得るのであれば、動作「ｅｑ」は、的確に保存されたデータから独立しているのである。
【００９９】
さらに、厳重にセキュアデータを保存するため、全インデックスのインデックス化データを同様に扱うという意味において、そのような動作で得られる結果に独立性を求めてもよい。つまり、指定のデフォルトインデックス設定以外は、どのインデックスも特別な扱いはしない。  
【０１００】
記憶動作、比較動作及びアップデート動作は全て、本実施例に示す意味で独立性を有している。つまり、秘匿データに関する情報は、動作の呼び出しや、動作に対する応答分析においても開示されることはないことを意味している。
【０１０１】
本発明によるある実現では、特定のアプリケーションドメインに向けた動作や、管理を簡略化する動作を実施する。こういった実現では、下記のような動作の実施が可能になる。
５. チャレンジ列の取得
【０１０２】
そのような動作に上記の意味で独立性がなくてもよい。そのような独立性のない動作の実施例として、単純なチャレンジ／レスポンス方式の基礎として比較記憶を使用する場合が挙げられる。当該方式では、ユーザにパスワードのランダムに選ばれた位置に文字を入力させて、ユーザの所有するパスワードを検証することを必要とする。
【０１０３】
この場合、少なくとも、保存インデックス化データの一データ長分を要求してもよい。必ずしも、チャレンジ／レスポンス方式がチャレンジ列を判断する動作を必要としなくてもよいことに留意すべきである。チャレンジ／レスポンス方式の実施例に、ランダムストリングでユーザにチャレンジし、ユーザがパスワードと合わせてランダムストリングをハッシュ化しレスポンスを形成する方式がある。比較記憶装置は、変換比較動作でチャレンジレスポンスの形成を実現できる。
【０１０４】
本発明によるまた別の実現において、以下の用途のために動作を実施してもよい。
６.   インデックスでインデックス化されたデータを使用する動作に対する引数として入力された情報を符号化する。
７.   インデックスでインデックス化されたデータを使用する動作に対する引数として入力された情報を暗号化する。
【０１０５】
本発明による実現により、最終的に以下のような管理動作を実施してもよい。
８．セルフテスト
９．バックアップ開始
【０１０６】
セルフテスト動作は、上記の意味において独立性を要する。つまり、セルフテスト動作で得られる結果は、セルフテスト動作によって配置されるデータ以外の実際のデータ内容から独立している。セルフテスト動作では、保存データに関する情報を開示しない。セルフテスト動作の実施例として、「送信テスト」があり、そのテストでは、標準的なパラメータシーケンスで動作を呼び出し、比較記憶装置が標準的な応答シーケンスを返すか、あるいは標準シーケンスが認識されなければエラーコードを返す。そのようなテストにより、比較記憶装置はコールプロトコルの処理における問題を検出できる。
【０１０７】
本発明の主要目的はデータを非開示にすることなので、特にバックアップの概念に注意を払わなければならない。以降、用語：プライベートネットワーク及び用語：プライベートストレージネットワークは、比較記憶装置でのみ使用されるネットワーク及びストレージネットワークを意味し、用語：パブリックネットワーク及び用語：パブリックストレージネットワークは、ネットワークを意味する。
【０１０８】
バックアップに対する比較記憶装置の構成には３種類ある。
１.  バックアップをＵＳＢメモリスティックなど物理的に取り外し可能なバックアップデバイスに保存し、比較記憶装置内で完結させる。比較器はバックアップ前に内容を暗号化してもよい。
２.  バックアップを比較記憶装置上で完結させ、比較記憶装置は冗長メモリモデルを主要ロジックで実施しコンフリクトを解消する。当該主要ロジックの実施に必要なアルゴリズムは様々あり、当業者には周知である。
３.  バックアップは、プライベートネットワークで接続された比較記憶装置間で実施され、下記のいずれかを実施する。
a.  独立した比較記憶装置間で冗長メモリモデルを実施する。
b.  記憶装置の状態を再構築する場合、各記憶装置は1または複数の他の記憶装置にまで戻し、主要ロジックを使用してコンフリクトを解消する。
c.  記憶装置を「有効」記憶装置と「リバース」記憶装置とに分け、各有効記憶装置は自記憶装置を1または複数のリバース記憶装置まで戻す。有効記憶装置に障害が発生すれば、リバース記憶装置バックアップの１つを交換用有効記憶装置として挙げる。
４.  バックアップは、上記３にあるように比較記憶装置間で行うが、記憶装置がパブリックネットワークを介して互いに通信する場合、別の記憶装置まで戻す前に内容を暗号化する。
５.  バックアップは、記憶装置にのみ接続しているプライベートストレージネットワークに対し行う。
６.  バックアップは、パブリックネットワークを介してパブリックストレージネットワークに対し行うが、その場合記憶装置はバックアップ前に内容を暗号化する。
【０１０９】
バックアップの作成において、比較記憶装置は、比較記憶装置で事前作成した署名鍵に基づくセキュリティ署名を追加してもよい。この場合、バックアップまで戻す際には比較記憶装置はバックアップの署名をチェックする。
【０１１０】
比較記憶装置がバックアップを暗号化するそれぞれの場合においても、あるいは、バックアップに署名する場合においても、暗号及び／または署名鍵は、以下のいずれかである。
１.  例えば、キーパッドインタフェース、ＵＳＢメモリデバイス、ＵＳＢメモリスティック、セキュアデジタル（ＳＤ）カード、マイクロＳＤカードなどを含むがこれらに限定されない、物理的に独立したリンクにより比較記憶装置にロードされたものである。同一鍵をロードすることより、複数の比較記憶装置で共通鍵が使用可能になる。
２.  デバイスに記憶され開示されない秘匿鍵として比較記憶装置が作成したものである。この場合、比較記憶装置間で鍵を共有できない。
【０１１１】
別の実現では、上記の一部あるいは全ての追加機能を実施してもよく、さらに追加機能を実施してもよい。いずれの動作であっても、保存データを未暗号化状態で出力を伝達してはならない。
【０１１２】
例えば、図５に示すように、バックアップ可能なある実施において比較記憶装置１５は、２つのフロントエンド・インタフェースを有し、第一インタフェース３ａは、アプリケーションサーバ１２と通信し、別の第二インタフェース３ｂはバックアップを扱う。比較記憶装置１５では、秘匿データをアプリケーションサーバ１２に返すことは不可能で、プロセッサ４は第一インタフェース３ａを介して秘匿データを提供しないよう構成されるが、プロセッサは、第二インタフェース３ｂを介して秘匿データをバックアップ用の別のエンティティ１６に提供可能である。上記のように、別のエンティティ１６は、別の比較記憶装置、プライベートネットワーク、またはパブリックネットワークであってよい。第一インタフェースは、アプリケーションサーバからメッセージ１ａを受信し、アプリケーションサーバにメッセージ２ａを送信し、第二インタフェースは、バックアップデバイスからメッセージ１ｂを受信し、バックアップデバイスにメッセージ２ｂを送信する。プロセッサ４は、バックエンド・インタフェース５を使用してメモリ６を操作し、第一フロントエンド・インタフェース３ａ及び第二フロントエンド・インタフェース３ｂを介してアプリケーションサーバ１２及びバックアップデバイス１６と通信する。例えば、比較記憶装置１５がイーサネットケーブルまたはＵＳＢ接続を介してアプリケーションサーバ１２と接続された上記の実施形態において、図５の第一インタフェース３ａは、イーサネットカードまたはＵＳＢポートカードであってもよく、第二インタフェース３ｂは、第一インタフェースであるイーサネットまたはＵＳＢポートカードとは物理的に別のインタフェース、例えば別のイーサネットカードまたはＵＳＢポートカードであってもよい。第二インタフェースを介して提供されるデータは暗号化されてもよい。図５において、メモリ６は、比較記憶装置１５の一部として示されているが、図２で記したように、メモリは代わりに比較記憶装置とは別のプライベートネットワークあってもよい。
【０１１３】
ある実施において、バックアップ用に提供されるデータはデータストア６から展開されることは決してない。その代わり、秘匿データが比較記憶装置に保存される最初の時点で秘匿データを冗長「バックアップ」メモリに保存して、バックアップ処理を実施する。例えば、プロセッサ４が特定のインデックスでインデックス化され保存されたデータについてアップデート操作を実行する際、同時にバックアップデバイス１６にも新規データを転送してもよい。通信が途切れデータを転送できない場合、プロセッサはローカルメモリにデータを保存し、再び接続が利用可能になった時に転送する。よって本実施形態において、秘匿データを別のエンティティに提供する目的でセキュアデータストアから展開することは決してない。
【０１１４】
ナノウォールについて
図４のフローチャートは、本発明の１つの実施形態におけるナノウォール処理ロジックを示す。本来、ロジックは無限プログラムループであり、当該ループでは、フロントエンド・プロトコルを介して受信した未完了のコマンドがあれば読出して復号化し、パラメータデータ処理に適した関数ハンドラを呼び出す。
【０１１５】
ある実施形態による関数ハンドラの処理ロジックを、本明細書の終盤のリスト１に記載する。リスト１はナノウォールの処理ロジックのソースコードリストであり、当該ナノウォールは、ＡＶＲアーキテクチャを使用して実現したパスワードセーフとして実施される。リスト１のコードでは、セルフテスト動作、削除動作、バックアップ動作、及び復元動作を行わないが、当業者であればこれらの動作を容易に実施できるであろう。当該ソースコードは処理ロジックの一つの実施形態を示すためのものであり、他の実施形態も考えられる。
【０１１６】
比較記憶装置の鍵の設計原理は、ナノウォールを「実行中」にプログラム可能にしないことである。つまり、どんな実施技術でナノウォール構造を実現しようとも、稼動中のナノウォールへのコード注入を不可能にする。これを実現する方法は、下に挙げる方法を含め様々な方法があり、限定されるものではない。例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を使用して実現した固定ハードウェアとしてナノウォールを実施する方法や、ハーバードアーキテクチャ型プロセッサ（プログラムメモリとデータメモリは分離されている）を使用し、ナノウォールの動作コールインタフェースからプログラムメモリへのパスが全く無いことを保証して（つまり、プログラムの実行は、プログラムメモリからのみ可能で、デバイスにインストールされて初めてプログラムを読込める）ナノウォールを実施する方法がある。コード注入を防ぐ上記の方法及び他の方法は、多数あり周知である。
【０１１７】
プロセッサは、所定長までしかメッセージを受け取らないようプログラムされてもよく、それにより実施可能プログラムの注入を防ぐ。例えば、プロセッサは、所定長を超える入力メッセージを拒否、または切り捨ててもよい。
【０１１８】
図１及び図２における比較記憶装置の具体的な実施例として、ＡＶＲ、周辺インタフェースコントローラ（ＰＩＣ）、またはＭＳＰ４３０などマイクロコントローラ・アーキテクチャでの実現、ＦＰＧＡ内での実現、特定用途向け集積回路（ＡＳＩＣ）としての実現、カスタム集積回路（ＩＣ）としての実現、中央処理装置（ＣＰＵ）におけるマイクロコードとしての実現を含むが、これらに限定されない。各実現において、様々なメモリの役割を物理的に異なるメモリに割り当てる。このため例えば、データ保存メモリ、演算用ダイナミックステートメモリ、及びプログラムメモリは分けられ、プログラム命令はプログラムメモリから取得されてのみ実行可能になる。さらに、ソフトプログラムをデバイスで使用する場合、デバイスはプログラムモードへの変更もプログラムモードからの変更も切り替え可能なハードウェアであり、比較記憶装置として動作する通常時は、プログラムのロードも変更もできない。メモリ分割に関する上記及び他の予防的方法は周知である。
【０１１９】
本発明は、ハードウェア、ソフトウェア、またはソフトウェアおよびハードウェアの組合せで実施されてもよい。本発明はメモリに関する命令を備えるコンピュータプログラムとして提供されてもよく、例えばハーバード・アーキテクチャマシンなど好適なハードウェアで実行される場合、上記のような比較記憶装置を提供する。
【０１２０】
プロトコルの処理について
フロントエンド・プロトコル３及びバックエンド・プロトコル５は、実現する比較記憶装置次第で換えてもよく、ナノウォール及びストレージ装置の実現のために選択する技術次第である。フロントエンド・プロトコル及びバックエンド・プロトコルが同一である必要はない。フロントエンド・プロトコル及びバックエンド・プロトコルの双方の一般的な実施例は、ＳＰＩ，推奨標準２３２（ＲＳ−２３２）、ＲＳ−４８５、コントローラエリアネットワークバス（ＣＡＮ−Ｂｕｓ）、ＵＳＢ、ＵＳＢ２、ＵＳＢ３、Ｆｉｒｅｗｉｒｅ及びイーサネットを含むが、これらに限定されるものではない。トランスポートプロトコルと関連するハードウェアコンポーネント及びソフトウェアドライバの実施は、当業者には周知である。
【０１２１】
選択するトランスポートプロトコルがプロトコルのインテグリティを確実に維持できるよう特に注意を要し、アプリケーションサーバが送信した比較記憶装置への要求及び応答、並びに、比較記憶装置からアプリケーションサーバへと返す応答を、紛失することなく、また、動作要求及び応答が間違って別のアプリケーションサーバに送られたり間違った順序で届いたりといった誤対応もないようにする。
【０１２２】
ノンシーケンシャルプロトコル：要求及び応答の順序を維持できない（すなわち、要求ｒｑ１及びｒｑ２が出される場合、いずれの順序で送達されてもよく、対応して応答ｒｐ１及びｒｐ２が出され、いずれの順序で送達されてもよい）トランスポートプロトコルを介して動作要求が出される場合、下記のいずれかとする。
１.  プロトコルハンドラ層を追加して要求及び応答をまとめ、順序を維持するフロントエンド・プロトコルを、トランスポートプロトコルを介して構築するか、
２.  特定動作要求を識別するために追加パラメータを動作要求に追加し、動作に対する応答は当該要求の識別子も運び、アプリケーションサーバが要求及び応答のペア形成ができるようにする。
３.  アプリケーションサーバによる要求と応答との対応付けを可能にする応答の一部として動作要求のハッシュを返す。アプリケーションサーバはさらに、要求識別子、タイムスタンプまたはノンスを動作要求に含めて、対応する要求を固有なものとしてもよい。
【０１２３】
複数アプリケーションサーバ用プロトコル：アプリケーションサーバ用情報を継続して処理するフロントエンド・プロトコルを介して、複数のアプリケーションサーバが１つの比較記憶装置を使用する場合、フロントエンド要求ハンドラを比較記憶装置の前段に配置し、応答を正しいアプリケーションサーバに返す経路を処理する。
【０１２４】
中間者緩和用プロトコル：フロントエンド・プロトコルが中間者攻撃の対象になる可能性がある場合、動作要求及び／または動作応答をデジタル署名で保護してもよい。応答でのデジタル署名は、フロントエンド・プロトコルを介して応答を送信する前に比較記憶装置内で行う。非対称鍵を署名に使用すれば、署名鍵は比較記憶装置で保存されるので応答を各段に強力に保護できる。デジタル署名で保護する場合、アプリケーションサーバは要求にさらにノンスを追加し、署名には要求と応答を結びつける動作要求のセキュアハッシュ値（追加したノンスを含む）も含んでもよい。これにより、アプリケーションサーバは、出された動作要求に応答が一致することを検証できるようになる。
【０１２５】
上記の点を考慮したプロトコルハンドラの既存の構築方法は、多数あり周知である。
【０１２６】
データストアについて
上記のように、データストア６は、ナノウォールと同じハウジング内、または独立したプライベートネットワーク内にローカルメモリとして設置されてもよい。ある実施形態では、データストアは、フラッシュメモリや、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）など、個体メモリで実施されてもよく、別の実施形態では、データストアは、機械的なハードディスクドライブ（ＨＤＤ）で実施されてもよい。
【０１２７】
例えば、ある実施形態において、データストア６は、ハッシュテーブルとして構築されたフラッシュメモリで実施されてもよい。ハッシュテーブルは、当業者であれば周知のデータ構造ある。ユーザの証明書、メタデータ、及び、稀に変更されるその他データを保存するデータ構造であり、ユーザアイデンティティをインデックス値として使用する。図６を参照し、フラッシュメモリ６は、一律な空間のブロック１９で形成されてもよく、それぞれには、ユーザアイデンティティ、ユーザアイデンティティに関する証明書、ユーザアイデンティティに付随するメタデータ、及びユーザアイデンティティに関連し稀に変更されるその他のデータの収容に十分な容量がある。
【０１２８】
ユーザアイデンティティ、証明書、メタデータ及び稀に変更されるその他データを全て、比較記憶装置を使用してアクセス制限する秘匿データとしてもよい。
【０１２９】
ハッシュ衝突は、通常のハッシュエントリとして同じ一律空間ブロックにエントリを作成して対処する。
【０１３０】
ハッシングアルゴリズムは、関数ｆ及び関数ｇの２つの関数で実行される。関数ｆは、引数としてユーザアイデンティティをとり、フラッシュメモリ内のブロックアドレスを返し、関数ｇは、引数としてユーザアイデンティティ及びブロックアドレスをとり、ブロックアドレスを返す。ハッシュテーブルへのインデックス付けは、以下のように行う。
１.  ユーザアイデンティティｕに関数ｆを適用し、ブロックアドレスｂを得る。
２.  ブロックｂが使用中でなければ、当該ブロックを使用してユーザアイデンティティ及び付随する証明書、メタデータ、並びに稀に変更されるその他データを保存する。
３.  ブロックｂが使用中であれば、関数ｇで引数ｕ及びｂを用い新ブロックｂを求め、新ブロックを配置する。
４.  新ブロックｂが使用中であれば、関数ｇで引数ｕ及び新ブロックｂを用いてステップ３を繰り返して、新ブロックｂを作成する。当該処理は所定限度に達するか空のブロックが見つかるかのいずれかまで繰り返される。
５.  空ブロックが見つかれば、当該ブロックを使用し、ユーザアイデンティティ及び付随する証明書、メタデータ並びに稀に変更されるその他データを保存する。
６.  空ブロックが見つからなければ、メモリがフルだとする信号を生成する。
【０１３１】
同一の一律ブロック空間を使用することで、他にオーバーフロー・エリア、第二テーブルなどを使う必要がなくなる。
【０１３２】
一律アドレス空間を使用することで、「ホットスポット」に書込む必要性が薄れる。ホットスポットとは、他領域より頻繁に書込みが行われるフラッシュメモリの領域のことであり、インデックス、ディレクトリ構造、または、ファイルシステムに付随するその他メタデータを維持している。フラッシュメモリの書込み寿命は有限であるが、読出し寿命は無限である。「ホットスポット」を防止することで、いかなるフラッシュメモリの領域も有限である読出し寿命に達するまでの時間が延びるため、フラッシュメモリは延びることになる。
【０１３３】
一律アドレス空間を使用することで、データ継続性についても優位となる。ユーザアイデンティティ、ユーザアイデンティティに関する証明書、ユーザアイデンティティに付随するメタデータ、及び、ユーザアイデンティティに関連し稀に変更される可能性のあるデータの収容に同一ブロックを使用する。これにより、ユーザアイデンティティに関連付けられたデータをアップデートする必要がある時に、複数の個別テーブルをアップデートする必要が無くなり、メモリの複数部分をアップデートする書込み動作を別々に行う必要も無くなる。これは、アップデート中に万一停電があった場合に継続性エラーが起きるリスクを減らすことにもなる。動作の完了までにメモリの異なる部分のアップデートを要する場合、メモリ全体が停電の前にアップデートされたかがわからず、メモリが一貫して最新版であることを確かめるために様々な処理を要するであろう。反対に、メモリの１ブロック空間のみアップデートすれば動作完了となるのであれば、エラーが起きるリスクは軽減する。
【０１３４】
さらに、１ブロックへの書込みとすることで、読出し書込み性能は改善する。アップデートを要するメタデータテーブルが無いため、読出し書込み回数は減少する。
【０１３５】
ユーザ証明書は、時間とともにどのように証明書が使われているかという特性を有する。一度作成されるとユーザアイデンティティは読込みまたは削除されるのみで、当該ユーザに関連するパスワード、個人識別番号、及びクレジットカード番号などの証明書の変更は稀であり、主要生体認証データのアップデートは例えあったとしても非常に稀である。本特性は「ライトレア（書込みが稀な）」データとして説明できる。フラッシュメモリの書込み寿命が有限であるが読出し寿命は無限であり、パスワード及び／または同様の「ライトレア」データの極めて効率的な保存方法を提供するので、上記のデータ構造のフラッシュメモリは相非対称性を有する。
【０１３６】
上記のフラッシュメモリを比較記憶装置のデータストアとして記述したが、フラッシュメモリで実施されるデータストアは、「レアライト」データの保存が必要などんなアプリケーションにも使用され得るであろう。
【０１３７】
パスワードセーフの実施例
図３に示すパスワードセーフは本発明による実現例である。筋書として、ユーザはインターネットで買い物するためにウェブサイトへのアクセスを希望しているとする。オンラインストアを備えるウェブページへのアクセスが許可される前に、ユーザはサイトにログインし、まずは本人証明を行わなければならない。本発明が実現したパスワードセーフは、パスワードを保存しユーザ認証を行うためにウェブサーバに使用される従来のパスワードファイル保存の仕組みに換わるものである。
【０１３８】
図３を参照して、ユーザデバイス７を有するユーザは、ウェブブラウザソフトウェアを使用しインターネットを介してウェブサーバ１２に接続する。ユーザは、ログインページを提示され、ユーザＩＤ及びパスワードを入力し提出ボタンを押すよう促される。要求されたデータを入力し提出ボタンを押すと、ユーザＩＤ及びパスワードは認証のためにウェブサーバ１２に送られる。ユーザ認証のため、ウェブサーバ１２は「チェック」コマンドを生成し、比較記憶装置のフロントエンド・インタフェース３がサポートするフロントエンド・プロトコルを介してパスワードセーフ１５に送信し、応答を待つ。コマンドは、入力されたユーザＩＤ及びパスワードをパラメータとして含む。パスワードセーフ１５は「チェック」コマンドを受信すると、入力されたユーザＩＤ及びパスワードと一致するデータを自データストア６内で検索し、フロントエンド・プロトコルを介してウェブサーバ１２にＹｅｓ（一致）またはＮｏ（一致失敗）のどちらかを示す１バイトのデータを返す。応答データが一致を示していれば、ウェブサーバ１２は、１４に保存されたウェブページを返し、ユーザ７にオンラインストアへのアクセスを許可する。応答データが一致失敗を示していれば、ウェブサーバは再度ログインページを表示し、ユーザにユーザＩＤ及びパスワードを再入力するよう促し、ユーザによるオンラインストアへのアクセスを拒否する。
【０１３９】
比較記憶装置の実現において、図１のハードウェアを参照し、ナノウォール４はＡＶＲマイクロコントローラ・アーキテクチャに実現される。また、記憶装置６は、ＳＤカードとして実現され、パスワード用個別大容量データストレージメモリを提供するために使用される。フロントエンド・プロトコルはＵＳＢを使用して実現されるインタフェースであり、インタフェースを介して、ウェブサーバが比較記憶装置にコマンド動作を送り、比較記憶装置から結果を受信する。直列周辺装置インタフェース（ＳＰＩ）を使用して実現されるバックエンド・インタフェース５がサポートするバックエンド・プロトコルを介して、ナノウォール４と記憶装置６との間のデータ転送がなされる。
【０１４０】
ＡＶＲマイクロコントローラ型ナノウォール４の実現には、消去可能プログラマブル・リードオンリメモリ（ＥＰＲＯＭ）、ＦＬＡＳＨ、及びランダムアクセスメモリ（ＲＡＭ）の３種類がある。大きな定数を要するテーブル、ストリングまたは画像などはＥＰＲＯＭに常駐し、プログラムはＦＬＡＳＨ、動状態のものはＲＡＭに記憶される。構造上、プログラムはＲＡＭから実行できない。通常は、一旦ＡＶＲがプログラムされると（ブートローダがＦＬＡＳＨに設置され、使用可能にならない限り）ＦＬＡＳＨにインストールプログラムへの経路はない。
【０１４１】
ＦＬＡＳＨのプログラムは、アプリケーション（ＵＳＢ）及びＳＤカードストレージ装置（ＳＰＩ）への通信チャネルを初期化する初期化ステップ、並びに、ウェブサーバからの要求に対応する無限ループで構成される。
【０１４２】
ウェブサーバから比較記憶装置に送られる要求の形式は、
Ｃｏｍｍａｎｄ  ｐａｒａｍｅｔｅｒ−ｌｉｓｔ  ＜ｎｅｗｌｉｎｅ＞
である。
【０１４３】
要求はＵＳＢインタフェースを介してストリングとして送られ、応答は、ウェブサーバにＵＳＢインタフェースを介してストリングとして戻される。
【０１４４】
パスワードセーフでは、インデックスとしてユーザアイデンティティを表すストリングを使用し、データとしてユーザパスワードを表すストリングを保存する。インデックス、すなわち、ｕｓｅｒ＿ｉｄ及びその関連パスワードは、ストリングペア（ユーザＩＤ、パスワード）で表されるアカウントをいう。要約すると、パスワードセーフがサポートするコマンド動作では、
作成：新規アカウントを作成する
Ｃｒｅａｔｅ（ｕｓｅｒ＿ｉｄ，  ｐａｓｓｗｏｒｄ）
この動作では、インデックスにｕｓｅｒ＿ｉｄを有するアカウントがデバイスに無い場合、アカウント（ｕｓｅｒ＿ｉｄ，  ｐａｓｓｗｏｒｄ）を作成し、成功となる。できなければ、この動作は失敗となる。
アップデート：現行アカウントに新規パスワードを与えてアップデートする
Ｕｐｄａｔｅ（ｕｓｅｒ＿ｉｄ，  ｏｌｄ＿ｐａｓｓｗｏｒｄ，  ｎｅｗ＿ｐａｓｓｗｏｒｄ）
この動作では、アカウント（ｕｓｅｒ＿ｉｄ，  ｏｌｄ＿ｐａｓｓｗｏｒｄ）がデバイスに保存されており、アップデート動作が可能である場合、アカウント（ｕｓｅｒ＿ｉｄ，ｏｌｄ＿ｐａｓｓｗｏｒｄ）を（ｕｓｅｒ＿ｉｄ，  ｎｅｗ＿ｐａｓｓｗｏｒｄ）に換え、アップデート動作及びチェック動作の両動作が可能であれば、成功となる。できなければ、この動作は失敗となり、保存しているユーザＩＤ／パスワードのペアを変更しない。
削除：インデックスにｕｓｅｒ＿ｉｄを有するアカウントが、所与のパスワードのゲスに一致する場合、アカウントを削除する
Ｅｒａｓｅ（ｕｓｅｒ＿ｉｄ，  ｐａｓｓｗｏｒｄ＿ｇｕｅｓｓ）
この動作では、アカウント（ｕｓｅｒ＿ｉｄ，  ｐａｓｓｗｏｒｄ＿ｇｕｅｓｓ）がデバイスに保存されている場合、成功となる。できなければ、この動作は失敗となる。
チェック：インデックスにｕｓｅｒ＿ｉｄを有するアカウントのパスワードが、所与のパスワードゲスに一致するかをチェックする
Ｃｈｅｃｋ（ｕｓｅｒ＿ｉｄ，  ｐａｓｓｗｏｒｄ＿ｇｕｅｓｓ）
この動作では、アカウント（ｕｓｅｒ＿ｉｄ，ｐａｓｓｗｏｒｄ＿ｇｕｅｓｓ）がデバイスに保存されており、チェック動作が可能であれば、成功となる。できなければ、この動作は失敗となる。また、この動作は、本明細書の項目における動作及びインタフェースについて、に記載した主要動作リストの２に挙げた比較動作の別の形式である。
部分的無効化：チェック動作を無効にするが、アップデート動作を有効にしてアカウントを部分的に無効化する。
Ｐａｒｔｌｙ＿Ｄｉｓａｂｌｅ（ｕｓｅｒ＿ｉｄ）
この動作では、インデックスにｕｓｅｒ＿ｉｄを有するアカウントがデバイスに保存されている場合、チェック動作でアカウントを使用できない状態にし、成功となる。できなければ、この動作は失敗となる。
完全無効化：チェック動作及びアップデート動作の両動作でアカウントを無効にして、アカウントを完全に無効化する
Ｆｕｌｌｙ＿Ｄｉｓａｂｌｅ（ｕｓｅｒ＿ｉｄ）
この動作では、インデックスにｕｓｅｒ＿ｉｄを有するアカウントがデバイスに保存されている場合、チェック動作でもアップデート動作でもアカウントを使用できない状態にし、成功となる。できなければ、この動作は失敗となる。
有効化：新規パスワードをアカウントに与え、アップデートでアカウントを使用可能にするか、同一パスワードを有効状態に戻すかして、完全無効化となっているアカウントを有効化する
Ｅｎａｂｌｅ（ｕｓｅｒ＿ｉｄ，  ａｄｍｉｎ＿ｐａｓｓｗｏｒｄ，  ｏｐｔｉｏｎａｌ  ｎｅｗ＿ｐａｓｓｗｏｒｄ）
この動作では、アカウント（“ａｄｍｉｎ”，  ａｄｍｉｎ＿ｐａｓｓｗｏｒｄ）がデバイス上にあり、（ａ）（ｂ）のいずれかであれば、成功となる。（ａ）：オプション引数のｎｅｗ＿ｐａｓｓｗｏｒｄが与えられた場合、インデックスに＝ｕｓｅｒ＿ｉｄを有するアカウントがアップデート動作可能状態にあり（チェック動作は不可）、アカウントパスワードをｎｅｗ＿ｐａｓｓｗｏｒｄに変更する。（ｂ）：オプションの引数が与えられない場合、アカウントをアップデート動作及びチェック動作の両動作で利用可能にする。
バックアップ：比較記憶装置をバックアップする
Ｂａｃｋｕｐ（ｓｔａｍｐ）
バックアップでは、比較記憶装置が別の事前構成ストレージ装置にバックアップを行い、バックアップにアイデンティティスタンプを与える。実際には、スタンプは、比較記憶装置名（または番号）、及びバックアップが行われた日時を示すタイムスタンプの組合せであることが多い。
復元：比較記憶装置を前にバックアップした状態に復元させる
Ｒｅｖｅｒｔ（ｓｔａｍｐ）
比較記憶装置を、事前構成ストレージ装置に保存されたバックアップスタンプとして保存された、以前の状態に復元させる。
本実施例において、一旦保存されたパスワードデータはフロントエンド・プロトコルを通過することがあってはならない。
【０１４５】
本明細書の終盤に記載したリスト１は、ナノウォールの処理ロジックをリスト化したソースコードであり、当該ナノウォールはＡＶＲアーキテクチャを使用して実現したパスワードセーフとして実施される。リスト１に挙げたソースコードは、セルフテスト動作、削除動作、バックアップ動作及び復元動作を実施するものではないが、当業者であればこれらの動作を容易に実施できるであろう。上記のように、本リストは、単に例示目的で示したものであり、他の実施も考えられる。
【０１４６】
動作は、ウェブサーバからパスワードストアにＵＳＢインタフェースを介して送信されるストリングで実現化され、形式は、
！！！＜ｃｈａｒａｃｔｅｒ＞  ＜ａｒｇｕｍｅｎｔ−ｌｉｓｔ＞  ＜ｃａｒｒｉａｇｅ  ｒｅｔｕｒｎ＞＜ｎｅｗｌｉｎｅ＞
であり、下記のコマンドに対応する。
2016531508.tif 000003
【０１４７】
本コードは、他のマイクロコントローラベースの構造で実現した場合も適合し得る。
【０１４８】
上記のパスワードストアの実施例では、ＡＶＲマイクロコントローラ・アーキテクチャを使って実施するプロセッサ４、ＳＤカードで実現する記憶装置６、ＵＳＢインタフェースを使用するフロントエンド・インタフェース３、及び、直列周辺装置インタフェース（ＳＰＩ）を使用して実現するバックエンド・インタフェース５を使用したが、プロセッサ、記憶装置、及びインタフェースは別の方法でも実現可能である。例えば、記憶装置は、上記のようにフラッシュメモリで実施されてもよい。
【０１４９】
インテグリティ検証の実施例
本発明による別の実現例にインテグリティ検証があるが、当該検証では、ユーザが提供した情報をその情報のデジタル署名をチェックして検証する。これは、本質的に上記のパスワードセーフの実施例と同じであるが、パスワードを対称署名鍵に換え、上記のチェック動作定義を以下に換える点が異なる。
チェック：特定のｕｓｅｒ＿ｉｄを有するユーザが提供する情報ｉｎｆが当該ユーザに正しく署名されたかをチェックする
Ｃｈｅｃｋ（ｕｓｅｒ＿ｉｄ，  ｉｎｆ）
この動作では、インデックスにｕｓｅｒ＿ｉｄを有するデータとして保存されたデジタル署名鍵を使用してｉｎｆが署名されていれば、成功となる。できなければ、この動作は失敗となる。上記のように、これは比較主要動作の別の形式であり、情報ｉｎｆ、特に情報ｉｎｆを提供するためにデータ署名に使用された署名鍵は、保存インデックス化データに照らして比較され検証される。
【０１５０】
この問題に対する従来の方法では、署名鍵が検証鍵と異なるよう非対称鍵を使用する。これにより、検証鍵は公開されるが、検証鍵が署名者の署名偽造に使用されるリスクは無い。この方法は、検証鍵の共有または公開を要する場合、特に有用である。しかし、どんな場合でも検証鍵の共有を要するわけではない。例えば、１企業が遠隔センサから収集したデータが署名され、当該センサが本当に生成したものであるか検証してもよい。この場合、対称鍵署名アルゴリズムは、各センサのアイデンティティが署名鍵と関連する場合に使用可能である。比較記憶装置はこういった対称鍵用のセーフストアを有し、一旦ストアに登録された対称鍵はストアからの検索が不可能になり、この場合、非対称鍵を使用した場合と同等のセキュリティにすることができる。
【０１５１】
セキュアな投票マシンの実施例
本発明による別の実現例に、電子投票マシンへの適用がある。この実現において、各投票マシンは、一般投票での各投票者からの投票を登録する比較記憶装置として実施される。例えば、各投票者は候補者への投票を登録するか、投票用紙に意見を表明してもよい。投票は投票者のｖｏｔｉｎｇ＿ｉｄでインデックス化され、比較記憶装置に保存される。投票者は、自身しか知らないパスワードを使ってもよい。そうすれば、投票者が後にマシンに問い合わせし、自身の投票についてマシンの記録を検証でき、または投票が終了する前に自身が行った特定の投票を変更できたりする。投票マシンは自機の署名鍵を備えてもよいが、この目的は、署名付き投票集計を作成し、全投票マシンから投票を集計する投票集約装置（これも比較記憶装置）に送付するためである。投票集約装置は、各投票マシンの出力を検証し、投票の総計を出す。本実施例において、比較記憶装置の構造を使用するのは、投票者の投票の秘匿性を守り、しかも集約処理を通して一般投票のインテグリティを守るためである。  
【０１５２】
本実施例において図５を参照し、比較記憶装置１５は、第一インタフェース３ａを介しアプリケーションサーバ１２に接続され、ユーザは、アプリケーションサーバ、第一インタフェース３ａ、及びプロセッサ４を介してセキュアなメモリ６に投票を保存しアップデートすることになる。投票集約装置は、バックアップデバイス１６に換わり、第二インタフェース３ｂを使用し比較記憶装置に接続してもよい。あるいは、投票集約装置は第三のエンティティであってもよく、比較記憶装置が接続可能で、第二インタフェース３ｂに類似の第三インタフェースを介して接続可能であり、セキュアデータを暗号化形式で信頼できるデバイスに提供してもよく、アプリケーションサーバにはアクセスできない。本実施例において、比較記憶装置は、アプリケーションサーバ用に１インタフェース、投票集約装置用に別のインタフェース、及びバックアップ用にまた別のインタフェースを備えてもよい。
【０１５３】
セキュアな宝くじ記憶装置の実施例
本発明によるまた別の実現例に、セキュアな宝くじ記憶装置への適用がある。本実現において、宝くじ運営会社が希望する、購入者に対するチケット検証の方法は、チケットが当選した購入者だけが当選金を請求できるというものである。本処理方法において、購入者にチケットを発行し、購入者はアイデンティティ情報を提供し、その情報は比較記憶装置にインデックス化したチケットデータとして保存される。比較記憶装置の比較動作では、提供されたアイデンティティ情報を保存インデックス化チケットデータに照らし比較する。チケットが当選していれば、購入者はチケットの所有者の証明として、購入時に登録したアイデンティティ情報を作成するだけでよい。購入者が使用するアイデンティティ情報は常に非開示で、検索不可である。
【０１５４】
アイデンティティ情報は、チケットの購入者のユーザデバイス、または、チケットを店頭で購入した場合はレジであるユーザデバイスに入力されてもよい。図５を参照し、アイデンティティ情報は、宝くじ運営会社が制御するアプリケーションサーバ１２に送られ、アプリケーションサーバは第一インタフェース３ａを介して比較記憶装置１５のプロセッサ４にアイデンティティ情報を送る。その後、比較記憶装置のプロセッサ４は、宝くじチケットに関連してインデックス化したアイデンティティ情報をメモリ６に保存する動作を実行する。チケットが当選すれば、アイデンティティ情報は、ユーザデバイスを使用して再度入力され、アプリケーションサーバ１２及び第一インタフェース３ａを介してプロセッサ４に送られ、プロセッサ４は比較動作を実行し、受信したアイデンティティ情報が宝くじチケットに関連しインデックス化され保存されている情報であることを確認する。
【０１５５】
クレジットカード記憶装置の実施例
本発明によるまた別の実現例に、クレジットカード記憶装置への適用がある。アプリケーションサーバは、インターネットの店頭及びショッピングカード機能を提供してもよく、上記のような比較記憶装置を使って機密性情報を保存してもよい。機密性情報は、ユーザ名インデックスに対し保存されてもよく、ユーザのショッピングアカウント用ユーザパスワード及びユーザのクレジットカード情報を備えてもよい。パスワード記憶装置の実施例とは異なり、本実施例では機密性情報は２種類ある。ユーザのパスワード及びクレジットカードの詳細情報である。ユーザのパスワードは比較記憶装置から開示されることは決してない。クレジットカードの詳細情報は、クレジットカード処理を実行する目的でクレジットカード会社に通常暗号化して開示されてもよいが、アプリケーションサーバには決して開示されない。
【０１５６】
図５を参照するが、まずはユーザがインタネットショッピングの登録を行い、アプリケーションサーバ１２は、パスワード及びクレジットカード情報を比較記憶装置１５に転送する。比較記憶装置に登録されると、機密性情報は、アプリケーションサーバでは取得不可となる。その後ユーザがアプリケーションサーバ１２を使用し製品購入を希望する場合、ユーザは自分のユーザＩＤ及びパスワードを示すだけでよく、この情報に基づき比較記憶装置のプロセッサ４はデータストア６の秘匿データを確認し、アプリケーションサーバ１２に応答を返すことができる。当該応答は、アプリケーションサーバがユーザ認証し、購入処理を進めてよいか判断することを許可する。クレジットカード会社は、クレジットカード処理を完了するために情報を必要とするが、アプリケーションサーバは、正しい値で処理がなされたかだけ分かればよい。つまり、比較記憶装置は、第一インタフェース３ａを使いアプリケーションサーバ１２と通信する。一方、比較記憶装置は、第二インタフェース３ｂまたは第二インタフェース３ｂに類似のインタフェースを使用して、アプリケーションサーバがアクセスできないセキュアデータをプロセッサが送信することを可能にし、銀行と通信し、第二インタフェースを介してクレジットカード情報を銀行に提供してもよい。つまり、クレジットカード情報は、アプリケーションサーバがアクセスできないインタフェースでしか送信されない。本実施例において、比較記憶装置は、アプリケーションサーバ用、銀行用、及びバックアップ用の３つのフロントエンド・インタフェースを有してもよい。
【０１５７】
「使用中」の証明書の保護
増加傾向にある一般的な攻撃に、バッキング記憶装置からの証明書の盗難だけでなく、認証サーバの実行中メモリからの証明書の盗難もある。その方法は、実行中のメモリをスイープし、パスワード、クレジットカード番号、またはその他証明書を含むＨＴＴＰ応答のフィールドなどのデータ構成を検索するソフトウェアを、認証サーバに仕掛けるものである。
【０１５８】
ある仕組みを追加し比較記憶装置と合わせて使用すると、「保存中の証明書」だけでなく「使用中の証明書」を保護するような仕組みを以下に詳述する。
【０１５９】
プリサーバと呼ぶハードウェア構成要素を新しく備え、拡張する。プリサーバは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）またはソケットセキュア（ＳＯＣＫＳ）などのプロトコル（これらに限定されない）を通して通信をフィルタにかけ、入力内容に証明書フィールドを見つけるとその内容を書換える。ＨＴＴＰＳセキュア（ＨＴＴＰＳ）やその他セキュアソケットレイア（ＳＳＬ）でプロトコルをラップする場合、ＳＳＬ接続はプリサーバで終端する。
【０１６０】
図７ａは、上記のようにクライアント１７、アプリケーションサーバ１２、及び比較記憶装置１５を備えた、「保存中の証明書」を保護するシステムの概要図である。図７ａは、上記のように比較記憶装置が「保存中の証明書」を保護するために使用される際の、クライアント、アプリケーションサーバ、及び比較記憶装置の間の情報の流れを示す。クライアントはユーザデバイスであってもよい。この場合、証明書はクライアントマシン１７により発行され、サーバ１２に送られる。ユーザのパスワード検証やユーザのパスワード設定など認証機能については、サーバ１２が比較記憶装置１５に検証コマンドの一部として証明書を送り、比較記憶装置１５がサーバ１２に成功または失敗を示す応答を返す。
【０１６１】
図７ｂは、「保存中の証明書」に加え「使用中の証明書」を保護するためにプリサーバコンポーネントを追加して配置する場合の情報の流れを示す。この場合、システムは、アプリケーションサーバ及び比較記憶装置に加え、クライアントまたはユーザデバイス１７から情報を受信するプリサーバ１８を備える。この場合、クライアント１７は、プリサーバ１８と通信し、プリサーバ１８は、クライアント１７からの通信に証明書フィールドがあれば必ず、下に示すいずれかの仕組みに従い書換える。その後、プリサーバ１８は、クライアントから受信し書換えた通信内容をサーバ１２に送り、サーバ１２は上記の場合のような認証機能を実行するが、プリサーバ１８が書換えた証明書を比較記憶装置１５に転送する点が異なる。比較記憶装置は、図１及び図２で記述したように、証明書を保存するセキュアメモリを備えてもよく、証明書を保存する独立したセキュアメモリを使用してもよい。プリサーバ１８と比較記憶装置１５の間の点線Ｏは、プリサーバ１８と比較記憶装置１５の間のチャネル外の通信経路の使用が可能であることを示す。この点を下で論ずる。
【０１６２】
一般的に、本明細書による技術は、様々な種類の証明書に適用されてもよい。証明書の一般的な例は、パスワード、個人識別番号、指紋など生体認証データ、及び虹彩走査を含むがこれらに限定されず、また、質問セットから抜き出された質問集に指定精度レベルで回答する能力など、より「意味論的」形式の証明書を含む。処理する証明書の形式は主に、認証の成功に完全マッチングを要するか、近似マッチングでよいかの点で異なる。この違いによっては、下に挙げる書換え動作に制限を追加する必要が生ずることもある。
【０１６３】
さらに、プリサーバの使用及び下記の書換え技術は、使用中の証明書を保護するために、比較記憶装置に換えて使用する別の証明書認証サーバと合わせて使用してもよい。別の比較記憶装置を使用する認証サーバの換わりに、認証サーバは証明書を保存する自サーバのセキュアメモリを有してもよい。
【０１６４】
証明書は、プリサーバが組み合わされる比較記憶装置の特定の構成次第で、多数の形式またはモードに書換えられてもよい。
Ａ  証明書を暗号化証明書に書換え、プリサーバと比較記憶装置で対称鍵を共有する。
Ｂ  証明書を暗号化証明書に書換え、対称鍵を比較記憶装置の公開鍵とする。
Ｃ  証明書をテンポラリ・タグに書換え、タグ付き証明書ペアを、プリサーバ１８と比較記憶装置１５との間を図７ｂのチャネル外ルートＯで送信する。
Ｄ  証明書をハッシュ（可能であれば鍵をかけ）に書換え、プリサーバと比較記憶装置で鍵を共有する。近似マッチングを要する証明書形式でこのモードを使用する場合、ハッシュ関数に強力な技術的条件を付する。具体的には、証明書形式Ｘが証明書形式Ｙに近似している場合、ハッシュ値（ｈ（Ｘ）及びｈ（Ｙ）とする）について、ｈ（Ｘ）がｈ（Ｙ）に近似している考えのもと、両ハッシュ値が近似している適切な考えを示さなければならない。
【０１６５】
ユーザまたはシステムがプリサーバと接続し証明書の設定または検証を行う場合、プリサーバは上記モードのいずれかを使用し、要求に組み込まれた証明書の全てを書換える。
【０１６６】
検証または証明書変更ステップは、比較記憶装置（または別の認証サービス）を使い通常の方法で処理するが、元の証明書の換わりに書換えられた証明書を使用する点が異なる。
【０１６７】
図８は、図７ｂのシステムを使用した証明書の確認処理の実施例を示すフローチャートである。サーバ１２が、パスワードに基づく認証に比較記憶装置１５を使用する場合を考える。図は、プリサーバがパスワードの書換えに上記のモードＡを使う（すなわち、対称鍵での暗号化）ことを意図し、パスワードｐを使用するクライアント１７におけるユーザ名ｎのユーザが、サーバ１２に対し認証を行う。イベントシーケンスは下記による。
ステップＳ１において、ユーザは、ユーザ名ｎ及びパスワードｐをクライアント１７に入力する。
ステップＳ２において、クライアント１７は、ペア（ｎ，ｐ）を要求ｒに組み込み、クライアント−サーバ間の通信に使用するプロトコルがいずれであってもそのプロトコルで、プリサーバ１８に転送する。
ステップＳ３において、プリサーバ１８はパスワードフィールドの内容ｐを新規値ｑに書換え、旧パスワードｐから書換えパスワードｑに書換えた点のみ異なる新規の要求ｔを形成し、新規の要求ｔをサーバ１２に転送する。
ステップＳ４において、サーバ１２は、書換えられた要求ｔからペア（ｎ，ｑ）を抜出し、パスワード検証に使用する、比較記憶装置への新規比較記憶装置要求ｕを形成する。その後、サーバ１２は比較記憶装置１５に要求ｕを送信する。
ステップＳ５において、比較記憶装置１５は、サーバ１２からの要求ｕを評価する。要求を評価する際、比較記憶装置１５は、共有する対称鍵を使用して、書換えられたパスワードｑを復号化し元のパスワードｐを取得する。その後、比較記憶装置は、ｐを使って要求されたパスワード比較を行う。つまり、比較記憶装置はユーザ名ｎに関連するパスワードを検索し、この検索結果をｐと比較する。次に、比較記憶装置はその比較が成功か失敗かをサーバ１２に送付する。
【０１６８】
ユーザがパスワードをリセットすれば同様のシーケンスが適用される。しかしユーザがパスワードをリセットする場合、ユーザは現行パスワードｐ及び新規パスワードｘの両方を入力することもある。この場合、プリサーバでの書換え処理では、ｐもｘも両方書込む必要がある。
【０１６９】
上記のモードＡ、モードＢ、モードＣのいずれにおいても、同様のイベントシーケンスが続く。
【０１７０】
比較記憶装置で書換えられたパスワードに暗号化を適用しないモードＣの場合、対応する関連タグからパスワードを取得する。
【０１７１】
モードＣをより詳細に考察する。プリサーバ１７は固有タグを作成し、証明書の代わりにその固有タグをアプリケーションサーバ１２に送り、比較記憶装置１５にもチャンネル外ルートＯを介してタグ及び証明書のペアを送信してもよい。固有タグは、現在日時から取得、内蔵カウンタから取得、または前に使用したシーケンスレコードから取得された、２進数の数、文字及び／または数の乱数シーケンス、或いは２進数の数、文字及び／または数の非乱数シーケンスを含んでもよいが、これらに限定されない。結果として、サーバ１２が証明書を見ることは決してない。サーバ１２はタグしか見ることができない。サーバは、比較記憶装置に対する証明書であるかのようにタグを使用する。比較記憶装置１５は、チャネル外でタグ及び証明書のペアを取得しており、証明書として使用されるサーバ１２からのタグを実際の証明書とペアにし、その後実際の証明書を比較記憶装置の検証ステップで使用することもできる。
【０１７２】
モードＤは、書換えられたパスワードが復号化または交換されることなく、直接比較記憶装置での動作に使用される点が異なる。
【０１７３】
これまで記載した書換えの他に、平文または暗号文として別のデータを書換え形式に追加してもよい。そういったデータの追加では、ランダムビットを「ソルト」暗号化またはハッシュに使用したり、日時情報を包含したりするが、これらに限定されない。ランダムビットを使用することで攻撃に対する攻撃許容力が高まり、日時情報を包含することで、タグが「タイムリ」または「新規」であることが保証され、リプレイアタックまたは類似「論理クロック」の使用に打ち勝ち、書換えが「タイムリ」または「新規」であることを証明する。
【０１７４】
例えば、上に挙げたパスワード検証の実施例では、書換えパスワードの書換えは下記の形式になったであろう。
ｅｎｃｒｙｐｔ（ｋ，［ｎｏｎｃｅ，ｕｔｃ，ｐ］）
この時、
１．ｋは、対称暗号鍵である。
２．ｎｏｎｃｅ（ノンス）は、固定長ランダムビットストリングである。
３．ｕｔｃ−は、協定世界時での固定長日時である。
４. ｐは、クライアントが入力した可変長パスワード
５．［ｎｏｎｃｅ，ｕｔｃ，ｐ］は、ノンス、協定世界時の日時、及びパスワードｐを結合し二進数ストリングにしたものである。
【０１７５】
書換えパスワードを受信すると、比較記憶装置はメッセージを復号化し、復号化形式から様々なフィールドを抜出し、ｕｔｃ値をローカル時刻基準と比較する。ｕｔｃとローカル時刻基準が許容範囲内で一致すれば、比較記憶装置は、復号化パスワードをローカルで調査したパスワードと比較し、前のケースと同様に処理する。協定世界時での時間がローカル時刻基準に所望の許容範囲で一致しない場合、比較記憶装置は、サーバに失敗であると応答する。
【０１７６】
ある実施形態において、プリサーバと比較記憶装置との間で鍵を使用する場合、両エンティティ間で常に調整されるのであれば任意のスケジュールで鍵を変更してもよい。その調整は以下により行ってもよい。
１. プリサーバと比較記憶装置とで事前調整したタイミング
２. 追加情報を書換えパスワードに含めたチャネル内信号化
３. 図６ｂのリンクＯを介した帯域外信号化
４. プリサーバ及び比較記憶装置の外部からの人手の介入
【０１７７】
調整メッセージは、鍵変更指示及び／または新鍵の使用を含んでもよい。
【０１７８】
既に行った方法に加え、認証サーバまたは比較記憶装置の保存データをソルト化、暗号化、ハッシュ化または鍵ハッシュ化してもよい。この場合、鍵は比較記憶装置または認証サーバのローカル鍵である。その後、比較ステップでは次に挙げる動作が調整される。例えば、証明書が暗号化され保存される場合、比較を行う前に保存証明書を復号化するか、クライアントが入力した証明書が要求内で暗号化されており、暗号化証明書を使って比較を行う。後者のモードでは、暗号（可逆の）ではなくハッシュ値または鍵化ハッシュ値を使用する必要がある。
【０１７９】
この方法では保護が強化されるが、それは、保存された証明書が比較記憶装置／認証サーバの記憶装置から漏れた場合、パスワードが「間違った形式」となっているため、パスワードをクライアント１７でもサーバ１２でも認証に使用できない点である。
【０１８０】
上記したように、本発明の実施形態は、コンピュータ及びコンピュータネットワークでのデータ保存に関し、特に、パスワード、生体認証データ、クレジットカードデータ、個人を一意に識別する個人識別子（アメリカ合衆国でのソーシャルセキュリティナンバなど）、エンティティが所定のレベルでのアクセスまたは認証を要求する認証レベル、選挙での投票数、及び暗号鍵などの機密データを含むが、これらに限定されないセキュアデータ保存に関する。
【０１８１】
本発明による具体的な実施例及び実施形態を説明してきたが、本発明の範囲は添付の請求項により定義され、上記の実施例及び実施形態に限定されるものではない。本発明は、当業者であれば理解するであろうが、別の方法で実施可能であり、多数の変形及び配置変形も考えられる。
【０１８２】
例えば、図をもとに、アプリケーションサーバが比較記憶装置を使い、ユーザデバイスにリソースへのアクセスを許可するか判断すると説明してきたが、上記の別の実施例から明らかなように、アプリケーションサーバが別の目的で比較記憶装置を使用してもよい。例えば、アプリケーションサーバは比較記憶装置を使用して、受信データが実際には所定のデータソースから取得したものであることをチェックしてもよく、または第三者がアクセスするデータを安全に保存してもよい。
【０１８３】
さらに、比較記憶装置の様々なコンポーネントを実施する方法の実施例を説明してきたが、具体的な実施についての記述は単に説明のためであり、別の実施も考えられる。
【０１８４】
リスト１
/*
========================================================================================
次に示すコードは、Ａｒｄｕｉｎｏ  Ｅｔｈｅｒｎｅｔ  Ｓｈｉｅｌｄが提供する、ＳＤカードインタフェースを有するＡｒｄｕｉｎｏ  ＵＮＯ  ＡＶＲマイクロコントローラボード用のスケッチ言語で書かれている。コードは、パスワードセーフとして使用する比較記憶装置をＵＳＢベースで実施しており、１つのアプリケーションサーバが、コールプロトコル
！！！＜ｃｏｍｍａｎｄ  ｃｈａｒａｃｔｅｒ＞  ＜ａｒｇ１＞  ・・・  ＜ａｒｇ３＞  ＜ｃａｒｒｉａｇｅ−ｒｅｔｕｒｎ＞＜ｌｉｎｅ−ｆｅｅｄ＞
（この時、＜ａｒｇ１＞から＜ａｒｇ３＞は、任意（つまり、コマンドにより引数は０、１つ、２つまたは３つ）である。）
を使ってＵＳＢインタフェースを介して動作を呼び出す。
【０１８５】
本コードを単に例として示すが、コード内でのバッファの取扱いに注意を要する。バッファは全て固定長であり、データがバッファに書込まれる時に長さがチェックされている。バッファを、ベクトルとして実施し、バッファをアドレス指定するポインタではなく静的インデックスを使用したベクトルとしてのバッファの集合体である。
【０１８６】
プロシージャを限定して使用し、特に非再帰的にスタックの使用を限定する。ＳＤライブラリ内またはコンパイラにより使用される場合を除き、ヒープ割り付けを避ける。
【０１８７】
下記のパスワードストアモデルにおいて、アドミン（ａｄｍｉｎ）と呼ばれる特別なユーザがおり、一般的な認証には使用できないが（すなわち、チェックコマンド）、一旦アカウントにパスワード付与されれば、パスワードストアの管理に対する特権を有する。
==========================================================================================
*/
＃ｉｎｃｌｕｄｅ  ＜ＳＤ．ｈ＞
／／リターンコード：ｙを含まないリターンコードは失敗を示す。
／／テスト値
ｂｏｏｌｅａｎ  ｓｄｃａｒｄ  ＝  ｆａｌｓｅ；
ｂｏｏｌｅａｎ  ａｒｇｅｒｒｏｒ  ＝  ｆａｌｓｅ；
／／空間節約のため、コード定義の際、＃ｄｅｆｉｎｅの使用を検討する
2016531508.tif 000004
／／ストリングの考え方で始める。ストリングは、ヌル文字で終わる文字ベクトルであり、
／／常に最大長ＳＴＲＩＮＧＬＥＮＧであり、終端ヌルを含む。
／／バッファは長さＳＴＲＩＮＧＬＥＮＧの整数倍ある文字のベクトルである。
／／コマンドは、コマンド名、及び、1または複数の空間で分けた引数シーケンスで構成され、
／／＜ｃａｒｒｉａｇｅ  ｒｅｔｕｒｎ＞＜ｌｉｎｅ  ｆｅｅｄ＞  （＼ｃ＼ｎ）で終わる。
／／コマンド名は、引数ゼロとする。
／／コマンドはバッファに読込まれる。
／／一度読込まれたコマンドは、ストリング配列である引数配列 ａｒｇｓ[]に分割され、
／／すなわち、ａｒｇ[][]となる。引数ゼロを含めた引数の最大数は、ＭＡＸ＿ＮＵＭＢＥＲ＿ＯＦ＿ＡＲＧＳである。
／／引数はストリングであり、引数配列ａｒｇ[][]は、ストリングのベクトルａｒｇ[]である。
／／入力バッファｂｕｆｆ[]の長さは、ＢＵＦＦＬＥＮＧ  ＝  ＭＡＸ＿ＮＵＭＢＥＲ＿ＯＦ＿ＡＲＧＳ  ＊  ＳＴＲＩＮＧＬＥＮＧである。
2016531508.tif 000005
／／グローバル入力バッファ
ｃｈａｒ  ｂｕｆｆ［ＢＵＦＦＬＥＮＧ］；／／初期化を要することに注意する。
／／パスワードファイルは一連のレコードから成り、各レコードは＼ｃ＼ｎで終わる。
／／１つのレコードは、一連のフィールドである。各フィールドはｃｈａｒであり、そのため長さは１、または、長さＳＴＲＩＮＧＬＥＮＧ−１の文字シーケンスである。
／／各フィールドには、1または複数の連続＜空間＞が続き、レコード内の総文字シーケンスを
／／＼ｃ＼ｎ前の最終フィールドを含め、長さＳＴＲＩＮＧＬＥＮＧにする。全てのフィールドは、（シーケンスの）＜空間＞の文字を含めないことに注意する。
／／引数設定
ｃｈａｒ  ａｒｇｓ［ＭＡＸ＿ＮＵＭＢＥＲ＿ＯＦ＿ＡＲＧＳ］［ＳＴＲＩＮＧＬＥＮＧ］；  ／／初期化を要する。
／／現行パスワードに、３フィールドバイトのｓｔｒｉｎｇ．ｓｔｒｉｎｇを保存する。ｓｔｒｉｎｇ．ｓｔｒｉｎｇは、制御フィールド、ｕｓｅｒ＿ｉｄフィールド及びパスワードフィールドを示す
／／通常、ＲＥＣＯＲＤＬＥＮＧ  ＝  ＮＵＭＢＥＲ＿ＯＦ＿ＢＹＴＥ＿ｆｉｅｌｄｓ＊２  ＋  ＮＵＭＢＥＲ＿ＯＦ＿ＳＴＲＩＮＧ＿ｆｉｅｌｄｓ  ＊  ＳＴＲＩＮＧＬＥＮＧ  ＋  ２において、
／／後半はレコード終わらせる＼ｃ＼ｎである。
2016531508.tif 000006
／／グローバルレコードホルダ
ｃｈａｒ  ｒｅｃｏｒｄ［ＲＥＣＯＲＤＬＥＮＧ］；
／／この場合３フィールドあり、レコードポジション（０、２、２＋ＳＴＲＩＮＧＬＥＮＧ）で始まる。
ｃｏｎｓｔ  ｉｎｔ  ｆｉｅｌｄ＿ＬＥＮＧＴＨ［ＭＡＸ＿ＮＵＭＢＥＲ＿ＯＦ＿ｆｉｅｌｄｓ］  ＝  ｛２，ＳＴＲＩＮＧＬＥＮＧ，ＳＴＲＩＮＧＬＥＮＧ｝；
／／フィールド配列を設定する。レコードはファイルから読出されフィールドに分割される。
ｃｈａｒ  ｆｉｅｌｄｓ［ＭＡＸ＿ＮＵＭＢＥＲ＿ＯＦ＿ｆｉｅｌｄｓ］［ＳＴＲＩＮＧＬＥＮＧ］；  ／／初期化を要する。
／／パスワードファイルには３種の入力がある。
／／第一フィールドに一般的な入力「ｎ」――
認証用に使用できる。
／／第一フィールドにリセット入力「ｒ」――パスワードリセット専用で使用できる。
／／第一フィールドに無効入力「ｄ」――使用不可な無効アカウント
／／無効アカウントは、開錠するにはアドミンのアクセスを要する。
／／必要であれば、ファイルポジションでのファイル内位置を追う。ｆｅｔｃｈＲｅｃｏｒｄにより設定される。
ｕｎｓｉｇｎｅｄ  ｌｏｎｇ  ｆｉｌｅｐｏｓｉｔｉｏｎ  ＝  ０；  ／／ファイルポジション
／／ファイル名は、定数である。
ｃｏｎｓｔ  ｃｈａｒ  ＊ｆｉｌｅｎａｍｅ    ＝  “ｐａｓｓｗｏｒｄ．ｔｘｔ”；
//-----------------------------------------------------------
／／引数をヌルストリングに初期化する。
2016531508.tif 000007
／／２つの文字ベクトル比較する。
ｂｏｏｌｅａｎ    ｃｏｍｐａｒｅ  （ｃｈａｒ  ｓ１[]，  ｃｈａｒ  ｓ２[]）  ｛
ｆｏｒ  （ｉｎｔ  ｉ  ＝  ０；ｉ＜ＳＴＲＩＮＧＬＥＮＧ；ｉ＋＋）  ｛
ｉｆ  （ｓ１［ｉ］  ＝＝  ０  ＆＆  ｓ２［ｉ］  ＝＝  ０）  ｒｅｔｕｒｎ  ｔｒｕｅ；
ｉｆ  （ｓ１［ｉ］  ！＝  ｓ２［ｉ］）  ｒｅｔｕｒｎ  ｆａｌｓｅ；  
｝；
ｒｅｔｕｒｎ  ｔｒｕｅ；
｝；
／／ストリングをコピーする。
ｖｏｉｄ  ｃｏｐｙ  （ｃｈａｒ  ｓｏｕｒｃｅ[]，  ｃｈａｒ  ｔａｒｇｅｔ[]）｛
ｆｏｒ（ｉｎｔ  ｉ＝０；ｉ＜ＳＴＲＩＮＧＬＥＮＧ；ｉ＋＋）｛
ｔａｒｇｅｔ［ｉ］  ＝  ｓｏｕｒｃｅ［ｉ］；
ｉｆ  （ｓｏｕｒｃｅ［ｉ］  ＝＝  ‘＼０’）  ｂｒｅａｋ；
｝
｝
／／ファイルから文字ベクトルペアを取得する。
ｂｏｏｌｅａｎ  ｆｅｔｃｈＲｅｃｏｒｄ（Ｆｉｌｅ  ｆ）  ｛
／／ｆは読出し用オープンファイルである。
／／スケッチは関数の引数型としてｃｈａｒ  ｓ[][]を取らないので、グローバルフィールドを使用する。
／／レコードを空にする。
ｎｕｌｌｒｅｃｏｒｄ（）；
ｆｉｌｅｐｏｓｉｔｉｏｎ  ＝  ｆ．ｐｏｓｉｔｉｏｎ（）；  ／／グローバルでの現在レコードの開始ポジションを記録する。
ｉｎｔ  ｌｅｎｇｔｈ  ＝  ｆ．ｒｅａｄＢｙｔｅｓＵｎｔｉｌ（‘＼ｎ’，ｒｅｃｏｒｄ，ＲＥＣＯＲＤＬEＮＧ）；
ｉｆ  （ｌｅｎｇｔｈ  ＝＝  ０  ｜｜  ｌｅｎｇｔｈ  ＞  ＲＥＣＯＲＤＬＥＮＧ）  ｒｅｔｕｒｎ  ｆａｌｓｅ；
／／レコードをフィールドに分割する。
ｉｎｔ  ｓｔａｒｔ  ＝  ０；
ｆｏｒ（ｉｎｔ  ｆｉｅｌｄ＝０；ｆｉｅｌｄ＜ＭＡＸ＿ＮＵＭＢＥＲ＿ＯＦ＿ｆｉｅｌｄｓ；ｆｉｅｌｄ＋＋）｛
／／開始がラインの最終になるのであれば、ストップする。
ｉｆ  （ｒｅｃｏｒｄ［ｓｔａｒｔ］  ＝＝  ‘＼ｒ’）  ｂｒｅａｋ；
ｆｏｒ（ｉｎｔ  ｉ＝ｓｔａｒｔ；ｉ＜ｆｉｅｌｄ＿ＬＥＮＧＴＨ［ｆｉｅｌｄ］＋ｓｔａｒｔ；ｉ＋＋）｛
ｉｆ  （ｒｅｃｏｒｄ［ｉ］  ＝＝  ‘  ’）  ｆｉｅｌｄｓ［ｆｉｅｌｄ］［ｉ−ｓｔａｒｔ］  ＝  ‘＼０’；
ｅｌｓｅ  ｆｉｅｌｄｓ［ｆｉｅｌｄ］［ｉ−ｓｔａｒｔ］  ＝  ｒｅｃｏｒｄ［ｉ］；  ｝
ｓｔａｒｔ  ＝  ｓｔａｒｔ  ＋  ｆｉｅｌｄ＿ＬＥＮＧＴＨ［ｆｉｅｌｄ］；
｝
ｒｅｔｕｒｎ  ｔｒｕｅ；
｝
ｖｏｉｄ  ｗｒｉｔｅＲｅｃｏｒｄ（Ｆｉｌｅ  ｆ）｛
ｂｏｏｌｅａｎ  ｐａｄ  ＝  ｆａｌｓｅ；
ｉｎｔ  ｓｔａｒｔ  ＝  ０；
ｆｏｒ（ｉｎｔ  ｆｉｅｌｄ＝０；ｆｉｅｌｄ＜ＭＡＸ＿ＮＵＭＢＥＲ＿ＯＦ＿ｆｉｅｌｄｓ；ｆｉｅｌｄ＋＋）｛
ｆｏｒ（ｉｎｔ  ｉ＝ｓｔａｒｔ；ｉ＜ｆｉｅｌｄ＿ＬＥＮＧＴＨ［ｆｉｅｌｄ］＋ｓｔａｒｔ；ｉ＋＋）｛
ｉｆ  （ｐａｄ）  ｒｅｃｏｒｄ［ｉ］  ＝  ‘＠’；  ／／可視化パディング
ｅｌｓｅ  ｉｆ  （ｆｉｅｌｄｓ［ｆｉｅｌｄ］［ｉ−ｓｔａｒｔ］  ＝＝  ‘＼０’  ）  ｛ｐａｄ  ＝  ｔｒｕｅ；  ｒｅｃｏｒｄ［ｉ］  ＝  ‘  ’；｝
ｅｌｓｅ  ｒｅｃｏｒｄ［ｉ］  ＝  ｆｉｅｌｄｓ［ｆｉｅｌｄ］［ｉ−ｓｔａｒｔ］；  ｝
ｐａｄ  ＝  ｆａｌｓｅ；
ｓｔａｒｔ  ＝  ｓｔａｒｔ  ＋  ｆｉｅｌｄ＿ＬＥＮＧＴＨ［ｆｉｅｌｄ］；
｝
ｒｅｃｏｒｄ［ＲＥＣＯＲＤＬＥＮＧ−２］  ＝  ‘＼ｒ’；  ｒｅｃｏｒｄ［ＲＥＣＯＲＤＬＥＮＧ−１］  ＝  ‘＼ｎ’；
ｆｏｒ（ｉｎｔ  ｉ＝０；ｉ＜ＲＥＣＯＲＤＬＥＮＧ；ｉ＋＋）  ｆ．ｗｒｉｔｅ（ｒｅｃｏｒｄ［ｉ］）；
｝
／／ファイルからパスワード名を取得する。
ｂｏｏｌｅａｎ  ｌｏｏｋｕｐ  （Ｆｉｌｅ  ｆ，  ｃｈａｒ  ｔａｒｇｅｔ[]）  ｛
ｗｈｉｌｅ  （ｆ．ａｖａｉｌａｂｌｅ（））｛
／／ファイルからペアを取得する。
ｉｆ  （！ｆｅｔｃｈＲｅｃｏｒｄ（ｆ））  ｒｅｔｕｒｎ  ｆａｌｓｅ；  
／／取得したペアの先頭を名前と比較する。
2016531508.tif 000008
／／長さに問題がないかチェックする。
2016531508.tif 000009
／／パスワードをチェックする。
2016531508.tif 000010
／／備考：ファイルポジション、レコード及びフィールドの副作用を検索する。フィールド［２］は対象ｕｓｅｒ＿ｉｄに該当するパスワードである。
2016531508.tif 000011
Ｆｉｌｅ  ｐｗｄｆｉｌｅ；
／／ＳＤ．ｏｐｅｎ（ｆｉｌｅｎａｍｅ，ＦＩＬＥ＿ＲＥＡＤ）をメインループで繰り返し使用し、ＲＡＭを使い果たしてしまう。
／／よって、各回、ＲＡＭを事前配置する必要がありそうだ。
／／この要領を行うとこの問題を軽減できそうだ。
ｖｏｉｄ  ｏｐｅｎｐｗｄＲｅａｄ  （）  ｛
ｐｗｄｆｉｌｅ  ＝  ＳＤ．ｏｐｅｎ（ｆｉｌｅｎａｍｅ，  ＦＩＬＥ＿ＲＥＡＤ）；
｝
ｖｏｉｄ  ｏｐｅｎｐｗｄＷｒｉｔｅ  （）  ｛
ｐｗｄｆｉｌｅ  ＝  ＳＤ．ｏｐｅｎ（ｆｉｌｅｎａｍｅ，  ＦＩＬＥ＿ＷＲＩＴＥ）；
｝
ｖｏｉｄ  ｓｅｔｕｐ（）  ｛
／／バッファを初期化する。
ｆｏｒ（ｉｎｔ  ｉ＝０；ｉ＜ＢＵＦＦＬＥＮＧ；ｉ＋＋）  ｛
ｂｕｆｆ［ｉ］  ＝  ‘  ’；
｝
2016531508.tif 000012
／／初期化が成功か失敗かＩＮＩＴＩＡＬＩＳＡＴＩＯＮ＿ＦＡＩＬＥＤ  
／／ｏｒ  ＳＵＣＣＥＳＳをチェックし、
／／否を削除し、条件文のアームを交換する。
2016531508.tif 000013
／／引数ストアを初期化する。
ｎｕｌｌａｒｇｓ（）；
ｎｕｌｌｆｉｅｌｄｓ（）；
｝
ｖｏｉｄ  ｌｏｏｐ（）  ｛
／／自身のメインコードここに入力し、繰り返し実行させる。
2016531508.tif 000014
／／選択肢で終止符を入力する場合、
／／バイトが使用可能かチェックする。
ｉｆ  （Ｓｅｒｉａｌ．ａｖａｉｌａｂｌｅ（））  ｛
／／Ｓｅｒｉａｌ．ｐｒｉｎｔ（“ＨＥＬＬＯ”）；
／／バイトに読込む。
ｉｎｔ  ｉ  ＝  Ｓｅｒｉａｌ．ｒｅａｄＢｙｔｅｓＵｎｔｉｌ（‘＼ｎ’，ｂｕｆｆ，ＢＵＦＦＬＥＮＧ）；
／／新規処理の前に全てをリセットする。
2016531508.tif 000015
／／バッファ内にメッセージに明白な先頭を置く。
／／すなわち、常に「！！！」に続けて入力する。
2016531508.tif 000016
／／「！！！」から後ろ３番地オフセットを移動する
ｏｆｆｓｅｔ  ＝  ｏｆｆｓｅｔ  ＋  ３；
／／備考：エラー引数バッファは長さＳＴＲＩＮＧＬＥＮＧしかなく、ＳＴＲＩＮＧＬＥＮＧより長い入力「フィールド」では別のフィールドにオーバーフローする。
／／引数をｉ  −  ｏｆｆｓｅｔ  ＞＝  ＳＴＲＩＮＧＬＥＮＧで終了する必要がある。
ｆｏｒ（ｉ＝ｏｆｆｓｅｔ；ｉ＜ＢＵＦＦＬＥＮＧ；  ｉ＋＋）  ｛
／／引数が長ければエラーを返す。
ｉｆ  （ｉ  −  ｏｆｆｓｅｔ  ＞＝  ＳＴＲＩＮＧＬＥＮＧ）  ｛  ａｒｇｅｒｒｏｒ  ＝  ｔｒｕｅ；  ｂｒｅａｋ；｝
ｉｆ  （ｂｕｆｆ［ｉ］  ＝＝  ‘  ’  ）  ｛
ａｒｇｓ［ａｒｇ］［ｉ  −  ｏｆｆｓｅｔ］  ＝  ‘＼０’；  
ｏｆｆｓｅｔ  ＝  ｉ＋１；  
ａｒｇ  ＝  ａｒｇ  ＋  １；
｝
／／キャリッジリターンがないかチェックする。
ｅｌｓｅ  ｉｆ  （ｂｕｆｆ［ｉ］  ＝＝  １３）  ｛
ａｒｇｓ［ａｒｇ］［ｉ  −  ｏｆｆｓｅｔ］  ＝  ‘＼０’；  
ｂｒｅａｋ；
｝
ｅｌｓｅ  ａｒｇｓ［ａｒｇ］［ｉ  −  ｏｆｆｓｅｔ］  ＝  ｂｕｆｆ［ｉ］；
｝
ｉｆ  （ｉ＞＝ＢＵＦＦＬＥＮＧ）  ａｒｇｓ［ａｒｇ］［ｉ  −  ｏｆｆｓｅｔ］  ＝  ‘＼０’；
／／コマンド設定
ｃｏｍｍａｎｄ  ＝  ０；
ｉｆ  （ｌｅｎｇｔｈ（ａｒｇｓ［０］）  ＝＝  １）  ｃｏｍｍａｎｄ  ＝  ａｒｇｓ［０］［０］;
／／コマンドが１文字でなければ、？をスイッチから取得する。
／／エラー条件をチェックし、実施コマンドをスキップし、必要であれば発信者に通知する。
ｉｆ  （ａｒｇｅｒｒｏｒ）  ｅｒｒｏｒ（ＡＲＧＵＭＥＮＴ＿ＴＯＯ＿ＬＯＮＧ）；
ｅｌｓｅ  ｉｆ  （！ｓｄｃａｒｄ）  ｛
／／ｔｂｄ：失敗に対し対処する。
ｓｄｃａｒｄ  ＝  ＳＤ．ｂｅｇｉｎ（４）；  ／／ＳＤカードの初期化を試す。
ｉｆ  （！ｓｄｃａｒｄ）  ｅｒｒｏｒ（ＩＮＩＴＩＡＬＩＳＡＴＩＯＮ＿ＦＡＩＬＥＤ）；  ／／初期化不可なら、失敗通知を行う。
｝
ｅｌｓｅ  ｛    
／／  ――――――――――――――――――――――――――――――――――
／／コマンドを実行する。
／／引数無しのコマンド
／／引数を無視する。
ｓｗｉｔｃｈ  （ｃｏｍｍａｎｄ）  ｛
ｃａｓｅ    ‘ｃ’：
{／／引数が２つないかチェックする。
ｉｆ  （ａｒｇｓ［１］［０］  ＝＝  ０  ｜｜  ａｒｇｓ［２］［０］  ＝＝  ０）  {
ｅｒｒｏｒ（ＭＩＳＳＩＮＧ＿ＡＲＧＵＭＥＮＴＳ）；
ｂｒｅａｋ；
｝  
／／保存パスワードに照らしパスワードをチェックする。
ｉｆ  （ｃｏｍｐａｒｅ（ａｒｇｓ［１］，“ａｄｍｉｎ”））  ｛
ｅｒｒｏｒ（ＣＡＮＮＯＴ＿ＡＵＴＨ＿ＵＳＩＮＧ＿ＡＤＩＭ＿ＡＣＣＯＵＮＴ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／アドミンアカウントを認証できない場合；処理しない
ｏｐｅｎｐｗｄＲｅａｄ（）；
ｉｆ  （ｃｈｅｃｋ（ｐｗｄｆｉｌｅ，  ａｒｇｓ［１］，  ａｒｇｓ［２］））  ｛
／／認証に使用可能かチェックする。
ｉｆ  （  ｆｉｅｌｄｓ［０］［０］  ＝＝  ‘ｎ’）  ｓｕｃｃｅｓｓ（）；
ｅｌｓｅ  ｅｒｒｏｒ（ＰＡＳＳＷＯＲＤ＿ＴＥＳＴ＿ＦＡＩＬＥＤ）；
｝
ｅｌｓｅ  
ｅｒｒｏｒ（ＰＡＳＳＷＯＲＤ＿ＴＥＳＴ＿ＦＡＩＬＥＤ）；
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；
｝
ｃａｓｅ  ‘ｄ’：  ／／無効アカウント；パスワードを要しない                 
｛  ／／引数をチェックする
ｉｆ  （ａｒｇｓ［１］［０］  ＝＝  ‘＼０’  ｜｜  ａｒｇｓ［２］［０］  ＝＝  ‘＼０’）  ｛
ｅｒｒｏｒ（ＭＩＳＳＩＮＧ＿ＡＲＧＵＭＥＮＴＳ）；
ｂｒｅａｋ；｝
／／使用中のｕｓｅｒ＿ｉｄをチェックする。
ｏｐｅｎｐｗｄＲｅａｄ（）；  
ｉｆ  （！ｌｏｏｋｕｐ（ｐｗｄｆｉｌｅ，  ａｒｇｓ［２］））  ｛
ｅｒｒｏｒ（ＵＳＥＲ＿ＮＡＭＥ＿ＮＯＴ＿ＦＯＵＮＤ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／使用していないｕｓｅｒ＿ｉｄ；処理しない
ｉｆ  （ｃｏｍｐａｒｅ（ａｒｇｓ［２］，“ａｄｍｉｎ”））  ｛
ｅｒｒｏｒ（ＣＡＮＮＯＴ＿ＤＩＳＡＢＬＥ＿ＡＤＩＭ＿ＡＣＣＯＵＮＴ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／アドミンアカウントを無効にできない；処理しない
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；  ／／ファイルを閉じる。
／／処理を書込む。
／／ルックアップでフィールドが設定済であることに注意する。
／／第一フィールドを「ｄ」または「ｒ」に変更する。
／／「ｄ」ではないもののチェックを追加する必要があることに注意する。
ｉｆ  （ｃｏｍｐａｒｅ（ａｒｇｓ［１］，“ａｄｍｉｎ”））    ｆｉｅｌｄｓ［０］［０］  ＝  ‘ｄ’；  
ｅｌｓｅ  ｉｆ  （ｃｏｍｐａｒｅ（ａｒｇｓ［１］，“ｒｅｓｅｔ”））  ｆｉｅｌｄｓ［０］［０］  ＝  ‘ｒ’；
ｅｌｓｅ  ｛
ｅｒｒｏｒ（ＵＮＲＥＣＯＧＩＳＥＤ＿ＤＩＳＡＢＬＥ）；
ｂｒｅａｋ；｝
／／他フィールドは変更せずそのままにしておく。
／／レコードを書込む。
ｏｐｅｎｐｗｄＷｒｉｔｅ（）；
ｉｆ  （ｐｗｄｆｉｌｅ）  ｛
／／書込み位置をファイルポジションに移動させる
ｐｗｄｆｉｌｅ．ｓｅｅｋ（ｆｉｌｅｐｏｓｉｔｉｏｎ）；
ｗｒｉｔｅＲｅｃｏｒｄ（ｐｗｄｆｉｌｅ）；
ｓｕｃｃｅｓｓ（）；    
｝  
ｅｌｓｅ  ｅｒｒｏｒ（ＰＡＳＳＷＯＲＤ＿ＦＩＬＥ＿ＮＯＴ＿ＡＶＡＩＬＡＢＬＥ＿ＦＯＲ＿ＷＲＩＴＥ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；
｝      
ｃａｓｅ  ‘ｗ’：  ／／書込む          
{  ／／引数をチェックする
ｉｆ  （ａｒｇｓ［１］［０］  ＝＝  ０  ｜｜  ａｒｇｓ［２］［０］  ＝＝  ０）  {
ｅｒｒｏｒ（ＭＩＳＳＩＮＧ＿ＡＲＧＵＭＥＮＴＳ）；
ｇｏｔｏ  ＥＮＤ；｝
／／使用中のｕｓｅｒ＿ｉｄをチェックする
ｏｐｅｎｐｗｄＲｅａｄ（）；  
ｉｆ  （ｌｏｏｋｕｐ（ｐｗｄｆｉｌｅ，  ａｒｇｓ［１］））  ｛
ｅｒｒｏｒ（ＵＳＥＲ＿ＮＡＭＥ＿ＩＮ＿ＵＳＥ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／使用中のｕｓｅｒ＿ｉｄ；処理しない
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；  ／／ファイルを閉じる
／／処理を書込む
／／第一フィールドを通常入力の「ｎ」に設定する
ｆｉｅｌｄｓ［０］［０］  ＝  ‘ｎ’；  ｆｉｅｌｄｓ［０］［１］  ＝  ‘＼０’；
／／第二フィールドをｕｓｅｒ＿ｉｄに設定する
ｃｏｐｙ（ａｒｇｓ［１］，  ｆｉｅｌｄｓ［１］）；
／／第三フィールドをパスワードに設定する
ｃｏｐｙ（ａｒｇｓ［２］，ｆｉｅｌｄｓ［２］）；
／／レコードを書込む
2016531508.tif 000017
ｃａｓｅ  ‘ｕ’：  ／／アップデートする
｛  ／／引数、ｕｓｅｒ＿ｉｄ、旧パスワード、新規パスワードをチェックする
ｉｆ  （ａｒｇｓ［１］［０］  ＝＝  ０  ｜｜  ａｒｇｓ［２］［０］  ＝＝  ０  ｜｜  ａｒｇｓ［３］  ＝＝  ０）  ｛
ｅｒｒｏｒ（ＭＩＳＳＩＮＧ＿ＡＲＧＵＭＥＮＴＳ）；
ｇｏｔｏ  ＥＮＤ；｝
／／使用中のｕｓｅｒ＿ｉｄをチェックする
ｏｐｅｎｐｗｄＲｅａｄ（）；  
ｉｆ  （！ｌｏｏｋｕｐ（ｐｗｄｆｉｌｅ，  ａｒｇｓ［１］））  ｛
ｅｒｒｏｒ（ＵＳＥＲ＿ＮＡＭＥ＿ＮＯＴ＿ＦＯＵＮＤ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／使用中のＩＤ；処理しない
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；  ／／ファイルを閉じる
ｉｆ  （ｆｉｅｌｄｓ［０］［０］  ＝＝  ‘ｎ’  ｜｜  ｆｉｅｌｄｓ［０］［０］  ＝＝  ‘ｒ’）  ｛  ／／リセット可能
ｉｆ  （ｃｏｍｐａｒｅ（ａｒｇｓ［２］，ｆｉｅｌｄｓ［２］））  ｛  ／／パスワードが一致
／／コントロールフィールドを「ｎ」に設定する
ｆｉｅｌｄｓ［０］［０］  ＝  ‘ｎ’；
／／パスワードフィールドに新規パスワードを設定する
ｃｏｐｙ（ａｒｇｓ［３］，  ｆｉｅｌｄｓ［２］）；
／／レコードを書込む
2016531508.tif 000018
ｃａｓｅ  ‘ｅ’：  ／／アカウント引数のｕｓｅｒ＿ｉｄ、ａｄｍｉｎ＿ｐａｓｓｗｏｒｄ、ｎｅｗ＿ａｃｃｏｕｎｔ＿ｐａｓｓｗｏｒｄを許可する。
｛  ／／引数のｕｓｅｒ＿ｉｄ、ｏｌｄ＿ｐａｓｓｗｏｒｄ、ｎｅｗ＿ｐａｓｓｗｏｒｄをチェックする。
ｉｆ  （ａｒｇｓ［１］［０］  ＝＝  ０  ｜｜  ａｒｇｓ［２］［０］  ＝＝  ０  ）  ｛
ｅｒｒｏｒ（ＭＩＳＳＩＮＧ＿ＡＲＧＵＭＥＮＴＳ）；
ｂｒｅａｋ；｝
／／ａｄｍｉｎ＿ｐａｓｓｗｏｒｄをチェックする。
／／ａｄｍｉｎ ａｃｃｏｕｎｔを検索する。
ｏｐｅｎｐｗｄＲｅａｄ（）；  
ｉｆ  （！ｌｏｏｋｕｐ（ｐｗｄｆｉｌｅ，  “ａｄｍｉｎ”））  ｛
ｅｒｒｏｒ（ＵＳＥＲ＿ＮＡＭＥ＿ＮＯＴ＿ＦＯＵＮＤ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／アドミンアカウントが見つからない；処理しない
／／アドミンパスワードをチェックする
ｉｆ（！ｃｏｍｐａｒｅ（ａｒｇｓ［２］，  ｆｉｅｌｄｓ［２］））  ｛  ／／アドミンパスワードの一致に失敗
ｆａｉｌ（）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／アドミンパスワードの一致に失敗；処理しない。
／／使用中のｕｓｅｒ＿ｉｄをチェック；ファイルスタートのためファイルポジションをリセットする。
ｐｗｄｆｉｌｅ．ｓｅｅｋ（０）；
／／備考：検索してフィールドをリセットする。
ｉｆ  （！ｌｏｏｋｕｐ（ｐｗｄｆｉｌｅ，  ａｒｇｓ［１］））  ｛
ｅｒｒｏｒ（ＵＳＥＲ＿ＮＡＭＥ＿ＮＯＴ＿ＦＯＵＮＤ）；  
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；
ｂｒｅａｋ；｝  ／／使用中のｕｓｅｒ＿ｉｄ：処理しない。
ｐｗｄｆｉｌｅ．ｃｌｏｓｅ（）；  ／／ファイルを閉じる。
／／アドミンは全てのアカウントでパスワードをリセットでき、リセット入力になる。
／／引数［３］が空であれば、コントロールフィールドを「ｎ」にし、パスワードを変更しない。
／／引数［３］が空でなければ、コントロールフィールドを［ｒ］にし、新規パスワードを設定する。
ｉｆ  （ａｒｇｓ［３］［０］  ＝＝  ０）  ｛
ｆｉｅｌｄｓ［０］［０］  ＝  ‘ｎ’；               
｝
ｅｌｓｅ  ｛
ｆｉｅｌｄｓ［０］［０］  ＝  ‘ｒ’；
／／パスワードフィールドに新規パスワードを設定する。
ｃｏｐｙ（ａｒｇｓ［３］，  ｆｉｅｌｄｓ［２］）；
｝
／／レコードを書込む。
2016531508.tif 000019
【図１】
2016531508.tif 000020
【図２】
2016531508.tif 000021
【図３】
2016531508.tif 000022
【図４】
2016531508.tif 000023
【図５】
2016531508.tif 000024
【図６】
2016531508.tif 000025
【図７ａ】
2016531508.tif 000026
【図７ｂ】
2016531508.tif 000027
【図８】
2016531508.tif 000028
【国際調査報告】
2016531508.tif 000029
2016531508.tif 000030