4

自分のサーバーと通信する Android アプリケーションがあります。https がないので、独自のデータ暗号化を実装したいと考えています。サーバーは PHP で実装されています。

AES を使用したかったのですが、主な問題は、サーバー キーをローカル アプリケーションと共有することです。これは、サーバー キーが傍受されて、誰かがメッセージを復号化できるためです。

代わりに RSA を使用する必要がありますか? または、キーを共有する安全な方法はありますか?

ありがとう!

4

2 に答える 2

2

RSA および AES 暗号化プロトコルを使用する必要があります。

  • RSA は短い文字列を暗号化/復号化します (CPU にとって重い)。
  • AES は大きな文字列を暗号化/復号化します (RSA より高速です)。

そう:

  1. クライアントはリクエストごとにランダムな AES キーを作成します (24 バイトで問題ありません)。
  2. クライアントは AES キーを使用して文字列リクエスト (任意の長さ) を暗号化します。
  3. クライアントは、RSA PUBLIC キーを使用して AES キーを暗号化します。
  4. クライアントは暗号化された (AES と文字列) の両方をサーバーに送信します (POST は便利です)。
  5. サーバーは RSA PRIVATE キーを使用して AES キーを復号化します。
  6. サーバーは AES キーを使用して文字列を復号化します。
  7. サーバーは文字列リクエストを処理します。
  8. サーバーは応答文字列を同じ AES キーで暗号化します。
  9. サーバーの応答がクライアントに返されます。
  10. クライアントは、AES キーを使用して応答を復号化します。

GitHub で次のオープン ソース プロジェクトをご覧ください: github.com/rcbarioni/followzup

サーバーは PHP で実装されており、PHP および Java 用の API があります。クライアントとサーバー間の通信には、AES と RSA が使用されます。

PHP と Java の暗号化ライブラリは完全に互換性があります。Java for Android にも対応しています。

于 2016-05-20T17:50:58.387 に答える