Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Common Cryptoを使っ
た共通 の暗号と復号
Masayuki Nii
nii@msyk.net
Cocoa Study #60
July 6, 2013
13年7月5日金曜日

1
Agenda

OS X/iOSの暗号関連フレームワーク
Common Cryptoを使う
SecTransferを使う

13年7月5日金曜日

2
Developer文書をひもとく
Security Starting Point

•
•
•

認証認可、暗号化、コードのセキュリティ
Common Cryptoについては、CC_crypto(3cc)のmanを参照
リンクすらなし。さらに、...
暗号や復号について
OpenSSLが組み込まれている

•
•
•

EVT_*というC関数コールがあるが、deprecatedになっている
サポートしている暗号化方式が古く、AESがどうもないみたい
APIがコロコロ変わるのでサポートしたくな...
Common Cryptoによる
暗号化と復号

13年7月5日金曜日

5
Common CryptoのAPI
準備

•

#include <CommonCrypto/CommonCryptor.h>、フレームワークは不要

初期化

•
•

CCCryptorCreate関数でCCCryptorRefを取得
こ...
情報はどこにあるのか?
manはないけど、developerサイトにLionのmanがある

13年7月5日金曜日

7
はまりどころ

サンプルコード

•
•

CryptoExerciseというのがDeveloperサイトにある
SecKeyWrapperクラスのdoCipher:メソッド

Apple以外のサイトでは

•

いくつかのブログや、Stack...
SecTransferによる暗号復号

13年7月5日金曜日

9
SecTransformの利用方法
準備

•

フレームワークの追加、ヘッダ追加は必要なし

初期化

•
•
•

SecKeyCreateFromDataで、キーのオブジェクトを作成
SecEncryptTransformCreateで、...
すべてがバラ色ではない
用意されているトランスフォーム

•
•
•
•
•
•

SecDecodeTransform.h
SecDigestTransform.h
SecEncodeTransform.h
SecEncryptTransfo...
まとめ

CommonCrypto

•

ちょっと大変だが、ともかく使える

SecTransfer

•

13年7月5日金曜日

今後に期待

12
Upcoming SlideShare
Loading in …5
×

Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号

1,913 views

Published on

Cocoa勉強会#60
2013/7/6
Common Cryptoを使った共通鍵の暗号と復号
新居雅行

Published in: Technology
  • Be the first to comment

Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号

  1. 1. Common Cryptoを使っ た共通 の暗号と復号 Masayuki Nii nii@msyk.net Cocoa Study #60 July 6, 2013 13年7月5日金曜日 1
  2. 2. Agenda OS X/iOSの暗号関連フレームワーク Common Cryptoを使う SecTransferを使う 13年7月5日金曜日 2
  3. 3. 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. • • • • 13年7月5日金曜日 CベースのAPI(つまりCore Foundationっぽい感じ) 暗号やBase64などのエンコード関連、署名などを簡単にできる 「トランスフォーム」をつなげてまとめて処理ができる Grand Central Dispatch対応! 3
  4. 4. 暗号や復号について OpenSSLが組み込まれている • • • EVT_*というC関数コールがあるが、deprecatedになっている サポートしている暗号化方式が古く、AESがどうもないみたい APIがコロコロ変わるのでサポートしたくないらしい Common Crypto • • • Leopard、iOS 5以降で利用可能 ローレベルのAPIを提供する つまり、SecTransformが上位層となる Cryptographic Message Syntax Services • 13年7月5日金曜日 S/MIME向けとあるが、そんなに上位層な感じはしない 4
  5. 5. Common Cryptoによる 暗号化と復号 13年7月5日金曜日 5
  6. 6. Common CryptoのAPI 準備 • #include <CommonCrypto/CommonCryptor.h>、フレームワークは不要 初期化 • • CCCryptorCreate関数でCCCryptorRefを取得 このときにキーや初期化ベクタ、暗号化方式を指定 データ変換 • • CCCryptorUpdate関数を繰り返し呼び出す バッファを確保してうんぬん…なので、K&R Cっぽく書くことに 後処理 • • 全データを処理後、CCCryptorFinalを呼び、残りを取り出す CCCryptorReleaseで、CCCryptorRef構造体を解放 要するに • • 13年7月5日金曜日 OpenSSLのEVT_*関連APIとほぼ同じ ブロッキング不要なら1コールで暗号復号可能 6
  7. 7. 情報はどこにあるのか? manはないけど、developerサイトにLionのmanがある 13年7月5日金曜日 7
  8. 8. はまりどころ サンプルコード • • CryptoExerciseというのがDeveloperサイトにある SecKeyWrapperクラスのdoCipher:メソッド Apple以外のサイトでは • いくつかのブログや、StackOverflowを見ればサンプルはある はまったところ • • • 13年7月5日金曜日 なぜか、別スレッドで動いてくれない manではスレッドをまたがなければOKとはなっているが… パディングに気をつけよう 8
  9. 9. SecTransferによる暗号復号 13年7月5日金曜日 9
  10. 10. SecTransformの利用方法 準備 • フレームワークの追加、ヘッダ追加は必要なし 初期化 • • • SecKeyCreateFromDataで、キーのオブジェクトを作成 SecEncryptTransformCreateで、トランスフォームを準備 必要なら属性をSecTransformSetAttributeで追加設定 実行 • SecTransformExecuteを呼び出すだけ。非同期実行もある その他 • • 13年7月5日金曜日 複数のトランスフォームをつなげて処理ができる ファイル入力というトランスフォームもある 10
  11. 11. すべてがバラ色ではない 用意されているトランスフォーム • • • • • • SecDecodeTransform.h SecDigestTransform.h SecEncodeTransform.h SecEncryptTransform.h SecSignVerifyTransform.h SecTransformReadTransform.h Lion以降、iOSは非対応 • iOSでサポートがあるのは、SecKeyEncrypt、 SecKeyDecryptな どの一部の関数のみ 出力するというトランスフォームがない • • 13年7月5日金曜日 ファイルの内容をそのまま暗号化してファイルに保存は無理? 自分でトランスフォームが書けるとは言え… 11
  12. 12. まとめ CommonCrypto • ちょっと大変だが、ともかく使える SecTransfer • 13年7月5日金曜日 今後に期待 12

×