(前回)Cocoaの日々: Keychain Services 調査 (2) サンプルコードを読む
引き続き Keychain Services の話。今回はドキュメントを読む。
Mac Dev Center: Keychain Services Programming Guide: Introduction
ちと長いのでポイントをまとめつつ、少しづつ読み進める(なんか抄訳っぽくなったが)。
概要
Mac OS の場合
- keychain はセキュアなストレージ
- keychain はパスワードを暗号化して保持する
- keychain はロックを外さない限り、中身へアクセスすることができない
- keychain は複数作成できる。デフォルトは login.keychain
- login.keychain はログイン中は自動的にロックが外れる(unlocked)となる ※ただしログインパスワードと同じ場合
- API 操作で keychain 指定がない場合は login.keychain がデフォルトで使われる
- Keychain Services は Common Data Security Architecture (CSDA) の上に構築されている。このため、CSDAのプログラミングインターフェイスである CSSM の利用も可能 (*1)。
Security Forum - CDSA
CSDAは4階層から構成される。
1. Applications
2. Layered services and middleware
3. Common Security Services Manager (CSSM) infrastructure
4. Security Service Provider Modules
CSSMは上位レイヤー(1,2)に対してプログラミングインターフェイスを提供する。Keychain Services はレイヤー2 にあたるということか。
iPhone OS の場合
- アプリケーションは自身が作成した keychain 項目のみにアクセスできる
- ユーザは keychain のロックを外すパスワードを入力する必要がない
- keychain は一つだけ存在する
構成
イメージはこんな感じ。
[Keychain Services] |--login.keychain(デフォルト) | | | |-- keychain item 1 (data, attribute1, attribute2, ..) | |-- keychain item 2 (data, attribute1, attribute2, ..) | | : | |--keychain A | | | |-- keychain item 1 (data, attribute1, attribute2, ..) | |-- keychain item 2 (data, attribute1, attribute2, ..) | | : | |--keychain B | | | |-- keychain item 1 (data, attribute1, attribute2, ..) | |-- keychain item 2 (data, attribute1, attribute2, ..) | | : | |
Keychain Services
- 複数の keychain から構成される
keychain
- 複数の keychain item から構成される
keychain item
- data と複数の attribute から構成される
- data は暗号化することができる(例)パスワードや秘密鍵は暗号化する。証明書は暗号化しない
- データの種類を表す item class が定義されている(例)Internet passwords, generic passwords
- 暗号化された data へアクセスする場合にはロックを外す必要がある。この場合、ロックを外すために必要なパスワードを入力させる(おなじみの)ダイアログが表示される
- 各item は access object を持つ。access object には複数の access control list (ACL) が含まれる。
attribute
- 暗号化されない
- ロックされている時でも読みだすことができる
- - - -
続きは明日。