NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
81 stars 18 forks source link

Androidアプリ配布時のAPIキーの隠蔽化について #1268

Open RskManTaro opened 2 years ago

RskManTaro commented 2 years ago

お世話になっております。

Android(Kotlin)でアプリを作成し、 マーケット(Playストア)に公開する際のAPIキーの隠蔽化について教えていただけますでしょうか。 いくつかQ&Aを見たり調べたりしましたが正確な情報がわからず困っています。

以下コラムには「gradle.properties」を使うよう説明があります。

KotlinでNCMBを使う:初期化時にキーを隠蔽化する (https://blog.mbaas.nifcloud.com/entry/2018/12/26/174520

ここに記述された方法で完全に安全に公開することができるのでしょうか。 逆コンパイル等の問題はすべて解決されているということでしょうか。

ACLの設定など追加で対応したほうが良いということまではわかりましたが、 APIキーの格納方法については 調べれば調べるほど色々な方法があるように感じられ、ベストがわかりませんでした。

上記記事は約3年前のものですので、 現在ではさらに良い方法があれば教えていただきたいです。 上記記事の通りで問題ない場合はその旨お教えいただけますでしょうか。

よろしくお願いいたします。

goofmint commented 2 years ago

逆コンパイルした場合には、恐らく見つけられてしまうかと思います(試していないで、後日検証してみようと思います)。

こちらのsimple-string-obfuscatorではいかがでしょうか。こちらも完璧ではなく、あくまでもバイト文字列にして難読化しているレベルのようですが…。後はC/C++でコンパイルする方法があるかと思います。

https://qiita.com/mickamy/items/ee55e8fab2dfb114c2f2

RskManTaro commented 2 years ago

さっそくのご回答ありがとうございます。 確認遅くなり申し訳ありませんでした。

参考URLもいただきありがとうございます。 やはり完璧な隠蔽化となると中々難しいということですね。

ひとまずACLの線で進めてみたいと思います。 いつもありがとうございます。

goofmint commented 2 years ago

C++による隠蔽化を試してみました。これが一番正解かと思います。

https://qiita.com/goofmint/items/09c78dcf1fd664b85a37

goofmint commented 2 years ago

HEXエディタ対策を入れてみました。なおアプリケーションキーはHTTPヘッダーにも含まれるので、ある意味公開情報です。クライアントキーをどこまで隠蔽化するかが鍵になりそうです。

https://qiita.com/goofmint/items/29c1517cee99dcbb0779