オンラインサービスプロバイダーによって保存されたデータの政府による広範囲にわたる監視に関する最近の暴露に照らして、ゼロ知識サービスは現在すべての流行です。
ゼロ知識サービスは、すべてのデータがサーバーに格納されていないキーで暗号化されて格納されるサービスです。暗号化と復号化は完全にクライアント側で行われ、サーバーはプレーンテキストデータもキーも認識しません。その結果、サービスプロバイダーは、データを解読してサードパーティに提供することができません。
例を挙げましょう: SpiderOak は、Dropboxのゼロ知識バージョンと見なすことができます。
プログラマーとして、特定のクラスのオンラインサービスプロバイダーであるコードホスティングプロバイダー(Bitbucket、Assemblaなど)に対して、最も機密性の高いデータの一部(コード)に大きく依存して信頼しています。もちろん、ここではプライベートリポジトリについて話しています。ゼロ知識の概念はパブリックリポジトリには意味がありません。
私の質問は:
ゼロ知識コードホスティングサービスの作成に技術的な障壁はありますか?たとえば、SVN、Mercurial、Gitなどの一般的なバージョン管理システムで使用されるネットワークプロトコルについて、クライアントとサーバー間で通信されるデータを暗号化するスキームの実装を困難(または不可能)にするものはありますか?サーバーが知らないキー?
今日存在するゼロ知識コードホスティングサービスはありますか?
各行を個別に暗号化できます。ファイル名とおおよその行の長さ、および行が変更される行番号をリークする余裕がある場合は、次のようなものを使用できます。
https://github.com/ysangkok/line-encryptor
各行は個別に(ただし、同じキーで)暗号化されるため、アップロードされた変更には(通常のように)関連する行のみが含まれます。
現在のところ十分に便利ではない場合は、2つのGitリポジトリを作成できます。1つは平文、もう1つは暗号文です。プレーンテキストリポジトリ(ローカル)でコミットする場合、コミットフックはdiffを取得し、それを上記のラインエンクリプターを介して実行し、暗号テキストリポジトリに適用します。暗号文リポジトリの変更がコミットされ、アップロードされます。
上記のラインエンクリプターはSCMに依存しませんが、(プレーンテキストの)統一されたdiffファイルを読み取り、変更を暗号化して暗号文に適用できます。これにより、統一された差分(Gitなど)を生成するSCMで使用できるようになります。
私が理解しているように、方法git pull
機能は、サーバーが必要なすべてのオブジェクトを含むパックファイルを送信することですが、現在はありません。逆も同様ですgit Push
。
これを直接行うことはできなかったと思います(これは、サーバーがオブジェクトを理解する必要があるためです)。代わりにできることは、暗号化された一連のパックファイルをサーバーで機能させることです。
pull
を行うには、最後のpull
以降に追加されたすべてのパックファイルをダウンロードし、それらを復号化してgitリポジトリに適用します。 Push
を実行するには、最初にpull
を実行して、サーバーの状態を知る必要があります。競合がない場合は、変更を加えたパックファイルを作成し、暗号化してアップロードします。
このアプローチでは、非常に効率の悪い多数の小さなパックファイルが作成されます。これを修正するには、一連のパックファイルをダウンロードし、復号化して1つのパックファイルに結合し、暗号化してサーバーにアップロードし、それらをそのシリーズの代替としてマークします。
私はそれらの1つをするのが嫌いです 'これはあなたの質問に答えるには十分ではない'答え..しかし..
私はこれらの心配に対処するべき2つの準備ができた解決策を考えることができます。
自分でプライベートGitサーバーをホストします。次に、チームメンバーにアクセスを許可するVPNにそのサーバーを配置します。サーバーとの間のすべての通信は暗号化されます。もちろん、OSレベルでサーバーを暗号化することもできます。
BitSyncもトリックを行う必要があります。すべてが暗号化され、どこからでも利用できる巨大なネットワークで。実際には、このすべてのBitCoin/BitMessage/BitSyncテクノロジーの非常に優れたアプリケーションである可能性があります。
最後に、 https://security.stackexchange.com/ にいる人々は、もう少し洞察を持っているかもしれません。
障壁はないと思います-SVNを考慮してください。ストレージにサーバーに送信されるのは、コードの以前のバージョンと現在のバージョンの間の差分です。そのため、1行を変更すると、その行だけがサーバーに送信されます。次に、サーバーはデータ自体を検査せずに「ブラインド」で保存します。デルタを暗号化して送信した場合、サーバーに影響はありません。実際、サーバーを変更する必要すらありません。
簡単に暗号化できないメタデータプロパティ(MIMEタイプなど)など、重要な他のビットがありますが、たとえば、履歴ログのコメントを暗号化することができます。表示するクライアント。ディレクトリ構造が表示されるかどうかはわかりませんが、SVNがディレクトリを格納する方法が原因で表示されないと思いますが、それは間違いです。ただし、内容が安全であれば、これは重要ではありません。
これは、さまざまなコードビュー機能を備えたWebサイトを作成できず、サーバー側のリポジトリブラウザーやログビューアーがないことを意味します。コードの相違、オンラインコードレビューツールはありません。
このようなものはすでに存在します。ある時点で、Mozyはあなたのデータをあなたの秘密鍵で暗号化して保存します(あなた自身のものを使用できます、そして彼らは「あなた自身のキーを失った場合、私たちはあなたのデータを復元することができません。あなた」が、それはより一般的なユーザーを対象としています)。 Mozyはファイルの履歴も保存するため、以前のバージョンを取得できます。それが落ちるのは、アップロードは定期的に行われるのであり、必要なときにチェックインするのではなく、ストレージスペースが不足すると古いバージョンが破棄されると私は考えています。しかし、コンセプトはそこにあり、既存のシステムを使用して安全なソース管理を提供するように変更することができます。