[mew-dist 19769] SMTP-AUTH on iijmio-mail.jp

HOSONO Hidetomo h at example.com
2001年 12月 5日 (水) 19:22:24 JST


Kondara Projectの細野です。

IIJmioでセーフティメールサービスが発売されたのを受けて、:-)
MewでCRAM-MD5によるSMTP-AUTHを使ってみることにしました。

このサービスでは、メールアドレスが
hosono-h at example.comとなっているとき、
ユーザ名として hosono-h.iijmio-mail.jp
すなわち、メールアドレスの@を.に置換したものを指定するようになっています。
というわけで、Mew version 2.1 on XEmacs 21.4.5で早速使ってみたところ、
見事に失敗しました。

理由は2つあります。
ひとつは、mew-cram-md5の結果が、以下のように折り返されてしまったためです。

----------------------------------------------------------------
(mew-cram-md5 "hosono-h.iijmio-mail.jp" "********" "PDMyNDkyNjU3NjAuOTA2MzU1QG1tcy1yMDAuaWlqbWlvLW1haWwuanA+")
"aG9zb25vLWguaWlqbWlvLW1haWwuanAgZDBhMzlkZjA1MGYyMmYxYzViNTkyMzQ4ZjVjNzcx
NzQ="
----------------------------------------------------------------

これは、mew-base64-encode-stringの実体である
base64-encode-stringが、
デフォルトで一定の文字数で列を折り返すような実装になっているためです。
そこで、mew-cram-md5を以下のように書き変えてみました。

----------------------------------------------------------------
--- mew-auth.el~	Mon Nov  5 10:27:16 2001
+++ mew-auth.el	Wed Dec  5 15:26:59 2001
@@ -63,7 +63,7 @@
 (defun mew-cram-md5 (user passwd b64-challenge)
   (let* ((challenge (mew-base64-decode-string b64-challenge))
 	 (response (mew-hmac-md5 challenge passwd)))
-    (mew-base64-encode-string (format "%s %s" user response))))
+    (mew-base64-encode-string (format "%s %s" user response) t)))
 
 ;;
 
----------------------------------------------------------------

ところが、これでもやっぱりXEmacsでは成功しません
(正確には、最初の1回だけSMTP-AUTHが通って、あとは失敗した)。
理由は、何故かXEmacsとGNU Emacsで
同じ文字列をmew-cram-md5したときの値が違っているためです。
以下がGNU Emacsでの出力(正しい)で、

----------------------------------------------------------------
(mew-cram-md5 "hosono-h.iijmio-mail.jp" "********" "PDMyNDkyNjU3NjAuOTA2MzU1QG1tcy1yMDAuaWlqbWlvLW1haWwuanA+")
"aG9zb25vLWguaWlqbWlvLW1haWwuanAgMGRjZjE5ODNjNTM0NmVjMDAwZWIwNTA4YTRmZjUwY2E="
----------------------------------------------------------------

一方、XEmacsでの出力は

----------------------------------------------------------------
(mew-cram-md5 "hosono-h.iijmio-mail.jp" "********" "PDMyNDkyNjU3NjAuOTA2MzU1QG1tcy1yMDAuaWlqbWlvLW1haWwuanA+")
"aG9zb25vLWguaWlqbWlvLW1haWwuanAgZDBhMzlkZjA1MGYyMmYxYzViNTkyMzQ4ZjVjNzcxNzQ="
----------------------------------------------------------------

上記のようになっています(間違い)。

さらに、チャレンジをbase64デコードして
(これはXEmacsもGNU Emacsも同じ)

----------------------------------------------------------------
(mew-base64-decode-string "PDMyNDkyNjU3NjAuOTA2MzU1QG1tcy1yMDAuaWlqbWlvLW1haWwuanA+")
"<3249265760.906355 at example.com>"
----------------------------------------------------------------

mew-hmac-md5にかけてみました。
GNU Emacsでは下記のようになります。

----------------------------------------------------------------
(mew-hmac-md5 "<3249265760.906355 at example.com>" "********")
"29912fef7d1abef666a41c34676af655"
----------------------------------------------------------------

一方、XEmacsでは

----------------------------------------------------------------
(mew-hmac-md5 "<3249265760.906355 at example.com>" "********")
"21fe610dfdacc1006d88f93d7dc13d12"
----------------------------------------------------------------

上記のようになります。
この時点で既にGNU EmacsとXEmacsの間でズレがあるわけです。

というわけで、まとめますと、

* 長いユーザ名をmew-cram-md5にかけるとGNU Emacs・XEmacsを問わず
  CRAM-MD5での認証に失敗する。
* XEmacsだとその他にも失敗する可能性のあるチャレンジが(かなり)ある

ということになります。

mew-hmac-md5まで一気に調べるのはしんどかったので、
続きは後日調べることにして、一旦報告します。

--
HOSONO Hidetomo
;; XEmacsのMD5まわりのバグがどうこうという話が
;; どこかにあった気がするんですけど、見つからない…。



Mew-dist メーリングリストの案内