APIへのリクエストに関する特定のデータを暗号化できるように、ネイティブアプリケーション(Android/ios)にキーペア(RSAまたはECIES)を持たせたいです。各クライアントに一意のキーペアを持たせたい。デバイスはそのキーペアをAPIに登録し、そのデバイスの一意のフィンガープリントにロックされます。
鍵生成には2つのオプションがあります。最初のオプションは、いくつかの中間証明書で署名されたサーバー側の鍵ペアを生成し、それらをアプリケーションに配信することです。すべてのAPI呼び出しはTLS暗号化されています。
2番目のオプションは、アプリにローカルでキーペアを生成させることです。つまり、秘密鍵を送信する必要はありませんが、これらの鍵は「自己署名」されます。
私のユースケースは主にAPIリクエストを登録済みデバイスにロックダウンすることなので、サーバー側でキーペアを生成することにはセキュリティ上の利点がありますか?
サーバー側でキーペアを生成する必要はまったくありません。実際、これはあなたがやりたい最後のことです。
モバイル側でキーを生成するということは、秘密キーがデバイスから出ることはなく、公開キーだけがサーバーと共有されるため、秘密キーの漏洩を最小限に抑えることができます。
公開鍵は、要求どおりにデバイスのフィンガープリントになります。