NTLM authentication module for IMAP

岡田 健一 / Kenichi OKADA okada @ opaopa.org
2001年 2月 20日 (火) 21:45:16 JST


おかだです。

In the message <u7l2lzigl.wl @ todhcp111128.europe.nokia.com>
"Taro Kawagishi (川岸太郎)" <taro.kawagishi @ nokia.com> wrote:

> | > |    一番問題なのは、sasl-ntlmがロードされた後、
> | > |    sasl-passwd-hash-function は 'ntlm-get-password-hashes と
> | > |    なりますが、以後 別の認証方式を使おうが全部 hash されてしまう
> | > |    のではないでしょうか?
> | 
> | > elmo-get-passwd とか elmo-get-passwd-or-hash とかが使われる場面は、パ
> | > スワードを引いてくるキーとして
> | > (elmo-network-session-password-key session)
> | > を使うと思いますが、このキーの中に認証方式が含まれているので、上の修正
> | > をしていただければ、大丈夫だと思います。例えば、
> | > 	"IMAP:kawagish @ NTDOMAINNAME/ntlm @ XXX.YYY.ZZZ.com:143"
> | > というような感じです。
> | 
> | それは、elom-passwd-alistにキャッシュされている場合ですよね.
> | elmo-passwd-life-time で elmo-passwd-alistのエントリが消去されてた
> | 場合に問題が起るような気がします.

> なるほどおっしゃている意味が分かりました。
> わたしのコードではsasl-passwd-hash-functionを切り換える事を想定してい
> なかったということですね。
> そうでしたら、sasl-passwd-hash-functionもdynamic変数
> sasl-read-passphraseと同じように、elmo-network-authenticate-session内
> で認証mechanismを決める際に動的に決めてやるというのはどうでしょうか?
> 試していないですが。

まず、SASL APIは認証方式が増えても、利用側を修正しないですむということを
前提としています.
sasl-passwd-hash-functionを、elmo-network-authenticate-sessionで
認証方式ごとに切り替えるということは、上記前提に反します.
;; ちなみに、sasl-read-passphraseは、認証方式には依存していません.

というのも、sasl.elをelmo以外から利用することを想定して、
利用側で書くべきコードを最小限に抑えたいというのが理由です.

> | とりあえず、現状では elmo 側を変更せずに、NTLM を使えるように
> | しています.saslのAPIは変更せず、sasl-read-passphraseは、
> | パスワードのみを返すようにして、sasl-ntlm-responseの中で、
> | ntlm-get-password-hashes するようにしています.
> | 
> | ;; もし、パスワードをそのままelmo-passwd-alistに保存するのを嫌い、
> | ;; hash化したものを保存するようにしたいというのでしたら、
> | ;; やはり elmo側とsasl.el側の両方を変更する必要があります.
> | ;; お気持ちはよくわかります.しかし、APIの変更となると
> | ;; いろいろ規模の大きな変更となりますので、
> | ;; とりあえずは、現状の方法でいこうと思います.

> そうなのです。しかしhashだけをキャッシュするとしてもそれが手に入れば
> NTLMの認証は受けられるので、生パスワードを持つより特にセキュリティレベ
> ルがあがるというわけではないのですが、elmo-util.elには
> elmo-passwd-alist-saveなどというキャッシュをファイルに書き出す関数もあ
> りますので、できるならキャッシュには入れたくないと思っていました。でも、
> 岡田さんの方法の方が全体への整合性は良いと思います。

おっしゃる通りですね.hashで済むものを生にはしたくないです.
elmo-passwd-alist-saveを使う人はそれなりのリスクを理解した
上で使ってほしいです.

セキュリティの向上は、sasl.el(elmo) の今後の課題です.

> | ;; あと、sasl-ntlm-response で、sasl-read-passphraseを
> | ;; 定義していますが、これを利用するとエラーになりませんか.
> | ;; 川岸さんのコードでは、passphraseはntlm-get-password-hashesで
> | ;; 処理されたものでなくてはならないですよね.

> わたしのコードでは、sasl-ntlm-response内で呼んでいる関数
> sasl-read-passphraseは、sasl.elで定義されている関数sasl-read-passphrase
> でして、これがelmo-network-authenticate-sessionで定義された変数
> sasl-read-passphrase を関数としてfuncallしています。そして
> elmo-network-authenticate-sessionで定義された変数sasl-read-passphrase
> がelmo-get-passwd-or-hashを呼んでくれるという仕掛けになっています。
> sasle.pに合わせるために少々回りくどいことをやっています。

すいません.説明が足りていなかったですね.
おっしゃるとおり、elmo-network-authenticate-sessionから
呼ばれる場合は問題ないのですが、
elmo以外から、sasl-read-passphraseを上書きせずに使うと
エラーになるということです.
あくまでも、sasl.el は elmo以外からも使えることを前提にしています.

;; sasl.el の枠にはめるために、余計なところまで付き合っていただいて
;; 感謝しています.

> | ちなみに、わたしの変更は、slim-1_14 にcommitしてあります.
> | saslの中だけで、NTLM を使えるように変更してありますので、
> | 他に影響を与えることはないと思います.川岸さんの方で問題なければ、
> | wl-2_4 にもコミットしようと思います.

> お願いします。

wl-2_4枝にも commit しました.お試しください.
実質的な変更点は、sasl.el に "NTLM" を追加して、
ntlm.el, md4.el, sasl-ntlm.el を追加しただけです.

-- 
岡田 健一  URLs: mailto:okada @ opaopa.org
	   	 http://www.opaopa.org




More information about the Emacs-mime-ja mailing list