単純な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 件のコメント:
コメントを投稿