私は、次のようなプロセスを使用してエンドユーザーが簡単に電子メールを暗号化するための概念実証プログラムに取り組んでいます。
アカウントを作成するには:
ログインします:
サーバーには公開鍵があり、秘密鍵があるので、将来のログインでは簡単にできます。
サーバーが危険にさらされたとしても、サーバーが持つ唯一の情報はk1、salt、IV、および暗号化された秘密鍵ですが、鍵をいじくるにはk2が必要で、鍵を復号化するにはk3が必要です。 。
クライアントはキーを一度だけ復号化する必要がある(そしてそれをオペレーティングシステムのキーリングに保存できる)ため、反復回数は非常に多くなる可能性があります。
これにより、サーバーが危険にさらされた場合にクライアントを保護できると思いますか?残っている唯一の攻撃ベクトルは、クライアントのハッキング、パスワードのブルートフォースの強制(PBKDF2の多くの反復を使用できるため、信じられないほど難しいはずです)、ゴムホース暗号解読です。
編集:より具体的には、攻撃者がサーバーの所有者と協力している場合でも、これはユーザーのパスワード、秘密キー、および暗号化された電子メールを攻撃者から保護することを意味します。暗号化されていないメールを保護することは基本的に不可能です。サーバーを制御している攻撃者は、受信したメールをすべて保存することができるためです。ソーシャルエンジニアリングとゴムホース暗号解読が関連しますが、私の目標は、可能な攻撃を可能な限り減らすことです秘密にしてはいけません。
いくつかの問題があります:
1-ログイン順-ステップ#4-サーバーでの確認のためにk1を送信しています。サーバーにはk1のコピーがありません。アカウント作成スレッドによると、ステップ3(k1、k2、k3を生成)はおそらくクライアント側で発生し、サーバー送信の一部ではありません(ステップ7)
2-k1を格納する場合、それは事実上パスワードです。ログイン手順4に進むために必要なのはk1値の繰り返しだけです。
3-攻撃者とユーザーを模倣する機能の間に立っているのは、秘密鍵のAES 128ビット暗号化です。これはサーバーに保存されるため、サーバーがクラックされた場合、暗号化されたキーを取得できます。 k1も提供する場合、追加データを取得する機能を提供する場合があります。攻撃者が勝利するコンボを見つけるまで、基本的に2つの可能な計算があります。
さて、問題は「それらのことはどれほど簡単か」という領域に入りました。本当に分からない。これは、crypto.SEにとって良い質問です。私たちは暗号の難しさの世界に入り込んでいますが、これは私の強い訴訟ではありません。
4-サーバーの送信とコロケーションを監視することの価値を否定しないでください。添付ファイルがアカウント/ログインサーバーをハッキングした場合、そのサーバーには他に何がありますか?メールまたは認証後の特権ユーザーのトランザクションも提供している場合、問題は上記の手順ではなく、他の重要な資産です。また、ユーザーがログインしたとき、およびユーザーの行動の一般的なパターン、試行錯誤を見ると、暗号化ハッキングの厄介な数学的部分が無関係である十分なソーシャルエンジニアリング情報が得られます。サーバーを壊し、ユーザーに電話して謝罪し、電話でパスワードを教えてもらえるなら、暗号をハッキングする作業は時代遅れです。
考慮すべきいくつかのこと:
より具体的には、このスキームの技術的側面: