21824


オープンソースのAndroidアプリを作成しています。  
処理のなかで外部Mysqlサーバーとの接続をしてデータを取得したいのですが  
そもそも、オープンソースのコードのなかにパスワードやアクセスキーなどの秘密情報を含まずに公開することはできるのでしょうか？

個体識別番号やMACアドレスなどの情報を利用すれば可能かと思いましたが、あと一歩のところでうまくいかず困っています。


CC BY-SA 3.0
2016-02-07T01:57:52.297
21794
2016-03-04T16:34:35.763
2016-02-07T15:38:54.240
7290
5505
question
android
オープンソースのアプリでパスワードなどの秘密情報を隠して公開するには？


一般的な設計論として web app ではセキュリティや拡張性を確保するため  
\- フロントエンドサーバ : httpd 等、お客様が直接アクセスするサーバ  
\- バックエンドサーバ : DB 等、フロントエンドサーバからのみアクセスするサーバ  
のように分離して構成するものです (ネットワーク的にも分離します)

The Internet (Android App) から直接接続できるところに DB を置いたりはしません。

なので「一般的な web app 」において、すなわち、  
お客様が直接使う user agent (Chrome とか Edge とか IE とか Android App とか) に、  
データベースに対するアクセスキーやパスワードを置く必要はないと思います。  
Android App はフツーに http アクセスするだけです。

公開したいソースコードが Android app だけでなくて  
フロントエンドサーバ上で動かす middleware である場合、  
その middleware の DB アクセス部はパスワード類を設定ファイルに格納すればよく  
設定ファイルは各サイトで書き換えて使ってね！というコメントとともに  
設定ファイルのサンプルをプロジェクトに含めておけばよいでしょう。

VPN でイントラネットに手を突っ込むような Web App でない App なら・・・  
DB マシンに直接ログインできそうですし `mysqladmin` だろうが `mysqldump` だろうが打ち放題でしょう。  
となると接続パスワードの類は承知の上ってことになりそうですし、  
やはり設定ファイルっていうか、その辺はサンプルがあれば十分となりそうです。


CC BY-SA 3.0
2016-02-08T02:02:16.580
21824
2016-02-08T11:25:01.010
2016-02-08T11:25:01.010
8589
8589
21794
answer


秘密情報を掲載したソースコードを公開することはできません。

> 個体識別番号やMACアドレスなどの情報を利用すれば可能

これも危険です。なぜなら、上記のような情報はほとんど全て詐称できるからです。

アプリのソースコードは難読化してあってもコンパイルしてあっても、攻撃者が読んで改変できる前提で設計しないと危険です。したがって、秘密情報をソースコードに含めるのは、例えソースコードを公開せずバイナリだけ公開する場合でも危険です。

「aws github 乗っ取り」などで検索すると、実際に秘密情報が漏洩してしまった事案がいくつも起こっていることが分かると思います。


CC BY-SA 3.0
2016-02-08T07:10:17.760
21840
2016-02-08T07:10:17.760
7572
21794
answer


ゼロ知識証明を利用しましょう。  
パスワードを秘匿する必要が無くなります。  
まあパスワードよりハッシュなどの不可逆な関数を利用する、ssl証明書を利用するなども有効。


CC BY-SA 3.0
2016-03-04T16:34:35.763
22815
2016-03-04T16:34:35.763
13432
21794
answer