スマホアプリとAPIの安全な通信方法について


Androidアプリを開発しており、起動時にAjax通信を用いて  
サーバーに置いてあるAPIを叩き、APIが出力したJSONを取得して  
情報を処理しようとしています。

この時、サーバーに置いてあるAPIには外部からアクセスできないように  
Basic認証をかけていますが、この認証に必要なIDとパスワードをどのように  
アプリに持たせたらいいのでしょうか？

Androidは簡単にデコードしてソースが見れるとのことなので  
IDとパスワードの直書きは論外としてもこの状態で  
どうやって安全に通信するのかがわかりません・・・

なお、このアプリはログイン等を一切せずに、  
通信も完全に見えない裏側で行う必要があります。  
ですので「ユーザーには何もさせずに」というのが大前提になります。

\--- 追記 ---

開発環境はMonacaを使用しており、HTML/Javascriptを使用したアプリです。  
APIはPHPで作成し、WordPressの情報を取得・加工し返します。

目指す「安全性」は現時点ですと、とりあえず可能な限り高めておきたいという程度です。  
というのも、今回サーバーに置いてあるAPIとは、入力を一切利用せず  
特定のSELECTを行った結果を加工しJSONで返すだけの簡単な物です。  
更に、その内容も個人情報や機密情報の類は一切扱っておりません。

個人的には、今はこれだけならあまり問題ないように思いますが  
APIという口ができてしまう以上、今後の為にも極力安全な作りにしておきたい。  
と思った次第です。




観点の一つとして、アプリで「通信の内容を秘密にする」のではなく、サーバー側で「怪しい通信はブロックする」対応を入れておくのも重要かと思います。

実際に業務でWebアプリケーションを運用していますが、ログを見ていると怪しい通信というのはいくらでも飛んできます。ご認識の通り、アプリは.apkを解凍してデコードしてしまえばソースを見ることができますし、proguardで難読化しても文字列部分までは変えられないので、URLやリクエストパラメータはすぐにバレてしまいます。

同一IPからの不自然な大量リクエストは弾く、想定外のAPIの叩かれ方があったらエラーを返す、SQLインジェクションに対処する、等のサーバー側の努力も一緒に検討すると良いかと思います。

