ページ

2010年2月27日土曜日

Keychain Services 調査 (3) ドキュメントを読む #1

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

(前回)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)。
(*1) Common Data Security Architecture (CSDA) は階層化されたセキュリティサービスと暗号化フレームワークを提供するアーキテクチャのこと。特定のベンダーに依存しないマルチプラットホームなアーキテクチャ。
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

  • 暗号化されない
  • ロックされている時でも読みだすことができる



- - - -
続きは明日。