Upload
masayuki-nii
View
642
Download
2
Embed Size (px)
Citation preview
Agenda
OS X/iOSの暗号関連フレームワーク
Common Cryptoを使う
SecTransferを使う
213年7月5日金曜日
Developer文書をひもとく
Security Starting Point• 認証認可、暗号化、コードのセキュリティ• Common Cryptoについては、CC_crypto(3cc)のmanを参照• リンクすらなし。さらに、Mountain Lionはmanでも出てこないSecurity Overview• まあ、オーバービューCryptographic Services Guide• CDSA/CSSMはdeprecatedだよ、乱数なんてこの領域か!Security Transforms Programming Guide.• CベースのAPI(つまりCore Foundationっぽい感じ)• 暗号やBase64などのエンコード関連、署名などを簡単にできる• 「トランスフォーム」をつなげてまとめて処理ができる• Grand Central Dispatch対応!
313年7月5日金曜日
暗号や復号について
OpenSSLが組み込まれている• EVT_*というC関数コールがあるが、deprecatedになっている• サポートしている暗号化方式が古く、AESがどうもないみたい• APIがコロコロ変わるのでサポートしたくないらしいCommon Crypto• Leopard、iOS 5以降で利用可能• ローレベルのAPIを提供する• つまり、SecTransformが上位層となるCryptographic Message Syntax Services• S/MIME向けとあるが、そんなに上位層な感じはしない
413年7月5日金曜日
Common Cryptoによる暗号化と復号
513年7月5日金曜日
Common CryptoのAPI準備• #include <CommonCrypto/CommonCryptor.h>、フレームワークは不要
初期化• CCCryptorCreate関数でCCCryptorRefを取得• このときにキーや初期化ベクタ、暗号化方式を指定
データ変換• CCCryptorUpdate関数を繰り返し呼び出す• バッファを確保してうんぬん…なので、K&R Cっぽく書くことに
後処理• 全データを処理後、CCCryptorFinalを呼び、残りを取り出す• CCCryptorReleaseで、CCCryptorRef構造体を解放
要するに• OpenSSLのEVT_*関連APIとほぼ同じ• ブロッキング不要なら1コールで暗号復号可能
613年7月5日金曜日
情報はどこにあるのか?
manはないけど、developerサイトにLionのmanがある
713年7月5日金曜日
はまりどころ
サンプルコード• CryptoExerciseというのがDeveloperサイトにある• SecKeyWrapperクラスのdoCipher:メソッドApple以外のサイトでは• いくつかのブログや、StackOverflowを見ればサンプルはあるはまったところ• なぜか、別スレッドで動いてくれない• manではスレッドをまたがなければOKとはなっているが…• パディングに気をつけよう
813年7月5日金曜日
SecTransferによる暗号復号
913年7月5日金曜日
SecTransformの利用方法
準備• フレームワークの追加、ヘッダ追加は必要なし初期化• SecKeyCreateFromDataで、キーのオブジェクトを作成• SecEncryptTransformCreateで、トランスフォームを準備• 必要なら属性をSecTransformSetAttributeで追加設定実行• SecTransformExecuteを呼び出すだけ。非同期実行もあるその他• 複数のトランスフォームをつなげて処理ができる• ファイル入力というトランスフォームもある
1013年7月5日金曜日
すべてがバラ色ではない
用意されているトランスフォーム• SecDecodeTransform.h• SecDigestTransform.h• SecEncodeTransform.h• SecEncryptTransform.h• SecSignVerifyTransform.h• SecTransformReadTransform.hLion以降、iOSは非対応• iOSでサポートがあるのは、SecKeyEncrypt、 SecKeyDecryptなどの一部の関数のみ
出力するというトランスフォームがない• ファイルの内容をそのまま暗号化してファイルに保存は無理?• 自分でトランスフォームが書けるとは言え…
1113年7月5日金曜日
まとめ
CommonCrypto• ちょっと大変だが、ともかく使えるSecTransfer• 今後に期待
1213年7月5日金曜日