12

Firebaseのメール/パスワードのサインイン方法を使用しています。私はユーザーがリアルタイムデータベースに保存したデータを暗号化してデータベースに送信したいと考えています。 Firebaseはすでにユーザーのパスワードを処理していますが、私は何とかそれを使ってクライアントだけが私に復号化できないデータを暗号化できますか?私がクライアントsdkでそれを達成できればいいですね。Firebaseのユーザデータを暗号化する方法

だから私の流れはこのようなものになるだろう:

  1. ユーザーユーザーのみ生成することができますいくつかのユニークなキー、といくつかのデータを暗号化する(firebase自体によって処理される)、それの資格
  2. でサインイン信用証明書から、または私だけではなくユーザーのために利用可能ないくつかのデータから。
  3. データがデータベースに保存されています(ユーザーの資格情報で暗号化されているため、データを読み取ることができません)。
  4. ユーザーが別のユーザーでログインしていますあなたは簡単にすることを、以下の方法を行うことができるデバイス(復号鍵をすぐに生成することができ、データを復号化することができます。)
+0

復号鍵はどこかに保存する必要があります。それがデータベースにあれば、それを使うことができます。それがクライアントデバイスにある場合は、別のデバイスに移行することはできません。ユーザーがこのキーを覚えているか転送していない限り、ユーザーに関係なくこの操作を行うことはできません。 –

+0

ええ、キーが生成される可能性がある場合、ユーザー認証オブジェクトの一意の値ユーザーが自分の資格情報でログインした後にのみロードされます。残念ながら私はauthオブジェクトのそのようなプロパティについてはわかりません。 – NoNameProvided

+0

それはそのような基本的な要件です、私は他の人がこの問題にどのように取り組んでいるのだろうかと思います。 – NoNameProvided

答えて

10

:ランダム、公開鍵と秘密鍵のペアで、ユーザAがログインした後

  1. です彼の電話で生成されます。例えば:
  2. Aから秘密鍵を自分の携帯電話に安全に保存されたECCのCurve25519
  3. を使用するAから公開鍵はfirebaseに保存され、Xは、メッセージを送信する場合A.
  4. でチャットを誰にもアクセス可能ですto A彼はfirebaseからAの公開鍵を取り出し、Aのメッセージをローカルに暗号化し、受信したfirebaseに暗号化メッセージを格納します。
  5. Aはfirebaseから暗号化されたメッセージをダウンロードし、

(逆の場合、A~X)

のは、別の電話に移動したりしたいが、あなたがこのような方法を行うことができ、複数の電話機を使用したい場合:

  1. が彼のローカルに保存された秘密鍵を暗号化するために強力なパスワードを定義するために依頼を。
  2. ステップ1のパスワードを使用して、自分の電話機で秘密鍵をローカルに暗号化(例:AES256を使用)し、firebaseにアップロードします。
  3. 2台目のデバイスから暗号化された秘密鍵をダウンロードします。
  4. Aの2番目のデバイスのパスフレーズを尋ねて、秘密鍵を安全に保管します(オプションで署名を公開します)。何のバックアップが、私はアンデGeers

    彼の電子によって書かれたこのことについて非常に興味深い記事を見つけた

+0

基準#4は、ユーザーが別の電話でログインしてデータにアクセスできることでした。これはうまくいきません。 しかし、ユーザーのパスワードや他のユーザーが提供した秘密がキーの生成に使用された場合にも機能します。新しい電話に行くときに、ユーザーはデータのロックを解除するために秘密に再追加する必要があります。 – Aftermathew

+0

答えの2番目の部分に記載されています – Hollerweger

+0

Ahhはい。確かにそうです。私はそれを忘れて申し訳ありません。 – Aftermathew

関連する問題