Facebookは,Android用のファイル暗号化および認証Java APIのセットであるConcealをオープンソースとして公開した。ライブラリを小さく保つためにConcealでは,OpenSSLのアルゴリズムと定義済みオプションのサブセットを使用する。現時点でのサイズは85KBだ。
ライブラリがターゲットするのは,FroyoからJelly Beanまでの古いAndroidデバイスである。これらの上ではAndroidのネイティブサポートよりはるかにパフォーマンスがよい,とFacebookは述べている。
上記のベンチマークはGalaxy Y上で,ネイティブのAndroidのアルゴリズム(ES-CTR-HMAC-SHA1)とBouncycastle(AES-GCM),Conceal(AES-GCM)とを比較したものだ。
GoogleはKitKatでOpenSSLのサポートを導入しているが,Facebookによると},デフォルトの暗号ストリームの “パフォーマンスはあまりよくない” という。“私たちの暗号ストリーム (BetterCipherInputStream参照)に置き換えれば,Concealと比較できるレベルになります。”
以下のコードは,Concealを使ってファイルを暗号化する方法を示したものだ。
// Creates a new Crypto object with default implementations of
// a key chain as well as native library.
Crypto crypto = new Crypto(
new SharedPrefsBackedKeyChain(context),
new SystemNativeCryptoLibrary());
// Check for whether the crypto functionality is available
// This might fail if Android does not load libraries correctly.
if (!crypto.isAvailable()) {
return;
}
OutputStream fileStream = new BufferedOutputStream(
new FileOutputStream(file));
// Creates an output stream which encrypts the data as
// it is written to it and writes it out to the file.
OutputStream outputStream = crypto.getCipherOutputStream(
fileStream,
entity);
// Write plaintext to it.
outputStream.write(plainText);
outputStream.close();
Concealは大規模な暗号化ファイルに使用することができる。Facebookではこれを,スマートフォン/タブレットのSDカード内のデータやイメージの暗号化に利用している。
ConcealのGitHubのページには,OpenSSLをベースとした小型ライブラリ作成の手順が公開されている。
