モバイル アプリケーションをターゲットにするハッカーはますます増えており、その数は日々増加しています。モバイル アプリケーションにはユーザー データなど、ハッカーが関心を持っているものが含まれているためです。ハードコーディングされた (注、固定されており変更できない) セキュリティ キー、SD カードに平文で保存された個人情報、暗号化されずにデータベースに保存されたユーザー名とパスワード、収集され平文形式で保存された分析情報がリモート サーバーに送信されます。これらの条件により、攻撃が容易になります (成功します)。
暗号化ツールを適切に使用すると、機密データを保護し、プライバシーとデータの整合性を確保できます。一方で、暗号は使いにくく、悪用されやすいものです。 壊れた暗号化 (安全でないアルゴリズムの使用、バイナリ パッケージへのキーのハードコーディングなど) に注意してください。2014 年のモバイルにおけるトップ 10 のリスクのリストを参照してください。さて、ここから得られる教訓は何でしょうか?暗号化を使用しないことはお勧めできませんが、正しく暗号化しないこともお勧めできません (時間がかかることは言うまでもありません)。
Androidプラットフォーム上で安全なアプリケーションを開発するために、次に簡単かつ安全に暗号化する方法を紹介します。
まず、Android アプリケーションに統合できる一般的な暗号化ライブラリをいくつか簡単に紹介します。暗号化ライブラリは、暗号化アルゴリズム、パディング方法、ハッシュ関数などのツールを含む暗号化ツールのコレクションです。
Bouncy Castle
Legion of the Bouncy Castle はオーストラリアの公共福祉団体で、広く使用されているクラス ライブラリである Bouncy Castle を作成しました。このライブラリは、軽量の暗号化 API と Java Cryptozoology Extensions (JCE) のプロバイダーの両方を提供します。 Android プラットフォームには、合理化された古いバージョンの Bouncy Castle がすでに組み込まれています (Android プラットフォームに適応するために、いくつかの小さな変更も加えられています)。その結果、アプリケーションで BouncyCastle クラス ライブラリの最新バージョンを構築して使用しようとすると、クラス読み込みの競合が発生します。
Spongy Castle
Spongy Castleの背後にある動機は、Android開発者がアプリケーションでBouncyCastleクラスライブラリの任意のバージョンを使用できるようにすることです。 SpongyCastle は、最新バージョンの BouncyCastle の単純な再パッケージです。すべての org.bouncycastle.* パッケージの名前は org.spongycastle.* に変更され、すべての Java セキュリティ API プロバイダーの名前は BC から SC に変更されています。
OpenSSL
OpenSSLは、SSLおよびTLSプロトコルと共通暗号ライブラリを実装するオープンソースのツールキットです。 OpenSSL は、Android を含む多くのプラットフォームに移植されています。別の方法として、(Android NDK を使用して) ソースからビルドし、それをアプリケーションにバンドルすることもできます。
次に、アプリケーションの目的で、一部のデータを暗号化したいと仮定しましょう。 AES と DES のどちらの暗号化アルゴリズムを使用しますか?秘密鍵の長さはどれくらいですか、128 ビットまたは 256 ビットですか? ECB または CBC のどちらの暗号化モードを使用しますか?これらの質問のいずれにも答えがなく、正当な理由もない場合は、必要なツールはすべて揃っているものの、どれを使うべきかまったくわからないという微妙な状況に陥っていることに気づくかもしれません。使い方も使い方も。
ここで、ダミーのための未確認動物学ツールキットが活躍します。これらのツールキットは、高度な暗号化機能を実装しておらず、上記の暗号化ライブラリを置き換えようとするものではなく、暗号化機能をより簡単かつ安全に使用できるようにするという唯一の目的で、これらのライブラリの上に構築されています。
一般的な暗号ライブラリとは異なり、これらのツールキットは通常、アルゴリズム、モード、構造、パラメーターのサブセットのみをサポートします。これらのツールキットは、必要なものはわかっているがその使用方法がわからない場合、または最終的に安全なソリューションを手に入れることだけを気にしている場合に備えて、一般的な暗号化ツールの適切なデフォルトを提供します。これらのツールキットがどのように機能するかをより深く理解するために、これらのツールキットのいくつかを調べてみましょう。
キーツァー
Keyczar は、もともと Google セキュリティ チームの 2 人のメンバーによって開発されたオープンソース ツールキットのセットです。 Java、Python、C++ 言語で実装されています。対称暗号化と有料暗号化の 2 つの認証方式をサポートしています。 Keyczar は、アルゴリズム、キーの長さとモード、キーのローテーションとバージョン管理、初期化ベクトルと認証コードの自動生成などの安全なデフォルト設定を提供し、国際化をサポートします。このツールキットは JCE (こちら) に基づいて構築されており、Spongy Castle のセキュリティ プロバイダーを使用します。
AeroGear Crypto
AeroGear Crypto は、AeroGear が提供する小さな Java ライブラリです。 証明可能な対称暗号化、楕円曲線暗号化、およびパスワードベースのキー導出をサポートします。また、アルゴリズムの明示的な仕様も提供します。 AeroGear Crypto は、Android では Spongy Castle に、他のプラットフォームでは Bouncy Castle に依存しています。このライブラリは、iOS、Windows Phone、Cordova でも利用できます。
Conceal
SDカード上の大きなファイルの暗号化と認証を、非常に少ないメモリを使用して迅速に実行できるようにするために、FacebookはConcealを開発しました。 Conceal は認証と暗号化の両方を実行でき、デフォルトでキー管理機能も提供します。 OpenSSL を使用していますが、必要な部分のみが含まれているため、サイズはわずか 85 KB です。 Conceal サイトで公開された結果では、Bouncy Castle よりも優れていることが示されています。
以下の表は、上で紹介した暗号化ライブラリをまとめたものです。注意してください: 上記のライブラリはすべて、暗号化の初心者でも安全に暗号化できますが、上級開発者はこれらのデフォルトを自由にオーバーライドして、必要に応じてすべての暗号化の詳細を指定できます (他の暗号化ライブラリの場合と同じように)。
AeroGear Crypto AeroGear Apache 2.0
Facebook BSD を隠す
Keyczar – Apache 2.0
暗号ライブラリ 開発会社 ライセンス
概要(要約すること)
モバイルアプリケーション開発者の場合、アプリケーションをユーザーフレンドリーで、機能が豊富で、目を引くものにするために時間(労力)を費やす必要がありますが、アプリケーションのセキュリティを向上させることを忘れないでください。開始方法がわからない場合、または正しく実行できないことが心配な場合は、この記事で説明されているツールキットの 1 つを選択して開始してください。どの暗号化ツールを使用する場合でも、暗号化アルゴリズムや暗号化プロトコルを自分で実装することは避け、広く使用され、一般に認識され、テストされているアルゴリズムとプロトコルのみを使用する必要があります。