web-dev-qa-db-ja.com

iCloudを使用してiOSデバイス間で秘密鍵を同期しても安全ですか?

私のiOSアプリは、ユーザーの秘密鍵の保存を処理する必要があります。通常は、パスワードと同じように Keychain Services を使用しますが、ユーザーのデバイス間でキーを同期できると便利です。

Appleの iCloudドキュメント は、パスワードにiCloudを使用しないと書いていますが、秘密鍵に使用しても安全ですか? どうやら 、iCloudデータは転送中およびサーバー上で暗号化されます。

ICloud Key-Valueストアを介して秘密鍵を同期する際にセキュリティ上のリスクはありますか?

11
Nathan G.

私は直接同期オプションを破棄し、ユーザーが自分の秘密鍵を好きな場所にエクスポートできるようにします。暗号化された形式のiCloud、DropBox、内部ストレージなど。

エクスポート時には、次のようにします。

  • 使用するパスワードをユーザーに尋ねます。それらに制限を課さないでください-適切なパスワードを使用するのは彼らの仕事です!
  • PBKDF2などの強力なキー派生アルゴリズムを使用して、ストレージキーを生成します。まともな数のラウンドを使用します。
  • メモリ内の秘密鍵ブロブの前に4つの既知のバイト(マジックナンバー)を付けます。 「NATG」、あなたの平文を形成します。
  • ストレージキーとランダムに生成されたIVを使用して、CBCモードで、AES-128または同様のブロック暗号で平文を暗号化します。
  • 暗号文とIVをファイルにエクスポートします。

インポート時:

  • ファイルから暗号文とIVを抽出します。
  • ユーザーにパスワードを要求し、PBKDF2を使用して同じキーを生成します。
  • IVとキーを使用して暗号文を復号化します。
  • プレーンテキストの最初の4バイトが既知のバイトと一致することを確認してください。そうでない場合、それは間違ったパスワードです。もしそうなら、私たちはお金の中にいます!
  • 最初の4バイトを削除すると、秘密鍵を入手できます。

これにより、ユーザーは、iCloud、DropBox、メールなど、必要な通信サービスを介して、適切なレベルのセキュリティで秘密鍵をすばやく簡単に同期できます。アカウントが侵入された場合でも、攻撃者はパスワードを解読する必要があります。彼らがまともなものを使用した場合、PBKDF2はクラッキングの試行を実行不可能にする適切な仕事をする必要があります。

9
Polynomial

秘密鍵は本質的にパスワードと同じです。効果的なセキュリティデバイスになるためには、秘密にしておく必要があります。そのため、ドキュメントにパスワード用ではないことが記載されている場合は、秘密鍵にも使用するのに十分安全ではないことが理にかなっています。

3
Xander

多項式の提案とは対照的に、ほとんどのエンドユーザーはリンクされたアプリを使用してデータストア全体 にアクセスできるサードパーティアプリケーションを使用するため、DropBoxやメールへのエクスポートは好きではありません。

特にDropBoxを使用すると、アプリがストレージ全体(キーとすべて)に完全にアクセスするのが非常に簡単になります。

enter image description here

現在、私は iCloud に傾いています。この場合、他のアプリケーションは、プライベートストレージに保存したデータを読み取ることができません。各iOSアプリケーションが独自のコンテナーを取得するこのテクノロジーを理解するのに1分かかりました。

per-applicationコンテナは、

  • 読み取り/書き込みが可能な1つのパブリックデータベース
  • ICloudユーザーごとに1つのプライベートデータベース

一般的に言って、アプリケーションごとに1つのコンテナーしかありません。つまり、各iOSアプリケーションは互いに分離されています。

さらに、開発者はユーザーのiCloudデータベースの内容を直接読み取ることはできません。これはDropBox OAuthや他の商品ストレージにはない機能です。

(言うまでもなく、それは ほぼ無料です

enter image description here

そうは言っても、Polynomialが示唆するように、どこに行っても暗号化します。

1