強火で進め

このブログではプログラム関連の記事を中心に書いてます。

iPhoneアプリでAES暗号を使う方法

基本的には以下のApple公式のサンプルを読めばOK。

CryptoExercise
http://developer.apple.com/iphone/library/samplecode/CryptoExercise/Introduction/Intro.html

特に読むべきところは SecKeyWrapper.m ファイルの以下のメソッド

- (NSData *)doCipher:(NSData *)plainText key:(NSData *)symmetricKey context:(CCOperation)encryptOrDecrypt padding:(CCOptions *)pkcs7

AESについての基礎知識がまだない場合は以下のサイトなどがおすすめ。

The AES-CBC Cipher Algorithm and Its Use with IPsec
http://www.ipa.go.jp/security/rfc/RFC3602JA.html#1

ブロック暗号モード(block cipher mode)
http://www.triplefalcon.com/Lexicon/Encryption-Block-Mode-1.htm

注意点

PHPなどとデータをやりとりするときはパディング(Padding)に注意。
復号したときにデータの末尾に0x01〜0x16のデータ(AES-256なら0x01〜0x32かな?)が付加されているときはパディングを疑いましょう。

OpenSSL::Cipher::Cipher のパディング処理 | へびにっき
http://wp.serpere.info/archives/432

関連情報

(2011/04/20 追記)

JavaObjective-C間で正しくAES暗号をやり取りする方法 at ミネルヴァの梟は黄昏とともに飛び始める
http://blog.daisukeyamashita.com/post/1692.html?utm_source=wordtwit&utm_medium=social&utm_campaign=wordtwit

(追記ここまで)

新版暗号技術入門 秘密の国のアリス

新版暗号技術入門 秘密の国のアリス

C/C++セキュアプログラミングクックブック〈VOLUME1〉基本的な実装テクニック

C/C++セキュアプログラミングクックブック〈VOLUME1〉基本的な実装テクニック

C/C++セキュアプログラミングクックブック〈VOLUME2〉対称鍵暗号の実装

C/C++セキュアプログラミングクックブック〈VOLUME2〉対称鍵暗号の実装

C/C++セキュアプログラミングクックブック VOLUME 3 ―公開鍵暗号の実装とネットワークセキュリティ

C/C++セキュアプログラミングクックブック VOLUME 3 ―公開鍵暗号の実装とネットワークセキュリティ