ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

SNI(SN Infrastructure)コミュの[設計書]アーキテクチャ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
\chapter{アーキテクチャ}
\section{SNIの基本機能}

\ref{sec:TOHA}で既に述べたように、SNIの提供する基本機能は、

\begin{itemize}
\item 利用者認証
\item サービス連携
\item 利用者情報
\end{itemize}

である。

\section{SNIの構成要素}

SNIには以下の局(station)が存在する。

\begin{itemize}
\item {\bf ディレクトリ局} \\
利用者の情報を収容する
\item {\bf ポータル局} \\
利用者が各種サービスを利用する際の中心的な働きをする
\item {\bf サービス局} \\
実際のサービスを提供する
\end{itemize}

これらの局は、概念的なものであり、独立した機関及びハードウェアである必
要はない。また、{\bf ポータル局}は{\bf サービス局}の特殊なものである。

\section{局の信用}

SNIにおける各局は、運営者が自由に立てることができる。運用を開始するに
あたって、特別な手続きは不要である。このことが、SNIにおける(広義の)サー
ビスにおいて、多様な価値観を保証する。

しかし、そのような場合に問題となるのは、局の運用方針、およびその妥当性
の検証である。

SNIにおいて、各局の信用の裏付けになるものは、社会においての{\bf 身元保
証}あるいは{\bf 手形の裏書}にあたるものである。すなわち、ある局の{\bf
信用}は、それを保証する他の局との提携関係に従う。保証される局は、保証
する局と同じ程度の信頼性があるということが期待される。

ただし、このことは運用方針の絶対的妥当性とは、直接は関係がない。そもそ
も、SNIは絶対的妥当性という観点を持たない。そのため、局の提携関係は、
運用方針の一致を示すものに過ぎない。

\section{アプリケーションにおける基本機能と構成要素の働きの例}\label{sec:HATARAKI_REI}

以下では、基本機能を使って、実際のSNSの機能をいかに実現するかについて
説明すると共に、これらのものの働きを整理する。

\subsection{利用者の識別}

SNIにおける利用者とは、ディレクトリ局に情報のある者を言う。

利用者の識別は、利用者識別子より成り、利用者識別子はディレクトリ局の識
別子と個人の識別子より成る。

利用者の識別は、利用者の識別に過ぎず、実社会における同一性の保証を行う
か否かは、ディレクトリ局の運営方針に従う。無論、SNIにおいて単一性の保
証は行わない。

\subsection{利用者登録}

そのため、利用者登録は、ディレクトリ局に利用者情報を登録することにより
行われる。

ディレクトリ局への利用者情報登録にあたって、登録される情報の精度につい
ては、各ディレクトリ局の運営者の方針に従う。

\subsection{ログイン操作}

ログイン操作は、利用者の認証を行い、利用可能な状態にするものである。

ログイン操作は、以下の手順で行われる。

\begin{enumerate}
\item 利用者が{\bf ポータル局}にログイン要求を出す
\item {\bf ポータル局}は{\bf ディレクトリ局}に認証を要求する
\item {\bf ディレクトリ局}は認証結果および基本情報を{\bf ポータル局}に返す
\end{enumerate}

{\bf ポータル局}が{\bf ディレクトリ局}を固定していない場合、あるいは
{\bf ディレクトリ局}の指定を許す場合、利用者はログイン操作の際に{\bf
ディレクトリ局}の指定を行なう。

\subsection{利用者提携}

利用者提携は、利用者情報に提携先利用者の情報を追加することにより行なわ
れる。

利用者提携の要求は、

\begin{enumerate}
\item {\bf 利用者}が{\bf ポータル局}に{\bf 利用者提携要求}を出す
\item {\bf ポータル局}は利用者の{\bf ディレクトリ局}に{\bf 利用者提携要求}
を出す
\item {\bf 利用者}の{\bf ディレクトリ局}は{\bf 提携先利用者}の{\bf ディレクトリ
局}に{\bf 利用者提携要求}を出す
\item {\bf 提携先利用者}の{\bf ディレクトリ局}は、{\bf 結果の返答}をする
\item {\bf 利用者}の{\bf ディレクトリ局}は結果に従い処理を行う
\end{enumerate}

{\bf 結果の返答}の内容については、{\bf 提携先利用者}の{\bf ディレクト
リ局}の運営ポリシに従う。すなわち、提携に承認を要するかどうか、またそ
の内容については、運営方針に従う。

承認を要する場合は、

\begin{enumerate}
\item {\bf 利用者}が{\bf ポータル局}に{\bf 利用者提携要求}を出す
\item {\bf ポータル局}は利用者の{\bf ディレクトリ局}に{\bf 利用者提携要求}
を出す
\item {\bf 利用者}の{\bf ディレクトリ局}は{\bf 提携先利用者}の{\bf ディレクトリ
局}に{\bf 利用者提携要求}を出す
\item {\bf 提携先利用者}の{\bf ディレクトリ局}は、{\bf 提携先利用者}
に承認待ちの旨の情報を返す
\item {\bf 提携先利用者}の{\bf ディレクトリ局}は、{\bf 承認待ち}の返答をする
\item {\bf 利用者}の{\bf ディレクトリ局}は結果に従い処理を行う
\end{enumerate}

この際も、{\bf 利用者}の{\bf ディレクトリ局}がその結果をどう扱うかは、
当該{\bf ディレクトリ局}の運営方針に従う。

承認のための動作は、

\begin{enumerate}
\item {\bf 提携先利用者}が{\bf ディレクトリ局}から自分の情報を取得する
\item {\bf 提携先利用者}が{\bf 利用者提携要求}を見る
\item {\bf 提携先利用者}が{\bf ポータル局}で承認を指示する
\item {\bf ポータル局}は{\bf 提携先利用者}の{\bf ディレクトリ局}に
{\bf 承認}を出す
\item {\bf 提携先利用者}の{\bf ディレクトリ局}は承認処理を行う
\item {\bf 提携先利用者}の{\bf ディレクトリ局}は{\bf 利用者}の{\bf
ディレクトリ局}に{\bf 利用者提携承認}を出す
\item {\bf 利用者}の{\bf ディレクトリ局}は結果に従い処理を行う
\end{enumerate}

となる。

提携を行った際の、開示する情報の内容等は、ディレクトリ局の運営方針と利
用者の希望に従う。

\subsection{提携利用者一覧}

提携利用者の情報は、利用者のディレクトリ局に登録されている。

提携利用者一覧の取得には、

\begin{itemize}
\item {\bf ポータル局}が{\bf 利用者}の{\bf 提携利用者一覧}を取得する
\item {\bf ポータル局}は{\bf 提携利用者一覧}に従い、{\bf 提携利用者}
の情報を、{\bf 提携利用者}の情報を収容した{\bf ディレクトリ局}に要求
する
\item {\bf ポータル局}は取得した情報を利用者に提供する
\end{itemize}

\subsection{サービスの利用}

サービスの利用にあたっては、サービス局の承認が必要となる。この時、利用
者識別子の扱いは、サービス局の運営方針に従う。

すなわち、サービス局の運営方針に従い、特定のディレクトリ局に所属する利
用者からの要求を無視することや、特定のディレクトリ局に所属する利用者の
みを対象にすること、ディレクトリ局から提供される情報の内容(ディレクト
リ局の運営方針と利用者の希望に従う)をどう扱うかといったことについても、
サービス局の運営方針に従う。

サービス利用のための動作は、

\begin{enumerate}
\item {\bf 利用者}が{\bf サービス局}に利用要求を出す
\item {\bf サービス局}は{\bf 利用者}の{\bf ディレクトリ識別子}での判
断を行う
\item {\bf サービス局}は{\bf ディレクトリ局}に{\bf 利用者情報}の要求
を行う
\item {\bf サービス局}は{\bf ディレクトリ局}からの{\bf 利用者情報}の
内容に従い、判断を行う
\item {\bf サービス局}がサービスを提供する
\end{enumerate}

という手順により行われる。

サービスを提供するにあたって、精度の高い情報を要求する場合は、精度の高
い登録方針を持ったディレクトリ局に登録された利用者のみを対象にするとい
う方針にすることにより、認証の精度を期待できる。

また、このように、サービス提供にあたって運営の方針が決定できるため、
{\bf 複数アカウントによる問題}は問題となりえない。

\subsection{局の認証}

局の信用は、その保証を行う他の局の信用に依拠する。そのため、ある局の信
用情報を得るためには、その局と保証関係にある局との保証関係の正当性を検
証することになる。

保証関係の検証は、

\begin{enumerate}
\item ある局の信用元リストを要求する
\item リストに従い、信用元の保証を問い合わせる
\end{enumerate}

という手順により行われる。

\section{各局の機能のまとめ}

\ref{sec:HATARAKI_REI}のようなことから、各局の動作を次節以下のように定
義する。

\subsection{各局共通}

全ての局は、

\begin{itemize}
\item 信用元リスト
\item 保証状態
\end{itemize}

の返答が実行できることが期待される。ただし、これらの機能を有さない場合
は、実行しなくても良いが、その場合は{\bf 情報なし}と等価となる。

\subsection{ディレクトリ局}

ディレクトリ局は、

\begin{itemize}
\item 利用者認証
\item 使用者情報の提供
\item 利用者情報の更新
\item 利用者提携処理
\end{itemize}

の処理が実行できなければならない。

要求される具体的な情報項目については、問い合わせの時に指定される。要求
された情報が自局にない場合は、

\begin{itemize}
\item 情報なし
\item 再帰問い合わせ指定がある場合は、再帰問い合わせを行う
\end{itemize}

のいずれかとなる。また、要求された情報が利用者または局の運用方針により
秘匿されている場合は、

\begin{itemize}
\item 情報なし
\end{itemize}

を返答する。

更新はこれとは逆向きとなる。再帰問い合わせ指定があれば、実際の情報を保
持している局の情報を更新する。

コメント(18)

サービス局やディレクトリ局や認証局は無限に存在するという前提で考えればいいのでしょうか?

「俺様の、俺様による、俺様のためのサービス」から高度な社会性を要求される集団を束ねる物まで無限の境界線が存在するということも含めて。

そこが明確にならないと、「実装に実社会の権威付けが伴い、それで優劣が決まる」と言う問題が出てきそうな。表現が難しいのですが。

# 非常に形而上的な言い回しを使ってるような気がします
# が、今回のSNIで「どういう社会の実装」を行うか。と言う
# 根本的な所を問うているので、ご勘弁を。
そうです。無限に存在します。

みんなが「SNS」として見ているのは、SNI上ではポータル局とサービス局なんです。これが実社会に追いては、「道路」と「お店」みたいなものかと。「道路」や「お店」がいくつあっても構わないし、その方針はいろいろでしょ。

みんな勝手にやるのは構わないけど、それらって結局「好み」やら「市場原理」やらで選別される。それが「権威付け」なのです。
ならばなおさら非常に面白い試みだと思います。
今まで、社会の断片をモデリングしてサービスやポータルとして提供する試みは数多くあったけど、社会や社会の集合足る世界の存在自体をフレームワーク的な物としてモデリングしてネット上に構築しようというのはやれそうで誰も?やらなかった領域の話ですから。

どっちにしても技術的スキルだけでなく、社会学的なアプローチも同時に要求されることになりますね。

これは私のような無能な人間でも十分コミットできそうな…楽しいですね。
この章、改訂しました。まだ途中だけど。

コミュで挙がっていたいくつかの疑問点にも答えたつもりです。

どうやって更新しようかと思ったけど、トピックの文章の方を書き替えました。やっぱりそろそろweb化でもしないといけないかな。
今のうちはいいけど違いがわからなくなるので、CVSやSVNとかのように履歴管理出来るのでドキュメント管理した方がいいかも知れませんね。(って既にやっていたらすみません)

>{\bf ポータル局}が{\bf ディレクトリ局}を固定していない場合、あるいは
{>\bf ディレクトリ局}の指定を許す場合、利用者はログイン操作の際に{\bf
>ディレクトリ局}の指定を行なう。

これだと実装によっては詐称の危険が出るような。
ポータル局にログインするいう事は個人識別のHASH鍵のような一意な物を渡すことと定義し、認証とは

1.ポータル局は基幹ディレクトリ局(もしくはROUTING局)にユーザ鍵と指定IDのディレクトリ局が予め登録されているかどうかを問い合わせる
2.基幹ディレクトリ極は鍵と指定ディレクトリ局IDの組合せを審査し、実際のディレクトリ局へのアクセスルートを返答する。審査で妥当でないと審査した場合、紹介不可を返答する
3a.紹介不可の返答を受けた場合、ポータル局は別の提携基幹ディレクトリ局に問い合わせなおす。全ての基幹ディレクトリ局から照会不可が返答された場合、ログインは成立しない。
3b.紹介の返答を受けた場合、ポータル局は該当ディレクトリ局に接続し、ユーザ鍵と実際の照会個人情報を送信する
4.ディレクトリ局は鍵照合の上で個人情報を提出する。


程度の慎重さは必要かと。
後、個人識別情報=一つしか存在しない暗号化HASH鍵とパスフレーズか何か。などと言う定義を今のうちにしておくのは必要かと。

従来のBASIC認証やそれに地階モデルではリスキー過ぎるし、個人識別情報の重複が激しくなることが予想されるので。

後は、携帯や鍵をおくれない環境(職場とかネットカフェとか)とかからアクセスする場合のアクセス手順を別途実装できるようにする位の懐の広さは必要になるかもしれませんね。
SNIのプロトコルと個人識別の用件を満たすならば自由な実装ができる。程度の一言でいいから、明言しておくことは必要だと思う。
実際の実装によってはここまでややこしい認証作業は不要かもしれません。
暗号鍵+HASH/ID認証を使用するならば、実ディレクトリ局とポータル局で最初から認証できるかも。

ややこしく考えすぎたかも、すんまでん(^^;
くどいようですが、暗号技術を使うかどうかは、「選択肢」に過ぎないと考えてます。「たかが2ちゃん」みたいなところを使うために、SSLも馬鹿げているでしょう。

そもそも、鍵処理をうまく一般的なブラウザできるのかな? 確かに利用者と局の間で暗号技術が使えると、非常に楽になるのですが。

別の考えで言えば、暗号技術に全てを依存してしまうと、何かの転みで「秘密鍵」が流出してしまった時、その被害は尽大になります。むしろ、暗号技術を使わない(暗号系の安全性に依存しない)という前提でのシステム設計を行うべきだと考えています。
>くどいようですが、暗号技術を使うかどうかは、
>「選択肢」に過ぎないと考えてます。「たかが2ちゃん」
>みたいなところを使うために、SSLも馬鹿げているでしょう。
(snip)

私が言いたいのは個人認証に暗号技術の副産物であるHASH技術を使うことで個人詐称を防ぐと同時に個人情報のやりとりをあんぜんにやろうという事です。

サービス局と個人とのやりとりには暗号化は基本的に必要ないと想いますが、サービス局とディレクトリ局の間や個人と局のやりとりは暗号鍵の副産物であるHASH IDを基軸とする認証にしたらどうでしょうね。って事です。

# 実装上は個人がHASH IDを意識しない実装をやればいいと想うので…個人ーディレクトリ局はHASH IDなどの認証情報を記述した鍵ファイルとパスフレーズか何かのやりとり(通常はBASIC認証で事足りる?)、個人ーサービス局はBASIC認証にみせかけるような感じで。

逆に言うと、個人ーディレクトリ局とディレクトリ局ーサービス局で個人情報をやりとりする場合は使い捨ての鍵で事足りる程度にしか考えていなかったのですが。

モデリングに違いがあるようですが、個人がサービス局のサービスを受ける場合には基本的に平文のやりとりでだいじょうぶだと想います。
個人がディレクトリ局に個人情報のアップデートをする時の認証段階だけは暗号は必要だとは想いますが、HASH鍵自体に適切な処理がされていれば、通常は暗号経路は必要ないでしょう。
とにかくHASHとディレクトリ局への問い合わせを基軸にした個人証明が出来れば殆どのサービスを個人がセキュアに受けることが出来るという考えなのですが。

# ディレクトリ局の階層とサービス局の階層と個人の階層は
# まったく別の次元で、その間の個人特定をHASHを基軸と
# する認証技術が結ぶという考え
# を提示してみたつもりですが、間違っていたのでしょうか?
個人の顔が見える(仮面であっても)サービス…コミュニケーションだと昔のパソ通やmixiなど…はSNIにある必然が出ると想いますが2ちゃんみたいな顔見せは重要では無いサービスはSNIにある必要もない(逆にあってはいけないという必然もない)と想うのですが。
2ちゃんの類で個人認証が必要になるというのは特別な場合では…そういうサービスへのポインタをSNIのどっかが持っているのは悪いことではないとおもうけど、SNIの外の存在であっても何らおかしくない。
書き込みなどの付帯情報の通信経路と個人情報のような核心情報の通信経路はまったく別だと想いますが。
局間は暗号技術を使うことになるかと思います。
「いらない」って選択もあるとは思いますが。

局間は、どうとでもなるんですよ。「クライアント」は実装できるから。ところが、ユーザと局の間はあまり複雑な手順は実装できない。なるべくなら、「プラグイン」の類も入れたくない。
サービス局のUIや中身の実装はサービス局に任せればいいと思います(もちろんHTTPゲートウェイか何かでのリファレンス実装は必要だけど)

ディレクトリ局などとユーザの間で生の個人情報をやりとりする必要があるときにはUIとしてはHTTPゲートウェイとかSMTPゲートウェイなどを局側につけてやればとりあえずはいいのではないでしょうかね。

そのような情報の個人-局間のやりとりにレスポンスは余り重要じゃないと思いますし、暗号化が必要な情報はSSLでやって鍵を送るのにHTTPやアドインプログラムが使えない場合はメールなどを使って鍵を更新すればいいのだし。

社会契約概念や社会構造概念としてのSNIとSNI自体の実装、特にUI部分の実装はまったく別の次元で議論した方が考えとしてすっきりすると思うのですが…UI実装の多様性は担保した方がいいと思いますが。それはそれ、SNIの考えとは分離しないと議論が混乱するような。
単に認証結果としてのチケッティングがポータル局/サービス局で認識できれば十分ではないでしょうかね... それに hash を使おうが 通信全体を暗号化しようが二義的な問題の気がするです

# hash が暗号技術の副産物であるというのはちょっと違和感ありですが...
> サービス局のUIや中身の実装はサービス局に任せればいいと思います

UIはね。だけど、ディレクトリ局からの情報の取得と、それに関わる認証とかの問題は、なかなか悩ましいです。

悪意のサービス局が「チケット」使って、ディレクトリ情報を引き出すとか、「パスワード集め」をするとか。そういったことに対応しておかないといけないのです。

今考えているのは、「信用のおけないところ用には、信用のおけないところ用のディレクトリを使ってサービスを受けて、万一悪用されても危険は最小限にする」という方法かな。
本質では無いのですが,ちょっと気になったので...

「利用者提携」について,「概要」編では

 基本機能としては提供しない

とありますが,この「アーキテクチャ」編を読んでいると,
\section{各局の機能のまとめ}(おっと,ラベルが付いてない)で,

 ディレクトリ局で実行されなければならい

と言うことになってますね.これだと,基本機能と応用機能
の線引きがイマイチ分からない感じがします.

利用者提携処理には「認証」的な事も絡んでくると思うので,
「概要」編の方で,「利用者提携」も基本機能としてとらえて
おいてはどうでしょうか?

# って,概要のトピックで提案すべきだったかな?
「提携」そのものを提供しない、あるいは「提携」をどう考えるかについて直接定義しないという意味です。

ディレクトリ局では「「提携」という情報の管理」だけを行うと。

って、でも明確じゃないなぁ。書き直そう。
「自分の姿」って、自分がどんなところにいるかによって、いろいろだと思うわけです。そして、「自分の姿」を直接見せる場が、SNIで言うところに「サービス局」ね。

じゃー、「自分の姿」と同じように「他人の姿」も「場」によって異るものとなっても不思議はない... のではないかなぁと考えます。
\subsection{サービス局}

サービス局は、サービスの提供を行う。サービス提供の可否、レベルといった
ものは、利用者情報をディレクトリ局に問い合わせることによって判断する。

サービス局がディレクトリ局に情報問い合わせを行う場合、ディレクトリ局の
運営方針とサービス局との信頼関係により、提供の可否が決定される。

\subsection{ポータル局}

サービス局のうち、ポータル機能を有するものがポータル局である。ポータル
機能とは、

\begin{itemize}
\item 利用者の認証
\item 利用者の諸情報の表示
\item 利用者の諸情報の変更
\end{itemize}

である。

利用者の認証の手段については、利用者とポータル局との事前の取り決めた方
法を用いる。ポータル局は利用者が指定したディレクトリ局の情報を用いて認
証を行なう。
-------------------------------------------------------

しかし、シングルサインオンはどうやったら実現できるのだろう...

ログインすると、残り1件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

SNI(SN Infrastructure) 更新情報

SNI(SN Infrastructure)のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング