SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
mod_auth_ticket による
サーバ丸ごと SSO 化と
lighttpd モジュール作成体験




          @tyamadajp
lighttpd とは
            apache   nginx   lighttpd   thttpd
 稼動に必要な
メモリやリソース     △        ○        ○         ◎
    機能や
モジュール資産      ◎       ○++       ○         △
おおまかな性能
 (条件による)     △        ◎        ○         ○
 非サーバー的
  使いやすさ      ×        ×        ×         ○
モジュール開発
  API 充実度    ○        ○        △         ×
モジュール間の
     連携      ○        ○        △         ×
モジュール追加
    容易性      ○        △        ○         ×
開発の活発度       ◎        ○        △         ×
こんな状況に最適
●   マシンリソースは節約したい
●
    そこそこ性能と機能は欲しい
●   自分で拡張したい
●   後からモジュール構成を
    ちょこちょこいじりたい

普通のサーバーでも
使えますが、こういう               HP t5730
シンクライアント転用の
自宅サーバーで使用中


                    Wyse S90
mod_auth_ticket
●   OpenID などの SSO でサーバ全体を保護する
●
    各種アプリでの対応は不要
    (ユーザ管理をどうするかにより若干手を入れる必要はある)


                                    IdP


           mod_auth_ticket
                              認
        静的ファイル                証
              アプリ1 /PHP       ブ
                              リ
        アプリ2 /Perl            ッ
                              ジ
              アプリ3 /Ruby     (RP)
mod_auth_ticket
●   OpenID などの SSO でサーバ全体を保護する
●
    各種アプリでの対応は不要
    (ユーザ管理をどうするかにより若干手を入れることもある)

           RP 発行の
           トークンの                      IdP
           破棄・更新



ベーシック      mod_auth_ticket
認証相当に                         認
見せかける   静的ファイル                証     各種 SSO 結果を
              アプリ1 /PHP       ブ     m_a_t の対応形式で
                              リ     暗号化・署名して
        アプリ2 /Perl            ッ     保護ページに再度
                              ジ
              アプリ3 /Ruby     (RP)
                                    リダイレクト
メリットとデメリット
メリット
●
  どんなコンテンツ・ SSO 方式にも容易に対応
● 特別な設定なしにログにユーザ別の履歴が残る


● サーバ内アプリ間移動で再認証が不要で高速


● 対ユーザは Form 認証、対アプリは Basic 認証と


  UI 構成や開発が楽な方向で見せかけられる

デメリット
● サーバの管理権限が必要


● その SSO 方式に対応済のアプリと干渉する


 (そのアプリについては外さないと無駄な再認証が起きたり)
設定例(と lighttpd の応用)
$HTTP["url"] =~ "^/login/" {
  setenv.add-environment = (    RP の設定
    "MAT_NAME" => mat_name,
    "MAT_KEY" => mat_key
  )
}
else $HTTP["url"] =~ "^/" {     m_a_t の設定
  auth-ticket.loglevel = 255
  auth-ticket.override = 2
  auth-ticket.timeout = 3600
  auth-ticket.name     = mat_name
  auth-ticket.key      = mat_key
  auth-ticket.options = "path=/; httponly;"
  auth-ticket.authurl = "/login/"
}
設定例(と lighttpd の応用)
$HTTP["url"] =~ "^/login/" {
  setenv.add-environment = (
    "MAT_NAME" => mat_name,
    "MAT_KEY" => mat_key
  )
}                              暗号化      IdP
else $HTTP["url"] =~ "^/" {     ・
                                署名
  auth-ticket.name = mat_name
  auth-ticket.key = mat_key
}
ベーシック          mod_auth_ticket
認証相当に                           認
見せかける   静的ファイル                  証     各種 SSO 結果を
常に m_a_t と RP の アプリ1 /PHP       ブ     m_a_t 指定の形式で
                                リ     暗号化・署名して
キー情報が一致する
       アプリ2 /Perl               ッ
                                ジ
                                      保護ページに再度
必要がある          アプリ3 /Ruby      (RP)
                                      リダイレクト
設定例(と lighttpd の応用)
# generate "var.mac_name" and "var.mac_key"
include_shell "/.../lighttpd-make-mat-key.sh"

$HTTP["url"] =~ "^/login/" {
・・・以下先程の設定・・・
$ cat lighttpd-make-mat-key.sh
#!/bin/sh
md=$(dd if=/dev/urandom bs=1 count=16|md5sum)
set -- $md
                       ロード時にコマンドを
cat <<EOF              実行して、その結果を
var.mat_name = "CHID" 設定として取り込める。
var.mat_key = "$1"     これで毎回変わる(※)
EOF                    共通キーを自動生成
※ マシン起動時は同じになる問題が…
まとめ(1)
●   アプリ/コンテンツ関係なしにサーバ全体を
    SSO 認証下に置く mod_auth_ticket を作ってみた
●   複数アプリ雑居サーバの認証管理に便利
●   今のところ GoogleAccount でテスト(実利用中)
    → 他の SSO 方式にも RP ページ1枚で対応
●   lighttpd は旬を過ぎた感もあるけど便利

公開中&今後の予定
●   https://github.com/tai/mod-auth-ticket-for-lighttpd
●   互換モジュールを apache に移植するかも…
lighttpd モジュールの作り方
int
mod_auth_ticket_plugin_init(plugin *p) {
  p->name = buffer_init_string("auth_ticket")
  p->version          = LIGHTTPD_VERSION_ID;
  p->init             = module_init;
  p->set_defaults     = module_set_defaults;
  p->cleanup          = module_free;
  p->handle_uri_clean = module_uri_handler;
  p->data             = NULL;
             init で初期化、
  return 0; set_defaults で設定を読み込み、
}            h_u_c で設定に基づいて処理して、
             cleanup で終了処理
      Apache や nginx に比べてシンプル(やや機能は↓)
lighttpd モジュールのデータ構造
init で生成し、以後受け渡されてゆくデータ構造

typedef struct {         lighttpd.conf 内の {}
  PLUGIN_DATA;           コンテキスト毎に生成
                         される p_c のリスト
  plugin_config **config;
  plugin_config   conf;   上のコンテキスト別の
                          設定を合成し、「今の
                         実行コンテキストで
  array *users;          有効になっている」設定
} plugin_data;
※ 上は m_a_t の場合
                   具体的な plugin_config の中身は
                   モジュール毎に自由。 p_c は
                   コンテキスト毎に生成されるので
                   コンテキストに因らない情報なら
                   plugin_data に直接収容できる
モジュール作成での比較
                 apache          nginx            lighttpd
 マルチプロトコル
対応 / フック多様性        ○               ○                ×
     メモリ管理
               階層型プール        階層型プール             単一バッファ
               ap_*(p, ...) ngx_p*(p, ...)     buffer_*(...)
                           ngx_buf_t,
              libapr 参照    ngx_array_t,       buffer, array,
                           ngx_list_t,        stream 位?
   提供される      汎用のものも
データ構造や API    HTTP 特有のも、 ngx_hash_t,
                           ngx_rbtree_t,      とにかく少ない
              充実度は nginx
              と apache は同格 ngx_url_t,         &未整理な感じ
                           ... 他多数
 ステージ粒度や
モジュール連携の       かなり細かい         かなり細かい             やや粗目
     柔軟性
                               ./configure    Makefile.am 編集で
   モジュールの        apxs で                       一括ビルド or
      ビルド                     --add-module=
                外部ビルド          で静的リンク
                                              同一ビルドオプションで
                                              外部ビルド
まとめ( 2 )
●   まとめてみると… lighttpd は手間かかる orz
●
    apache 最強。しかし nginx もよく考えられてる
●   nginx に DSO をロードするモジュールを
    静的リンクしておくと幸せになれる気がしてきた
困っていること
平文で送る mod_auth_cookie より
安全だが、 RP<->m_a_t の連携が
どの程度安全か実は図りかねてる

                                       IdP

                              ココ
ベーシック       mod_auth_ticket
認証相当に                          認
見せかける   静的ファイル                 証     各種 SSO 結果を
              アプリ1 /PHP        ブ     m_a_t 指定の形式で
                               リ     暗号化・署名して
        アプリ2 /Perl             ッ     保護ページに再度
                               ジ
              アプリ3 /Ruby      (RP)
                                     リダイレクト
何をやっているか
●   in→out の転送時に平文のままは NG
●
    幸い、長さが短いので擬似乱数列と XOR している
●   しかし、毎回同じだとモロバレ
●   そこで、時刻 t を salt に使って乱数列を捻る
●   更に、同時刻でも in が違えば out が異なるよう
    直前バイトとも XOR      out(= 暗号化した状態)
                                  in(= 認証結果の情報 )
         mod_auth_ticket

                            認
     静的ファイル                 証
           アプリ1 /PHP        ブ
                            リ
     アプリ2 /Perl             ッ
                            ジ
           アプリ3 /Ruby      (RP)
安全?な受け渡し(1)
function   make_cookie($key, $data) {
  $now =   time();
  $now =   $now - $now % 5; # 5秒毎にキー変更
  $tmp =   md5($now . $key, TRUE);

    $enc = bin2hex(
      encrypt($data,$tmp,strlen($tmp)));# 暗号化
    $sig = md5($key . $now . $enc);      # 署名
    return "crypt:" . $sig . ":" . $enc;
}
安全?な受け渡し(2)
# 要は buf[i] = rand[i] ^ buf[i] ^ buf[i-1]
function encrypt($buf, $key, $keylen) {
  $n = strlen($buf);
  for ($i = 0; $i < $n; $i++) {
    $c = ord($buf[$i]); #IV=0 なのが微妙↓
    $c ^= ($i > 0 ? ord($buf[$i - 1]) : 0)
                  ^ ord($key[$i % $keylen]);
    $buf[$i] = chr($c);
  }
  return $buf;
}
まとめ( 3 )
●   お遊びサーバならいいが…
●
    こういうやつの「安全性」の評価方法は?
●   乱数列 +XOR 自体は安全、でも…
    ● それに時刻(=絞り込み可能)を加えたら?

    ● それを MD5 したら? MD5(rand) の乱数性は?


    ● IV=0 で折り畳み XOR した時の脆弱度は?


       – 既知平文攻撃でアウトか…


    先生、もっと知識(&想像力)が欲しいです…


           ※ そういうわけで、コメント大歓迎

Weitere ähnliche Inhalte

Was ist angesagt?

C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介yohhoy
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレするAkihiro Kuwano
 
カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明Masakazu Matsushita
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualYasuhiro Matsuo
 
OpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使うOpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使うHironobu Saitoh
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストAkihiro Kuwano
 
Javaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使うJavaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使うKenji Kazumura
 
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramikoOpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramiko(^-^) togakushi
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するshigeki_ohtsu
 
TokuDB試してみる
TokuDB試してみるTokuDB試してみる
TokuDB試してみるyoku0825
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-mainShotaro Uchida
 

Was ist angesagt? (20)

C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレする
 
カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
 
MongoDB2.2の新機能
MongoDB2.2の新機能MongoDB2.2の新機能
MongoDB2.2の新機能
 
OpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使うOpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使う
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
 
Javaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使うJavaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使う
 
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramikoOpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
 
Janog33.5
Janog33.5Janog33.5
Janog33.5
 
TokuDB試してみる
TokuDB試してみるTokuDB試してみる
TokuDB試してみる
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
SystemV IPC
SystemV IPCSystemV IPC
SystemV IPC
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
Das 2015
Das 2015Das 2015
Das 2015
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 

Ähnlich wie mod_auth_ticket - Bringing Single-Sign-On to lighttpd

Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overviewRyo Sakamoto
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめMikiya Okuno
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1Etsuji Nakai
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906akirahiguchi
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 

Ähnlich wie mod_auth_ticket - Bringing Single-Sign-On to lighttpd (20)

Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overview
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 

Mehr von Taisuke Yamada

ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴Taisuke Yamada
 
DIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesDIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesTaisuke Yamada
 
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -Taisuke Yamada
 
Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Taisuke Yamada
 
IoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourIoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourTaisuke Yamada
 
Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Taisuke Yamada
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in PythonTaisuke Yamada
 
VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!Taisuke Yamada
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
Hacking Ruby with Python
Hacking Ruby with PythonHacking Ruby with Python
Hacking Ruby with PythonTaisuke Yamada
 
Invitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationInvitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationTaisuke Yamada
 
Charity Items from Debian JP Project
Charity Items from Debian JP ProjectCharity Items from Debian JP Project
Charity Items from Debian JP ProjectTaisuke Yamada
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutTaisuke Yamada
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateTaisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)Taisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)Taisuke Yamada
 
201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebianTaisuke Yamada
 
Nilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianNilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianTaisuke Yamada
 
Casual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXCasual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXTaisuke Yamada
 

Mehr von Taisuke Yamada (20)

ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴
 
DIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesDIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 Minutes
 
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
 
Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)
 
IoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourIoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an Hour
 
Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in Python
 
VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
Hacking Ruby with Python
Hacking Ruby with PythonHacking Ruby with Python
Hacking Ruby with Python
 
Invitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationInvitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code Exploration
 
Charity Items from Debian JP Project
Charity Items from Debian JP ProjectCharity Items from Debian JP Project
Charity Items from Debian JP Project
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-update
 
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
 
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
 
201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian
 
Nilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianNilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebian
 
Casual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXCasual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUX
 

Kürzlich hochgeladen

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Kürzlich hochgeladen (10)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

mod_auth_ticket - Bringing Single-Sign-On to lighttpd

  • 1. mod_auth_ticket による サーバ丸ごと SSO 化と lighttpd モジュール作成体験 @tyamadajp
  • 2. lighttpd とは apache nginx lighttpd thttpd 稼動に必要な メモリやリソース △ ○ ○ ◎ 機能や モジュール資産 ◎ ○++ ○ △ おおまかな性能 (条件による) △ ◎ ○ ○ 非サーバー的 使いやすさ × × × ○ モジュール開発 API 充実度 ○ ○ △ × モジュール間の 連携 ○ ○ △ × モジュール追加 容易性 ○ △ ○ × 開発の活発度 ◎ ○ △ ×
  • 3. こんな状況に最適 ● マシンリソースは節約したい ● そこそこ性能と機能は欲しい ● 自分で拡張したい ● 後からモジュール構成を ちょこちょこいじりたい 普通のサーバーでも 使えますが、こういう HP t5730 シンクライアント転用の 自宅サーバーで使用中 Wyse S90
  • 4. mod_auth_ticket ● OpenID などの SSO でサーバ全体を保護する ● 各種アプリでの対応は不要 (ユーザ管理をどうするかにより若干手を入れる必要はある) IdP mod_auth_ticket 認 静的ファイル 証 アプリ1 /PHP ブ リ アプリ2 /Perl ッ ジ アプリ3 /Ruby (RP)
  • 5. mod_auth_ticket ● OpenID などの SSO でサーバ全体を保護する ● 各種アプリでの対応は不要 (ユーザ管理をどうするかにより若干手を入れることもある) RP 発行の トークンの IdP 破棄・更新 ベーシック mod_auth_ticket 認証相当に 認 見せかける 静的ファイル 証 各種 SSO 結果を アプリ1 /PHP ブ m_a_t の対応形式で リ 暗号化・署名して アプリ2 /Perl ッ 保護ページに再度 ジ アプリ3 /Ruby (RP) リダイレクト
  • 6. メリットとデメリット メリット ● どんなコンテンツ・ SSO 方式にも容易に対応 ● 特別な設定なしにログにユーザ別の履歴が残る ● サーバ内アプリ間移動で再認証が不要で高速 ● 対ユーザは Form 認証、対アプリは Basic 認証と UI 構成や開発が楽な方向で見せかけられる デメリット ● サーバの管理権限が必要 ● その SSO 方式に対応済のアプリと干渉する (そのアプリについては外さないと無駄な再認証が起きたり)
  • 7. 設定例(と lighttpd の応用) $HTTP["url"] =~ "^/login/" { setenv.add-environment = ( RP の設定 "MAT_NAME" => mat_name, "MAT_KEY" => mat_key ) } else $HTTP["url"] =~ "^/" { m_a_t の設定 auth-ticket.loglevel = 255 auth-ticket.override = 2 auth-ticket.timeout = 3600 auth-ticket.name = mat_name auth-ticket.key = mat_key auth-ticket.options = "path=/; httponly;" auth-ticket.authurl = "/login/" }
  • 8. 設定例(と lighttpd の応用) $HTTP["url"] =~ "^/login/" { setenv.add-environment = ( "MAT_NAME" => mat_name, "MAT_KEY" => mat_key ) } 暗号化 IdP else $HTTP["url"] =~ "^/" { ・ 署名 auth-ticket.name = mat_name auth-ticket.key = mat_key } ベーシック mod_auth_ticket 認証相当に 認 見せかける 静的ファイル 証 各種 SSO 結果を 常に m_a_t と RP の アプリ1 /PHP ブ m_a_t 指定の形式で リ 暗号化・署名して キー情報が一致する アプリ2 /Perl ッ ジ 保護ページに再度 必要がある アプリ3 /Ruby (RP) リダイレクト
  • 9. 設定例(と lighttpd の応用) # generate "var.mac_name" and "var.mac_key" include_shell "/.../lighttpd-make-mat-key.sh" $HTTP["url"] =~ "^/login/" { ・・・以下先程の設定・・・ $ cat lighttpd-make-mat-key.sh #!/bin/sh md=$(dd if=/dev/urandom bs=1 count=16|md5sum) set -- $md ロード時にコマンドを cat <<EOF 実行して、その結果を var.mat_name = "CHID" 設定として取り込める。 var.mat_key = "$1" これで毎回変わる(※) EOF 共通キーを自動生成 ※ マシン起動時は同じになる問題が…
  • 10. まとめ(1) ● アプリ/コンテンツ関係なしにサーバ全体を SSO 認証下に置く mod_auth_ticket を作ってみた ● 複数アプリ雑居サーバの認証管理に便利 ● 今のところ GoogleAccount でテスト(実利用中) → 他の SSO 方式にも RP ページ1枚で対応 ● lighttpd は旬を過ぎた感もあるけど便利 公開中&今後の予定 ● https://github.com/tai/mod-auth-ticket-for-lighttpd ● 互換モジュールを apache に移植するかも…
  • 11. lighttpd モジュールの作り方 int mod_auth_ticket_plugin_init(plugin *p) { p->name = buffer_init_string("auth_ticket") p->version = LIGHTTPD_VERSION_ID; p->init = module_init; p->set_defaults = module_set_defaults; p->cleanup = module_free; p->handle_uri_clean = module_uri_handler; p->data = NULL; init で初期化、 return 0; set_defaults で設定を読み込み、 } h_u_c で設定に基づいて処理して、 cleanup で終了処理 Apache や nginx に比べてシンプル(やや機能は↓)
  • 12. lighttpd モジュールのデータ構造 init で生成し、以後受け渡されてゆくデータ構造 typedef struct { lighttpd.conf 内の {} PLUGIN_DATA; コンテキスト毎に生成 される p_c のリスト plugin_config **config; plugin_config conf; 上のコンテキスト別の 設定を合成し、「今の 実行コンテキストで array *users; 有効になっている」設定 } plugin_data; ※ 上は m_a_t の場合 具体的な plugin_config の中身は モジュール毎に自由。 p_c は コンテキスト毎に生成されるので コンテキストに因らない情報なら plugin_data に直接収容できる
  • 13. モジュール作成での比較 apache nginx lighttpd マルチプロトコル 対応 / フック多様性 ○ ○ × メモリ管理 階層型プール 階層型プール 単一バッファ ap_*(p, ...) ngx_p*(p, ...) buffer_*(...) ngx_buf_t, libapr 参照 ngx_array_t, buffer, array, ngx_list_t, stream 位? 提供される 汎用のものも データ構造や API HTTP 特有のも、 ngx_hash_t, ngx_rbtree_t, とにかく少ない 充実度は nginx と apache は同格 ngx_url_t, &未整理な感じ ... 他多数 ステージ粒度や モジュール連携の かなり細かい かなり細かい やや粗目 柔軟性 ./configure Makefile.am 編集で モジュールの apxs で 一括ビルド or ビルド --add-module= 外部ビルド で静的リンク 同一ビルドオプションで 外部ビルド
  • 14. まとめ( 2 ) ● まとめてみると… lighttpd は手間かかる orz ● apache 最強。しかし nginx もよく考えられてる ● nginx に DSO をロードするモジュールを 静的リンクしておくと幸せになれる気がしてきた
  • 15. 困っていること 平文で送る mod_auth_cookie より 安全だが、 RP<->m_a_t の連携が どの程度安全か実は図りかねてる IdP ココ ベーシック mod_auth_ticket 認証相当に 認 見せかける 静的ファイル 証 各種 SSO 結果を アプリ1 /PHP ブ m_a_t 指定の形式で リ 暗号化・署名して アプリ2 /Perl ッ 保護ページに再度 ジ アプリ3 /Ruby (RP) リダイレクト
  • 16. 何をやっているか ● in→out の転送時に平文のままは NG ● 幸い、長さが短いので擬似乱数列と XOR している ● しかし、毎回同じだとモロバレ ● そこで、時刻 t を salt に使って乱数列を捻る ● 更に、同時刻でも in が違えば out が異なるよう 直前バイトとも XOR out(= 暗号化した状態) in(= 認証結果の情報 ) mod_auth_ticket 認 静的ファイル 証 アプリ1 /PHP ブ リ アプリ2 /Perl ッ ジ アプリ3 /Ruby (RP)
  • 17. 安全?な受け渡し(1) function make_cookie($key, $data) { $now = time(); $now = $now - $now % 5; # 5秒毎にキー変更 $tmp = md5($now . $key, TRUE); $enc = bin2hex( encrypt($data,$tmp,strlen($tmp)));# 暗号化 $sig = md5($key . $now . $enc); # 署名 return "crypt:" . $sig . ":" . $enc; }
  • 18. 安全?な受け渡し(2) # 要は buf[i] = rand[i] ^ buf[i] ^ buf[i-1] function encrypt($buf, $key, $keylen) { $n = strlen($buf); for ($i = 0; $i < $n; $i++) { $c = ord($buf[$i]); #IV=0 なのが微妙↓ $c ^= ($i > 0 ? ord($buf[$i - 1]) : 0) ^ ord($key[$i % $keylen]); $buf[$i] = chr($c); } return $buf; }
  • 19. まとめ( 3 ) ● お遊びサーバならいいが… ● こういうやつの「安全性」の評価方法は? ● 乱数列 +XOR 自体は安全、でも… ● それに時刻(=絞り込み可能)を加えたら? ● それを MD5 したら? MD5(rand) の乱数性は? ● IV=0 で折り畳み XOR した時の脆弱度は? – 既知平文攻撃でアウトか… 先生、もっと知識(&想像力)が欲しいです… ※ そういうわけで、コメント大歓迎