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をベースとした小型ライブラリ作成の手順が公開されている。