web-dev-qa-db-ja.com

Webサイトで安全な双方向暗号化を実行する正しい方法

私は現在、標準のpython/flask Webサイトを介してWebサーバーに機密情報(主にパスワードやその他の情報)を保存する必要があるプロジェクトに取り組んでいます。この情報は、システム上の他のx人と共有され、そこで情報を復号化して表示できます。

理想的には、クライアント側ですべての暗号化を実行し、サーバーが暗号化されたデータをサーバーに保存して、サーバーがこのデータを復号化できないようにしたいと考えています。

もともとはラストパスと同様のシステムを想定していましたが、同じデータを他のユーザーと共有して復号化して表示できるため、これが機能する方法を考えることができません。

これは可能ですか?

[さらに情報を追加するために編集]

私が取り組んでいるプロジェクトは、実際には、主にサーバーアクセスや単一アカウントのソフトウェアシステムなどの内部パスワード/情報を管理したい企業を対象としたパスワード/情報管理アプリです。システムの外で使用するためのキーをユーザーに提供することは可能ではないと思います。私はユーザーのパスワードまたはおそらく何らかの個別のキーがシステムに保持されているデータを解読するのに十分であることを望んでいましたが、ユーザーのキーがそれを解読できるようにデータを暗号化することはできません。それは不可能かもしれないと思っています。

5
nullabletype

基本的に、対称鍵(AES鍵など)を使用して、保護するデータを暗号化する必要があります。このキーは、サーバー上の暗号化されたデータへのアクセスを許可されているユーザーのグループのみが知っています。

データの暗号化に使用したキーはサーバーに保存しないでください。暗号化と復号化は、クライアントWebブラウザー内のクライアント側で行われます。AESアルゴリズムを実装するJavaScriptライブラリは多数あります。

最も難しいのは、ユーザー間で暗号化キーを共有する方法です。さらに、同じユーザーが2つの異なるユーザーグループとデータの一部を共有する場合、グループごとに異なる暗号化キーを使用する必要がある場合があります。キーをサーバーに知られたくないことに注意してください

それでは、どうすればよいでしょうか。キー配布には2つのオプションがあります。

  1. Webソケットを使用して、P2P接続を使用するユーザーのグループ間でキーを共有します。キーは、各ユーザーのブラウザーでHTML5 Webストレージを使用して暗号化して保存できます。
  2. 各ユーザーにはRSA鍵ペアがあり、その公開鍵はサーバーに保管されています。次に、ユーザーAがユーザーBとAESキーを共有します。ユーザーAがユーザーBの公開キーをダウンロードし、uesr Bの公開キーを使用してAESキーを暗号化します。次に、暗号化されたAESキーをサーバーにアップロードします。ユーザーBは、暗号化されたAES鍵をダウンロードし、彼の秘密鍵を使用して復号化します。次に、暗号化されたAESキーを使用してユーザーAのデータにアクセスできます。

システムの技術的な課題は、暗号化キーを管理する方法とユーザーグループを管理する方法です。

HTML5 Webストレージを利用してAESキーを保存し、各ユーザーにパスフレーズを割り当てるだけです。このパスフレーズを使用して、Webストレージのすべてのキーと他の機密データの暗号化に使用できるマスターAESキーを生成します。クライアント側。

注:ユーザーが暗号化キーを紛失した場合の主な問題。この場合、サーバーで暗号化されたデータを回復できない可能性があります。

プロジェクト要件の詳細を投稿すると、より良いソリューションを提供できる場合があります。

6
Ubaidah