JP2016531508A - データセキュアストレージ - Google Patents
データセキュアストレージ Download PDFInfo
- Publication number
- JP2016531508A JP2016531508A JP2016532742A JP2016532742A JP2016531508A JP 2016531508 A JP2016531508 A JP 2016531508A JP 2016532742 A JP2016532742 A JP 2016532742A JP 2016532742 A JP2016532742 A JP 2016532742A JP 2016531508 A JP2016531508 A JP 2016531508A
- Authority
- JP
- Japan
- Prior art keywords
- data
- memory
- application server
- storage device
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 55
- 230000015654 memory Effects 0.000 claims description 171
- 230000004044 response Effects 0.000 claims description 58
- 238000012546 transfer Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 4
- 238000012545 processing Methods 0.000 description 32
- 238000012795 verification Methods 0.000 description 22
- 230000006870 function Effects 0.000 description 19
- 230000008569 process Effects 0.000 description 19
- 239000000872 buffer Substances 0.000 description 14
- 230000000052 comparative effect Effects 0.000 description 14
- 238000004891 communication Methods 0.000 description 11
- 238000012360 testing method Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 8
- 230000009471 action Effects 0.000 description 7
- 239000013598 vector Substances 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 239000011800 void material Substances 0.000 description 6
- 238000013500 data storage Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 230000002776 aggregation Effects 0.000 description 4
- 238000004220 aggregation Methods 0.000 description 4
- 238000002347 injection Methods 0.000 description 4
- 239000007924 injection Substances 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 3
- ODKSFYDXXFIFQN-UHFFFAOYSA-M argininate Chemical compound [O-]C(=O)C(N)CCCNC(N)=N ODKSFYDXXFIFQN-UHFFFAOYSA-M 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 229910052710 silicon Inorganic materials 0.000 description 3
- 239000010703 silicon Substances 0.000 description 3
- 101100379633 Xenopus laevis arg2-a gene Proteins 0.000 description 2
- 101150088826 arg1 gene Proteins 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000001010 compromised effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000002265 prevention Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 125000002066 L-histidyl group Chemical group [H]N1C([H])=NC(C([H])([H])[C@](C(=O)[*])([H])N([H])[H])=C1[H] 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- ZXQYGBMAQZUVMI-GCMPRSNUSA-N gamma-cyhalothrin Chemical compound CC1(C)[C@@H](\C=C(/Cl)C(F)(F)F)[C@H]1C(=O)O[C@H](C#N)C1=CC=CC(OC=2C=CC=CC=2)=C1 ZXQYGBMAQZUVMI-GCMPRSNUSA-N 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000003449 preventive effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 150000003839 salts Chemical class 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6281—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database at program execution time, where the protection is within the operating system
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/0884—Network architectures or network communication protocols for network security for authentication of entities by delegation of authentication, e.g. a proxy authenticates an entity to be authenticated on behalf of this entity vis-à-vis an authentication entity
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
- H04L63/123—Applying verification of the received information received data contents, e.g. message integrity
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0877—Generation of secret information including derivation or calculation of cryptographic keys or passwords using additional device, e.g. trusted platform module [TPM], smartcard, USB or hardware security module [HSM]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Medical Informatics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Storage Device Security (AREA)
Abstract
データを保存し、当該データに対し論理比較及びその他動作を実行する方法及び装置であって、当該比較及び動作の結果では保存データについて限定された情報しか開示されない。保存データは、パスワード、生体認証データ、クレジットカードデータ、個人を一意に識別する個人識別子、エンティティが所定レベルでのアクセス権または認証を請求する認証レベル、選挙での投票数、及び暗号鍵などの機密情報を含んでもよいが、これらに限定されない。装置内の制御ロジックは、データが開示されるのを防ぐ制限コマンドインタフェースを介さずにデータストアに直接アクセスすることを防ぐ。例えば、推定上のパスワードをデータストアのパスワードに照らしてチェックするなどの動作を装置が実行し、成功または失敗を返すが、保存パスワードを開示しない。【選択図】図3
Description
本発明は、不正アクセスからデータを安全に守るデータ処理に関する。特に、しかし排他的でなく、本発明は、アプリケーションサーバがユーザを認証できるようにするために、複数ユーザに関連しセキュアメモリに保存された情報に対しアプリケーションサーバからのコマンドに応じて動作を実行する装置に関する。
本特許明細書は、様々な工夫や機能を説明するだけでなく、創造的な表現もする。そのため、本特許文書の開示では一部に、著作権の請求がなされた文献の内容を含んでおり、著作権 Silicon Safe Limited 2013及び2014(17 U.S.C.第401条に基づく)に基づき本明細書で公表する。著作権保護請求の対象は、本特許出願に示され記載された本発明の実施形態に関連する保護可能な表現全てである。
著作権者は、誰に対しても特許文献または特許開示文献の複製については、特許商標庁の特許ファイルや記録にあり異論はないが、それ以外では全ての著作権は無断の複写転載を禁じる。あらゆる著作権のもといかなるライセンス表示も暗示も許諾しない。
機密データを安全に保存する必要があるのは、例えば、コンピュータパスワードの保存が必要な場合である。パスワードは、コンピュータまたはリソースへのアクセスのために本人確認に使用される秘密の単語、或いは、数字及びまたは文字のストリングである。パスワードは、アクセスが許諾されていない人には秘匿にすべきであり、セキュアデータストアに保存されなければならない。本ストアは従来、認証システムによるアクセスのみを意図したパスワードファイルである。
パスワードファイルは、コンピュータハッカには攻撃対象となるハニーポットであり、適切に保護されなければ、コンピュータまたはネットワークを脆弱化にされかねない。現在のところ、商業界でよくあるサイバー攻撃形式の一つに、パスワードファイルの盗難がある。一般的に、脆弱さを悪用してインターネット経由で(または、ワーム経由や、ネットワーク内にインストールされたトロイの木馬プログラムにより)ウェブサイトに侵入され、パスワードファイルが盗まれる。そうしたパスワードは悪戯や犯罪行為に使われる。
パスワードファイルが盗難されると、組織及び個人ユーザの双方に多大な迷惑がかかるだけでなく(ユーザはパスワードをリセットする必要があるので)、ユーザが実際にどれほどパスワードを新しくしたか(例えば、ユーザがパスワードをjjj5から単純にjjj6に変更する場合など)について不確実であるためにシステムの脆弱性に将来的に疑問が生じる。
また、ユーザの傾向として、部分的に変更しただけのパスワードを、ソーシャルメディアウェブサイトからオンラインショッピングウェブサイトまで様々なシステムで使用しているため、他のシステムの安全性にも副次的に損害が発生してしまうという重大な問題もある。さらに、パスワードファイルの盗難という問題点は、その盗難の発生時にわかることもあるが、盗難が発生していないと確信できないことにある。よって、盗難が発生したことを最初に発見した時が、システムが大規模に危殆化される時なのである。
当業者であれば、先行技術による様々な、パスワードファイル及びファイル内容のセキュア方法がわかるであろう。そういった方法では、パスワードハッシュと呼ばれるオリジナルの平文パスワードを暗号化し保存、またはソルト化パスワードのハッシュ値の保存といった方法が最も一般的である。
ハッシュチェーン及びレインボーテーブルといった暗号化パスワードをオリジナルの平文に復号化する方法が開発されたが、双方とも不十分である。そのため、パスワードストア自体危殆化されず、まずは盗まれないことが最重要である。
本発明は、上記脆弱性、及び、上には記述の無いその他の問題にも対処する。
本発明により提供される装置は、複数のユーザに関連するデータを不正アクセスから保護する装置を使用するアプリケーションサーバとメッセージを受送信するよう構成されたインタフェース、及び、メモリに保存された情報に対し限定数の所定動作を実行するよう構成されたプロセッサを備え、情報は、複数の独立したユーザに関連し、不正アクセスから安全に守られるデータを備え、インタフェースは、複数の独立ユーザの一人に関連するデータを備えるアプリケーションサーバからメッセージを受信するよう構成され、データは別のデバイスからアプリケーションサーバが受信したものであり、プロセッサは、受信データをメモリに保存されたセキュアデータに照らし比較することを含め、メモリの情報に対し動作を実行し、比較に基づきアプリケーションサーバにインタフェースを介して応答するよう構成され、限定数の所定動作は、アプリケーションサーバへのメモリに保存されたセキュアデータの提供を含まない。
装置はさらに、複数の独立ユーザに関連する情報を保存するメモリを備える。プロセッサ及びメモリは、単一集積回路として提供してもよい。また、メモリは例えば、装置に接続可能な独立したデバイスであってもよい。メモリは、プロセッサにのみアクセス可能に配置されてもよい。装置は、プロセッサとメモリの間の接続部を備えてもよく、接続部はメモリにだけ接続して提供してもよい。
本発明は、特定プロセッサのみアクセス可能な証明書情報を保存する秘匿メモリまたはプライベートメモリを提供する。プロセッサは、ローカルプロセッサであってもよい。
プロセッサは、アプリケーションサーバの処理ロジックから分離され、アプリケーションサーバがタスクを実行するのに必要なメモリ内のデータとの連携は、プロセッサによる限られた動作を通して実行されるという点で、メモリ内データの安全な保存を確実にする。複数ユーザに関連する秘匿データを盗もうとアプリケーションサーバに対し攻撃しても、秘匿データは秘匿メモリに保存され、装置のプロセッサは、アプリケーションサーバの処理ロジックが秘匿データには決してアクセスできないため、失敗に終わる。
プロセッサは、受信データを直接保存データに照らし比較してもよい。また、プロセッサは、保存データに照らして比較する前に、受信データを処理してもよい。比較には、完全マッチング、統計的マッチング、変換マッチング、または検証マッチングなどを含んでもよいが、これらに限定されない。検証マッチングは、保存データを使って受信データのデジタル署名を確認してもよい。
メモリに保存された情報は、インデックス及び各インデックスに関連するデータを備えてもよく、プロセッサはインデックスを使用し情報に対し限定数の所定動作を実行するよう構成されてもよい。
メモリに保存された情報は、ユーザID、及び、各ユーザIDに関連する、ユーザ認証用の認証データを備えてもよく、アプリケーションサーバは、当該装置からの応答に基づきユーザを認証するよう配置された認証サーバであってもよい。
メモリに保存された情報は、1または複数の外部リソース用の、ユーザID、並びに、ユーザIDに関連するパスワード、生体認証データ、及び個人識別番号のうち1または複数を備えてもよく、アプリケーションサーバは、装置からの応答に基づき当該1または複数の外部リソースへのアクセスを許可または拒否するよう構成されてもよい。
メモリに保存された情報は、宝くじチケット識別番号、及び、宝くじチケットの購入時に登録された購入者識別情報を備えてもよい。
ユーザとは人またはパーソナルデバイスであってよいが、ユーザは必ずしも一人の人に関連付けられなくてもよい。例えば、ある実施形態において、複数の独立したユーザがセンサなどの複数のデータ保存デバイスであり、アプリケーションサーバが当該デバイスに使用され、受信データが実際に所与のデバイスから来たことを確認する。複数独立ユーザの数が大きくなり、特定の実施及び用途次第では、例えば、何十万、何億ということもあり得る。また、複数ユーザの数は、少数もあり得る。
プロセッサは、実行中にプログラムできないよう構成されてもよい。
プロセッサは、使用中にはプログラムも変更も不可にしてもよい。つまり、一旦配置されると、遠隔からプログラムをプロセッサにダウンロードできなくてもよく、別のタスクまたは変更タスクを実行させるよう、プロセッサを遠隔から変更をできなくてもよい。
プロセッサは、当該アプリケーションサーバから所定長までしかメッセージを受け付けず、当該所定長を超える入力メッセージを拒否または切り捨てるよう構成されてもよい。
限定数の所定動作は、メモリのセキュアデータをアップデートする動作を備えてもよい。装置は、アプリケーションサーバから新規データを受信しメモリをアップデートしてもよい。
ある実施形態において、プロセッサは外部への限定した特定インタフェースを提供してもよく、当該インタフェースは、データの保存、比較、アップデート及び削除を行う動作のみ許諾し、また、データに影響せずデータを開示しない管理機能の追加のみ許諾する。
プロセッサは、限定数動作による結果をアプリケーションサーバにインタフェースを介して提供するよう構成されてもよく、結果は成功、失敗、またはエラー状態についての情報に限定されてもよい。
プロトコル処理、暗号化及び符号化、またはバックアップなどの処理の異なる態様の間の分離に限定されないが、そういった処理の実装を、プロセッサにおいて分けてもよい。そういった処理を、物理的に独立した処理ユニットにおいて実施し、当該処理ユニットは、独立したプロセッサ同士がメモリを共有しない内部通信システムを使用して互いに通信する。
プロセッサは、ハーバードアーキテクチャ型プロセッサ、特定の目的の書換え可能ゲートアレイ(FPGA)または特定用途向けIC(ASIC)プロセッサとして実施されてもよく、プロセッサへのコード注入攻撃を禁じる。
装置は、追加して内部ストレージに、または、プライベートネットワーク接続または暗号化ネットワーク接続を使って外部ストレージに、セキュアデータを確実にバックアップするよう構成されてもよい。このため、ある実施例において、装置はさらにバックアップメモリを備えてもよい。
インタフェースは、第一インタフェースを提供してもよく、装置はさらに、外部バックアップデバイスに情報を提供する第二インタフェースを備えてもよく、プロセッサは、セキュアデータをバックアップデバイスに第二インタフェースを介して提供するよう構成されてもよい。セキュアデータは、暗号化形式でバックアップデバイスに提供されてもよい。バックアップデバイスは、上に定義したように別の装置であってもよく、プライベートネットワークまたは別のセキュアメモリであってもよい。
メモリは、セキュアデータを保存するハッシュテーブルとして組織されたフラッシュメモリを備えてもよく、フラッシュメモリは、それぞれがユーザプロファイルを収める一律空間ブロックとして組織される。
メモリは、ユーザプロファイルに関連するデータ及びメタデータを一律空間ブロックの同一ブロックに保存するよう構成されてもよい。単一ブロックへの書込みが可能なフラッシュメモリを使用することで、メタデータ用第二テーブルが必要なくなり、書込み読出し時間が改善し、メモリ寿命が延び、データの不連続性リスクも減少する。
ユーザプロファイルは、ユーザアイデンティティデータ、証明書データ、及びユーザアイデンティティに関連するメタデータ、並びに、ユーザアイデンティティに関連する稀に変更されるデータを備えてもよい。
また、本発明により提供されるシステムは、上で定義した装置、及び、複数のユーザに関連するデータを保存するために装置を使用するアプリケーションサーバを備え、アプリケーションサーバは、複数の独立ユーザに関連する複数のデバイスからデータを受信し、複数のデバイスから受信したデータをメモリに保存されたデータに照らし比較する装置に送信するよう構成される。アプリケーションサーバは、リソースを共有して、クライアントサーバネットワークの1または複数のアプリケーションに提供してもよい。
システムは、装置とアプリケーションサーバとの間の接続を暗号化してもよい。
システムはさらに、複数デバイスとアプリケーションサーバとの間を仲介するプリサーバを備える。プリサーバは、複数デバイスのいずれかから受信したデータをセキュアメモリに保存されたデータに照らし比較されるよう書換え、デバイスから受信したデータではなく書換えデータをアプリケーションサーバに転送するよう構成される。プリサーバは、データの暗号化、テンポラリ・タグへのデータの書換え、並びに、チャネル外での装置へのタグ及びデータの送付、及びアプリケーションサーバへのタグのみの転送、または、プリサーバと装置で共有鍵を使用したハッシュ値へのデータの書換え、のいずれかにより、データを書き換えるよう構成される。プロセッサは、書換えデータからオリジナルデータに復元させ、メモリに保存されたセキュアデータに対し復元データを比較するよう構成されてもよい。
また、本発明により提供されるコンピュータ実施方法では、複数のユーザに関連するデータを保護する装置を使用するアプリケーションサーバからのメッセージであって、メッセージはアプリケーションサーバが別のデバイスから受信したデータを備え、メモリに保存した情報であって、複数独立ユーザに関連し不正アクセスから安全に守られるデータを備えた情報に対し動作をメッセージに応じて実行し、比較に基づきアプリケーションサーバに応答を返す。動作は、装置のプロセッサがメモリの情報に対し実行可能な限定数の所定動作のいずれかである。
限定数の所定動作では、セキュアデータをアップデートすることを含んでもよく、当該方法ではさらに、不正アクセスから保護されるデータとともにアプリケーションサーバからメッセージを受信し、メモリを受信データでアップデートすることを備えてもよい。
当該方法ではさらに、暗号化形式のセキュアデータを外部バックアップデバイスに、アプリケーションサーバとのメッセージの受送信を介するインタフェースとは別のインタフェースを介して提供してもよい。
当該方法ではさらに、所定長を超えるメッセージを受信すると、当該メッセージを拒否または切り捨てを備えてもよい。
また、本発明により提供されるコンピュータプログラムは命令を備え、プロセッサにより実行されると命令はプロセッサに、複数のユーザに関連したデータを保護するためにプロセッサを備える装置を使用するよう構成されたアプリケーションサーバからインタフェースを介して受信したメッセージであって、別のデバイスからアプリケーションサーバが受信したデータを備えたメッセージを受信及び解釈させ、当該プロセッサのみがアクセス可能なメモリに保存された情報であって、複数ユーザに関連し不正アクセスから安全に守られるデータを備えた情報に対し限定数の所定動作を実行させ(当該限定数動作では、受信データに基づくデータをメモリに保存されたセキュアデータに照らして比較し)、限定数所定動作の動作結果に基づき、アプリケーションサーバにインタフェースを介し応答を返させる(当該限定数動作では、アプリケーションサーバにセキュアデータを返すことを含まない)。
また、本発明により提供される非一時的コンピュータ読取可能媒体は、コンピュータプログラムを保存し有する。
また、本発明により提供される不正アクセスから安全にデータを守るデータ保護システムは、セキュアメモリに保存されたデータに照らし比較されるデータをクライアントデバイスから受信するアプリケーションサーバ、及び、クライアントデバイスとアプリケーションサーバとの間を仲介するプリサーバを備える。当該保存データは複数ユーザに関連付けられ、当該セキュアメモリはアプリケーションサーバの一部を形成するかアプリケーションサーバの外部デバイスの一部を形成し、保存中の保存データを保護する。当該プリサーバは、クライアントデバイスから受信し、セキュアメモリのデータに照らし比較されるデータを書換え、使用中のデータも保護するために、クライアントサーバからの実受信データではなく書換え済受信データをアプリケーションサーバに転送するよう構成される。プリサーバは、データの暗号化、テンポラリ・タグへのデータの書換え、または、プリサーバと装置で共有鍵を使用したハッシュ値へのデータの書換えのいずれかによりデータを書き換えるよう構成されてもよい。システムは、クライアントデバイスからのデータをセキュアメモリに保存されたデータに比較するプロセッサを備えてもよく、プロセッサは、比較を実行する前に、書換えデータからオリジナルデータに復元するよう構成されてもよい。
また、本発明により提供されるプリサーバは、上記のようにシステムで使用され、またはシステムに備えられる。当該プリサーバは、クライアントデバイスから受信したデータを書換え、書換えたデータをアプリケーションサーバに転送するよう構成される。
またさらに、本発明により提供されるメモリは、ユーザデバイスを認証する証明書データを保存し、ハッシュテーブルとして組織されるフラッシュメモリであって、それぞれがユーザプロファイルを収める一律空間ブロックを備えるフラッシュメモリを備える。
各ブロックは、ユーザアイデンティティデータ、証明書データ、及び、ユーザアイデンティティに関連するメタデータを保存してもよい。従って、プロファイルがアップデートを要する場合、単一ブロックのみの書込み動作を要してもよい。
また、本発明により提供される、ユーザ証明書保存のためのフラッシュメモリ使用方法では、フラッシュメモリは、ハッシュテーブルとして組織され、それぞれがユーザプロファイルを収める一律空間ブロックを備える。当該フラッシュメモリ使用方法では、ユーザプロファイルに関連するデータ及びメタデータの双方を一律空間ブロックの一ブロックに保存し、ユーザプロファイルをアップデートするために、コマンドに応じて単一ブロックの書込み動作を実行することを備える。
ユーザプロファイルのデータ及びメタデータが単一ブロックに書込まれる構造を使用することで、アップデートのための別の第二テーブルが必要なくなり、書込み/読出し性能が改善し、データの不連続性リスクが減少し、フラッシュメモリの寿命も延びる。
また、本発明により提供される比較記憶装置はアプリケーションサーバに対する手段を備え、秘匿情報を保存し秘匿情報に対する選択動作を実行し、これらの動作の結果を取得し、一方では、一旦保存された秘匿情報は、アプリケーションサーバが比較記憶装置から直接取得できないという意味において、情報の秘匿性を維持する。
秘匿情報の保存が許諾され、別の情報を当該保存秘匿情報に比較する場合、比較記憶装置は、比較結果の成功または失敗のみ開示してもよく、さらに要求があれば、失敗の理由について情報量を限定して開示してもよい。
秘匿情報は、比較記憶装置から秘匿情報を読み出す手段を確実に無くすか、比較記憶装置から読み出された秘匿情報が比較記憶装置内で保存される暗号鍵で確実に暗号化されるかのいずれかにより維持されてもよい。
ある実施形態において、秘匿情報に対して実施可能な動作はアプリケーションサーバにより変更可能であり、実際こういった動作はデバイスの搭載時には事前に定義されている。
比較記憶装置は、アプリケーション専用比較手段を可能にしてもよく、当該比較手段では、比較記憶装置の保存秘匿情報とアプリケーションにより提供される情報とを比較する。
比較記憶装置は、アプリケーションサーバが比較記憶装置に既に保存されている特定の秘匿情報について既知であることを証明でき、既知情報であるといった証明が比較記憶装置により実行されるアプリケーション専用情報比較の精度「まで」あるのであれば、アプリケーションサーバが比較記憶装置に保存された秘匿情報をアップデートする手段を提供してもよい。
比較記憶装置は、アプリケーションサーバが比較記憶装置に既に保存されている特定の秘匿情報について既知であることを証明でき、既知情報であるといった証明が比較記憶装置により実行されるアプリケーション専用情報比較の精度「まで」あるのであれば、アプリケーションサーバが比較記憶装置に保存された秘匿情報を削除する手段を提供してもよい。
比較記憶装置は、比較記憶装置内での冗長保存を支援して障害許容力を備えてもよい。
比較記憶装置は、システムで同時に使用される複数の当該比較記憶装置を支援して障害許容力を達成してもよい。
比較記憶装置は、秘匿情報のバックアップ手段を備え、比較記憶装置に保存された当該秘匿情報の個別暗号化バックアップを支援してもよい。
比較記憶装置は、アプリケーションサーバへの送信応答についてのインテグリティ検証手段を備え、比較記憶装置から送信される情報のデジタル署名を支援してもよい。
比較記憶装置は、比較記憶装置からアプリケーションサーバに送信される情報の秘匿性維持手段を備え、比較記憶装置から送信される情報の暗号化を支援してもよい。
比較記憶装置は、複数のアプリケーションサーバとの接続手段、及び当該アプリケーションサーバからの複数要求の受信手段を備えてもよい。
接続手段は、複数の要求と対応する複数の応答とのペア形成手段を備えてもよく、その手段は当該アプリケーションサーバからの要求メッセージ内の識別子を使用し、当該識別子が、当該要求に対応する比較記憶装置からアプリケーションサーバへの応答に含まれるようにする。
接続手段は、アプリケーションサーバと比較記憶装置との間における複数の様々なプロトコルの支援手段を備えてもよい。
プロトコル手段は、アプリケーションサーバと比較記憶装置との間における当該プロトコルの同時接続支援手段を備えてもよい。
比較記憶装置は、比較記憶装置のナノウォールコンポーネントと比較記憶装置の保存コンポーネントとの間における複数の様々なプロトコルの支援手段を備えてもよい。
プロトコルは、プロトコルのナノウォールコンポーネントとプロトコルの保存コンポーネントとの間における当該プロトコルの同時接続支援手段を備えてもよい。
接続手段は、バッファーオーバーフロー攻撃に対する防止手段を備えてもよい。
比較記憶装置のアーキテクチャは、コード注入攻撃に対する防止手段を備えてもよい。
比較記憶装置のアーキテクチャは、スタックスマッシング攻撃に対する防止手段を備えてもよい。
比較記憶装置は、ウェブサーバ、ゲームサーバ、データベースサーバ、またはその他演算及び/または保存リソースとして使用される汎用コンピュータが収集秘匿情報を保存する手段を提供してもよく、当該手段では、比較記憶装置への物理的アクセスを持たない人が比較記憶装置から当該収集秘匿情報を取得できないようにする。
比較記憶装置は、保存秘匿情報をメタデータに関連付けさせる手段を備えてもよく、当該メタデータは、保存秘匿情報が比較記憶装置による様々な動作でどのように使用されるかを記録し、具体的には、保存秘匿情報が特定の動作で利用可能か否かをメタデータが示してもよい。
メタデータは、比較記憶装置の動作により動的に修正されてもよい。
比較記憶装置は、保存秘匿情報からのチャレンジ列取得手段を備えてもよい。
本発明の実施形態は、関連インデックスでインデックス化されたデータのセキュア保存方法及び装置を提供し、当該インデックスを使用した保存データに対する動作性能を支援し、動作結果は保存データについての情報を限定して開示するようにする。
本発明の実施形態について添付図を参照し実施例で説明する。本明細書を通し参照する図は、下記の通りである。
本発明のある実施形態による装置の主要コンポーネントを示す概略図である。
本発明の別の実施形態による、セキュアデータストアとしてプライベートストレージネットワークを使用する装置のコンポーネントを示す概略図である。
本発明のある実施形態の実現による、ウェブサーバとインタフェースで接続するパスワードセーフ(password safe)の実施を示す概略図である。
図1及び図2の装置の処理ロジックを記載したフローチャートである。
セキュアデータの処理及びバックアップシステムの概略図である。
本発明の実施形態による証明書保存メモリの概略図である。
「保存中の証明書」を保護するシステム、及び、プリサーバを備え「使用中の証明書」も保護するシステムを示す概略図である。
「保存中の証明書」を保護するシステム、及び、プリサーバを備え「使用中の証明書」も保護するシステムを示す概略図である。
図7bのシステムを使用した秘匿データの処理方法を示すフローチャートである。
図1を参照して厳重に情報を保存する装置を示す。装置は、装置へのメッセージ1を受信し、応答2を送信するフロントエンド・インタフェース3、及び多数の操作を実行するプロセッサ4を備える。図1の装置はさらに、複数のユーザに関する情報を保存するメモリ6も備える。情報は、パスワード、生体認証及び個人識別番号データなどがあるが、これらに限定されない秘匿または機密データであり、当該データへのアクセスが許可されていない者には機密にされる。また、装置は、プロセッサがメモリ内の情報の操作の実行に使用するバックエンド・インタフェース5も備える。プロセッサは、データを処理するよう構成されたデバイス、1または複数のコンポーネント、またはロジックであってもよく、固定ハードウェアとして、或いはハードウェアまたはソフトウェアの組合せとして実施されてもよい。プロセッサは、ロジック、プログラムメモリ、及び命令をプログラムメモリに保存したデータメモリを備えてもよい。フロントエンド・インタフェース3はフロントエンド・プロトコルを提供し、装置によるコマンド1の受信及び応答2の送信を可能にしている。バックエンド・インタフェース4はバックエンド・プロトコルを提供し、プロセッサによるメモリ6へのアクセスを可能にしている。メモリはプロセッサからのみアクセス可能である。つまり、メモリへの物理的なアクセスを持たない人は、プロセッサ4を介してしかメモリに接することができない。プロセッサは、メモリ内の秘匿情報に対し限定数の動作しか実行できないよう事前にプログラムされる。さらに実施例において、プロセッサを再プログラムして使用することはできない。プロセッサは、メモリに保存したデータを保護し、データを厳重に保存している。
装置はアプリケーションサーバと接続可能であり、当該アプリケーションサーバは、装置を使用し複数のユーザそれぞれに関する秘匿データを保護してもよい。アプリケーションサーバは装置を使用し、例えば、ユーザ認証、及び/または、ユーザによるデータへのアクセス制御を行ってもよい。プロセッサは、アプリケーションサーバからフロントエンド・インタフェース3を介して受信するコマンド1を解釈し実施し、フロントエンド・インタフェース3を介してアプリケーションサーバに応答2を返すよう構成される。プロセッサが実行するよう構成された限定動作では、アプリケーションサーバに秘匿データを返すことを含まない。反対に、装置は、アプリケーションサーバからメッセージ1で秘匿データを受信し、受信した秘匿データをメモリに保存された秘匿データと比較し、比較結果に基づき応答2を返してもよい。応答には、秘匿データが一致したあるいは検証された旨示してもよいが、秘匿データ自体を含めない。保存データに対する受信データの比較が成功しない場合、応答には装置がデータ一致に失敗した旨示してもよく、失敗理由についての情報も限定して提供してもよい。装置は、メモリの保存データをアプリケーションサーバから受信した新規データでアップデートしてもよい。
以降、装置を「比較記憶装置」、プロセッサを「ナノウォール」、メモリを「記憶装置」、「ストレージ装置」または「データストア」と呼ぶことがある。用語:アプリケーションサーバを使う場合は一貫して、比較記憶装置に接続可能または接続された装置であって、比較記憶装置を使用して秘匿情報を保護する装置を意味する。用語:アプリケーションサーバは、特定形式の装置を提示するものではなく、汎用コンピュータ、または本明細書に記載する以外の特定用途モードであってもよい。アプリケーションサーバは、クライアントサーバネットワークの1または複数のアプリケーションとリソースを共有してもよい。アプリケーションサーバは、例えば、クラウドにアプリケーションを提供するサーバであってもよい。追加して、あるいは代わりに、別のサーバ及び/またはデータベースに接続し、その接続管理を行ってもよい。上に挙げたように、ユーザデバイスがアクセスを要求するリソースへのアクセス管理を含んでもよい。アプリケーションサーバには、ウェブサーバ、ディレクトリサーバ、認証サーバ、または識別サーバを含むが、これらに限定されない。アプリケーションサーバは、複数のデバイスと通信するよう構成されてもよい。アプリケーションサーバは、例えば、複数のデバイスと、インターネットなどのデータ通信ネットワークを通してデータを受送信するよう構成されてもよい。アプリケーションサーバは、デバイスからデータを受信し、比較記憶装置に転送し、比較記憶装置がメモリに保存された秘匿データと比較する。アプリケーションサーバは、比較記憶装置を使用して、複数のユーザに関連するデータを保護するが、それは誰か特定のユーザに属する、または特定のユーザについて関連付けられたデータではない。比較記憶装置は、ユーザデバイスでもパーソナルデバイスでなくてもよく、システム内で使用されて複数の独立ユーザに関する情報を保存してもよい。
さらに、比較記憶装置は、自ハウジングに収められ物理的に独立したデバイスであってもよく、下に詳細を示すが、アプリケーションサーバと同じハウジング内で物理的に独立したエンティティであってもよい。アプリケーションサーバは、比較記憶装置とは別の自処理ロジック及び自メモリを備えるものである。アプリケーションサーバの1または複数のプロセッサ及びメモリを比較記憶装置とは別にしてもよいが、これは、比較記憶装置のチップとは別のチップ上に設置されることを意味する。また、同じシリコンデバイス上に配置することも可能であるが、アプリケーションサーバの処理ロジックと比較記憶装置の処理ロジックを物理的に別のロジックにし、アプリケーションサーバのメモリと比較記憶装置のメモリもまた物理的に別にする。例えば、比較記憶装置を含むクライアントサーバネットワークは、単一基板または単一シリコンデバイス、システム・オン・チップ(SOC)、或いはクライアントサーバネットワーク・オン・チップ上で実施されてもよい。プロセッサもメモリも共有されないが、物理的に別のロジック及び別のメモリとしてチップ上に設置される。
図1は、本発明の実施形態の比較記憶装置における一般的な実施例を示しており、図1のハードウェア全体にわたる。
図1のハードウェアは、デバイスに送られたコマンドを解釈し実施するドメイン専用ロジックを備えるナノウォール4、データが収められる記憶装置6を備える。データは、ナノウォールと記憶装置との間をバックエンド・インタフェース5がサポートするバックエンド・プロトコルを使って転送される。フロントエンド・インタフェース3は、内部への動作要求メッセージ1、及び、成功応答及び失敗応答に限定された外部への応答メッセージ2の形式を規定するフロントエンド・プロトコルをサポートする。メッセージは、例えば、ウェブサーバなどの外部システムが、比較記憶装置へのコマンドを送信し、比較記憶装置からの応答を受信する手段である。
図2は、本発明による別の実施形態の実現であり、図1に示される構造の変形を示す。図1および図2において、参照番号が同じものは、同じコンポーネントを示す。しかし、本実現において、プライベートストレージネットワークをデータストアとして使用する。本実現において、比較記憶装置の構造を単純化してもよく、その構造では、比較記憶装置をアプリケーションドメインと記憶ネットワークを接続するナノウォールインタフェースに単純化する。
比較記憶装置は、アプリケーションサーバの処理ロジック及びメモリとは物理的に独立したエンティティである。比較記憶装置は、アプリケーションサーバのメイン処理ロジック及びメモリとは別のチップに実装されてもよい。比較記憶装置は、自ハウジングに収められ物理的に独立したデバイスであってもよい。アプリケーションサーバは当該デバイスと離間し、当該デバイスは、例えば、アプリケーションサーバにリモート接続を使用する接続が可能であってもよい。比較記憶装置は、イーサネット接続を使用するアプリケーションサーバに接続可能であってもよい。また、比較記憶装置は、アプリケーションサーバ内に物理的に独立して形成されてもよい。その場合、比較記憶装置は、例えば周辺装置相互接続バス(PCI−バス)または内蔵汎用シリアルバス(USB)などのバスで、アプリケーションサーバのメイン処理ロジックに接続されてもよい。ある実施形態において、ローカルバスで比較記憶装置とアプリケーションサーバとの間を接続しなくてもよく、これは比較記憶装置と同一チップ上には設置されないことを意味する。別の実施例において、アプリケーションサーバ及び比較記憶装置を同一チップ上に設置してもよいが、秘匿データがセキュアであることを保証するために比較記憶装置のロジック及びメモリはアプリケーションサーバのロジック及びメモリとは物理的に別にする。
図1に示す実施において、プロセッサ4及びメモリ6は通常同じハウジング内に設置されるものである。さらに、比較記憶装置は、プロセッサ4及びメモリ6を備える集積回路として実施されてもよい。しかし、図2に示す実施において、メモリを比較記憶装置と別にしてもよく、自ハウジング内に独立したメモリとして設置してもよい。或いは、メモリが比較記憶装置の一部を形成し、同一集積回路の一部としてではなく比較記憶装置のプロセッサとして同一ハウジング内に設置されてもよい。以下の説明において、メモリ、データストア、または記憶/ストレージ装置6といった言及は、図1に示すように、比較記憶装置の一部を形成するメモリ、または図2に示す比較記憶装置に接続可能なメモリを意味する。
上記のように、アプリケーションサーバと比較記憶装置との間のインタフェースは、アプリケーションサーバのインタフェース、比較記憶装置のインタフェース、2つのインタフェース間の接続部、並びに、通信管理用ソフトウェア及びプロトコルを備えてもよい。以降、比較記憶装置のフロントエンド・インタフェース3を、アプリケーションサーバと通信する、ハードウェア及び/またはソフトウェアを含む比較記憶装置に設置されたインタフェースとする。比較記憶装置をアプリケーションサーバのハウジングとは別のハウジング内に設置する場合、フロントエンド・インタフェース3は、比較記憶装置のハウジング内に配置されてもよい。プロセッサ4とメモリ6との間のインタフェースは、プロセッサ用インタフェース、メモリ用インタフェース、この2つのインタフェース間の接続部、並びに、通信管理用ソフトウェア及びプロトコルを備えてもよい。以降、バックエンド・インタフェース5を、比較記憶装置に設置されたバックエンド・インタフェースのコンポーネントとする。メモリが独立したデバイスであれば、バックエンド・インタフェース5は、比較記憶装置のハウジング内でプロセッサ側インタフェースのみ備え、メモリへの接続部も独立メモリデバイス内のインタフェースも備えなくてもよい。
メモリ6は、複数のインデックス及びインデックスに関連するデータを保存するよう構成される。メモリ内の少なくとも複数あるデータは、不正アクセスから安全に守られる。インデックス化して保存されるデータは、パスワード、生体認証データ、個人識別番号データまたはその他ユーザ認証データ、クレジットカード情報または投票情報を含んでもよいが、これらに限定されない。メモリは、複数のユーザについてのセキュア情報または「秘匿」情報を保存し、ユーザ毎に1インデックスを保存してもよい。インデックスは、ユーザの名前またはユーザIDであってもよい。或いは、インデックスは、例えば、セキュアハッシュ値など、コンピュータ上で作成されたデータストリング及び/または数字ストリングであってもよく、ユーザIDは当該インデックスに関連付けられたデータとして保存されてもよい。例えば、個々にインデックス化して保存されたデータは、ユーザID、及び、パスワード、またはインデックスに関連付けられたユーザのその他識別情報を含んでもよい。
インデックス及び秘匿データに対し実施する動作を下に詳述する。
図3は、ウェブアプリケーションの一部を「パスワードセーフ(Password safe)」とした比較記憶装置の配置を示す。この配置では、ウェブブラウザを提供するユーザデバイスを有する番号7を付したユーザは、HTTPSプロトコルを使ってリンク8を介しインターネット9に接続し、さらにHTTPSを使ってリンク10を介し最終的にウェブサーバ12に接続する。ウェブサーバは、ストレージ装置14に保存されたウェブページを使用し、プロトコル13を介してストレージ装置14にアクセスする。ウェブサーバは、比較記憶装置(番号15で示し、図1の実施において番号3から6が付された各コンポーネントから成る)を使用し、保存ウェブページへのアクセスを許可する前に、ユーザが入力したパスワードを検証する。図3において番号1及び2が付されたメッセージは、比較記憶装置15のフロントエンド・インタフェース3が受信及び送信するメッセージである。図3のシステムにおいて、比較記憶装置は図1の実施での番号3から6が付された個別コンポーネントで構成されると記載したが、比較記憶装置は、図2の実施での番号3から5が付された個別コンポーネントで構成され、図3のシステムでもセキュアデータ保存用の独立したプライベートネットワークで構成されることも可能である。
図4は、AVRアーキテクチャで実施されるパスワードセーフとして実現した比較記憶装置でのメインループのフローチャートである。
パスワードセーフ及び他の使用など、比較記憶装置の実現を下に詳述する。
まずは、インタフェース、ナノウォール、プロトコル、及び、ナノウォールがメモリ内の情報に対し実行する動作の実施を個別に記述する。
動作及びインタフェースについて
以下の記述を通し、用語:インデックスは索引の意味で用い、用語:データは保存動作によりインデックスに関連付けられた情報の意味で用いる。
以下の記述を通し、用語:インデックスは索引の意味で用い、用語:データは保存動作によりインデックスに関連付けられた情報の意味で用いる。
下に示す例示的な実現において、比較記憶装置に対するインタフェースは、一連の動作である。動作に提供する情報を、動作に対するパラメータという。動作に対するパラメータは、データ、インデックスなどであってもよく、すなわち、パラメータはデータとしての使用意図も、インデックスとしての使用意図もない情報のことである。以降、その他のパラメータを動作に対する引数という。比較記憶装置は、現在のインデックス数、インデックス名などインデックスに関して情報を返す動作を実施するが、返すデータの情報に関しては制限される。特に、保存インデックス化データを直接検索するような動作は行わない。
比較記憶装置がサポートする主要動作は、
1. 新規インデックスでインデックス化してデータを保存する。
2. 保存インデックス化データに対し引数を比較する。
3. ある引数が保存インデックス化データと一致すれば、保存インデックス化データを新規データでアップデートする。
4. ある引数が保存インデックス化データと一致すれば、保存インデックス化データ及びインデックスを削除する。
1. 新規インデックスでインデックス化してデータを保存する。
2. 保存インデックス化データに対し引数を比較する。
3. ある引数が保存インデックス化データと一致すれば、保存インデックス化データを新規データでアップデートする。
4. ある引数が保存インデックス化データと一致すれば、保存インデックス化データ及びインデックスを削除する。
保存インデックス化データに対する引数のマッチング動作または比較動作は、アプリケーションドメインに依存し、アプリケーションドメインが違えば異なるマッチング規則を使用する必要がある。そういった規則の実施例に、完全マッチング、統計的マッチング、変換マッチング、及び検証マッチングを含むが、これらに限定されるものではない。完全マッチングでは、動作に対する引数として提供された情報が特定のインデックスでインデックス化されたデータに完全に一致しなければならない。統計的マッチングでは、引数が特定のインデックスでインデックス化され保存されたデータとエラー許容限界以下で一致しなければならない。変換マッチングでは、完全マッチングまたは統計的マッチングを実施する前に、処理を行って引数データ、及び/または、特定のインデックスでインデックス化され保存されたデータを変換する。検証マッチングでは、インデックスの関連データを、例えば引数のデジタル署名をチェックするなど、引数の検証に使用すべきであるとインデックスが示している。
ある実施形態において、そのような動作によって得られる結果は、指定のデフォルトインデックス設定以外の、動作で言及されないインデックスでインデックス化された保存データから独立させる必要があり、特定のデータから独立させる必要があるが、その意味を下記を例に示す。
引数値AがインデックスKでインデックス化された保存データと同一かどうかをテストする動作「eqAK」を呼び出す場合を考える。eqAKの結果は、以下による。
・インデックスKはデータ値Aをインデックス化し、結果Xを得る。
・インデックスKはA以外のデータ値をインデックス化し、結果Yを得る。
・インデックスKはデータ値Aをインデックス化し、結果Xを得る。
・インデックスKはA以外のデータ値をインデックス化し、結果Yを得る。
保存秘匿データを変更する(例えば、値Aを値Bに書換える)場合、呼び出し動作に互換性のある変更をしても(例えば、データAをデータBに置き換えてコール「eqBK」にする)、変更前のインデックスでの旧コール「eqAK」と同様の結果を得るのであれば、動作「eq」は、的確に保存されたデータから独立しているのである。
さらに、厳重にセキュアデータを保存するため、全インデックスのインデックス化データを同様に扱うという意味において、そのような動作で得られる結果に独立性を求めてもよい。つまり、指定のデフォルトインデックス設定以外は、どのインデックスも特別な扱いはしない。
記憶動作、比較動作及びアップデート動作は全て、本実施例に示す意味で独立性を有している。つまり、秘匿データに関する情報は、動作の呼び出しや、動作に対する応答分析においても開示されることはないことを意味している。
本発明によるある実現では、特定のアプリケーションドメインに向けた動作や、管理を簡略化する動作を実施する。こういった実現では、下記のような動作の実施が可能になる。
5. チャレンジ列の取得
5. チャレンジ列の取得
そのような動作に上記の意味で独立性がなくてもよい。そのような独立性のない動作の実施例として、単純なチャレンジ/レスポンス方式の基礎として比較記憶を使用する場合が挙げられる。当該方式では、ユーザにパスワードのランダムに選ばれた位置に文字を入力させて、ユーザの所有するパスワードを検証することを必要とする。
この場合、少なくとも、保存インデックス化データの一データ長分を要求してもよい。必ずしも、チャレンジ/レスポンス方式がチャレンジ列を判断する動作を必要としなくてもよいことに留意すべきである。チャレンジ/レスポンス方式の実施例に、ランダムストリングでユーザにチャレンジし、ユーザがパスワードと合わせてランダムストリングをハッシュ化しレスポンスを形成する方式がある。比較記憶装置は、変換比較動作でチャレンジレスポンスの形成を実現できる。
本発明によるまた別の実現において、以下の用途のために動作を実施してもよい。
6. インデックスでインデックス化されたデータを使用する動作に対する引数として入力された情報を符号化する。
7. インデックスでインデックス化されたデータを使用する動作に対する引数として入力された情報を暗号化する。
6. インデックスでインデックス化されたデータを使用する動作に対する引数として入力された情報を符号化する。
7. インデックスでインデックス化されたデータを使用する動作に対する引数として入力された情報を暗号化する。
本発明による実現により、最終的に以下のような管理動作を実施してもよい。
8.セルフテスト
9.バックアップ開始
8.セルフテスト
9.バックアップ開始
セルフテスト動作は、上記の意味において独立性を要する。つまり、セルフテスト動作で得られる結果は、セルフテスト動作によって配置されるデータ以外の実際のデータ内容から独立している。セルフテスト動作では、保存データに関する情報を開示しない。セルフテスト動作の実施例として、「送信テスト」があり、そのテストでは、標準的なパラメータシーケンスで動作を呼び出し、比較記憶装置が標準的な応答シーケンスを返すか、あるいは標準シーケンスが認識されなければエラーコードを返す。そのようなテストにより、比較記憶装置はコールプロトコルの処理における問題を検出できる。
本発明の主要目的はデータを非開示にすることなので、特にバックアップの概念に注意を払わなければならない。以降、用語:プライベートネットワーク及び用語:プライベートストレージネットワークは、比較記憶装置でのみ使用されるネットワーク及びストレージネットワークを意味し、用語:パブリックネットワーク及び用語:パブリックストレージネットワークは、ネットワークを意味する。
バックアップに対する比較記憶装置の構成には3種類ある。
1. バックアップをUSBメモリスティックなど物理的に取り外し可能なバックアップデバイスに保存し、比較記憶装置内で完結させる。比較器はバックアップ前に内容を暗号化してもよい。
2. バックアップを比較記憶装置上で完結させ、比較記憶装置は冗長メモリモデルを主要ロジックで実施しコンフリクトを解消する。当該主要ロジックの実施に必要なアルゴリズムは様々あり、当業者には周知である。
3. バックアップは、プライベートネットワークで接続された比較記憶装置間で実施され、下記のいずれかを実施する。
a. 独立した比較記憶装置間で冗長メモリモデルを実施する。
b. 記憶装置の状態を再構築する場合、各記憶装置は1または複数の他の記憶装置にまで戻し、主要ロジックを使用してコンフリクトを解消する。
c. 記憶装置を「有効」記憶装置と「リバース」記憶装置とに分け、各有効記憶装置は自記憶装置を1または複数のリバース記憶装置まで戻す。有効記憶装置に障害が発生すれば、リバース記憶装置バックアップの1つを交換用有効記憶装置として挙げる。
4. バックアップは、上記3にあるように比較記憶装置間で行うが、記憶装置がパブリックネットワークを介して互いに通信する場合、別の記憶装置まで戻す前に内容を暗号化する。
5. バックアップは、記憶装置にのみ接続しているプライベートストレージネットワークに対し行う。
6. バックアップは、パブリックネットワークを介してパブリックストレージネットワークに対し行うが、その場合記憶装置はバックアップ前に内容を暗号化する。
1. バックアップをUSBメモリスティックなど物理的に取り外し可能なバックアップデバイスに保存し、比較記憶装置内で完結させる。比較器はバックアップ前に内容を暗号化してもよい。
2. バックアップを比較記憶装置上で完結させ、比較記憶装置は冗長メモリモデルを主要ロジックで実施しコンフリクトを解消する。当該主要ロジックの実施に必要なアルゴリズムは様々あり、当業者には周知である。
3. バックアップは、プライベートネットワークで接続された比較記憶装置間で実施され、下記のいずれかを実施する。
a. 独立した比較記憶装置間で冗長メモリモデルを実施する。
b. 記憶装置の状態を再構築する場合、各記憶装置は1または複数の他の記憶装置にまで戻し、主要ロジックを使用してコンフリクトを解消する。
c. 記憶装置を「有効」記憶装置と「リバース」記憶装置とに分け、各有効記憶装置は自記憶装置を1または複数のリバース記憶装置まで戻す。有効記憶装置に障害が発生すれば、リバース記憶装置バックアップの1つを交換用有効記憶装置として挙げる。
4. バックアップは、上記3にあるように比較記憶装置間で行うが、記憶装置がパブリックネットワークを介して互いに通信する場合、別の記憶装置まで戻す前に内容を暗号化する。
5. バックアップは、記憶装置にのみ接続しているプライベートストレージネットワークに対し行う。
6. バックアップは、パブリックネットワークを介してパブリックストレージネットワークに対し行うが、その場合記憶装置はバックアップ前に内容を暗号化する。
バックアップの作成において、比較記憶装置は、比較記憶装置で事前作成した署名鍵に基づくセキュリティ署名を追加してもよい。この場合、バックアップまで戻す際には比較記憶装置はバックアップの署名をチェックする。
比較記憶装置がバックアップを暗号化するそれぞれの場合においても、あるいは、バックアップに署名する場合においても、暗号及び/または署名鍵は、以下のいずれかである。
1. 例えば、キーパッドインタフェース、USBメモリデバイス、USBメモリスティック、セキュアデジタル(SD)カード、マイクロSDカードなどを含むがこれらに限定されない、物理的に独立したリンクにより比較記憶装置にロードされたものである。同一鍵をロードすることより、複数の比較記憶装置で共通鍵が使用可能になる。
2. デバイスに記憶され開示されない秘匿鍵として比較記憶装置が作成したものである。この場合、比較記憶装置間で鍵を共有できない。
1. 例えば、キーパッドインタフェース、USBメモリデバイス、USBメモリスティック、セキュアデジタル(SD)カード、マイクロSDカードなどを含むがこれらに限定されない、物理的に独立したリンクにより比較記憶装置にロードされたものである。同一鍵をロードすることより、複数の比較記憶装置で共通鍵が使用可能になる。
2. デバイスに記憶され開示されない秘匿鍵として比較記憶装置が作成したものである。この場合、比較記憶装置間で鍵を共有できない。
別の実現では、上記の一部あるいは全ての追加機能を実施してもよく、さらに追加機能を実施してもよい。いずれの動作であっても、保存データを未暗号化状態で出力を伝達してはならない。
例えば、図5に示すように、バックアップ可能なある実施において比較記憶装置15は、2つのフロントエンド・インタフェースを有し、第一インタフェース3aは、アプリケーションサーバ12と通信し、別の第二インタフェース3bはバックアップを扱う。比較記憶装置15では、秘匿データをアプリケーションサーバ12に返すことは不可能で、プロセッサ4は第一インタフェース3aを介して秘匿データを提供しないよう構成されるが、プロセッサは、第二インタフェース3bを介して秘匿データをバックアップ用の別のエンティティ16に提供可能である。上記のように、別のエンティティ16は、別の比較記憶装置、プライベートネットワーク、またはパブリックネットワークであってよい。第一インタフェースは、アプリケーションサーバからメッセージ1aを受信し、アプリケーションサーバにメッセージ2aを送信し、第二インタフェースは、バックアップデバイスからメッセージ1bを受信し、バックアップデバイスにメッセージ2bを送信する。プロセッサ4は、バックエンド・インタフェース5を使用してメモリ6を操作し、第一フロントエンド・インタフェース3a及び第二フロントエンド・インタフェース3bを介してアプリケーションサーバ12及びバックアップデバイス16と通信する。例えば、比較記憶装置15がイーサネットケーブルまたはUSB接続を介してアプリケーションサーバ12と接続された上記の実施形態において、図5の第一インタフェース3aは、イーサネットカードまたはUSBポートカードであってもよく、第二インタフェース3bは、第一インタフェースであるイーサネットまたはUSBポートカードとは物理的に別のインタフェース、例えば別のイーサネットカードまたはUSBポートカードであってもよい。第二インタフェースを介して提供されるデータは暗号化されてもよい。図5において、メモリ6は、比較記憶装置15の一部として示されているが、図2で記したように、メモリは代わりに比較記憶装置とは別のプライベートネットワークあってもよい。
ある実施において、バックアップ用に提供されるデータはデータストア6から展開されることは決してない。その代わり、秘匿データが比較記憶装置に保存される最初の時点で秘匿データを冗長「バックアップ」メモリに保存して、バックアップ処理を実施する。例えば、プロセッサ4が特定のインデックスでインデックス化され保存されたデータについてアップデート操作を実行する際、同時にバックアップデバイス16にも新規データを転送してもよい。通信が途切れデータを転送できない場合、プロセッサはローカルメモリにデータを保存し、再び接続が利用可能になった時に転送する。よって本実施形態において、秘匿データを別のエンティティに提供する目的でセキュアデータストアから展開することは決してない。
ナノウォールについて
図4のフローチャートは、本発明の1つの実施形態におけるナノウォール処理ロジックを示す。本来、ロジックは無限プログラムループであり、当該ループでは、フロントエンド・プロトコルを介して受信した未完了のコマンドがあれば読出して復号化し、パラメータデータ処理に適した関数ハンドラを呼び出す。
図4のフローチャートは、本発明の1つの実施形態におけるナノウォール処理ロジックを示す。本来、ロジックは無限プログラムループであり、当該ループでは、フロントエンド・プロトコルを介して受信した未完了のコマンドがあれば読出して復号化し、パラメータデータ処理に適した関数ハンドラを呼び出す。
ある実施形態による関数ハンドラの処理ロジックを、本明細書の終盤のリスト1に記載する。リスト1はナノウォールの処理ロジックのソースコードリストであり、当該ナノウォールは、AVRアーキテクチャを使用して実現したパスワードセーフとして実施される。リスト1のコードでは、セルフテスト動作、削除動作、バックアップ動作、及び復元動作を行わないが、当業者であればこれらの動作を容易に実施できるであろう。当該ソースコードは処理ロジックの一つの実施形態を示すためのものであり、他の実施形態も考えられる。
比較記憶装置の鍵の設計原理は、ナノウォールを「実行中」にプログラム可能にしないことである。つまり、どんな実施技術でナノウォール構造を実現しようとも、稼動中のナノウォールへのコード注入を不可能にする。これを実現する方法は、下に挙げる方法を含め様々な方法があり、限定されるものではない。例えば、フィールドプログラマブルゲートアレイ(FPGA)を使用して実現した固定ハードウェアとしてナノウォールを実施する方法や、ハーバードアーキテクチャ型プロセッサ(プログラムメモリとデータメモリは分離されている)を使用し、ナノウォールの動作コールインタフェースからプログラムメモリへのパスが全く無いことを保証して(つまり、プログラムの実行は、プログラムメモリからのみ可能で、デバイスにインストールされて初めてプログラムを読込める)ナノウォールを実施する方法がある。コード注入を防ぐ上記の方法及び他の方法は、多数あり周知である。
プロセッサは、所定長までしかメッセージを受け取らないようプログラムされてもよく、それにより実施可能プログラムの注入を防ぐ。例えば、プロセッサは、所定長を超える入力メッセージを拒否、または切り捨ててもよい。
図1及び図2における比較記憶装置の具体的な実施例として、AVR、周辺インタフェースコントローラ(PIC)、またはMSP430などマイクロコントローラ・アーキテクチャでの実現、FPGA内での実現、特定用途向け集積回路(ASIC)としての実現、カスタム集積回路(IC)としての実現、中央処理装置(CPU)におけるマイクロコードとしての実現を含むが、これらに限定されない。各実現において、様々なメモリの役割を物理的に異なるメモリに割り当てる。このため例えば、データ保存メモリ、演算用ダイナミックステートメモリ、及びプログラムメモリは分けられ、プログラム命令はプログラムメモリから取得されてのみ実行可能になる。さらに、ソフトプログラムをデバイスで使用する場合、デバイスはプログラムモードへの変更もプログラムモードからの変更も切り替え可能なハードウェアであり、比較記憶装置として動作する通常時は、プログラムのロードも変更もできない。メモリ分割に関する上記及び他の予防的方法は周知である。
本発明は、ハードウェア、ソフトウェア、またはソフトウェアおよびハードウェアの組合せで実施されてもよい。本発明はメモリに関する命令を備えるコンピュータプログラムとして提供されてもよく、例えばハーバード・アーキテクチャマシンなど好適なハードウェアで実行される場合、上記のような比較記憶装置を提供する。
プロトコルの処理について
フロントエンド・プロトコル3及びバックエンド・プロトコル5は、実現する比較記憶装置次第で換えてもよく、ナノウォール及びストレージ装置の実現のために選択する技術次第である。フロントエンド・プロトコル及びバックエンド・プロトコルが同一である必要はない。フロントエンド・プロトコル及びバックエンド・プロトコルの双方の一般的な実施例は、SPI,推奨標準232(RS−232)、RS−485、コントローラエリアネットワークバス(CAN−Bus)、USB、USB2、USB3、Firewire及びイーサネットを含むが、これらに限定されるものではない。トランスポートプロトコルと関連するハードウェアコンポーネント及びソフトウェアドライバの実施は、当業者には周知である。
フロントエンド・プロトコル3及びバックエンド・プロトコル5は、実現する比較記憶装置次第で換えてもよく、ナノウォール及びストレージ装置の実現のために選択する技術次第である。フロントエンド・プロトコル及びバックエンド・プロトコルが同一である必要はない。フロントエンド・プロトコル及びバックエンド・プロトコルの双方の一般的な実施例は、SPI,推奨標準232(RS−232)、RS−485、コントローラエリアネットワークバス(CAN−Bus)、USB、USB2、USB3、Firewire及びイーサネットを含むが、これらに限定されるものではない。トランスポートプロトコルと関連するハードウェアコンポーネント及びソフトウェアドライバの実施は、当業者には周知である。
選択するトランスポートプロトコルがプロトコルのインテグリティを確実に維持できるよう特に注意を要し、アプリケーションサーバが送信した比較記憶装置への要求及び応答、並びに、比較記憶装置からアプリケーションサーバへと返す応答を、紛失することなく、また、動作要求及び応答が間違って別のアプリケーションサーバに送られたり間違った順序で届いたりといった誤対応もないようにする。
ノンシーケンシャルプロトコル:要求及び応答の順序を維持できない(すなわち、要求rq1及びrq2が出される場合、いずれの順序で送達されてもよく、対応して応答rp1及びrp2が出され、いずれの順序で送達されてもよい)トランスポートプロトコルを介して動作要求が出される場合、下記のいずれかとする。
1. プロトコルハンドラ層を追加して要求及び応答をまとめ、順序を維持するフロントエンド・プロトコルを、トランスポートプロトコルを介して構築するか、
2. 特定動作要求を識別するために追加パラメータを動作要求に追加し、動作に対する応答は当該要求の識別子も運び、アプリケーションサーバが要求及び応答のペア形成ができるようにする。
3. アプリケーションサーバによる要求と応答との対応付けを可能にする応答の一部として動作要求のハッシュを返す。アプリケーションサーバはさらに、要求識別子、タイムスタンプまたはノンスを動作要求に含めて、対応する要求を固有なものとしてもよい。
1. プロトコルハンドラ層を追加して要求及び応答をまとめ、順序を維持するフロントエンド・プロトコルを、トランスポートプロトコルを介して構築するか、
2. 特定動作要求を識別するために追加パラメータを動作要求に追加し、動作に対する応答は当該要求の識別子も運び、アプリケーションサーバが要求及び応答のペア形成ができるようにする。
3. アプリケーションサーバによる要求と応答との対応付けを可能にする応答の一部として動作要求のハッシュを返す。アプリケーションサーバはさらに、要求識別子、タイムスタンプまたはノンスを動作要求に含めて、対応する要求を固有なものとしてもよい。
複数アプリケーションサーバ用プロトコル:アプリケーションサーバ用情報を継続して処理するフロントエンド・プロトコルを介して、複数のアプリケーションサーバが1つの比較記憶装置を使用する場合、フロントエンド要求ハンドラを比較記憶装置の前段に配置し、応答を正しいアプリケーションサーバに返す経路を処理する。
中間者緩和用プロトコル:フロントエンド・プロトコルが中間者攻撃の対象になる可能性がある場合、動作要求及び/または動作応答をデジタル署名で保護してもよい。応答でのデジタル署名は、フロントエンド・プロトコルを介して応答を送信する前に比較記憶装置内で行う。非対称鍵を署名に使用すれば、署名鍵は比較記憶装置で保存されるので応答を各段に強力に保護できる。デジタル署名で保護する場合、アプリケーションサーバは要求にさらにノンスを追加し、署名には要求と応答を結びつける動作要求のセキュアハッシュ値(追加したノンスを含む)も含んでもよい。これにより、アプリケーションサーバは、出された動作要求に応答が一致することを検証できるようになる。
上記の点を考慮したプロトコルハンドラの既存の構築方法は、多数あり周知である。
データストアについて
上記のように、データストア6は、ナノウォールと同じハウジング内、または独立したプライベートネットワーク内にローカルメモリとして設置されてもよい。ある実施形態では、データストアは、フラッシュメモリや、ダイナミック・ランダム・アクセス・メモリ(DRAM)など、個体メモリで実施されてもよく、別の実施形態では、データストアは、機械的なハードディスクドライブ(HDD)で実施されてもよい。
上記のように、データストア6は、ナノウォールと同じハウジング内、または独立したプライベートネットワーク内にローカルメモリとして設置されてもよい。ある実施形態では、データストアは、フラッシュメモリや、ダイナミック・ランダム・アクセス・メモリ(DRAM)など、個体メモリで実施されてもよく、別の実施形態では、データストアは、機械的なハードディスクドライブ(HDD)で実施されてもよい。
例えば、ある実施形態において、データストア6は、ハッシュテーブルとして構築されたフラッシュメモリで実施されてもよい。ハッシュテーブルは、当業者であれば周知のデータ構造ある。ユーザの証明書、メタデータ、及び、稀に変更されるその他データを保存するデータ構造であり、ユーザアイデンティティをインデックス値として使用する。図6を参照し、フラッシュメモリ6は、一律な空間のブロック19で形成されてもよく、それぞれには、ユーザアイデンティティ、ユーザアイデンティティに関する証明書、ユーザアイデンティティに付随するメタデータ、及びユーザアイデンティティに関連し稀に変更されるその他のデータの収容に十分な容量がある。
ユーザアイデンティティ、証明書、メタデータ及び稀に変更されるその他データを全て、比較記憶装置を使用してアクセス制限する秘匿データとしてもよい。
ハッシュ衝突は、通常のハッシュエントリとして同じ一律空間ブロックにエントリを作成して対処する。
ハッシングアルゴリズムは、関数f及び関数gの2つの関数で実行される。関数fは、引数としてユーザアイデンティティをとり、フラッシュメモリ内のブロックアドレスを返し、関数gは、引数としてユーザアイデンティティ及びブロックアドレスをとり、ブロックアドレスを返す。ハッシュテーブルへのインデックス付けは、以下のように行う。
1. ユーザアイデンティティuに関数fを適用し、ブロックアドレスbを得る。
2. ブロックbが使用中でなければ、当該ブロックを使用してユーザアイデンティティ及び付随する証明書、メタデータ、並びに稀に変更されるその他データを保存する。
3. ブロックbが使用中であれば、関数gで引数u及びbを用い新ブロックbを求め、新ブロックを配置する。
4. 新ブロックbが使用中であれば、関数gで引数u及び新ブロックbを用いてステップ3を繰り返して、新ブロックbを作成する。当該処理は所定限度に達するか空のブロックが見つかるかのいずれかまで繰り返される。
5. 空ブロックが見つかれば、当該ブロックを使用し、ユーザアイデンティティ及び付随する証明書、メタデータ並びに稀に変更されるその他データを保存する。
6. 空ブロックが見つからなければ、メモリがフルだとする信号を生成する。
1. ユーザアイデンティティuに関数fを適用し、ブロックアドレスbを得る。
2. ブロックbが使用中でなければ、当該ブロックを使用してユーザアイデンティティ及び付随する証明書、メタデータ、並びに稀に変更されるその他データを保存する。
3. ブロックbが使用中であれば、関数gで引数u及びbを用い新ブロックbを求め、新ブロックを配置する。
4. 新ブロックbが使用中であれば、関数gで引数u及び新ブロックbを用いてステップ3を繰り返して、新ブロックbを作成する。当該処理は所定限度に達するか空のブロックが見つかるかのいずれかまで繰り返される。
5. 空ブロックが見つかれば、当該ブロックを使用し、ユーザアイデンティティ及び付随する証明書、メタデータ並びに稀に変更されるその他データを保存する。
6. 空ブロックが見つからなければ、メモリがフルだとする信号を生成する。
同一の一律ブロック空間を使用することで、他にオーバーフロー・エリア、第二テーブルなどを使う必要がなくなる。
一律アドレス空間を使用することで、「ホットスポット」に書込む必要性が薄れる。ホットスポットとは、他領域より頻繁に書込みが行われるフラッシュメモリの領域のことであり、インデックス、ディレクトリ構造、または、ファイルシステムに付随するその他メタデータを維持している。フラッシュメモリの書込み寿命は有限であるが、読出し寿命は無限である。「ホットスポット」を防止することで、いかなるフラッシュメモリの領域も有限である読出し寿命に達するまでの時間が延びるため、フラッシュメモリは延びることになる。
一律アドレス空間を使用することで、データ継続性についても優位となる。ユーザアイデンティティ、ユーザアイデンティティに関する証明書、ユーザアイデンティティに付随するメタデータ、及び、ユーザアイデンティティに関連し稀に変更される可能性のあるデータの収容に同一ブロックを使用する。これにより、ユーザアイデンティティに関連付けられたデータをアップデートする必要がある時に、複数の個別テーブルをアップデートする必要が無くなり、メモリの複数部分をアップデートする書込み動作を別々に行う必要も無くなる。これは、アップデート中に万一停電があった場合に継続性エラーが起きるリスクを減らすことにもなる。動作の完了までにメモリの異なる部分のアップデートを要する場合、メモリ全体が停電の前にアップデートされたかがわからず、メモリが一貫して最新版であることを確かめるために様々な処理を要するであろう。反対に、メモリの1ブロック空間のみアップデートすれば動作完了となるのであれば、エラーが起きるリスクは軽減する。
さらに、1ブロックへの書込みとすることで、読出し書込み性能は改善する。アップデートを要するメタデータテーブルが無いため、読出し書込み回数は減少する。
ユーザ証明書は、時間とともにどのように証明書が使われているかという特性を有する。一度作成されるとユーザアイデンティティは読込みまたは削除されるのみで、当該ユーザに関連するパスワード、個人識別番号、及びクレジットカード番号などの証明書の変更は稀であり、主要生体認証データのアップデートは例えあったとしても非常に稀である。本特性は「ライトレア(書込みが稀な)」データとして説明できる。フラッシュメモリの書込み寿命が有限であるが読出し寿命は無限であり、パスワード及び/または同様の「ライトレア」データの極めて効率的な保存方法を提供するので、上記のデータ構造のフラッシュメモリは相非対称性を有する。
上記のフラッシュメモリを比較記憶装置のデータストアとして記述したが、フラッシュメモリで実施されるデータストアは、「レアライト」データの保存が必要などんなアプリケーションにも使用され得るであろう。
パスワードセーフの実施例
図3に示すパスワードセーフは本発明による実現例である。筋書として、ユーザはインターネットで買い物するためにウェブサイトへのアクセスを希望しているとする。オンラインストアを備えるウェブページへのアクセスが許可される前に、ユーザはサイトにログインし、まずは本人証明を行わなければならない。本発明が実現したパスワードセーフは、パスワードを保存しユーザ認証を行うためにウェブサーバに使用される従来のパスワードファイル保存の仕組みに換わるものである。
図3に示すパスワードセーフは本発明による実現例である。筋書として、ユーザはインターネットで買い物するためにウェブサイトへのアクセスを希望しているとする。オンラインストアを備えるウェブページへのアクセスが許可される前に、ユーザはサイトにログインし、まずは本人証明を行わなければならない。本発明が実現したパスワードセーフは、パスワードを保存しユーザ認証を行うためにウェブサーバに使用される従来のパスワードファイル保存の仕組みに換わるものである。
図3を参照して、ユーザデバイス7を有するユーザは、ウェブブラウザソフトウェアを使用しインターネットを介してウェブサーバ12に接続する。ユーザは、ログインページを提示され、ユーザID及びパスワードを入力し提出ボタンを押すよう促される。要求されたデータを入力し提出ボタンを押すと、ユーザID及びパスワードは認証のためにウェブサーバ12に送られる。ユーザ認証のため、ウェブサーバ12は「チェック」コマンドを生成し、比較記憶装置のフロントエンド・インタフェース3がサポートするフロントエンド・プロトコルを介してパスワードセーフ15に送信し、応答を待つ。コマンドは、入力されたユーザID及びパスワードをパラメータとして含む。パスワードセーフ15は「チェック」コマンドを受信すると、入力されたユーザID及びパスワードと一致するデータを自データストア6内で検索し、フロントエンド・プロトコルを介してウェブサーバ12にYes(一致)またはNo(一致失敗)のどちらかを示す1バイトのデータを返す。応答データが一致を示していれば、ウェブサーバ12は、14に保存されたウェブページを返し、ユーザ7にオンラインストアへのアクセスを許可する。応答データが一致失敗を示していれば、ウェブサーバは再度ログインページを表示し、ユーザにユーザID及びパスワードを再入力するよう促し、ユーザによるオンラインストアへのアクセスを拒否する。
比較記憶装置の実現において、図1のハードウェアを参照し、ナノウォール4はAVRマイクロコントローラ・アーキテクチャに実現される。また、記憶装置6は、SDカードとして実現され、パスワード用個別大容量データストレージメモリを提供するために使用される。フロントエンド・プロトコルはUSBを使用して実現されるインタフェースであり、インタフェースを介して、ウェブサーバが比較記憶装置にコマンド動作を送り、比較記憶装置から結果を受信する。直列周辺装置インタフェース(SPI)を使用して実現されるバックエンド・インタフェース5がサポートするバックエンド・プロトコルを介して、ナノウォール4と記憶装置6との間のデータ転送がなされる。
AVRマイクロコントローラ型ナノウォール4の実現には、消去可能プログラマブル・リードオンリメモリ(EPROM)、FLASH、及びランダムアクセスメモリ(RAM)の3種類がある。大きな定数を要するテーブル、ストリングまたは画像などはEPROMに常駐し、プログラムはFLASH、動状態のものはRAMに記憶される。構造上、プログラムはRAMから実行できない。通常は、一旦AVRがプログラムされると(ブートローダがFLASHに設置され、使用可能にならない限り)FLASHにインストールプログラムへの経路はない。
FLASHのプログラムは、アプリケーション(USB)及びSDカードストレージ装置(SPI)への通信チャネルを初期化する初期化ステップ、並びに、ウェブサーバからの要求に対応する無限ループで構成される。
ウェブサーバから比較記憶装置に送られる要求の形式は、
Command parameter−list <newline>
である。
Command parameter−list <newline>
である。
要求はUSBインタフェースを介してストリングとして送られ、応答は、ウェブサーバにUSBインタフェースを介してストリングとして戻される。
パスワードセーフでは、インデックスとしてユーザアイデンティティを表すストリングを使用し、データとしてユーザパスワードを表すストリングを保存する。インデックス、すなわち、user_id及びその関連パスワードは、ストリングペア(ユーザID、パスワード)で表されるアカウントをいう。要約すると、パスワードセーフがサポートするコマンド動作では、
作成:新規アカウントを作成する
Create(user_id, password)
この動作では、インデックスにuser_idを有するアカウントがデバイスに無い場合、アカウント(user_id, password)を作成し、成功となる。できなければ、この動作は失敗となる。
アップデート:現行アカウントに新規パスワードを与えてアップデートする
Update(user_id, old_password, new_password)
この動作では、アカウント(user_id, old_password)がデバイスに保存されており、アップデート動作が可能である場合、アカウント(user_id,old_password)を(user_id, new_password)に換え、アップデート動作及びチェック動作の両動作が可能であれば、成功となる。できなければ、この動作は失敗となり、保存しているユーザID/パスワードのペアを変更しない。
削除:インデックスにuser_idを有するアカウントが、所与のパスワードのゲスに一致する場合、アカウントを削除する
Erase(user_id, password_guess)
この動作では、アカウント(user_id, password_guess)がデバイスに保存されている場合、成功となる。できなければ、この動作は失敗となる。
チェック:インデックスにuser_idを有するアカウントのパスワードが、所与のパスワードゲスに一致するかをチェックする
Check(user_id, password_guess)
この動作では、アカウント(user_id,password_guess)がデバイスに保存されており、チェック動作が可能であれば、成功となる。できなければ、この動作は失敗となる。また、この動作は、本明細書の項目における動作及びインタフェースについて、に記載した主要動作リストの2に挙げた比較動作の別の形式である。
部分的無効化:チェック動作を無効にするが、アップデート動作を有効にしてアカウントを部分的に無効化する。
Partly_Disable(user_id)
この動作では、インデックスにuser_idを有するアカウントがデバイスに保存されている場合、チェック動作でアカウントを使用できない状態にし、成功となる。できなければ、この動作は失敗となる。
完全無効化:チェック動作及びアップデート動作の両動作でアカウントを無効にして、アカウントを完全に無効化する
Fully_Disable(user_id)
この動作では、インデックスにuser_idを有するアカウントがデバイスに保存されている場合、チェック動作でもアップデート動作でもアカウントを使用できない状態にし、成功となる。できなければ、この動作は失敗となる。
有効化:新規パスワードをアカウントに与え、アップデートでアカウントを使用可能にするか、同一パスワードを有効状態に戻すかして、完全無効化となっているアカウントを有効化する
Enable(user_id, admin_password, optional new_password)
この動作では、アカウント(“admin”, admin_password)がデバイス上にあり、(a)(b)のいずれかであれば、成功となる。(a):オプション引数のnew_passwordが与えられた場合、インデックスに=user_idを有するアカウントがアップデート動作可能状態にあり(チェック動作は不可)、アカウントパスワードをnew_passwordに変更する。(b):オプションの引数が与えられない場合、アカウントをアップデート動作及びチェック動作の両動作で利用可能にする。
バックアップ:比較記憶装置をバックアップする
Backup(stamp)
バックアップでは、比較記憶装置が別の事前構成ストレージ装置にバックアップを行い、バックアップにアイデンティティスタンプを与える。実際には、スタンプは、比較記憶装置名(または番号)、及びバックアップが行われた日時を示すタイムスタンプの組合せであることが多い。
復元:比較記憶装置を前にバックアップした状態に復元させる
Revert(stamp)
比較記憶装置を、事前構成ストレージ装置に保存されたバックアップスタンプとして保存された、以前の状態に復元させる。
本実施例において、一旦保存されたパスワードデータはフロントエンド・プロトコルを通過することがあってはならない。
作成:新規アカウントを作成する
Create(user_id, password)
この動作では、インデックスにuser_idを有するアカウントがデバイスに無い場合、アカウント(user_id, password)を作成し、成功となる。できなければ、この動作は失敗となる。
アップデート:現行アカウントに新規パスワードを与えてアップデートする
Update(user_id, old_password, new_password)
この動作では、アカウント(user_id, old_password)がデバイスに保存されており、アップデート動作が可能である場合、アカウント(user_id,old_password)を(user_id, new_password)に換え、アップデート動作及びチェック動作の両動作が可能であれば、成功となる。できなければ、この動作は失敗となり、保存しているユーザID/パスワードのペアを変更しない。
削除:インデックスにuser_idを有するアカウントが、所与のパスワードのゲスに一致する場合、アカウントを削除する
Erase(user_id, password_guess)
この動作では、アカウント(user_id, password_guess)がデバイスに保存されている場合、成功となる。できなければ、この動作は失敗となる。
チェック:インデックスにuser_idを有するアカウントのパスワードが、所与のパスワードゲスに一致するかをチェックする
Check(user_id, password_guess)
この動作では、アカウント(user_id,password_guess)がデバイスに保存されており、チェック動作が可能であれば、成功となる。できなければ、この動作は失敗となる。また、この動作は、本明細書の項目における動作及びインタフェースについて、に記載した主要動作リストの2に挙げた比較動作の別の形式である。
部分的無効化:チェック動作を無効にするが、アップデート動作を有効にしてアカウントを部分的に無効化する。
Partly_Disable(user_id)
この動作では、インデックスにuser_idを有するアカウントがデバイスに保存されている場合、チェック動作でアカウントを使用できない状態にし、成功となる。できなければ、この動作は失敗となる。
完全無効化:チェック動作及びアップデート動作の両動作でアカウントを無効にして、アカウントを完全に無効化する
Fully_Disable(user_id)
この動作では、インデックスにuser_idを有するアカウントがデバイスに保存されている場合、チェック動作でもアップデート動作でもアカウントを使用できない状態にし、成功となる。できなければ、この動作は失敗となる。
有効化:新規パスワードをアカウントに与え、アップデートでアカウントを使用可能にするか、同一パスワードを有効状態に戻すかして、完全無効化となっているアカウントを有効化する
Enable(user_id, admin_password, optional new_password)
この動作では、アカウント(“admin”, admin_password)がデバイス上にあり、(a)(b)のいずれかであれば、成功となる。(a):オプション引数のnew_passwordが与えられた場合、インデックスに=user_idを有するアカウントがアップデート動作可能状態にあり(チェック動作は不可)、アカウントパスワードをnew_passwordに変更する。(b):オプションの引数が与えられない場合、アカウントをアップデート動作及びチェック動作の両動作で利用可能にする。
バックアップ:比較記憶装置をバックアップする
Backup(stamp)
バックアップでは、比較記憶装置が別の事前構成ストレージ装置にバックアップを行い、バックアップにアイデンティティスタンプを与える。実際には、スタンプは、比較記憶装置名(または番号)、及びバックアップが行われた日時を示すタイムスタンプの組合せであることが多い。
復元:比較記憶装置を前にバックアップした状態に復元させる
Revert(stamp)
比較記憶装置を、事前構成ストレージ装置に保存されたバックアップスタンプとして保存された、以前の状態に復元させる。
本実施例において、一旦保存されたパスワードデータはフロントエンド・プロトコルを通過することがあってはならない。
本明細書の終盤に記載したリスト1は、ナノウォールの処理ロジックをリスト化したソースコードであり、当該ナノウォールはAVRアーキテクチャを使用して実現したパスワードセーフとして実施される。リスト1に挙げたソースコードは、セルフテスト動作、削除動作、バックアップ動作及び復元動作を実施するものではないが、当業者であればこれらの動作を容易に実施できるであろう。上記のように、本リストは、単に例示目的で示したものであり、他の実施も考えられる。
動作は、ウェブサーバからパスワードストアにUSBインタフェースを介して送信されるストリングで実現化され、形式は、
!!!<character> <argument−list> <carriage return><newline>
であり、下記のコマンドに対応する。
!!!<character> <argument−list> <carriage return><newline>
であり、下記のコマンドに対応する。
本コードは、他のマイクロコントローラベースの構造で実現した場合も適合し得る。
上記のパスワードストアの実施例では、AVRマイクロコントローラ・アーキテクチャを使って実施するプロセッサ4、SDカードで実現する記憶装置6、USBインタフェースを使用するフロントエンド・インタフェース3、及び、直列周辺装置インタフェース(SPI)を使用して実現するバックエンド・インタフェース5を使用したが、プロセッサ、記憶装置、及びインタフェースは別の方法でも実現可能である。例えば、記憶装置は、上記のようにフラッシュメモリで実施されてもよい。
インテグリティ検証の実施例
本発明による別の実現例にインテグリティ検証があるが、当該検証では、ユーザが提供した情報をその情報のデジタル署名をチェックして検証する。これは、本質的に上記のパスワードセーフの実施例と同じであるが、パスワードを対称署名鍵に換え、上記のチェック動作定義を以下に換える点が異なる。
チェック:特定のuser_idを有するユーザが提供する情報infが当該ユーザに正しく署名されたかをチェックする
Check(user_id, inf)
この動作では、インデックスにuser_idを有するデータとして保存されたデジタル署名鍵を使用してinfが署名されていれば、成功となる。できなければ、この動作は失敗となる。上記のように、これは比較主要動作の別の形式であり、情報inf、特に情報infを提供するためにデータ署名に使用された署名鍵は、保存インデックス化データに照らして比較され検証される。
本発明による別の実現例にインテグリティ検証があるが、当該検証では、ユーザが提供した情報をその情報のデジタル署名をチェックして検証する。これは、本質的に上記のパスワードセーフの実施例と同じであるが、パスワードを対称署名鍵に換え、上記のチェック動作定義を以下に換える点が異なる。
チェック:特定のuser_idを有するユーザが提供する情報infが当該ユーザに正しく署名されたかをチェックする
Check(user_id, inf)
この動作では、インデックスにuser_idを有するデータとして保存されたデジタル署名鍵を使用してinfが署名されていれば、成功となる。できなければ、この動作は失敗となる。上記のように、これは比較主要動作の別の形式であり、情報inf、特に情報infを提供するためにデータ署名に使用された署名鍵は、保存インデックス化データに照らして比較され検証される。
この問題に対する従来の方法では、署名鍵が検証鍵と異なるよう非対称鍵を使用する。これにより、検証鍵は公開されるが、検証鍵が署名者の署名偽造に使用されるリスクは無い。この方法は、検証鍵の共有または公開を要する場合、特に有用である。しかし、どんな場合でも検証鍵の共有を要するわけではない。例えば、1企業が遠隔センサから収集したデータが署名され、当該センサが本当に生成したものであるか検証してもよい。この場合、対称鍵署名アルゴリズムは、各センサのアイデンティティが署名鍵と関連する場合に使用可能である。比較記憶装置はこういった対称鍵用のセーフストアを有し、一旦ストアに登録された対称鍵はストアからの検索が不可能になり、この場合、非対称鍵を使用した場合と同等のセキュリティにすることができる。
セキュアな投票マシンの実施例
本発明による別の実現例に、電子投票マシンへの適用がある。この実現において、各投票マシンは、一般投票での各投票者からの投票を登録する比較記憶装置として実施される。例えば、各投票者は候補者への投票を登録するか、投票用紙に意見を表明してもよい。投票は投票者のvoting_idでインデックス化され、比較記憶装置に保存される。投票者は、自身しか知らないパスワードを使ってもよい。そうすれば、投票者が後にマシンに問い合わせし、自身の投票についてマシンの記録を検証でき、または投票が終了する前に自身が行った特定の投票を変更できたりする。投票マシンは自機の署名鍵を備えてもよいが、この目的は、署名付き投票集計を作成し、全投票マシンから投票を集計する投票集約装置(これも比較記憶装置)に送付するためである。投票集約装置は、各投票マシンの出力を検証し、投票の総計を出す。本実施例において、比較記憶装置の構造を使用するのは、投票者の投票の秘匿性を守り、しかも集約処理を通して一般投票のインテグリティを守るためである。
本発明による別の実現例に、電子投票マシンへの適用がある。この実現において、各投票マシンは、一般投票での各投票者からの投票を登録する比較記憶装置として実施される。例えば、各投票者は候補者への投票を登録するか、投票用紙に意見を表明してもよい。投票は投票者のvoting_idでインデックス化され、比較記憶装置に保存される。投票者は、自身しか知らないパスワードを使ってもよい。そうすれば、投票者が後にマシンに問い合わせし、自身の投票についてマシンの記録を検証でき、または投票が終了する前に自身が行った特定の投票を変更できたりする。投票マシンは自機の署名鍵を備えてもよいが、この目的は、署名付き投票集計を作成し、全投票マシンから投票を集計する投票集約装置(これも比較記憶装置)に送付するためである。投票集約装置は、各投票マシンの出力を検証し、投票の総計を出す。本実施例において、比較記憶装置の構造を使用するのは、投票者の投票の秘匿性を守り、しかも集約処理を通して一般投票のインテグリティを守るためである。
本実施例において図5を参照し、比較記憶装置15は、第一インタフェース3aを介しアプリケーションサーバ12に接続され、ユーザは、アプリケーションサーバ、第一インタフェース3a、及びプロセッサ4を介してセキュアなメモリ6に投票を保存しアップデートすることになる。投票集約装置は、バックアップデバイス16に換わり、第二インタフェース3bを使用し比較記憶装置に接続してもよい。あるいは、投票集約装置は第三のエンティティであってもよく、比較記憶装置が接続可能で、第二インタフェース3bに類似の第三インタフェースを介して接続可能であり、セキュアデータを暗号化形式で信頼できるデバイスに提供してもよく、アプリケーションサーバにはアクセスできない。本実施例において、比較記憶装置は、アプリケーションサーバ用に1インタフェース、投票集約装置用に別のインタフェース、及びバックアップ用にまた別のインタフェースを備えてもよい。
セキュアな宝くじ記憶装置の実施例
本発明によるまた別の実現例に、セキュアな宝くじ記憶装置への適用がある。本実現において、宝くじ運営会社が希望する、購入者に対するチケット検証の方法は、チケットが当選した購入者だけが当選金を請求できるというものである。本処理方法において、購入者にチケットを発行し、購入者はアイデンティティ情報を提供し、その情報は比較記憶装置にインデックス化したチケットデータとして保存される。比較記憶装置の比較動作では、提供されたアイデンティティ情報を保存インデックス化チケットデータに照らし比較する。チケットが当選していれば、購入者はチケットの所有者の証明として、購入時に登録したアイデンティティ情報を作成するだけでよい。購入者が使用するアイデンティティ情報は常に非開示で、検索不可である。
本発明によるまた別の実現例に、セキュアな宝くじ記憶装置への適用がある。本実現において、宝くじ運営会社が希望する、購入者に対するチケット検証の方法は、チケットが当選した購入者だけが当選金を請求できるというものである。本処理方法において、購入者にチケットを発行し、購入者はアイデンティティ情報を提供し、その情報は比較記憶装置にインデックス化したチケットデータとして保存される。比較記憶装置の比較動作では、提供されたアイデンティティ情報を保存インデックス化チケットデータに照らし比較する。チケットが当選していれば、購入者はチケットの所有者の証明として、購入時に登録したアイデンティティ情報を作成するだけでよい。購入者が使用するアイデンティティ情報は常に非開示で、検索不可である。
アイデンティティ情報は、チケットの購入者のユーザデバイス、または、チケットを店頭で購入した場合はレジであるユーザデバイスに入力されてもよい。図5を参照し、アイデンティティ情報は、宝くじ運営会社が制御するアプリケーションサーバ12に送られ、アプリケーションサーバは第一インタフェース3aを介して比較記憶装置15のプロセッサ4にアイデンティティ情報を送る。その後、比較記憶装置のプロセッサ4は、宝くじチケットに関連してインデックス化したアイデンティティ情報をメモリ6に保存する動作を実行する。チケットが当選すれば、アイデンティティ情報は、ユーザデバイスを使用して再度入力され、アプリケーションサーバ12及び第一インタフェース3aを介してプロセッサ4に送られ、プロセッサ4は比較動作を実行し、受信したアイデンティティ情報が宝くじチケットに関連しインデックス化され保存されている情報であることを確認する。
クレジットカード記憶装置の実施例
本発明によるまた別の実現例に、クレジットカード記憶装置への適用がある。アプリケーションサーバは、インターネットの店頭及びショッピングカード機能を提供してもよく、上記のような比較記憶装置を使って機密性情報を保存してもよい。機密性情報は、ユーザ名インデックスに対し保存されてもよく、ユーザのショッピングアカウント用ユーザパスワード及びユーザのクレジットカード情報を備えてもよい。パスワード記憶装置の実施例とは異なり、本実施例では機密性情報は2種類ある。ユーザのパスワード及びクレジットカードの詳細情報である。ユーザのパスワードは比較記憶装置から開示されることは決してない。クレジットカードの詳細情報は、クレジットカード処理を実行する目的でクレジットカード会社に通常暗号化して開示されてもよいが、アプリケーションサーバには決して開示されない。
本発明によるまた別の実現例に、クレジットカード記憶装置への適用がある。アプリケーションサーバは、インターネットの店頭及びショッピングカード機能を提供してもよく、上記のような比較記憶装置を使って機密性情報を保存してもよい。機密性情報は、ユーザ名インデックスに対し保存されてもよく、ユーザのショッピングアカウント用ユーザパスワード及びユーザのクレジットカード情報を備えてもよい。パスワード記憶装置の実施例とは異なり、本実施例では機密性情報は2種類ある。ユーザのパスワード及びクレジットカードの詳細情報である。ユーザのパスワードは比較記憶装置から開示されることは決してない。クレジットカードの詳細情報は、クレジットカード処理を実行する目的でクレジットカード会社に通常暗号化して開示されてもよいが、アプリケーションサーバには決して開示されない。
図5を参照するが、まずはユーザがインタネットショッピングの登録を行い、アプリケーションサーバ12は、パスワード及びクレジットカード情報を比較記憶装置15に転送する。比較記憶装置に登録されると、機密性情報は、アプリケーションサーバでは取得不可となる。その後ユーザがアプリケーションサーバ12を使用し製品購入を希望する場合、ユーザは自分のユーザID及びパスワードを示すだけでよく、この情報に基づき比較記憶装置のプロセッサ4はデータストア6の秘匿データを確認し、アプリケーションサーバ12に応答を返すことができる。当該応答は、アプリケーションサーバがユーザ認証し、購入処理を進めてよいか判断することを許可する。クレジットカード会社は、クレジットカード処理を完了するために情報を必要とするが、アプリケーションサーバは、正しい値で処理がなされたかだけ分かればよい。つまり、比較記憶装置は、第一インタフェース3aを使いアプリケーションサーバ12と通信する。一方、比較記憶装置は、第二インタフェース3bまたは第二インタフェース3bに類似のインタフェースを使用して、アプリケーションサーバがアクセスできないセキュアデータをプロセッサが送信することを可能にし、銀行と通信し、第二インタフェースを介してクレジットカード情報を銀行に提供してもよい。つまり、クレジットカード情報は、アプリケーションサーバがアクセスできないインタフェースでしか送信されない。本実施例において、比較記憶装置は、アプリケーションサーバ用、銀行用、及びバックアップ用の3つのフロントエンド・インタフェースを有してもよい。
「使用中」の証明書の保護
増加傾向にある一般的な攻撃に、バッキング記憶装置からの証明書の盗難だけでなく、認証サーバの実行中メモリからの証明書の盗難もある。その方法は、実行中のメモリをスイープし、パスワード、クレジットカード番号、またはその他証明書を含むHTTP応答のフィールドなどのデータ構成を検索するソフトウェアを、認証サーバに仕掛けるものである。
増加傾向にある一般的な攻撃に、バッキング記憶装置からの証明書の盗難だけでなく、認証サーバの実行中メモリからの証明書の盗難もある。その方法は、実行中のメモリをスイープし、パスワード、クレジットカード番号、またはその他証明書を含むHTTP応答のフィールドなどのデータ構成を検索するソフトウェアを、認証サーバに仕掛けるものである。
ある仕組みを追加し比較記憶装置と合わせて使用すると、「保存中の証明書」だけでなく「使用中の証明書」を保護するような仕組みを以下に詳述する。
プリサーバと呼ぶハードウェア構成要素を新しく備え、拡張する。プリサーバは、ハイパーテキスト転送プロトコル(HTTP)またはソケットセキュア(SOCKS)などのプロトコル(これらに限定されない)を通して通信をフィルタにかけ、入力内容に証明書フィールドを見つけるとその内容を書換える。HTTPSセキュア(HTTPS)やその他セキュアソケットレイア(SSL)でプロトコルをラップする場合、SSL接続はプリサーバで終端する。
図7aは、上記のようにクライアント17、アプリケーションサーバ12、及び比較記憶装置15を備えた、「保存中の証明書」を保護するシステムの概要図である。図7aは、上記のように比較記憶装置が「保存中の証明書」を保護するために使用される際の、クライアント、アプリケーションサーバ、及び比較記憶装置の間の情報の流れを示す。クライアントはユーザデバイスであってもよい。この場合、証明書はクライアントマシン17により発行され、サーバ12に送られる。ユーザのパスワード検証やユーザのパスワード設定など認証機能については、サーバ12が比較記憶装置15に検証コマンドの一部として証明書を送り、比較記憶装置15がサーバ12に成功または失敗を示す応答を返す。
図7bは、「保存中の証明書」に加え「使用中の証明書」を保護するためにプリサーバコンポーネントを追加して配置する場合の情報の流れを示す。この場合、システムは、アプリケーションサーバ及び比較記憶装置に加え、クライアントまたはユーザデバイス17から情報を受信するプリサーバ18を備える。この場合、クライアント17は、プリサーバ18と通信し、プリサーバ18は、クライアント17からの通信に証明書フィールドがあれば必ず、下に示すいずれかの仕組みに従い書換える。その後、プリサーバ18は、クライアントから受信し書換えた通信内容をサーバ12に送り、サーバ12は上記の場合のような認証機能を実行するが、プリサーバ18が書換えた証明書を比較記憶装置15に転送する点が異なる。比較記憶装置は、図1及び図2で記述したように、証明書を保存するセキュアメモリを備えてもよく、証明書を保存する独立したセキュアメモリを使用してもよい。プリサーバ18と比較記憶装置15の間の点線Oは、プリサーバ18と比較記憶装置15の間のチャネル外の通信経路の使用が可能であることを示す。この点を下で論ずる。
一般的に、本明細書による技術は、様々な種類の証明書に適用されてもよい。証明書の一般的な例は、パスワード、個人識別番号、指紋など生体認証データ、及び虹彩走査を含むがこれらに限定されず、また、質問セットから抜き出された質問集に指定精度レベルで回答する能力など、より「意味論的」形式の証明書を含む。処理する証明書の形式は主に、認証の成功に完全マッチングを要するか、近似マッチングでよいかの点で異なる。この違いによっては、下に挙げる書換え動作に制限を追加する必要が生ずることもある。
さらに、プリサーバの使用及び下記の書換え技術は、使用中の証明書を保護するために、比較記憶装置に換えて使用する別の証明書認証サーバと合わせて使用してもよい。別の比較記憶装置を使用する認証サーバの換わりに、認証サーバは証明書を保存する自サーバのセキュアメモリを有してもよい。
証明書は、プリサーバが組み合わされる比較記憶装置の特定の構成次第で、多数の形式またはモードに書換えられてもよい。
A 証明書を暗号化証明書に書換え、プリサーバと比較記憶装置で対称鍵を共有する。
B 証明書を暗号化証明書に書換え、対称鍵を比較記憶装置の公開鍵とする。
C 証明書をテンポラリ・タグに書換え、タグ付き証明書ペアを、プリサーバ18と比較記憶装置15との間を図7bのチャネル外ルートOで送信する。
D 証明書をハッシュ(可能であれば鍵をかけ)に書換え、プリサーバと比較記憶装置で鍵を共有する。近似マッチングを要する証明書形式でこのモードを使用する場合、ハッシュ関数に強力な技術的条件を付する。具体的には、証明書形式Xが証明書形式Yに近似している場合、ハッシュ値(h(X)及びh(Y)とする)について、h(X)がh(Y)に近似している考えのもと、両ハッシュ値が近似している適切な考えを示さなければならない。
A 証明書を暗号化証明書に書換え、プリサーバと比較記憶装置で対称鍵を共有する。
B 証明書を暗号化証明書に書換え、対称鍵を比較記憶装置の公開鍵とする。
C 証明書をテンポラリ・タグに書換え、タグ付き証明書ペアを、プリサーバ18と比較記憶装置15との間を図7bのチャネル外ルートOで送信する。
D 証明書をハッシュ(可能であれば鍵をかけ)に書換え、プリサーバと比較記憶装置で鍵を共有する。近似マッチングを要する証明書形式でこのモードを使用する場合、ハッシュ関数に強力な技術的条件を付する。具体的には、証明書形式Xが証明書形式Yに近似している場合、ハッシュ値(h(X)及びh(Y)とする)について、h(X)がh(Y)に近似している考えのもと、両ハッシュ値が近似している適切な考えを示さなければならない。
ユーザまたはシステムがプリサーバと接続し証明書の設定または検証を行う場合、プリサーバは上記モードのいずれかを使用し、要求に組み込まれた証明書の全てを書換える。
検証または証明書変更ステップは、比較記憶装置(または別の認証サービス)を使い通常の方法で処理するが、元の証明書の換わりに書換えられた証明書を使用する点が異なる。
図8は、図7bのシステムを使用した証明書の確認処理の実施例を示すフローチャートである。サーバ12が、パスワードに基づく認証に比較記憶装置15を使用する場合を考える。図は、プリサーバがパスワードの書換えに上記のモードAを使う(すなわち、対称鍵での暗号化)ことを意図し、パスワードpを使用するクライアント17におけるユーザ名nのユーザが、サーバ12に対し認証を行う。イベントシーケンスは下記による。
ステップS1において、ユーザは、ユーザ名n及びパスワードpをクライアント17に入力する。
ステップS2において、クライアント17は、ペア(n,p)を要求rに組み込み、クライアント−サーバ間の通信に使用するプロトコルがいずれであってもそのプロトコルで、プリサーバ18に転送する。
ステップS3において、プリサーバ18はパスワードフィールドの内容pを新規値qに書換え、旧パスワードpから書換えパスワードqに書換えた点のみ異なる新規の要求tを形成し、新規の要求tをサーバ12に転送する。
ステップS4において、サーバ12は、書換えられた要求tからペア(n,q)を抜出し、パスワード検証に使用する、比較記憶装置への新規比較記憶装置要求uを形成する。その後、サーバ12は比較記憶装置15に要求uを送信する。
ステップS5において、比較記憶装置15は、サーバ12からの要求uを評価する。要求を評価する際、比較記憶装置15は、共有する対称鍵を使用して、書換えられたパスワードqを復号化し元のパスワードpを取得する。その後、比較記憶装置は、pを使って要求されたパスワード比較を行う。つまり、比較記憶装置はユーザ名nに関連するパスワードを検索し、この検索結果をpと比較する。次に、比較記憶装置はその比較が成功か失敗かをサーバ12に送付する。
ステップS1において、ユーザは、ユーザ名n及びパスワードpをクライアント17に入力する。
ステップS2において、クライアント17は、ペア(n,p)を要求rに組み込み、クライアント−サーバ間の通信に使用するプロトコルがいずれであってもそのプロトコルで、プリサーバ18に転送する。
ステップS3において、プリサーバ18はパスワードフィールドの内容pを新規値qに書換え、旧パスワードpから書換えパスワードqに書換えた点のみ異なる新規の要求tを形成し、新規の要求tをサーバ12に転送する。
ステップS4において、サーバ12は、書換えられた要求tからペア(n,q)を抜出し、パスワード検証に使用する、比較記憶装置への新規比較記憶装置要求uを形成する。その後、サーバ12は比較記憶装置15に要求uを送信する。
ステップS5において、比較記憶装置15は、サーバ12からの要求uを評価する。要求を評価する際、比較記憶装置15は、共有する対称鍵を使用して、書換えられたパスワードqを復号化し元のパスワードpを取得する。その後、比較記憶装置は、pを使って要求されたパスワード比較を行う。つまり、比較記憶装置はユーザ名nに関連するパスワードを検索し、この検索結果をpと比較する。次に、比較記憶装置はその比較が成功か失敗かをサーバ12に送付する。
ユーザがパスワードをリセットすれば同様のシーケンスが適用される。しかしユーザがパスワードをリセットする場合、ユーザは現行パスワードp及び新規パスワードxの両方を入力することもある。この場合、プリサーバでの書換え処理では、pもxも両方書込む必要がある。
上記のモードA、モードB、モードCのいずれにおいても、同様のイベントシーケンスが続く。
比較記憶装置で書換えられたパスワードに暗号化を適用しないモードCの場合、対応する関連タグからパスワードを取得する。
モードCをより詳細に考察する。プリサーバ17は固有タグを作成し、証明書の代わりにその固有タグをアプリケーションサーバ12に送り、比較記憶装置15にもチャンネル外ルートOを介してタグ及び証明書のペアを送信してもよい。固有タグは、現在日時から取得、内蔵カウンタから取得、または前に使用したシーケンスレコードから取得された、2進数の数、文字及び/または数の乱数シーケンス、或いは2進数の数、文字及び/または数の非乱数シーケンスを含んでもよいが、これらに限定されない。結果として、サーバ12が証明書を見ることは決してない。サーバ12はタグしか見ることができない。サーバは、比較記憶装置に対する証明書であるかのようにタグを使用する。比較記憶装置15は、チャネル外でタグ及び証明書のペアを取得しており、証明書として使用されるサーバ12からのタグを実際の証明書とペアにし、その後実際の証明書を比較記憶装置の検証ステップで使用することもできる。
モードDは、書換えられたパスワードが復号化または交換されることなく、直接比較記憶装置での動作に使用される点が異なる。
これまで記載した書換えの他に、平文または暗号文として別のデータを書換え形式に追加してもよい。そういったデータの追加では、ランダムビットを「ソルト」暗号化またはハッシュに使用したり、日時情報を包含したりするが、これらに限定されない。ランダムビットを使用することで攻撃に対する攻撃許容力が高まり、日時情報を包含することで、タグが「タイムリ」または「新規」であることが保証され、リプレイアタックまたは類似「論理クロック」の使用に打ち勝ち、書換えが「タイムリ」または「新規」であることを証明する。
例えば、上に挙げたパスワード検証の実施例では、書換えパスワードの書換えは下記の形式になったであろう。
encrypt(k,[nonce,utc,p])
この時、
1.kは、対称暗号鍵である。
2.nonce(ノンス)は、固定長ランダムビットストリングである。
3.utc−は、協定世界時での固定長日時である。
4. pは、クライアントが入力した可変長パスワード
5.[nonce,utc,p]は、ノンス、協定世界時の日時、及びパスワードpを結合し二進数ストリングにしたものである。
encrypt(k,[nonce,utc,p])
この時、
1.kは、対称暗号鍵である。
2.nonce(ノンス)は、固定長ランダムビットストリングである。
3.utc−は、協定世界時での固定長日時である。
4. pは、クライアントが入力した可変長パスワード
5.[nonce,utc,p]は、ノンス、協定世界時の日時、及びパスワードpを結合し二進数ストリングにしたものである。
書換えパスワードを受信すると、比較記憶装置はメッセージを復号化し、復号化形式から様々なフィールドを抜出し、utc値をローカル時刻基準と比較する。utcとローカル時刻基準が許容範囲内で一致すれば、比較記憶装置は、復号化パスワードをローカルで調査したパスワードと比較し、前のケースと同様に処理する。協定世界時での時間がローカル時刻基準に所望の許容範囲で一致しない場合、比較記憶装置は、サーバに失敗であると応答する。
ある実施形態において、プリサーバと比較記憶装置との間で鍵を使用する場合、両エンティティ間で常に調整されるのであれば任意のスケジュールで鍵を変更してもよい。その調整は以下により行ってもよい。
1. プリサーバと比較記憶装置とで事前調整したタイミング
2. 追加情報を書換えパスワードに含めたチャネル内信号化
3. 図6bのリンクOを介した帯域外信号化
4. プリサーバ及び比較記憶装置の外部からの人手の介入
1. プリサーバと比較記憶装置とで事前調整したタイミング
2. 追加情報を書換えパスワードに含めたチャネル内信号化
3. 図6bのリンクOを介した帯域外信号化
4. プリサーバ及び比較記憶装置の外部からの人手の介入
調整メッセージは、鍵変更指示及び/または新鍵の使用を含んでもよい。
既に行った方法に加え、認証サーバまたは比較記憶装置の保存データをソルト化、暗号化、ハッシュ化または鍵ハッシュ化してもよい。この場合、鍵は比較記憶装置または認証サーバのローカル鍵である。その後、比較ステップでは次に挙げる動作が調整される。例えば、証明書が暗号化され保存される場合、比較を行う前に保存証明書を復号化するか、クライアントが入力した証明書が要求内で暗号化されており、暗号化証明書を使って比較を行う。後者のモードでは、暗号(可逆の)ではなくハッシュ値または鍵化ハッシュ値を使用する必要がある。
この方法では保護が強化されるが、それは、保存された証明書が比較記憶装置/認証サーバの記憶装置から漏れた場合、パスワードが「間違った形式」となっているため、パスワードをクライアント17でもサーバ12でも認証に使用できない点である。
上記したように、本発明の実施形態は、コンピュータ及びコンピュータネットワークでのデータ保存に関し、特に、パスワード、生体認証データ、クレジットカードデータ、個人を一意に識別する個人識別子(アメリカ合衆国でのソーシャルセキュリティナンバなど)、エンティティが所定のレベルでのアクセスまたは認証を要求する認証レベル、選挙での投票数、及び暗号鍵などの機密データを含むが、これらに限定されないセキュアデータ保存に関する。
本発明による具体的な実施例及び実施形態を説明してきたが、本発明の範囲は添付の請求項により定義され、上記の実施例及び実施形態に限定されるものではない。本発明は、当業者であれば理解するであろうが、別の方法で実施可能であり、多数の変形及び配置変形も考えられる。
例えば、図をもとに、アプリケーションサーバが比較記憶装置を使い、ユーザデバイスにリソースへのアクセスを許可するか判断すると説明してきたが、上記の別の実施例から明らかなように、アプリケーションサーバが別の目的で比較記憶装置を使用してもよい。例えば、アプリケーションサーバは比較記憶装置を使用して、受信データが実際には所定のデータソースから取得したものであることをチェックしてもよく、または第三者がアクセスするデータを安全に保存してもよい。
さらに、比較記憶装置の様々なコンポーネントを実施する方法の実施例を説明してきたが、具体的な実施についての記述は単に説明のためであり、別の実施も考えられる。
リスト1
/*
========================================================================================
次に示すコードは、Arduino Ethernet Shieldが提供する、SDカードインタフェースを有するArduino UNO AVRマイクロコントローラボード用のスケッチ言語で書かれている。コードは、パスワードセーフとして使用する比較記憶装置をUSBベースで実施しており、1つのアプリケーションサーバが、コールプロトコル
!!!<command character> <arg1> ・・・ <arg3> <carriage−return><line−feed>
(この時、<arg1>から<arg3>は、任意(つまり、コマンドにより引数は0、1つ、2つまたは3つ)である。)
を使ってUSBインタフェースを介して動作を呼び出す。
/*
========================================================================================
次に示すコードは、Arduino Ethernet Shieldが提供する、SDカードインタフェースを有するArduino UNO AVRマイクロコントローラボード用のスケッチ言語で書かれている。コードは、パスワードセーフとして使用する比較記憶装置をUSBベースで実施しており、1つのアプリケーションサーバが、コールプロトコル
!!!<command character> <arg1> ・・・ <arg3> <carriage−return><line−feed>
(この時、<arg1>から<arg3>は、任意(つまり、コマンドにより引数は0、1つ、2つまたは3つ)である。)
を使ってUSBインタフェースを介して動作を呼び出す。
本コードを単に例として示すが、コード内でのバッファの取扱いに注意を要する。バッファは全て固定長であり、データがバッファに書込まれる時に長さがチェックされている。バッファを、ベクトルとして実施し、バッファをアドレス指定するポインタではなく静的インデックスを使用したベクトルとしてのバッファの集合体である。
プロシージャを限定して使用し、特に非再帰的にスタックの使用を限定する。SDライブラリ内またはコンパイラにより使用される場合を除き、ヒープ割り付けを避ける。
下記のパスワードストアモデルにおいて、アドミン(admin)と呼ばれる特別なユーザがおり、一般的な認証には使用できないが(すなわち、チェックコマンド)、一旦アカウントにパスワード付与されれば、パスワードストアの管理に対する特権を有する。
==========================================================================================
*/
#include <SD.h>
//リターンコード:yを含まないリターンコードは失敗を示す。
//テスト値
boolean sdcard = false;
boolean argerror = false;
//空間節約のため、コード定義の際、#defineの使用を検討する
//ストリングの考え方で始める。ストリングは、ヌル文字で終わる文字ベクトルであり、
//常に最大長STRINGLENGであり、終端ヌルを含む。
//バッファは長さSTRINGLENGの整数倍ある文字のベクトルである。
//コマンドは、コマンド名、及び、1または複数の空間で分けた引数シーケンスで構成され、
//<carriage return><line feed> (\c\n)で終わる。
//コマンド名は、引数ゼロとする。
//コマンドはバッファに読込まれる。
//一度読込まれたコマンドは、ストリング配列である引数配列 args[]に分割され、
//すなわち、arg[][]となる。引数ゼロを含めた引数の最大数は、MAX_NUMBER_OF_ARGSである。
//引数はストリングであり、引数配列arg[][]は、ストリングのベクトルarg[]である。
//入力バッファbuff[]の長さは、BUFFLENG = MAX_NUMBER_OF_ARGS * STRINGLENGである。
//グローバル入力バッファ
char buff[BUFFLENG];//初期化を要することに注意する。
//パスワードファイルは一連のレコードから成り、各レコードは\c\nで終わる。
//1つのレコードは、一連のフィールドである。各フィールドはcharであり、そのため長さは1、または、長さSTRINGLENG−1の文字シーケンスである。
//各フィールドには、1または複数の連続<空間>が続き、レコード内の総文字シーケンスを
//\c\n前の最終フィールドを含め、長さSTRINGLENGにする。全てのフィールドは、(シーケンスの)<空間>の文字を含めないことに注意する。
//引数設定
char args[MAX_NUMBER_OF_ARGS][STRINGLENG]; //初期化を要する。
//現行パスワードに、3フィールドバイトのstring.stringを保存する。string.stringは、制御フィールド、user_idフィールド及びパスワードフィールドを示す
//通常、RECORDLENG = NUMBER_OF_BYTE_fields*2 + NUMBER_OF_STRING_fields * STRINGLENG + 2において、
//後半はレコード終わらせる\c\nである。
//グローバルレコードホルダ
char record[RECORDLENG];
//この場合3フィールドあり、レコードポジション(0、2、2+STRINGLENG)で始まる。
const int field_LENGTH[MAX_NUMBER_OF_fields] = {2,STRINGLENG,STRINGLENG};
//フィールド配列を設定する。レコードはファイルから読出されフィールドに分割される。
char fields[MAX_NUMBER_OF_fields][STRINGLENG]; //初期化を要する。
//パスワードファイルには3種の入力がある。
//第一フィールドに一般的な入力「n」――
認証用に使用できる。
//第一フィールドにリセット入力「r」――パスワードリセット専用で使用できる。
//第一フィールドに無効入力「d」――使用不可な無効アカウント
//無効アカウントは、開錠するにはアドミンのアクセスを要する。
//必要であれば、ファイルポジションでのファイル内位置を追う。fetchRecordにより設定される。
unsigned long fileposition = 0; //ファイルポジション
//ファイル名は、定数である。
const char *filename = “password.txt”;
//-----------------------------------------------------------
//引数をヌルストリングに初期化する。
//2つの文字ベクトル比較する。
boolean compare (char s1[], char s2[]) {
for (int i = 0;i<STRINGLENG;i++) {
if (s1[i] == 0 && s2[i] == 0) return true;
if (s1[i] != s2[i]) return false;
};
return true;
};
//ストリングをコピーする。
void copy (char source[], char target[]){
for(int i=0;i<STRINGLENG;i++){
target[i] = source[i];
if (source[i] == ‘\0’) break;
}
}
//ファイルから文字ベクトルペアを取得する。
boolean fetchRecord(File f) {
//fは読出し用オープンファイルである。
//スケッチは関数の引数型としてchar s[][]を取らないので、グローバルフィールドを使用する。
//レコードを空にする。
nullrecord();
fileposition = f.position(); //グローバルでの現在レコードの開始ポジションを記録する。
int length = f.readBytesUntil(‘\n’,record,RECORDLENG);
if (length == 0 || length > RECORDLENG) return false;
//レコードをフィールドに分割する。
int start = 0;
for(int field=0;field<MAX_NUMBER_OF_fields;field++){
//開始がラインの最終になるのであれば、ストップする。
if (record[start] == ‘\r’) break;
for(int i=start;i<field_LENGTH[field]+start;i++){
if (record[i] == ‘ ’) fields[field][i−start] = ‘\0’;
else fields[field][i−start] = record[i]; }
start = start + field_LENGTH[field];
}
return true;
}
void writeRecord(File f){
boolean pad = false;
int start = 0;
for(int field=0;field<MAX_NUMBER_OF_fields;field++){
for(int i=start;i<field_LENGTH[field]+start;i++){
if (pad) record[i] = ‘@’; //可視化パディング
else if (fields[field][i−start] == ‘\0’ ) {pad = true; record[i] = ‘ ’;}
else record[i] = fields[field][i−start]; }
pad = false;
start = start + field_LENGTH[field];
}
record[RECORDLENG−2] = ‘\r’; record[RECORDLENG−1] = ‘\n’;
for(int i=0;i<RECORDLENG;i++) f.write(record[i]);
}
//ファイルからパスワード名を取得する。
boolean lookup (File f, char target[]) {
while (f.available()){
//ファイルからペアを取得する。
if (!fetchRecord(f)) return false;
//取得したペアの先頭を名前と比較する。
//長さに問題がないかチェックする。
//パスワードをチェックする。
//備考:ファイルポジション、レコード及びフィールドの副作用を検索する。フィールド[2]は対象user_idに該当するパスワードである。
File pwdfile;
//SD.open(filename,FILE_READ)をメインループで繰り返し使用し、RAMを使い果たしてしまう。
//よって、各回、RAMを事前配置する必要がありそうだ。
//この要領を行うとこの問題を軽減できそうだ。
void openpwdRead () {
pwdfile = SD.open(filename, FILE_READ);
}
void openpwdWrite () {
pwdfile = SD.open(filename, FILE_WRITE);
}
void setup() {
//バッファを初期化する。
for(int i=0;i<BUFFLENG;i++) {
buff[i] = ‘ ’;
}
//初期化が成功か失敗かINITIALISATION_FAILED
//or SUCCESSをチェックし、
//否を削除し、条件文のアームを交換する。
//引数ストアを初期化する。
nullargs();
nullfields();
}
void loop() {
//自身のメインコードここに入力し、繰り返し実行させる。
//選択肢で終止符を入力する場合、
//バイトが使用可能かチェックする。
if (Serial.available()) {
//Serial.print(“HELLO”);
//バイトに読込む。
int i = Serial.readBytesUntil(‘\n’,buff,BUFFLENG);
//新規処理の前に全てをリセットする。
//バッファ内にメッセージに明白な先頭を置く。
//すなわち、常に「!!!」に続けて入力する。
//「!!!」から後ろ3番地オフセットを移動する
offset = offset + 3;
//備考:エラー引数バッファは長さSTRINGLENGしかなく、STRINGLENGより長い入力「フィールド」では別のフィールドにオーバーフローする。
//引数をi − offset >= STRINGLENGで終了する必要がある。
for(i=offset;i<BUFFLENG; i++) {
//引数が長ければエラーを返す。
if (i − offset >= STRINGLENG) { argerror = true; break;}
if (buff[i] == ‘ ’ ) {
args[arg][i − offset] = ‘\0’;
offset = i+1;
arg = arg + 1;
}
//キャリッジリターンがないかチェックする。
else if (buff[i] == 13) {
args[arg][i − offset] = ‘\0’;
break;
}
else args[arg][i − offset] = buff[i];
}
if (i>=BUFFLENG) args[arg][i − offset] = ‘\0’;
//コマンド設定
command = 0;
if (length(args[0]) == 1) command = args[0][0];
//コマンドが1文字でなければ、?をスイッチから取得する。
//エラー条件をチェックし、実施コマンドをスキップし、必要であれば発信者に通知する。
if (argerror) error(ARGUMENT_TOO_LONG);
else if (!sdcard) {
//tbd:失敗に対し対処する。
sdcard = SD.begin(4); //SDカードの初期化を試す。
if (!sdcard) error(INITIALISATION_FAILED); //初期化不可なら、失敗通知を行う。
}
else {
// ――――――――――――――――――――――――――――――――――
//コマンドを実行する。
//引数無しのコマンド
//引数を無視する。
switch (command) {
case ‘c’:
{//引数が2つないかチェックする。
if (args[1][0] == 0 || args[2][0] == 0) {
error(MISSING_ARGUMENTS);
break;
}
//保存パスワードに照らしパスワードをチェックする。
if (compare(args[1],“admin”)) {
error(CANNOT_AUTH_USING_ADIM_ACCOUNT);
pwdfile.close();
break;} //アドミンアカウントを認証できない場合;処理しない
openpwdRead();
if (check(pwdfile, args[1], args[2])) {
//認証に使用可能かチェックする。
if ( fields[0][0] == ‘n’) success();
else error(PASSWORD_TEST_FAILED);
}
else
error(PASSWORD_TEST_FAILED);
pwdfile.close();
break;
}
case ‘d’: //無効アカウント;パスワードを要しない
{ //引数をチェックする
if (args[1][0] == ‘\0’ || args[2][0] == ‘\0’) {
error(MISSING_ARGUMENTS);
break;}
//使用中のuser_idをチェックする。
openpwdRead();
if (!lookup(pwdfile, args[2])) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //使用していないuser_id;処理しない
if (compare(args[2],“admin”)) {
error(CANNOT_DISABLE_ADIM_ACCOUNT);
pwdfile.close();
break;} //アドミンアカウントを無効にできない;処理しない
pwdfile.close(); //ファイルを閉じる。
//処理を書込む。
//ルックアップでフィールドが設定済であることに注意する。
//第一フィールドを「d」または「r」に変更する。
//「d」ではないもののチェックを追加する必要があることに注意する。
if (compare(args[1],“admin”)) fields[0][0] = ‘d’;
else if (compare(args[1],“reset”)) fields[0][0] = ‘r’;
else {
error(UNRECOGISED_DISABLE);
break;}
//他フィールドは変更せずそのままにしておく。
//レコードを書込む。
openpwdWrite();
if (pwdfile) {
//書込み位置をファイルポジションに移動させる
pwdfile.seek(fileposition);
writeRecord(pwdfile);
success();
}
else error(PASSWORD_FILE_NOT_AVAILABLE_FOR_WRITE);
pwdfile.close();
break;
}
case ‘w’: //書込む
{ //引数をチェックする
if (args[1][0] == 0 || args[2][0] == 0) {
error(MISSING_ARGUMENTS);
goto END;}
//使用中のuser_idをチェックする
openpwdRead();
if (lookup(pwdfile, args[1])) {
error(USER_NAME_IN_USE);
pwdfile.close();
break;} //使用中のuser_id;処理しない
pwdfile.close(); //ファイルを閉じる
//処理を書込む
//第一フィールドを通常入力の「n」に設定する
fields[0][0] = ‘n’; fields[0][1] = ‘\0’;
//第二フィールドをuser_idに設定する
copy(args[1], fields[1]);
//第三フィールドをパスワードに設定する
copy(args[2],fields[2]);
//レコードを書込む
case ‘u’: //アップデートする
{ //引数、user_id、旧パスワード、新規パスワードをチェックする
if (args[1][0] == 0 || args[2][0] == 0 || args[3] == 0) {
error(MISSING_ARGUMENTS);
goto END;}
//使用中のuser_idをチェックする
openpwdRead();
if (!lookup(pwdfile, args[1])) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //使用中のID;処理しない
pwdfile.close(); //ファイルを閉じる
if (fields[0][0] == ‘n’ || fields[0][0] == ‘r’) { //リセット可能
if (compare(args[2],fields[2])) { //パスワードが一致
//コントロールフィールドを「n」に設定する
fields[0][0] = ‘n’;
//パスワードフィールドに新規パスワードを設定する
copy(args[3], fields[2]);
//レコードを書込む
case ‘e’: //アカウント引数のuser_id、admin_password、new_account_passwordを許可する。
{ //引数のuser_id、old_password、new_passwordをチェックする。
if (args[1][0] == 0 || args[2][0] == 0 ) {
error(MISSING_ARGUMENTS);
break;}
//admin_passwordをチェックする。
//admin accountを検索する。
openpwdRead();
if (!lookup(pwdfile, “admin”)) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //アドミンアカウントが見つからない;処理しない
//アドミンパスワードをチェックする
if(!compare(args[2], fields[2])) { //アドミンパスワードの一致に失敗
fail();
pwdfile.close();
break;} //アドミンパスワードの一致に失敗;処理しない。
//使用中のuser_idをチェック;ファイルスタートのためファイルポジションをリセットする。
pwdfile.seek(0);
//備考:検索してフィールドをリセットする。
if (!lookup(pwdfile, args[1])) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //使用中のuser_id:処理しない。
pwdfile.close(); //ファイルを閉じる。
//アドミンは全てのアカウントでパスワードをリセットでき、リセット入力になる。
//引数[3]が空であれば、コントロールフィールドを「n」にし、パスワードを変更しない。
//引数[3]が空でなければ、コントロールフィールドを[r]にし、新規パスワードを設定する。
if (args[3][0] == 0) {
fields[0][0] = ‘n’;
}
else {
fields[0][0] = ‘r’;
//パスワードフィールドに新規パスワードを設定する。
copy(args[3], fields[2]);
}
//レコードを書込む。
==========================================================================================
*/
#include <SD.h>
//リターンコード:yを含まないリターンコードは失敗を示す。
//テスト値
boolean sdcard = false;
boolean argerror = false;
//空間節約のため、コード定義の際、#defineの使用を検討する
//ストリングの考え方で始める。ストリングは、ヌル文字で終わる文字ベクトルであり、
//常に最大長STRINGLENGであり、終端ヌルを含む。
//バッファは長さSTRINGLENGの整数倍ある文字のベクトルである。
//コマンドは、コマンド名、及び、1または複数の空間で分けた引数シーケンスで構成され、
//<carriage return><line feed> (\c\n)で終わる。
//コマンド名は、引数ゼロとする。
//コマンドはバッファに読込まれる。
//一度読込まれたコマンドは、ストリング配列である引数配列 args[]に分割され、
//すなわち、arg[][]となる。引数ゼロを含めた引数の最大数は、MAX_NUMBER_OF_ARGSである。
//引数はストリングであり、引数配列arg[][]は、ストリングのベクトルarg[]である。
//入力バッファbuff[]の長さは、BUFFLENG = MAX_NUMBER_OF_ARGS * STRINGLENGである。
//グローバル入力バッファ
char buff[BUFFLENG];//初期化を要することに注意する。
//パスワードファイルは一連のレコードから成り、各レコードは\c\nで終わる。
//1つのレコードは、一連のフィールドである。各フィールドはcharであり、そのため長さは1、または、長さSTRINGLENG−1の文字シーケンスである。
//各フィールドには、1または複数の連続<空間>が続き、レコード内の総文字シーケンスを
//\c\n前の最終フィールドを含め、長さSTRINGLENGにする。全てのフィールドは、(シーケンスの)<空間>の文字を含めないことに注意する。
//引数設定
char args[MAX_NUMBER_OF_ARGS][STRINGLENG]; //初期化を要する。
//現行パスワードに、3フィールドバイトのstring.stringを保存する。string.stringは、制御フィールド、user_idフィールド及びパスワードフィールドを示す
//通常、RECORDLENG = NUMBER_OF_BYTE_fields*2 + NUMBER_OF_STRING_fields * STRINGLENG + 2において、
//後半はレコード終わらせる\c\nである。
//グローバルレコードホルダ
char record[RECORDLENG];
//この場合3フィールドあり、レコードポジション(0、2、2+STRINGLENG)で始まる。
const int field_LENGTH[MAX_NUMBER_OF_fields] = {2,STRINGLENG,STRINGLENG};
//フィールド配列を設定する。レコードはファイルから読出されフィールドに分割される。
char fields[MAX_NUMBER_OF_fields][STRINGLENG]; //初期化を要する。
//パスワードファイルには3種の入力がある。
//第一フィールドに一般的な入力「n」――
認証用に使用できる。
//第一フィールドにリセット入力「r」――パスワードリセット専用で使用できる。
//第一フィールドに無効入力「d」――使用不可な無効アカウント
//無効アカウントは、開錠するにはアドミンのアクセスを要する。
//必要であれば、ファイルポジションでのファイル内位置を追う。fetchRecordにより設定される。
unsigned long fileposition = 0; //ファイルポジション
//ファイル名は、定数である。
const char *filename = “password.txt”;
//-----------------------------------------------------------
//引数をヌルストリングに初期化する。
//2つの文字ベクトル比較する。
boolean compare (char s1[], char s2[]) {
for (int i = 0;i<STRINGLENG;i++) {
if (s1[i] == 0 && s2[i] == 0) return true;
if (s1[i] != s2[i]) return false;
};
return true;
};
//ストリングをコピーする。
void copy (char source[], char target[]){
for(int i=0;i<STRINGLENG;i++){
target[i] = source[i];
if (source[i] == ‘\0’) break;
}
}
//ファイルから文字ベクトルペアを取得する。
boolean fetchRecord(File f) {
//fは読出し用オープンファイルである。
//スケッチは関数の引数型としてchar s[][]を取らないので、グローバルフィールドを使用する。
//レコードを空にする。
nullrecord();
fileposition = f.position(); //グローバルでの現在レコードの開始ポジションを記録する。
int length = f.readBytesUntil(‘\n’,record,RECORDLENG);
if (length == 0 || length > RECORDLENG) return false;
//レコードをフィールドに分割する。
int start = 0;
for(int field=0;field<MAX_NUMBER_OF_fields;field++){
//開始がラインの最終になるのであれば、ストップする。
if (record[start] == ‘\r’) break;
for(int i=start;i<field_LENGTH[field]+start;i++){
if (record[i] == ‘ ’) fields[field][i−start] = ‘\0’;
else fields[field][i−start] = record[i]; }
start = start + field_LENGTH[field];
}
return true;
}
void writeRecord(File f){
boolean pad = false;
int start = 0;
for(int field=0;field<MAX_NUMBER_OF_fields;field++){
for(int i=start;i<field_LENGTH[field]+start;i++){
if (pad) record[i] = ‘@’; //可視化パディング
else if (fields[field][i−start] == ‘\0’ ) {pad = true; record[i] = ‘ ’;}
else record[i] = fields[field][i−start]; }
pad = false;
start = start + field_LENGTH[field];
}
record[RECORDLENG−2] = ‘\r’; record[RECORDLENG−1] = ‘\n’;
for(int i=0;i<RECORDLENG;i++) f.write(record[i]);
}
//ファイルからパスワード名を取得する。
boolean lookup (File f, char target[]) {
while (f.available()){
//ファイルからペアを取得する。
if (!fetchRecord(f)) return false;
//取得したペアの先頭を名前と比較する。
//長さに問題がないかチェックする。
//パスワードをチェックする。
//備考:ファイルポジション、レコード及びフィールドの副作用を検索する。フィールド[2]は対象user_idに該当するパスワードである。
File pwdfile;
//SD.open(filename,FILE_READ)をメインループで繰り返し使用し、RAMを使い果たしてしまう。
//よって、各回、RAMを事前配置する必要がありそうだ。
//この要領を行うとこの問題を軽減できそうだ。
void openpwdRead () {
pwdfile = SD.open(filename, FILE_READ);
}
void openpwdWrite () {
pwdfile = SD.open(filename, FILE_WRITE);
}
void setup() {
//バッファを初期化する。
for(int i=0;i<BUFFLENG;i++) {
buff[i] = ‘ ’;
}
//初期化が成功か失敗かINITIALISATION_FAILED
//or SUCCESSをチェックし、
//否を削除し、条件文のアームを交換する。
//引数ストアを初期化する。
nullargs();
nullfields();
}
void loop() {
//自身のメインコードここに入力し、繰り返し実行させる。
//選択肢で終止符を入力する場合、
//バイトが使用可能かチェックする。
if (Serial.available()) {
//Serial.print(“HELLO”);
//バイトに読込む。
int i = Serial.readBytesUntil(‘\n’,buff,BUFFLENG);
//新規処理の前に全てをリセットする。
//バッファ内にメッセージに明白な先頭を置く。
//すなわち、常に「!!!」に続けて入力する。
//「!!!」から後ろ3番地オフセットを移動する
offset = offset + 3;
//備考:エラー引数バッファは長さSTRINGLENGしかなく、STRINGLENGより長い入力「フィールド」では別のフィールドにオーバーフローする。
//引数をi − offset >= STRINGLENGで終了する必要がある。
for(i=offset;i<BUFFLENG; i++) {
//引数が長ければエラーを返す。
if (i − offset >= STRINGLENG) { argerror = true; break;}
if (buff[i] == ‘ ’ ) {
args[arg][i − offset] = ‘\0’;
offset = i+1;
arg = arg + 1;
}
//キャリッジリターンがないかチェックする。
else if (buff[i] == 13) {
args[arg][i − offset] = ‘\0’;
break;
}
else args[arg][i − offset] = buff[i];
}
if (i>=BUFFLENG) args[arg][i − offset] = ‘\0’;
//コマンド設定
command = 0;
if (length(args[0]) == 1) command = args[0][0];
//コマンドが1文字でなければ、?をスイッチから取得する。
//エラー条件をチェックし、実施コマンドをスキップし、必要であれば発信者に通知する。
if (argerror) error(ARGUMENT_TOO_LONG);
else if (!sdcard) {
//tbd:失敗に対し対処する。
sdcard = SD.begin(4); //SDカードの初期化を試す。
if (!sdcard) error(INITIALISATION_FAILED); //初期化不可なら、失敗通知を行う。
}
else {
// ――――――――――――――――――――――――――――――――――
//コマンドを実行する。
//引数無しのコマンド
//引数を無視する。
switch (command) {
case ‘c’:
{//引数が2つないかチェックする。
if (args[1][0] == 0 || args[2][0] == 0) {
error(MISSING_ARGUMENTS);
break;
}
//保存パスワードに照らしパスワードをチェックする。
if (compare(args[1],“admin”)) {
error(CANNOT_AUTH_USING_ADIM_ACCOUNT);
pwdfile.close();
break;} //アドミンアカウントを認証できない場合;処理しない
openpwdRead();
if (check(pwdfile, args[1], args[2])) {
//認証に使用可能かチェックする。
if ( fields[0][0] == ‘n’) success();
else error(PASSWORD_TEST_FAILED);
}
else
error(PASSWORD_TEST_FAILED);
pwdfile.close();
break;
}
case ‘d’: //無効アカウント;パスワードを要しない
{ //引数をチェックする
if (args[1][0] == ‘\0’ || args[2][0] == ‘\0’) {
error(MISSING_ARGUMENTS);
break;}
//使用中のuser_idをチェックする。
openpwdRead();
if (!lookup(pwdfile, args[2])) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //使用していないuser_id;処理しない
if (compare(args[2],“admin”)) {
error(CANNOT_DISABLE_ADIM_ACCOUNT);
pwdfile.close();
break;} //アドミンアカウントを無効にできない;処理しない
pwdfile.close(); //ファイルを閉じる。
//処理を書込む。
//ルックアップでフィールドが設定済であることに注意する。
//第一フィールドを「d」または「r」に変更する。
//「d」ではないもののチェックを追加する必要があることに注意する。
if (compare(args[1],“admin”)) fields[0][0] = ‘d’;
else if (compare(args[1],“reset”)) fields[0][0] = ‘r’;
else {
error(UNRECOGISED_DISABLE);
break;}
//他フィールドは変更せずそのままにしておく。
//レコードを書込む。
openpwdWrite();
if (pwdfile) {
//書込み位置をファイルポジションに移動させる
pwdfile.seek(fileposition);
writeRecord(pwdfile);
success();
}
else error(PASSWORD_FILE_NOT_AVAILABLE_FOR_WRITE);
pwdfile.close();
break;
}
case ‘w’: //書込む
{ //引数をチェックする
if (args[1][0] == 0 || args[2][0] == 0) {
error(MISSING_ARGUMENTS);
goto END;}
//使用中のuser_idをチェックする
openpwdRead();
if (lookup(pwdfile, args[1])) {
error(USER_NAME_IN_USE);
pwdfile.close();
break;} //使用中のuser_id;処理しない
pwdfile.close(); //ファイルを閉じる
//処理を書込む
//第一フィールドを通常入力の「n」に設定する
fields[0][0] = ‘n’; fields[0][1] = ‘\0’;
//第二フィールドをuser_idに設定する
copy(args[1], fields[1]);
//第三フィールドをパスワードに設定する
copy(args[2],fields[2]);
//レコードを書込む
case ‘u’: //アップデートする
{ //引数、user_id、旧パスワード、新規パスワードをチェックする
if (args[1][0] == 0 || args[2][0] == 0 || args[3] == 0) {
error(MISSING_ARGUMENTS);
goto END;}
//使用中のuser_idをチェックする
openpwdRead();
if (!lookup(pwdfile, args[1])) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //使用中のID;処理しない
pwdfile.close(); //ファイルを閉じる
if (fields[0][0] == ‘n’ || fields[0][0] == ‘r’) { //リセット可能
if (compare(args[2],fields[2])) { //パスワードが一致
//コントロールフィールドを「n」に設定する
fields[0][0] = ‘n’;
//パスワードフィールドに新規パスワードを設定する
copy(args[3], fields[2]);
//レコードを書込む
case ‘e’: //アカウント引数のuser_id、admin_password、new_account_passwordを許可する。
{ //引数のuser_id、old_password、new_passwordをチェックする。
if (args[1][0] == 0 || args[2][0] == 0 ) {
error(MISSING_ARGUMENTS);
break;}
//admin_passwordをチェックする。
//admin accountを検索する。
openpwdRead();
if (!lookup(pwdfile, “admin”)) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //アドミンアカウントが見つからない;処理しない
//アドミンパスワードをチェックする
if(!compare(args[2], fields[2])) { //アドミンパスワードの一致に失敗
fail();
pwdfile.close();
break;} //アドミンパスワードの一致に失敗;処理しない。
//使用中のuser_idをチェック;ファイルスタートのためファイルポジションをリセットする。
pwdfile.seek(0);
//備考:検索してフィールドをリセットする。
if (!lookup(pwdfile, args[1])) {
error(USER_NAME_NOT_FOUND);
pwdfile.close();
break;} //使用中のuser_id:処理しない。
pwdfile.close(); //ファイルを閉じる。
//アドミンは全てのアカウントでパスワードをリセットでき、リセット入力になる。
//引数[3]が空であれば、コントロールフィールドを「n」にし、パスワードを変更しない。
//引数[3]が空でなければ、コントロールフィールドを[r]にし、新規パスワードを設定する。
if (args[3][0] == 0) {
fields[0][0] = ‘n’;
}
else {
fields[0][0] = ‘r’;
//パスワードフィールドに新規パスワードを設定する。
copy(args[3], fields[2]);
}
//レコードを書込む。
Claims (21)
- 装置において、
複数のユーザに関連するデータを保護する前記装置を使用するアプリケーションサーバとメッセージを受送信するよう構成されたインタフェース、及び
メモリに保存された情報に対し限定数の所定動作を実行するよう構成されたプロセッサを備え、前記情報は、前記複数の独立したユーザに関連し、不正アクセスから安全に守られるべきデータを備え、
前記インタフェースは、前記複数の独立ユーザの一人に関連するデータを備える前記アプリケーションサーバからメッセージを受信するよう構成され、前記データは別のデバイスから前記アプリケーションサーバが受信したものであり、
前記プロセッサは、前記受信データに基づくデータを前記メモリに保存された前記セキュアデータに対し比較することを含め、前記メモリの前記情報に対し動作を実行し、前記比較に基づき、前記アプリケーションサーバに前記インタフェースを介して応答するよう構成され、
前記限定数の所定動作は、前記アプリケーションサーバへの前記メモリに保存された前記セキュアデータの提供を含まない、装置。 - 前記複数の独立ユーザに関連する情報を保存するように構成されたメモリを備える、請求項1又は2に記載の装置。
- 前記メモリに保存された前記情報は、インデックス、及び、各インデックスに関連するデータを備え、前記プロセッサは、前記インデックスを使用して前記情報に対し前記限定数の所定動作を実行するよう構成された、請求項1、2又は3に記載の装置。
- 前記メモリに保存された前記情報は、ユーザID、及び、各ユーザIDに関連するユーザ認証用の認証データを備え、前記アプリケーションサーバは、前記装置からの応答に基づきユーザを認証するよう配置された認証サーバである、先行する請求項のいずれかに記載の装置。
- 前記メモリに保存された前記情報は、1または複数の外部リソース用のユーザID、並びに、前記ユーザIDに関連するパスワード、生体認証データ、及び個人識別番号のうちの1または複数を備え、前記アプリケーションサーバは、前記装置からの応答に基づき前記1または複数の外部リソースへのアクセスを許可または拒否するよう構成された、先行する請求項のいずれかに記載の装置。
- 前記プロセッサは、実行中にプログラムできないよう構成された、先行する請求項のいずれかに記載の装置。
- 前記プロセッサは、前記アプリケーションサーバから所定長までしかメッセージを受け付けず、前記所定長を超える入力メッセージを拒否、または切り捨てるよう構成された、先行する請求項のいずれかに記載の装置。
- 前記限定数の所定動作は、前記メモリの前記セキュアデータを前記アプリケーションサーバから受信したデータでアップデートする操作を備えた、先行する請求項のいずれかに記載の装置。
- 前記プロセッサは、前記限定数動作の結果を前記アプリケーションサーバに提供するよう構成され、前記結果は成功、失敗、またはエラー状態についての情報に限られた、先行する請求項のいずれかに記載の装置。
- 前記インタフェースは第一インタフェースを提供し、前記装置はさらにバックアップエンティティに情報を提供する第二インタフェースを備え、
前記プロセッサは、暗号化形式のセキュアデータを前記バックアップエンティティに前記第二インタフェースを介して提供するよう構成された、先行する請求項のいずれかに記載の装置。 - 前記メモリは、前記セキュアデータを保存するハッシュテーブルとして組織されるフラッシュメモリを備え、前記フラッシュメモリは、それぞれがユーザプロファイルを収める一律な空間ブロックとして組織された、先行する請求項のいずれかに記載の装置。
- 前記メモリは、ユーザプロファイルに関連するデータ及びメタデータを前記一律空間ブロックの同一ブロックに保存するよう構成された、請求項11に記載の装置。
- 先行する請求項のいずれかに記載の装置、及び
複数のユーザに関連するデータを保存するために前記メモリを使用するよう構成されたアプリケーションサーバを備え、
前記アプリケーションサーバは、前記複数の独立ユーザに関連する複数のデバイスからデータを受信し、前記複数のデバイスから受信したデータを、前記メモリに保存されたデータに対し比較する前記プロセッサに、前記インタフェースを介し送信するよう構成される、システム。 - 前記複数デバイスと前記アプリケーションサーバとの間を仲介するよう構成されたプリサーバをさらに備え、前記プリサーバは、前記メモリに保存されたセキュアデータに対し比較されるように前記複数デバイスから受信したデータを書換え、前記複数デバイスから受信した前記実際データではなく前記書換えデータを前記アプリケーションサーバに転送するよう構成され、前記プリサーバは前記データを、
前記データの暗号化、
テンポラリ・タグへの前記データの書換え、並びに、前記インタフェースを介した前記プロセッサへの前記タグ及びデータの送付、及び前記アプリケーションサーバへの前記タグのみの送付、並びに
前記プリサーバと前記プロセッサとの共有鍵を使用したハッシュ値への前記データの書換え、
のいずれかにより書き換えるよう構成された、請求項13に記載のシステム。 - 複数の独立ユーザに関連するデータを不正アクセスから保護する装置を使用するアプリケーションサーバから前記装置にメッセージを受信し、前記メッセージは、前記アプリケーションサーバが別のデバイスから受信したデータを備え、
前記メッセージに応じて、メモリに保存した情報に対し動作を実行し、前記情報は、前記複数独立ユーザに関連し、不正アクセスから安全に守られるべきデータを備え、
前記比較に基づき前記アプリケーションサーバに応答を返し、前記動作は、前記装置のプロセッサが前記メモリの情報に対し実行可能な限定数の所定動作のいずれかである、コンピュータ実施方法。 - 前記限定数所定動作は前記セキュアデータをアップデートすることを含み、前記方法ではさらに、不正アクセスから保護されるべきデータとともにアプリケーションサーバからメッセージを受信し、前記メモリを前記受信データでアップデートする、請求項15に記載のコンピュータ実施方法。
- 暗号化形式の前記セキュアデータを外部バックアップデバイスに、前記アプリケーションサーバとのメッセージの受送信を介するインタフェースとは別のインタフェースを介して提供する、請求項15または16に記載のコンピュータ実施方法。
- 命令を備え、プロセッサにより実行されると前記命令は前記プロセッサに、
複数のユーザに関連したデータを保護するために前記プロセッサを備える装置を使用するよう構成されたアプリケーションサーバからインタフェースを介して受信したメッセージを受信及び解釈させ、前記メッセージは別のデバイスから前記アプリケーションサーバが受信したデータを備え、
前記複数ユーザに関連し、不正アクセスから安全に守るべきデータを備える情報を保存するメモリに対し限定数の所定動作を実行させ、前記限定数動作は、前記受信データに基づくデータをメモリに保存されたセキュアデータに対し比較することを含み、
前記限定数所定動作の動作結果に基づき、前記アプリケーションサーバに前記インタフェースを介し応答を返させ、前記限定数動作では前記アプリケーションサーバにセキュアデータを返すことを含まない、コンピュータプログラム。 - セキュアメモリに保存されたデータに対し比較されるべきデータをクライアントデバイスから受信するアプリケーションサーバ、及び
前記セキュアメモリの前記データに対し比較されるべき、前記クライアントデバイスから受信したデータを書換え、使用中の前記データも保護するために、前記実受信データではなく前記書換え済受信データを前記アプリケーションサーバに転送するよう構成されたプリサーバを備え、
前記保存データは複数ユーザに関連し、前記セキュアメモリは前記アプリケーションサーバの一部を形成するか前記アプリケーションサーバの外部デバイスの一部を形成し、保存中の前記保存データを保護する、不正アクセスから安全に守るべきデータの保護システム。 - ハッシュテーブルとして組織されるフラッシュメモリを備え、前記フラッシュメモリは、それぞれがユーザプロファイルを収める一律な空間ブロックを備える、ユーザデバイスを認証するための証明書データを保存するメモリ。
- ユーザ証明書保存のためのフラッシュメモリ使用方法において、
前記フラッシュメモリは、ハッシュテーブルとして組織され、それぞれがユーザプロファイルを収める一律空間ブロックを備え、前記フラッシュメモリ使用方法では、
ユーザプロファイルに関連するデータ及びメタデータの双方を前記一律空間ブロックの一ブロックに保存し、
前記ユーザプロファイルをアップデートするために、コマンドに応じて個別ブロック書込み動作を実行する、フラッシュメモリ使用方法。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB1314231.0A GB201314231D0 (en) | 2013-08-08 | 2013-08-08 | Data Comparator Store |
GB1314231.0 | 2013-08-08 | ||
US14/262,177 | 2014-04-25 | ||
GB1407316.7A GB2517016B (en) | 2013-08-08 | 2014-04-25 | Secure data storage |
GB1407316.7 | 2014-04-25 | ||
US14/262,177 US9521132B2 (en) | 2013-08-08 | 2014-04-25 | Secure data storage |
PCT/GB2014/052440 WO2015019110A1 (en) | 2013-08-08 | 2014-08-08 | Secure data storage |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016531508A true JP2016531508A (ja) | 2016-10-06 |
Family
ID=49261900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016532742A Pending JP2016531508A (ja) | 2013-08-08 | 2014-08-08 | データセキュアストレージ |
Country Status (7)
Country | Link |
---|---|
US (3) | US9521132B2 (ja) |
EP (1) | EP3031001A1 (ja) |
JP (1) | JP2016531508A (ja) |
CN (1) | CN105518687A (ja) |
GB (2) | GB201314231D0 (ja) |
IL (1) | IL243953A0 (ja) |
WO (1) | WO2015019110A1 (ja) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9774591B2 (en) | 2014-10-15 | 2017-09-26 | Airbnb, Inc. | Password manipulation for secure account creation and verification through third-party servers |
US9819653B2 (en) * | 2015-09-25 | 2017-11-14 | International Business Machines Corporation | Protecting access to resources through use of a secure processor |
US9876783B2 (en) * | 2015-12-22 | 2018-01-23 | International Business Machines Corporation | Distributed password verification |
RU2624574C1 (ru) * | 2016-02-04 | 2017-07-04 | Артем Николаевич Золотов | Способ и устройство облачного хранения данных с использованием съемных накопителей информации |
CN107491458B (zh) * | 2016-06-13 | 2021-08-31 | 阿里巴巴集团控股有限公司 | 一种存储时间序列数据的方法和装置以及*** |
DE102016225436A1 (de) * | 2016-12-19 | 2018-06-21 | Volkswagen Aktiengesellschaft | Sensor zum Erfassen von Messwerten, Verfahren, Vorrichtung und computerlesbares Speichermedium mit Instruktionen zur Verarbeitung von Messwerten eines Sensors |
US10984136B2 (en) * | 2017-04-21 | 2021-04-20 | Micron Technology, Inc. | Secure memory device with unique identifier for authentication |
US10303888B2 (en) * | 2017-05-03 | 2019-05-28 | International Business Machines Corporation | Copy protection for secured files |
US10594725B2 (en) * | 2017-07-27 | 2020-03-17 | Cypress Semiconductor Corporation | Generating and analyzing network profile data |
WO2019084742A1 (zh) * | 2017-10-31 | 2019-05-09 | 深圳市大疆创新科技有限公司 | 数据的传输方法、服务器、存储***、终端设备及*** |
EP3718283B1 (en) * | 2017-11-28 | 2022-10-19 | Visa International Service Association | Method and apparatus for protecting against relay attacks |
CN109271281B (zh) * | 2018-08-31 | 2021-10-22 | 政和科技股份有限公司 | 一种防数据被篡改的数据备份方法及*** |
CN109213686B (zh) * | 2018-10-22 | 2022-03-22 | 网易(杭州)网络有限公司 | 应用包体检查方法、装置、存储介质、处理器及服务器 |
US10970372B2 (en) | 2018-11-01 | 2021-04-06 | Microsoft Technology Licensing, Llc | Revocable biometric print based identification |
US11711203B2 (en) * | 2019-10-10 | 2023-07-25 | SheerID, Inc. | Systems and methods for gated offer eligibility verification |
CN110866291B (zh) * | 2019-11-15 | 2023-03-24 | 北京工业大学 | 一种基于双重安全机制的废旧电子产品信息清除方法 |
US11334677B2 (en) * | 2020-01-09 | 2022-05-17 | Western Digital Technologies, Inc. | Multi-role unlocking of a data storage device |
JP7400744B2 (ja) * | 2021-01-14 | 2023-12-19 | トヨタ自動車株式会社 | 車両制御システム |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7152045B2 (en) * | 1994-11-28 | 2006-12-19 | Indivos Corporation | Tokenless identification system for authorization of electronic transactions and electronic transmissions |
AR003524A1 (es) * | 1995-09-08 | 1998-08-05 | Cyber Sign Japan Inc | Un servidor de verificacion para ser utilizado en la autenticacion de redes de computadoras. |
US5896414A (en) * | 1996-09-17 | 1999-04-20 | Sarnoff Corporation | Method and apparatus for providing control channel communications for an information distribution system |
US6195696B1 (en) * | 1998-10-01 | 2001-02-27 | International Business Machines Corporation | Systems, methods and computer program products for assigning, generating and delivering content to intranet users |
US6584505B1 (en) * | 1999-07-08 | 2003-06-24 | Microsoft Corporation | Authenticating access to a network server without communicating login information through the network server |
US7155739B2 (en) * | 2000-01-14 | 2006-12-26 | Jbip, Llc | Method and system for secure registration, storage, management and linkage of personal authentication credentials data over a network |
US6938024B1 (en) * | 2000-05-04 | 2005-08-30 | Microsoft Corporation | Transmitting information given constrained resources |
TW519651B (en) * | 2000-06-27 | 2003-02-01 | Intel Corp | Embedded security device within a nonvolatile memory device |
US20040177097A1 (en) * | 2000-12-01 | 2004-09-09 | Philips Electronics North America Corporation | Web-based, biometric authentication system and method |
US6614685B2 (en) * | 2001-08-09 | 2003-09-02 | Multi Level Memory Technology | Flash memory array partitioning architectures |
GB0119629D0 (en) * | 2001-08-10 | 2001-10-03 | Cryptomathic As | Data certification method and apparatus |
US20050223241A1 (en) | 2002-06-14 | 2005-10-06 | Matsushita Electric Industrial Co. Ltd | Semiconductor intergrated circuit device, data storage verification device, and data storage verification method |
US20040165752A1 (en) * | 2003-02-26 | 2004-08-26 | Markus Junginger | Identification method, data storage medium for identification and reading device for identification |
JP2005018362A (ja) * | 2003-06-25 | 2005-01-20 | Renesas Technology Corp | 半導体メモリ |
US20050081045A1 (en) | 2003-08-15 | 2005-04-14 | Fiberlink Communications Corporation | System, method, apparatus and computer program product for facilitating digital communications |
CN1922845B (zh) * | 2004-02-23 | 2010-10-06 | 弗里塞恩公司 | 令牌验证***和方法 |
US7600125B1 (en) * | 2004-12-23 | 2009-10-06 | Symantec Corporation | Hash-based data block processing with intermittently-connected systems |
US20070083770A1 (en) * | 2005-09-17 | 2007-04-12 | Technology Group Northwest Inc. | System and method for foiling code-injection attacks in a computing device |
US20070174910A1 (en) * | 2005-12-13 | 2007-07-26 | Zachman Frederick J | Computer memory security platform |
JP2007274051A (ja) * | 2006-03-30 | 2007-10-18 | Toshiba Corp | バイト列探索器及び探索方法 |
US7730307B2 (en) * | 2006-04-07 | 2010-06-01 | Sensis Corporation | Secure ADS-B authentication system and method |
WO2008008856A2 (en) * | 2006-07-12 | 2008-01-17 | Sipera Systems, Inc. | System, method and apparatus for securely exchanging security keys and monitoring links in an ip communications network |
US8079068B2 (en) * | 2006-07-17 | 2011-12-13 | Research In Motion Limited | Management of multiple connections to a security token access device |
FR2907622A1 (fr) * | 2006-10-19 | 2008-04-25 | St Microelectronics Sa | Procede de transmission de donnees utilisant un code d'accuse de reception comportant des bits d'authentification caches |
US8649509B2 (en) * | 2008-12-18 | 2014-02-11 | At&T Intellectual Property I, L.P. | Systems and computer program products for generating and verifying randomized hash values |
CN101600186B (zh) * | 2009-06-12 | 2013-11-06 | 中兴通讯股份有限公司 | 一种流量统计及自动计算上网费用的方法及装置 |
US8516236B2 (en) * | 2009-09-30 | 2013-08-20 | Imation Corp. | Portable desktop device and method of host computer system hardware recognition and configuration |
CN103141054B (zh) * | 2010-09-28 | 2016-04-27 | Lg电子株式会社 | 在融合网络中分配用户密钥的方法 |
US20120266220A1 (en) * | 2010-11-17 | 2012-10-18 | Sequent Software Inc. | System and Method for Controlling Access to a Third-Party Application with Passwords Stored in a Secure Element |
CA2877839C (en) * | 2012-06-28 | 2021-07-27 | Ologn Technologies Ag | Secure key storage systems, methods and apparatuses |
-
2013
- 2013-08-08 GB GBGB1314231.0A patent/GB201314231D0/en not_active Ceased
-
2014
- 2014-04-25 GB GB1407316.7A patent/GB2517016B/en active Active
- 2014-04-25 US US14/262,177 patent/US9521132B2/en active Active
- 2014-08-08 JP JP2016532742A patent/JP2016531508A/ja active Pending
- 2014-08-08 EP EP14750624.0A patent/EP3031001A1/en not_active Withdrawn
- 2014-08-08 WO PCT/GB2014/052440 patent/WO2015019110A1/en active Application Filing
- 2014-08-08 CN CN201480046889.5A patent/CN105518687A/zh active Pending
-
2016
- 2016-02-04 IL IL243953A patent/IL243953A0/en unknown
- 2016-11-08 US US15/346,259 patent/US20170053137A1/en not_active Abandoned
-
2018
- 2018-10-19 US US16/165,102 patent/US20190050598A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
GB201314231D0 (en) | 2013-09-25 |
GB2517016A (en) | 2015-02-11 |
GB201407316D0 (en) | 2014-06-11 |
US20170053137A1 (en) | 2017-02-23 |
WO2015019110A1 (en) | 2015-02-12 |
IL243953A0 (en) | 2016-04-21 |
EP3031001A1 (en) | 2016-06-15 |
CN105518687A (zh) | 2016-04-20 |
US20190050598A1 (en) | 2019-02-14 |
GB2517016B (en) | 2018-03-07 |
US20150046998A1 (en) | 2015-02-12 |
US9521132B2 (en) | 2016-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2016531508A (ja) | データセキュアストレージ | |
US9507964B2 (en) | Regulating access using information regarding a host machine of a portable storage drive | |
US20170063827A1 (en) | Data obfuscation method and service using unique seeds | |
US20070237366A1 (en) | Secure biometric processing system and method of use | |
US20130159699A1 (en) | Password Recovery Service | |
US7644285B1 (en) | Recovery access to secure data | |
US20130124861A1 (en) | Shielding a sensitive file | |
CN109412812B (zh) | 数据安全处理***、方法、装置和存储介质 | |
CN101971182B (zh) | 颁发证书的手指感测设备及相关方法 | |
US11303443B2 (en) | Electronic system to enable rapid acquisition and delivery of services and to provide strong protection of security and privacy | |
US20070226514A1 (en) | Secure biometric processing system and method of use | |
US9529733B1 (en) | Systems and methods for securely accessing encrypted data stores | |
CN103080946A (zh) | 用于安全地管理文件的方法、安全设备、***和计算机程序产品 | |
WO2008003175A1 (en) | One time password access to portable credential entry and memory storage devices | |
US11997210B2 (en) | Protection of online applications and webpages using a blockchain | |
US11735319B2 (en) | Method and system for processing medical data | |
US11615207B2 (en) | Security processor configured to authenticate user and authorize user for user data and computing system including the same | |
EP4186202A1 (en) | Master key escrow process | |
US20070226515A1 (en) | Secure biometric processing system and method of use | |
US9262619B2 (en) | Computer system and method for protecting data from external threats | |
KR102288445B1 (ko) | 단체용 인증모듈의 온보딩 방법, 장치 및 프로그램 | |
Lee et al. | A study on a secure USB mechanism that prevents the exposure of authentication information for smart human care services | |
US11514144B1 (en) | Universal identification device | |
TWI778319B (zh) | 跨平台授權存取資源方法及授權存取系統 | |
KR20210126625A (ko) | 안전한 거래를 위한 방법 및 시스템 |