コメントで述べたように、秘密鍵を秘密にしておくか、誰もが安全なサービスにログインできるようにする必要があります。(したがって、秘密鍵という名前)
それを本当にプライベートに保つ唯一の方法は、それを他人に渡さないことです. たとえば、アプリケーションの UI を使用して秘密鍵を提供します。このキーが存在しない場合、ユーザーはサービスにアクセスできません!
少なくともあなたの質問について理解していることからすると、これはあなたの現在の状況では不可能に思えます。したがって、次善の策は、キーをパスワードで保護することです。ただし、ユーザーにパスワードを提供する必要があります。これは、キー自体をユーザーに提供するのとまったく同じです (前のオプション)...
最悪の選択肢は、キーをパスワードで保護せずにアプリケーション/APK に埋め込むことです。熟達したユーザーなら誰でも、アプリケーションが使用するのと同じアルゴリズム (難読化解除、ダウンロード、ファイルの読み取りなど) を使用してキーを取得できます。
結論として、あなたのサービスが秘密鍵を必要とし、その鍵を (すべて? の) ユーザーに渡すというのはばかげているように思えます。誰もがサービスに接続できるように... なぜサービスにアクセスするために秘密鍵が必要なのですか?
最後に、キーを提供する方法の選択はあなた次第です!
更新(コメントには長すぎました)
キーを使用するときの一般的な考え方は、クライアントが (カスタム生成された)秘密/公開キー ペアを持っているということです。次に、公開鍵部分がサービスに送信されます。また、クライアントは秘密鍵を使用して認証できます (クライアントが実際に秘密鍵部分を持っていることを証明することにより)。
あなたの状況では、公開鍵をストレージ/サービスに送信する方法を提供する必要があります。問題は、アクセスを許可したいクライアントに公開鍵が属していることを何らかの方法で確認する必要があることです。これは管理者が手動で確認できます... そうしないと、だれでも意味のないサブスクリプションを作成できます。
独自のアプリケーションをより具体的にするため。SSL 公開/秘密キー ペア ジェネレーターを含めることができます。新しい鍵ペアが生成された後、アプリケーションから公開鍵をサービスに送信できます。
サービスは認証を受ける必要があり、その瞬間まで、クライアントは (認証されていないキーペアを使用して) 読み取り専用 (ゲスト) サブスクリプション (たとえば) にサービスに接続できます。
繰り返しますが、実際の実装の選択はあなた次第です。これらはポインタにすぎません。