2012-03-22 23 views
4

AESを使用して暗号化されたサーバーからデータをダウンロードするMonotouchアプリケーションを構築しています。私は、ファイルにアクセスするときにこのデータを復号化する必要があります。MonoTouchを使用したAES暗号化

MonoTouchを使用してこれを行う最も良い方法は何ですか? iOSのAES解読はapparently hardware acceleratedです。私は理想的にはCCCryptを呼びたいと思っています。私はMonoTouchにはn00bのビットですので、誰もこれを行う方法を知っていますか?

また、MonoTouchでAES復号化を行う方がよいでしょうか?

答えて

6

MonoTouchは、そのクラスライブラリの内部にAESのサポートを提供しています。 RijndaelManagedクラス。

しかし、ファイルの暗号化を解除するには、その暗号化方法(暗号モード、パディングモード、鍵サイズ)についてもう少し詳しく知る必要があります。また、ファイルサイズによっては、それが小さい場合はメモリ(より安全)で、または(大きい場合は)一時ファイルに復号化することもできます。

注:

  • ラインダールはAESなるように選択しまったアルゴリズムの元の名前です。

  • AESはRijndaelのサブセットです(ブロックサイズは1つのみ、128ビット)ので、AESがサポートするすべての機能をRijndaelManagedで実行できます。

  • 現在のところ、MonoTouchは、CommonCrypto(Monoの管理対象の実装を使用しています)を使用していないため、ハードウェアアクセラレーションを取得できません。これは将来のリリースで変更される可能性があります(アプリケーションでRijndaelManagedを使用した人には互換性があり、つまり簡単に再コンパイルされます)。

EDIT

MonoTouch 5.3.3(アルファ)はAESとSHA1のためのハードウェアアクセラレーション(使用可能)を含むCommonCrypto実装を、使用するデフォルト。

+0

大変感謝! –

+1

hwアクセラレーションとマネージド・インプリメンテーションの違いはわかりませんが、現在のCPUは非アクセラレーション・メソッドをすばやく実行できるほど高速です。インテルCPUのAESアクセラレータC++の高速ソフトウェア実装の2倍の速さです。どんなI/Oでも、それがボトルネックになります。 –

+0

@owlstead小規模なデバイスでは、その差は大きくなる場合があります(高速であるだけでなく、メインCPUの負荷を軽減します)が、I/Oが速度向上をしばしば隠すことに同意します。私はここ(http://spouliot.wordpress.com/2012/02/27/cryptodev-support-in-crimson/)のブログで( '/ dev/crypto'を使って別のARMデバイスを)ブログしました。そして最大の勝利は大きなブロック(つまり、呼び出しや遷移を避ける)。 – poupou

0

MonoTouch SQLCipherで静止しているデータ(つまりデータベース)を暗号化することに興味がある場合は、良いオプション(http://sqlcipher.net)を使用してください。 SQLCipherのMonoTouchプロバイダは、AES-256(http://sqlcipher.net/sqlcipher-for-monotouch)を使用したSQLiteの完全データベース暗号化を提供します。アンドロイド(http://sqlcipher.net/sqlcipher-on-mono-for-android

開示:私はZetetic、SQLCipherの著者のために働いています。AndroidのMonoのコンパニオンライブラリーもあります。

関連する問題