Systemicusパート3:OMFS3とLiberte

このパートでは、Systemicus OS用のOMFS3ファイルシステムを作成した経験を共有したいと思います。 その作成の主な目標は、信頼できるデータ暗号化です。



画像







前のパーツ:

RTOS Systemicusによる初公開

Systemicusパート2:GUI





たとえば、FAT、NTFS(フォークNTFS Kolibriコード)、ext2 / 3など、ネジを締めずに独自のFSを書くことにした理由をすぐに書き留めておきたいと思います。 拡張性とセキュリティを確保しながら、最初は簡単に実装できるようにしたかったのです。



シンプルさ 。 基本レベルでのジャーナリングがないことにあります。 すべてが非常に単純に配置されています-大きなクラスター(各64キロバイト、OS Systemicusのmallocも各64kを割り当てるため)があり、一部のクラスターにはファイルとサブディレクトリに関する情報が含まれ、他のクラスターにはデータが含まれます。 最初のクラスターは、パーティション情報+将来の拡張用に多くのスペース用に予約されています(現在は最初の64バイトのみを使用しています)。



2番目のクラスターをOSのカーネルコードに割り当てました。 これは、システム自体への懸念のために行われました。 第一に、ブートローダコードを大幅に削減し(システム全体にファイル検索を記述する必要がないため)、第二に、ユーザからカーネルを隠します。つまり、ユーザもユーザプログラムもカーネルコードを損傷することができません。 .formally、このクラスターは、ファイルシステムの表示スペースに含まれません)。 +これは普遍性に影響を与えません。2番目のクラスターはビジーではないかもしれませんが、常に単独であり、コードが存在するかどうかは関係ありません-問題ではありません。



別のシステムクラスター(ディスクサイズが大きい場合はクラスター)があります。 そのアドレスは固定されなくなりましたが、セクション設定で示されます。 これはパーティションバイトマップです。各バイトは、対応するクラスターが空いているかどうかを示します。 なぜ噛まないのですか? だから簡単です+経験から、将来、何か便利なものになるかもしれないことを知っています。たとえば、0と1に加えて、破損、読み取り専用など、他の状態を示すことができます。 バイトカードを備えた1つのクラスターは、65 536(1つのクラスター上のカードのレコード数)* 65 536(クラスターサイズ)= 4 294 967 296バイトのカバレッジを提供します。 4ギガバイトのディスク容量。 私にとっては、かなり受け入れられます。



データストレージはどのように構成されていますか? 各クラスターの最後に特別な構造を作成せず、2 dwordsが示されました:現在のクラスターの重要なデータのサイズ(原則として、ファイル全体のサイズはそのiノードレコードによってわかっているため、この値は不要です)現在のファイルのデータを含む次のクラスターのアドレス。 アドレスが0の場合、これはデータチェーンの最後のクラスターです。 すべてがシンプルで論理的です。ファイルを読み取るとき、毎回個別のデータロケーション構造に切り替えることなく、ディスクに順番にアクセスします。



最もおいしい

実際、何のために、独自のFSが作成されました。 そのため、FSでの暗号化は低レベル、つまり 各クラスターは個別に暗号化され、ファイルではありません。 つまり ファイルシステムドライバーレベルで。 暗号化は、2つの異なるキーを使用して2段階で行われます。

まず、ユーザーのパスワードから、256ビットバージョンのGOST 34.11-2012を介して256ビットキー(より正確にはペア、パスワードごとに1つ)を取得します。 クラスターは、GOST 28147-89アルゴリズムを最初のキーとして使用して暗号化されます(ロシア連邦中央銀行が使用する「テスト」置換テーブルを使用します)。 クラスターは再び2番目のキーで暗号化されますが、アルゴリズムはファイルシステム自体の作成(フォーマット)時にユーザーによって設定されます-RC4、RC6、IDEA(低速感染)またはBlowfish-256はオプションです。



重要! 最初の2つのクラスターは暗号化されています。理由(使用目的)を読んでください。



さらに、単一のファイルを高レベルで暗号化する機能のために、ファイルシステムレベルで個別に提供されます。 つまり これらの2つの暗号化に加えて、ファイルではなくクラスターに適用されることを思い出しますが、ファイルを暗号化することは可能です。 この機会は登録されていますが、今のところ実装していません(複雑さではなく、時間の問題です)。



拡張性について

まず、主なパラメーターは64ビットバージョンで保存されます。 タイムスタンプ(および64ビット)だけでなく、サイズ(およびアドレス指定がセクターごとであり、64キロバイトのクラスターの場合、多くのアドレスを指定できることを考慮してください)にも問題はありません。

追加のファイルフラグ(アクセス、権利、...)の余地がまだあります。 また、他の拡張機能のための多くのスペース(最初のクラスターを参照)。

原則として、将来、ジャーナリングを実装することは可能です。矛盾するものは何もありません。ジャーナルを別の特別なファイルまたはクラスターのチェーンに書き込むことができます。

暗号化でも、アルゴリズムの種類はバイト変数に保存されます。 これら4に加えて、他の252の暗号化およびハッシュアルゴリズムをねじ込むことができます)



お団子

長い間、私はアナログのLeanFS GUI tkを作りたかった。 毎回手動でパーティションをコンパイルするのはなんとか不便です...そしてFS自体でさえGOST + RC4以外の暗号化はありません(そして開発時には一時的に無効になっています)。 したがって、書く必要があります。



Delphiを選択しました(怒らないで、C / C ++が気に入らない、またはわからない;-))。 2.5日後に管理した後、fasmで暗号化機能を別のdllとして実行し、アプリケーションにねじ込みました。 BlowfishとIDEAで奇妙な奇妙なことが起こっていることに注意する必要があるので、このバージョンではそれらをオフにしました。個人的には十分なGOST + RC6があります。

だから、リベルテはプログラムを呼び出し、本質的にそれは私のファイルシステムの閲覧者だけでなく、暗号コンテナも判明しました:-)私はすでに自分でそれを使用しました、私は以前に自分のためにこのことをしました-Wolfram ここで、重要なデータにLiberteを使用します。



暗号化速度について文句を言わないでください-私自身はショック状態にありますが、すべてが先です。

ダウンロードリンクを提供します-nebka.ru/files/Liberte_0.1c.7z

いいえ、もう1つあります。前回の記事で、サーバーが何か間違っていることを誓いました: http : //yadi.sk/d/1up9km3cSBPvE



Scる) 私はそれを自分自身に思い起こさせたいです。 コンテナの形式は安定しており、プログラムを完了することができます。



All Articles