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,418 views

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,418
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

×