アカウントとクレデンシャルと管理の構造

bitbucket 2022 (2) - (新) 檜山正幸のキマイラ飼育記 メモ編 から気付いたこと、考えたこと。

内容:

アプリパスワード

bitbucketは「アプリパスワード〈App password〉」という用語を使っているが、例によって、以下のような用語は、乱用・誤用・拡大解釈・オレオレ解釈・造語されて錯綜している。

  • パスワード
  • パスフレーズ
  • アクセストークン
  • アクセスキー
  • APIキー
  • APIトークン
  • SSHキー
  • アカウントキー
  • アプリパスワード
  • セキュリティトークン(ブロックチェーン)
  • クレデンシャル
  • クレデンシャルマネージャ

アクセストークンがクッキーで保存するデータであるとき、ID+パスワード(識別子+クレデンシャル)のユーザー代理データで初めに認証して、その後使う簡易的クレデンシャルが“アクセストークン”と考えられる。

bitbucketのアプリパスワードも、一種のアクセストークンなのだろう。クッキーの場合と違うのは:

  1. アクセストークン発行者が、サービスではなくて、bitbucketユーザー。
  2. 暗黙に自動的にアクセストークンの発行と管理が行われわけではなくて、ユーザーが明示的に行う。
  3. 発行したアクセストークン〈アプリパスワード〉の用途はユーザーが決める。
  4. アクセストークン〈アプリパスワード〉による認証を実行するのはbitbucket。

bitbucketが「アプリパスワード」と呼んでいるのは、いわゆる「APIキー」的なイメージだろう。Web APIプロバイダー(提供事業者)はAPIキーを発行するが、bitbucketからの git clone などはWeb APIと解釈できる。git clone の実行者が人間とは限らずソフトウェアかも知れない。利用主体(人間またはソフトウェア)の(広義の)クレデンシャルが「アプリパスワード」ということだろう。

となると、bitbucketアカウントのユーザーは、認証データ(広義のクレデンシャル)の発行権限を持つことになる。行動主体〈エージェント〉の役割や権限の構造がさらに複雑化する。bitbucketユーザーは次の権限を持つ。

  • “認証を必要とするサービスの利用権限”の認証データ〈クレデンシャル〉を発行する権限

gitのクレデンシャルヘルパー

発行されたbitbucketアプリパスワードの、gitにおける利用法だが、通常のパスワードと同じで、「ユーザーID(僕なら m_hiyama)+生成したアプリパスワード」でgitの認証がされる。Web APIの利用者側アクセス(↓ Parse.comとMailGunを普通のWebサイトのバックエンドとして使ってみる - 檜山正幸のキマイラ飼育記 (はてなBlog) より)と類似なのだろう。

#!/bin/sh
# test-cloud-sendTestMailsh
curl -v -X POST \
 -H "X-Parse-Application-Id: ${PARSE_APPLICATION_ID}" \
 -H "X-Parse-REST-API-Key: ${PARSE_REST_API_KEY}" \
 -H "Content-Type: application/json" \
 -d '{}' \
 https://api.parse.com/1/functions/sendTestMail

問題は、40文字弱のランダム英数字文字列であるアプリパスワードをどうやって覚えるか? -- この問題を考えると、クレデンシャルの分類にも疑問点が出てくる。

  • What-You-Know方式と、What-You-Have方式の違いは何? パスワードも紙やファイルに書けば所持物(I-Have XXX)になる。
  • 公開キーやフィンガープリントをクレデンシャルと考えて、覚えている人がいたら、それは記憶物(I-Know XXX)となる。
  • 生体認証(What-You-Are)は生物個体にしか通用しない。法人、組織、ソフトウェアには適用できない。

生物個体と抽象的エージェントの認証は区別して考えたほうがいいと思う。また、記憶と所持の境界線はとても曖昧。非生物個体が使えるクレデンシャルは、何らかのデジタルデータに限られる。

そのクレデンシャルであるデジタルデータの保存管理を行うのが git のクレデンシャルヘルパー。ここでややこしのが:

  • 広義のクレデンシャルマネージャ = クレデンシャルヘルパー = ヘルパー
  • 狭義のクレデンシャルマネージャ = クレデンシャルマネージャ・ソフトウェア

クレデンシャルであるデジタルデータの保存管理方式は:

  • ファイルシステム内の生のファイルに保存
  • ソフトウェアが(背後に持つ何らかの)ストレージに保存、管理はソフトウェア

ソフトウェアのストレージもファイルだろうが、ユーザーから不可視と考えられる。git で利用可能な“クレデンシャルであるデジタルデータの保存管理方式”=ヘルパー は:

  1. テキストファイル
  2. ソケットファイル(同一ホスト内でプロセス同士が通信に用いる特殊なファイル)
  3. キーチェーン
  4. 認証情報マネージャ(ソフトウェア)

認証情報マネージャの識別ラベル(Windowsの場合)は:

  1. wincred
  2. manager (固有名詞は Git Credential Manager for Windows)
  3. manager-core (固有名詞は Git Credential Manager (GCM))

クレデンシャルマネージャと言った場合の解釈が:

  1. 認証情報マネージャ・ソフトウェアの総称
  2. テキストファイルなども含めたクレデンシャルヘルパー=クレデンシャルであるデジタルデータの保存管理方式
  3. 特定固有のソフトウェアである Git Credential Manager for Windows や Git Credential Manager (GCM)

あー、ややこしい。

錯綜の要因

ダラダラ並べる。

  1. 認証と認可を区別してないことがある。
  2. 生物個体と抽象的エージェント(行動主体)を区別してないことがある。
  3. ひとつの自然人(生物個体)や法人に多数の抽象的エージェントが付随することがある。
  4. ひとつの抽象的エージェントに多数の自然人が付随することがある。
  5. 「パスワード」「キー」などの言葉の使い方が杜撰。キーが暗号鍵のときもあるし、キーバリュー・ストアのキーのときもあるし、単なる名前のことも。
  6. What-You-Know方式とWhat-You-Have方式の境界は極めて曖昧
  7. 認証を行う主体(認証局)とサービス提供主体(行動環境)が異なることがある。
  8. クレデンシャル(広義)の決定権限、発行権限と利用権限、認証実行者、それと管理責任者は区別すべき。
  9. 権限と責任(責務)の構造を明確化すべき。
  10. SSHの背景である公開鍵方式暗号は、暗号方式だが、鍵ペアの存在により認証構造とも関係する。
  11. よって、暗号方式と認証構造が混同されがち。
  12. 暗号は通信経路の安全性(気密性)や、ストレージの安全性(気密性)に関するテクノロジー、認証構造とは切り離せる。
  13. 保存と転送、要求と許可、権限と責任、状態遷移などの数学的構造があるといい。そうでないと、クリアな記述・コミュニケーション・議論ができない。


追記

APIのOAuthアクセストークンに関する説明:

タイトル通り分かりやすい。スライドでの説明を何度もした成果・賜物だろう。

Windowsのおける「資格情報マネージャー」は、「コントロールパネル→ユーザーアカウント→資格情報マネージャー」でアクセスできる。これが wincred の正体のようだ。

個人用アクセス トークン (PAT) については: