2013年1月3日木曜日

暗号化・復号化ライブラリ RNCryptor

AES-256を使う暗号化ライブラリ。


単純なCCCryptのラッパーではなく、いくつか工夫を入れているところが特徴的。

 ・暗号化キーの生成に PBKDF2 を使っている
・逐次的な暗号化・復号化をサポートしている
・独自のデータフォーマットを定義している




PBKDF2は暗号化キー作成用のderivation関数の一つ(派生or誘導関数と訳す?)。PKCS#5 v2.0 として発表されている。この関数はパスワードをいわば暗号化する仕組み(復号はできない・一方向)。同様の方法として ハッシュ関数(パスワード+ソルト) があるが、PBKDF2ではハッシュ関数と所定の計算式を1000回以上繰り返し適用することで強度を高めている(繰り返し回数は可変)。
PBKDF2 - Wikipedia, the free encyclopedia

逐次対応は、ネットワーク経由で取得したデータをこんな感じで扱える。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
  [self.cryptor addData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  [self.cryptor finish];
}
あるいは
self.cryptor = [[RNDecryptor alloc] initWithPassword:self.password
        handler:^(RNCryptor *cryptor, NSData *data) {
                 [self.decryptedData appendData:data];
               if (cryptor.isFinished) {
                     [self decryptionDidFinish];
                 }
        }];


そして独自フォーマットはこんな感じ。

Data Format · rnapier/RNCryptor Wiki

暗号化データを相手に渡す場合、復号化に必要となるソルトやIVを一緒に渡す必要がある。この為、実際の運用では暗号化データ本体以外にもこれらの情報を渡す手順(プロトコル)を決めなければならない。このライブラリでは独自フォーマットながらも、暗号化データに加えIVやソフトを1つのデータとしてパッケージングしたデータ形式を定義しているのでこのフォーマットを利用すれば手順作成の煩わしさがなくなる。これは実用的でいいアイディアだと思う。


(参考情報)
新井俊一のソフトウェアビジネスブログ: PBKDF2によるパスワード暗号化の手順

0 件のコメント:

コメントを投稿