🔑

APIキーとかの管理(Gemini)

2024/05/24に公開

はじめに

現在,GoogleのGeminiを利用したflutterモバイルアプリ開発をしようとしています.その際,

  • GeminiのAPIキー等はモバイル側に置いていいのか,専用のバックエンド処理を書く必要があるのではないか?

と疑問に思いました.友人にこのことを話したら,

  • 逆コンパイルされてAPIキーがバレる

とか聞いたので,ちょっと調べてみることにしました.

※そもそもAPIキーとAPIトークンの違いって何?

  • 共通点:APIリクエストの呼び出しプログラムを識別するために使用される.
  • APIキーの用途:識別に使用される.多くの場合,リクエストヘッダーに含まれている.
  • APIトークンの用途:識別だけでなく,認証にも使用される.権限や有効期限などの追加情報が含まれている.

モバイルアプリのAPIキーを保護するには?

  • 安全なストレージソリューショにゃサーバー側の環境変数を使用する.
  • APiキーの使用を特定のIPアドレス,アプリ,リファラー(リンク元のページ)に制限する.

ハードコーディングと逆コンパイル

  • ハードコーディング:ソースコードに直接データを書き込む行為
  • 逆コンパイル:機械語(0や1で書かれたコード)を高水準言語などに変換すること
  • オブジェクトコード(バイナリや機械語アプリケーション内に,APIキーを直接ハードコーディングしてしまうと,どうなるか?

→ ソースコードを公開されたり.逆コンパイルされることで,APIキーを取得できてしまう.

flutterでのapiキーの扱い

  • 検証記事を書かれてらっしゃる方がいたので,参考にします.

https://zenn.dev/tristar/scraps/db0555636ccfe2

  • この方が調べた内容ですと,

GEMINI APIに関して(flutterでの利用)

  • Googleが出しているスタートガイドに書いてありました笑
  • プロトタイプ以外のユースケースでは,サーバーサイドで呼び出してねと警告されてました.

https://ai.google.dev/gemini-api/docs/get-started/tutorial?hl=ja&lang=dart

その他

  • FirebaseでもGemini API利用をサポートしているから, それならモバイル側でも普通に呼び出せそうかな(だけど,金はかかる)

https://firebase.google.com/docs/vertex-ai?hl=ja

また、下記の注意書きがありました

APIキー等の説明で用いた参考資料

  • (Akamai)

https://www.akamai.com/ja/glossary/what-is-mobile-app-api-security

  • (AWS)

https://aws.amazon.com/jp/what-is/api-key/#:~:text=API キーは、主に,に関連付けられています。

Discussion