🔑
APIキーとかの管理(Gemini)
はじめに
現在,GoogleのGemini
を利用したflutterモバイルアプリ開発をしようとしています.その際,
- GeminiのAPIキー等はモバイル側に置いていいのか,専用のバックエンド処理を書く必要があるのではないか?
と疑問に思いました.友人にこのことを話したら,
逆コンパイル
されてAPIキーがバレる
とか聞いたので,ちょっと調べてみることにしました.
※そもそもAPIキーとAPIトークンの違いって何?
- 共通点:APIリクエストの呼び出しプログラムを識別するために使用される.
- APIキーの用途:識別に使用される.多くの場合,リクエストヘッダーに含まれている.
- APIトークンの用途:識別だけでなく,認証にも使用される.権限や有効期限などの追加情報が含まれている.
モバイルアプリのAPIキーを保護するには?
- 安全なストレージソリューショにゃサーバー側の環境変数を使用する.
- APiキーの使用を特定のIPアドレス,アプリ,リファラー(リンク元のページ)に制限する.
ハードコーディングと逆コンパイル
-
ハードコーディング
:ソースコードに直接データを書き込む行為 -
逆コンパイル
:機械語(0や1で書かれたコード)を高水準言語などに変換すること - オブジェクトコード(バイナリや機械語アプリケーション内に,APIキーを直接ハードコーディングしてしまうと,どうなるか?
→ ソースコードを公開されたり.逆コンパイルされることで,APIキーを取得できてしまう.
flutterでのapiキーの扱い
- 検証記事を書かれてらっしゃる方がいたので,参考にします.
- この方が調べた内容ですと,
GEMINI APIに関して(flutterでの利用)
- Googleが出しているスタートガイドに書いてありました笑
- プロトタイプ以外のユースケースでは,サーバーサイドで呼び出してねと警告されてました.
その他
- FirebaseでもGemini API利用をサポートしているから, それならモバイル側でも普通に呼び出せそうかな(だけど,金はかかる)
また、下記の注意書きがありました
APIキー等の説明で用いた参考資料
- (Akamai)
- (AWS)
Discussion