web-dev-qa-db-ja.com

デバイスではなくサーバー側で暗号化キーペアを生成する理由は?

APIへのリクエストに関する特定のデータを暗号化できるように、ネイティブアプリケーション(Android/ios)にキーペア(RSAまたはECIES)を持たせたいです。各クライアントに一意のキーペアを持たせたい。デバイスはそのキーペアをAPIに登録し、そのデバイスの一意のフィンガープリントにロックされます。

鍵生成には2つのオプションがあります。最初のオプションは、いくつかの中間証明書で署名されたサーバー側の鍵ペアを生成し、それらをアプリケーションに配信することです。すべてのAPI呼び出しはTLS暗号化されています。

2番目のオプションは、アプリにローカルでキーペアを生成させることです。つまり、秘密鍵を送信する必要はありませんが、これらの鍵は「自己署名」されます。

私のユースケースは主にAPIリクエストを登録済みデバイスにロックダウンすることなので、サーバー側でキーペアを生成することにはセキュリティ上の利点がありますか?

2
Tom L.

サーバー側でキーペアを生成する必要はまったくありません。実際、これはあなたがやりたい最後のことです。

モバイル側でキーを生成するということは、秘密キーがデバイスから出ることはなく、公開キーだけがサーバーと共有されるため、秘密キーの漏洩を最小限に抑えることができます。

公開鍵は、要求どおりにデバイスのフィンガープリントになります。