[#29700] ruby NKF モジュールの CP932 系エンコーディングパッチ — MORIYAMA Masayuki <moriyama@...>

ミラクルリナックスの森山です。

10 messages 2006/10/27

[#29726] cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...>

MoonWolfです。

74 messages 2006/10/31
[#29728] Re: cgi.rbのDoS脆弱性について — Yukihiro Matsumoto <matz@...> 2006/11/01

まつもと ゆきひろです

[#29729] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/01

MoonWolfです。

[#29731] Re: cgi.rbのDoS脆弱性について — Yukihiro Matsumoto <matz@...> 2006/11/01

まつもと ゆきひろです

[#29745] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/02

MoonWolfです。

[#29751] Re: cgi.rbのDoS脆弱性について — "U.Nakamura" <usa@...> 2006/11/02

こんにちは、なかむら(う)です。

[#29753] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/03

MoonWolfです。

[#29754] Re: cgi.rbのDoS脆弱性について — "U.Nakamura" <usa@...> 2006/11/03

こんにちは、なかむら(う)です。

[#29756] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/03

MoonWolfです。

[#29759] Re: cgi.rbのDoS脆弱性について — "U.Nakamura" <usa@...> 2006/11/03

こんにちは、なかむら(う)です。

[#29780] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/04

MoonWolfです。

[#29784] Re: cgi.rbのDoS脆弱性について — "U.Nakamura" <usa@...> 2006/11/04

こんにちは、なかむら(う)です。

[#29786] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/04

MoonWolfです。

[#29791] Re: cgi.rbのDoS脆弱性について — Yukihiro Matsumoto <matz@...> 2006/11/04

まつもと ゆきひろです

[#29811] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/05

MoonWolfです。

[#29818] Re: cgi.rbのDoS脆弱性について — Yukihiro Matsumoto <matz@...> 2006/11/05

まつもと ゆきひろです

[#29826] Re: cgi.rbのDoS脆弱性について — MoonWolf <moonwolf@...> 2006/11/05

MoonWolfです。

[#29761] Re: cgi.rbのDoS脆弱性について — 植田 裕之 <ueda@...> 2006/11/03

植田と申します。

[#29764] Re: cgi.rbのDoS脆弱性について — Yukihiro Matsumoto <matz@...> 2006/11/03

まつもと ゆきひろです

[ruby-dev:29666] Re: Digest'ifying OpenSSL::Digest

From: Tanaka Akira <akr@...>
Date: 2006-10-14 20:12:08 UTC
List: ruby-dev #29666
In article <86bqofkz9t.knu@iDaemons.org>,
  "Akinori MUSHA" <knu@iDaemons.org> writes:

>  今いろいろ悩んでいるのは、キーやハッシュ長などのパラメータを
> 取るアルゴリズムをどう扱うかです。
>
>
>  たとえば、あるメソッドがハッシュアルゴリズムの指定を受けると
> したときを考えます。
>
>  まず、
>
>         check_auth(cookie, "MD5")
>
> と名称を文字列で渡す方法では、パラメータの指定が困難です。
>
>         check_auth(cookie, "HMAC;hash=MD5;key=blahblahblah")
>
> と DBI みたいな感じにしたのでは、指定もパースも面倒なので論外。
>
>  また、
>
>         check_auth(cookie, Digest::MD5)
>
> のようにクラスオブジェクトを渡す方法がありますが、パラメータ付き
> アルゴリズムの場合、パラメータ(の組合せ)ごとに固有のクラスを作る
> のかというと躊躇します。(digest/hmac で一度やってみました)
>
>  かといって、
>
>         check_auth(cookie, Digest::Tiger, 160)
>
> のようにパラメータを並べて渡すのでは「計算器」をひとまとまりで
> 指定できていないので美しくない。
>
>  計算器を渡す、という意味では
>
>         check_auth(cookie, Digest::Tiger.new(160))
>
> というのがひとつの解決策であり、現時点の digest はこのような形を
> 想定していますが、いくつか問題もあります。
>
> ・同時に複数の計算器インスタンスを必要とする場合、 clone() して
>   もらうのか?
> ・状態のあるものをやりとりするのは気持ち悪い。使用前・使用後に
>   reset() する責任の有無などが気になる。
>
>  つまり、渡すべきなのは計算器そのものではなくて、計算器の生成
> 方法であるということになります。
>
>  ということは、先ほどのクラスオブジェクトを渡す方法がいちばん
> 近そうです。あるべき姿は
>
> ・Digest 実装クラスは new() でパラメータを受け取り、 factory
>   オブジェクトを生成する。
> ・factory オブジェクトは自身の生成時に指定されたアルゴリズムと
>   パラメータに沿った「計算器」を生成する能力(メソッド)を持つ。

そのメソッドひとつに関して多態であればいいのであれば、そのメ
ソッドの名前を call にして、factory の生成には引数のない
lambda を使えばいいのでは?

パラメータをとらないアルゴリズムに対応するクラスについてはク
ラスオブジェクト自身が call を持つことにすればクラスオブジェ
クト自身が factory とも振る舞えますし。

> といった形でしょうか。でも、まじめにそうしてしまうとあんまり
> 使いやすい感じはしないですね。
>
>         tiger160 = Digest::Tiger.new(160)
>         hash = tiger160.create()
>         hash.update(data)
>         digest = hash.digest
>
> JCE の Mac クラスなどはこんな感じのインターフェースですが、
> 果たして Ruby にマッチするのかどうか。

class << Digest::SHA256; alias call new; end
class << Digest::SHA512; alias call new; end
...

としておいて、

p Digest::Tiger.new(160).update(data).digest
p Digest::SHA256.new.update(data).digest

と直接使ってもいいし、

p lambda { Digest::Tiger.new(160) }.call.update(data).digest
p Digest::SHA256.call.update(data).digest

と call で呼べる factory 経由でやってもいいということで、

check_auth(cookie, lambda { Digest::Tiger.new(160) })
check_auth(cookie, Digest::SHA256)

というようにアルゴリズムを受け取るメソッドには lambda ないし
クラスを指定し、場合によっては

check_auth(cookie) { Digest::Tiger.new(160) }
check_auth(cookie) { Digest::SHA256.new }

とブロックを使いたくなるかもしれない、とか。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread