Cryptree
A Folder Tree Structure for Cryptographic File Systems
chatGPT.iconによって今なら理解しきれそう
信頼できないストレージ上で動作するファイルシステムにおいて、アクセス制御を容易にするCryptographic tree構造である"Cryptree"を紹介する。 「ファイルシステムのフォルダ階層を使用して、効率的で直観的、かつシンプルなアクセス制御を実現する。」
定数時間でフォルダとそのすべてのサブフォルダへのアクセスを再帰的に許可する能力
アクセス権の分散を防ぐ動的なアクセス権の継承
他のアクセス者の身元を明らかにすることなく、ある人にファイルやフォルダへのアクセスを許可する可能性
3つの要件
Semantics: ファイルシステムの利用者が増えれば増えるほど、便利で直観的なアクセス制御のSemanticが重要になる。とくにファイルシステムで機密保持とアクセス権の動的継承をサポートする。 Efficiency: 管理する鍵の数は、ファイル数や利用者に比例して、増加しないようにする。また高価な非対称暗号の使用は最小限に抑える。 いくつもプライベート空間が持てるようになった方がいいと思ったけど、それだけセキュリティ面も問題になるか。Yudai.icon
ただいくつも分ければ単一障害は無くせると思うけど。
Key Management in File Systems
鍵管理に対する最も広範で些細なアプローチは、すべてのファイルと共に鍵リストを維持することである。
アクセス権を表す鍵がユーザーの公開鍵で暗号化されて構成されている。
これにより、秘密鍵を用いて復号化し、鍵に関連するアクセス権を主張することができる。
Plutus
グループ内のファイルは"filegroups"によって暗号化される
1つの鍵のみを公開することで一度にファイルグループ全体へのアクセスを許可することができる。
Lazy Revocation
Cepheus
「あるファイルやフォルダの読み取り権限を剝奪された場合、そのファイルを暗号化する必要がある」
新しい鍵でアイテムを暗号化する
dirty keyのクリーニング
新しく生成された鍵に置き換え、そのカギで関連するコンテンツを再暗号化することを指す。 データをキーで再暗号化することは、古いキーでデータを復号化し、指定されたキーで再度暗号化することを意味します。
ここに繋がる話で実線から点線に戻す方法だ
Buffetの期間とも言えるYudai.icon
Key Regression
「同じキーで複数のファイルを暗号化する際に発生する特定の問題を解決するために設計されている」
汚れたキーK1で暗号化されたn個のファイルを含むファイルグループがあるとしましょう。このグループからファイルfを修正したいと考えています。キーK1は汚れているため、新しいキーK2に置き換える必要があります。残念ながら、fはK1で暗号化された唯一のファイルではありません。したがって、ファイルを更新し、K2で再暗号化するときには、ファイルグループの全ての他のファイルも、含まれる全てのファイルへのアクセスに一つのキーだけを使うというファイルグループの利点を保つために、K2で再暗号化する必要があります。
K2を知っている誰もが、k1を計算できるような鍵k2を生成する方法を指定するもの = 一方向性?Yudai.icon これさ、k2からk1を作成しているっぽい?
鍵を増やす場合どうするんだろ
k1からk2を作成しているならめっちゃ強いと思うけど
なんかできそうな気もするがw
Access Control Semantics
ほとんどのファイルシステムではアクセス制御情報はファイルごとになっている。
=>「アクセス制御をフォルダ構造に結合することでより自然なアクセス制御Semanticが得られる」
アリスにフォルダ documents/ へのアクセス権を与え、そのフォルダに新しいドキュメントを追加する場合、アリスは新しく追加されたものにアクセスできるようにしなければならない。そして、ドキュメントから他のフォルダにアイテムを移動するとき、アリスはアクセスできなくなる。
アリスに /bob/projects/に存在する documents/というフォルダへの再帰的なアクセスを許可する場合、アリスは自動的にフォルダ/bob/と /bob/projects/ の名前を見ることが許可される。親フォルダが見れなければ、 documents/の正しいパスを再構築することは出来ない。documents/が他の場所に移動されたとき、アリスはそれに対するアクセスを維持し、新たな親フォルダの名前を見る能力を得つつ、古い親フォルダの名前を見る能力を失うべきである。
アリスがボブに彼女のフォルダholiday/cancunへのアクセスを許可した場合、ボブはholiday/greeceという名前のフォルダがcharlesと一緒に存在することを知ることができるべきではない。フォルダ名を読むことができると、通常はその兄弟の名前も読むことができるという意味になる。
だれがそのファイルにアクセスできるかを明らかにすることなく、読み取りと書き込みのアクセス権を与えることが出来るようにする必要がある。
「鍵k1を所有する誰もがk2を導き出すことができる。」
Metamaskの仕組みみたい
K2をK1で暗号化した結果 : K1 -> K2 「->」をSymmentric Linkと呼ぶ。
Symmentric Linkと同じ。 K1 ⇀ K2 そして、 K1 ⇀K2'に更新できる。
chatGPT.iconこのリンクは特別な性質を持っています。それは、非対称リンク K1 ⇀ K2 を K1 ⇀ K' 2 に更新することができるということです。具体的には、新しい秘密鍵 K' 2 を公開鍵 Kpublic で暗号化することで、リンクを更新することができます。そして、その結果は K1 ⇀ K' 2 となります。この更新は、秘密鍵 K1(Kprivate)を知らなくても行うことができます。
これは対称リンクでは不可能で、非対称リンクの利点です。ただし、非対称暗号化は対称暗号化よりも計算量が多くなるため、パフォーマンスが落ちるという代償があります。
1つの鍵を知っているとそのカギの全ての子孫を再帰的に導ける
O(1)操作でサブツリー全体へのアクセス許可が可能
ファイルシステムの読み取りアクセス制御に使用するCryptree
Folder:
5つのフォルダアイテムを組み合わせてFolder treeを構成することが出来る。
データ鍵DKfはフォルダを表現するために必要な全てのデータを暗号化する。データキーDKfはフォルダの名前、作成日、その他ファイルシステムがフォルダについて保存しているあらゆる情報を含む
BackLink鍵BKfは親フォルダに関する情報を調べるための鍵
Scbfolder鍵SKfはサブフォルダを読み取るために鍵
Files鍵FKfはこのフォルダを含むファイルを読み取るための鍵
Option clearance鍵CKfはfと子孫へのアクセスを許可するために、他のユーザーに公開することが出来る鍵
https://scrapbox.io/files/640be2c7500487001bc73d15.png
各フォルダーfとともに保存される暗号リンク:
BKf→DKf、BKf→BKp(f)、SKf→BKf、SKp(f)→SKf、SKf→FKf
chatGPT.icon
BKf→DKf:フォルダfのバックリンクキー(BKf)を使用して、フォルダfのデータキー(DKf)を派生します。
BKf→BKp(f):フォルダfのバックリンクキー(BKf)を使用して、親フォルダp(f)のバックリンクキー(BKp(f))を派生します。
SKf→BKf:フォルダfのサブフォルダキー(SKf)を使用して、フォルダfのバックリンクキー(BKf)を派生します。
SKp(f)→SKf:親フォルダp(f)のサブフォルダキー(SKp(f))を使用して、フォルダfのサブフォルダキー(SKf)を派生します。
SKf→FKf:フォルダfのサブフォルダキー(SKf)を使用して、フォルダfのファイルキー(FKf)を派生します。
やっぱり名前とかも全体を暗号化するんだ
chatGPT.icon 暗号リンク自体は、ある鍵から別の鍵への「道」または「マッピング」を指します。これらのリンクは、特定の鍵(または情報)が他の鍵を生成または取得するための方法を提供します。したがって、これらのリンクは実際には保存することができ、特にCryptreeのようなデータ構造においては保存されます。
たとえば、鍵K1から鍵K2への暗号リンクがある場合、このリンクは実際にはK1を使用してK2を生成または取得するための「レシピ」や「手順」を提供します。このリンク(または手順)は保存され、必要に応じて再利用することができます。
そういうことかYudai.icon
「書き込みアクセス制御は通常全てのファイルとフォルダに対して署名/検証キーペアを作成することで行われる。」 = 変更の正当性 ファイルまたはフォルダの書き込み者にだけ公開される
サーバーにも提供され、サーバーは不許可の書き込み操作を拒否可能 検証する必要がない
検証キーは公開可能であり、平文で保存できます。しかし、署名キーは許可された書き込み者だけに公開しなければなりません。これを行うために、再びCryptree構造を利用することができます。
あーそこでまた使用可能なんだYudai.icon
これある意味データと一緒に制限が出来るって事っぽい?
フォルダと一緒に平文で保存される検証キーKverify
書き込み操作に署名するために使用できる署名キーKsign
サブフォルダへの書き込みアクセスを獲得するための書き込みサブフォルダキーWSK。これは読み取りアクセス制御のサブフォルダキーSKと同じ役割を果たす
書き込みアクセスを付与するために公開されるオプションの書き込みクリアランスキーWCK。これは読み取りアクセス制御のクリアランスキーCKと同じ役割を果たす
https://scrapbox.io/files/6462fff6547424001cd653b8.png
「読み取りアクセス制御との主な違いは、書き込みアクセスでは遅延撤回が適用されないため、汚れたキーは即座にクリーニングされなければならないということです」
これめちゃ大変すぎるYudai.icon
これって読み取りの制御と書き込みの制御ってそれぞれ別の可能性が高いのか
読み取り: データ制御するユーザー
書き込み: プラットフォームとか?
Canned foodの中身の証明の部分に繋がってくる話
誰が書き込むのか、そしてその書き込みは正しいのか
書き込みが正しいというわけではないか、書き込むEntity?に依存しているともいえる
正しくない人が書き込むこむことは出来ない
Operation
操作の効率性について推理する際、フォルダ階層がランダムな二分木に似ており、その深さがO(log n)であると仮定します。ここで、nはファイルの総数を表します。
Cleaning
「任意の操作を実行する前に、全ての関連項目がクリーンであることを確認する必要がある」
この確認、つまり検証がめちゃめんどくさいYudai.icon
特にファイルとフォルダではクリーニングしないといけない鍵が異なり、フォルダのクリーニングはめんどくさいすぎる。
Granting Read Access
CKfがあるかを確認し、無い場合は生成し必要なリンクを確立する。
新たなAccesserにCKfを開示し、アクセスを提供する
Option clearance鍵CKfはfと子孫へのアクセスを許可するために、他のユーザーに公開することが出来る鍵
Granting Write Access
書き込みアクセスを付与するために公開されるオプションの書き込みクリアランスキーWCK。
WCKによって制御する
そう考えるとさ、この鍵って通常は非公開になっているってことなのか。
この部分を秘密分散とか使用できるよね
NFTとか使っちゃってさ?Yudai.icon
Revoking Read Access
アクセスの取り消しは、アクセスの付与よりも複雑です。フォルダfへのアクセスが取り消されると、そのすべての子孫が汚れた(dirty)とマークされます。読み取りアクセスを取り消すには、クリアランスキーCKfをクリーンにし、新しいバージョンを残ったアクセッサに開示する必要があります。また、セクション5.4.1で述べた理由から、すべての子孫のサブフォルダキーはすぐにクリーニングされます。サブフォルダキーと一緒に、子孫のバックリンクキーもクリーニングされます。これは許容されることで、この要素がいずれにせよ触れられることを確認し、O(log n)より多くのバックリンクキーが汚れたままになる操作がないことを保証します。
Revoking Write Access
書き込みアクセスの取り消しは遅延処理で行うことはできません。クリアランスキーWCKとすべての関連する書きキーと書き込み検証キーペアをすぐに置き換える必要があります。これらのキーペアを生成するために関与する非対称暗号化は、書き込みアクセスの取り消しを最も高コストな操作にします。幸いなことに、それはあまり頻繁には起こりません。
Revokinngのアクセス制御が一番難しいYudai.icon
Cleaning(鍵変換)の処理がまじで大変すぎる
Moving forlder
Cryptreeにおける最も複雑な操作は、移動操作です。サブツリーを新しい親に移動するとき、そのサブツリー全体を汚れた(dirty)とマークする必要があります。これは、移動操作の結果としてサブツリーへのアクセスを失う可能性があるユーザーが存在するためです。移動によって、彼らはもはや古い祖先を読むことを許されなくなります。この特権はバックリンクキーを使用して付与されたため、それらを汚れたとマークする必要があります。そのため、移動されたサブツリー自体だけでなく、サブツリーの古い祖先も汚れたとマークする必要があります。読み取りアクセスの取り消し操作と同様に、移動されたサブツリーのサブフォルダキーとバックリンクキーはすぐにクリーニングされます。
新しく生成した鍵をどのように既存のAccesserに渡すのかは別問題っぽいYudai.icon
chatGPT.icon特に、大規模なシステムや多数のユーザーが関与する場合、新しいキーを効率的かつ安全に配布することは非常に困難なタスクとなることがあります。この配布プロセス自体が安全でなければ、新しいキーが不適切なユーザーに漏洩するリスクが生じ、結果として全体のセキュリティが脅かされる可能性があります。 このような問題に対処するための一つのアプローチは、安全なキー配布プロトコルを使用することです。このようなプロトコルは、配布プロセスを安全に行うための手順とルールを定め、キーの不適切な漏洩を防ぐことを目指します。
また、公開鍵暗号化の使用も一つの解決策となります。公開鍵暗号化では、各ユーザーは公開鍵と秘密鍵のペアを持っています。公開鍵は他の人と共有され、メッセージを暗号化するために使われますが、そのメッセージを復号化するためには対応する秘密鍵が必要です。このため、公開鍵を用いて新しいキーを暗号化し、その暗号化されたキーをアクセッサーに送信することで、安全に新しいキーを配布することが可能となります。
これのいいところは誰が権限を持っているのかがマーキングできることにより新しいNFT(制御の条件)を配布したりも可能
デメリットとしては誰が権限を持っているのかがばれてしまう?
https://scrapbox.io/files/64636487736b3a001b4c54b9.png
アリスはフォルダbへの読み取りアクセスを持ち、ボブはcへ、クレアはeへのアクセスを持つ。汚れた項目は灰色で塗りつぶされています。フォルダcが現在の親であるbからeへ移動される際、cから始まるすべてのサブツリーが汚れます。これはアリスがそれへのアクセスを失うからです。フォルダbはボブがそれへのアクセスを失うため汚れます。フォルダaは依然としてcの祖先であるため汚れません。この操作は、関与する全てのユーザーの存在を認識する必要も、他のシステムで必要なアクセス権の明示的なリセットも必要とせずに実行できることに注目してください。
いつでも可能ってのが一つ重要なポイントってことなのかな
= クリーニングしてすぐに鍵を配布する必要はないって事
chatGPT.icon ファイルシステムが自動的にアクセス権の変更を管理し、ユーザーが直接的に介入することなく再暗号化を行うという点に特化した機能です。
介入することなくできるYudai.icon
大枠としての理解はなんとなくわかったから実際に簡単に実装してみるYudai.icon
ハッカソンとかで試してみるのはあり
これかなり使用できると思うのとやっぱりnodeを僕たちも立てられるようにする必要があるかも