2016/05/07(土)今更ながら CRAM-MD5 SMTP認証[RFC2195,RFC2104,RFC1321]

断片的にはインターネット上にアレコレあるのですが、どうもまとまった内容のものがありません。

電子メール送信の不正利用を減らす目的の一環として、送受信時に「認証」という手続きを踏むのですが、昨今では、この部分にかつての主流であった「POP before SMTP」という方式は昨年あたりから淘汰されつつあり、各種 の「SMTP 認証」という方式になってきています。

電子メールを送受信するだけの殆どの一般ユーザなら、電子メール送受信ソフト(MUA)の設定時以外は全く意識することは無いのですが、今般は電子メール送受信の機能そのものを実装するため、仕組みを理解しないことには話 になりません。

CRAM-MD5 方式による認証手順仕様は、POP3/IMAP4向けに策定された RFC2195 で規定されており、そこで使用される HMAC-MD5 方式による暗号化ハッシュでパスワードを検証する仕組みになっています。
考え方としては、クライアント側で提示した HMAC-MD5 ハッシュ値と、サーバ側でクライアント側と同じ手順で算出した HMAC-MD5 ハッシュ値が一致することで「パスワード一致」と見做すわけです。

ここでの暗号化ハッシュの要(かなめ)は MD5 と呼ばれる方式で、任意長のデータ列から「暗号化理論に基づくハッシュ関数」により16バイト(128bit長)のハッシュ値を作りだすもので、RFC1321 にて規定されています。

CRAM-MD5 によるSMTP認証は、以下のようなシーケンスを取ります。
20160508_1.png
[Client -> Server] AUTH CRAM-MD5
[Server -> Client] 334 PDIwMTYwNTA4MDE1NzMyLjQ2QTRFNENGRjUyMUBteDIuYmFzZWtlcm5lbC5uZS5qcD4=
[Client -> Server] aW5mby5leGFtcGxlLmNvbSAxODBjYmQwNTdjNDQxOTFhYjRkOTU2NWQ3MzA2ZmVmZg==
[Server -> Client] 235 Authentication successful.
ここで、
PDIwMTYwNTA4MDE1NzMyLjQ2QTRFNENGRjUyMUBteDIuYmFzZWtlcm5lbC5uZS5qcD4=

という文字列は、
<20160508015732.46A4E4CFF521@mx2.basekernel.ne.jp>
という文字列を Base64エンコードしたもので、クライアント側でデコードして使用します。
この文字列は 「チャレンジ」と言います。認証毎にランダムな文字列です。

クライアント側では、SMTPサーバを利用するユーザ名と当該ユーザパスワードを暗号化したものを Base64エンコードにて送り返します。これを「レスポンス」と言います。

ここで「ユーザパスワードの暗号化」を行うのですが、この部分が CRAM-MD5 方式の核となるところです。以下に生成手順を示します:

・CRAM-MD5 は「鍵付きハッシング」と呼ばれる暗号化を使用します。
 これは、HMAC と言い、RFC2104 にて規定されています。
 ハッシュ関数にMD5 を使うので、HMAC-MD5 と称します。

・RFC2104 によれば、HMAC の算出は、
 H(K XOR opad, H(K XOR ipad, text))
となっています。
H は、ハッシュ関数を意味し、ここでは MD5 です。他に SHA1 などあります。
K は、ここでは平文で示されたパスワードです。例示として userpassword を示します。
opad は、0x5c を64バイト並べた文字列、
ipad は、0x36 を64バイト並べた文字列、
text は、サーバから送られてきた「Base64エンコードされたチャレンジ文字列」をデコードしたものです。

・Phase0 もし、パスワード文字列が 64バイトを超える場合、その文字列の MD5ハッシュ値を算出し、そのハッシュ値16バイトデータ列を以降の処理でパスワード文字列として扱う。

・Phase1 パスワード文字列 'userpassword' と ipad のバイト単位 XOR 演算
 [K XOR ipad]
 以下のようになります。
 20160508_2.png

・Phase2 パスワード文字列 'userpassword' と opad のバイト単位 XOR 演算
 [K XOR opad]
 以下のようになります。
 20160508_3.png

・Phase3 Phase1 で算出した 64バイトデータ列と、サーバから得たチャレンジ文字列を連結し、16バイトの MD5 ハッシュ値を得る。

・Phase4 Phase2 で算出した 64バイトデータ列と、Phase3 で得た16バイトデータ列を連結し、16バイトのハッシュ値を得る。

・Phase5 Phase4 で得たハッシュ値を16進数文字列化する。
 結果は、
180cbd057c44191ab4d9565d7306feff
 となります。

・Phase6 認証対象のユーザ名と、Phase5 で得た32バイト長文字列を半角スペースで連結し、Base64 でエンコード。これをサーバへレスポンスとして送り返す。
 Base64エンコード後の文字列は
aW5mby5leGFtcGxlLmNvbSAxODBjYmQwNTdjNDQxOTFhYjRkOTU2NWQ3MzA2ZmVmZg==
となります。これは、
info.example.com 180cbd057c44191ab4d9565d7306feff
を、そのまま Base64 エンコードしたものです。

パスワードを解析・解読可能な状態でインターネット上に送らないので、セキュリティ的には安全とされていましたが、昨今ではMD5ハッシュの脆弱性が指摘されているのと、CRAM-MD5 認証そのもので電子メール本文そのものが暗号化されるわけでは無いので、この点での脆弱性を指摘する意見があるようです。

ですが後者に関しては言及のレベルや話題の論点が全く異なる話であり、
「認証と通信そのものを混同してるよね」という印象しか個人的には持てません。

2016/03/09(水)今般の FreeBSD 9.3 のセキュリティアップデートは見送ったほうが無難

2017/10/12 19:19 サーバ運営・管理
FreeBSD のコミュニティで報告が上がっていますが、先日提供された FreeBSD 9.3R-p37 にセキュリティFIXのためにアップデートすると、SSL回りが不具合を起こすようです。

今のところ、

・SSH 接続ができない(接続がクラッシュする)
・SMTP接続にて TLS 接続やるとクラッシュする
・IMAP接続にて TLS 接続やるとクラッシュする

といった情報が上がっています。
公式サイトにも FreeBSD 9.3R-p37 のアナウンスは無いようです。

運用環境的にどうしても OpenSSL 周りのパッチが必要な場合は、ports/pakkages の OpenSSL で凌ぐしかないと思います。(こちらは大丈夫という報告があがっています)
個人的には、メンテナンス工数との絡みがあり、数日様子見したほうがいいかなと考えています。

〔2016/03/10 追記〕
本日、FreeBSD 9.3R-p38 が提供されたようです。
公式サイトにも掲載されています。

2016/03/08(火)仕事で使っているんだが・・・

2017/10/12 19:18 電子工作
#こちらのサイトでは、技術的なこと・業務的なことを中心に追記していきます。
#専門外だと内容的に難しいですが、ここはそういう方針ですのでよろしくおねがいします。

今や、全て「絶版」です。年代ものになってしまい、ボロボロですよ。。
これらは、現在では半導体メーカのWebサイトにて無償提供されており、殆どの場合、PDF形式のファイルでダウンロードできます。
ただ冊子形式ではなく、型番ごとに個別に入手する形になります。
20160308_1.jpg
20160308_2.jpg
20160308_3.jpg

半導体メーカでは型番毎に詳しいデータが掲載されているので、電子回路設計に必要な情報は昔より格段に入手が楽になった反面、いちいちパソコンなどで観なければならないので、作業途上では案外不便なんです。

ちょっとした確認には冊子になっているほうがいいのです。
こういう不便を感じているのは自分だけなのだろうか。。

これらCQ出版社刊のハンドブック形式規格表は、1999年まで毎年発行されていたようなのですが、「TTLIC規格表」と「CMOSIC規格表」は 「汎用ロジック・デバイス規格表」として2003年に復活したものの、2008年の発行が最後、トランジスタ規格表は2013年の発行が最後のようで、絶版になっています。

Webから情報が入手できるようになったのと、これらを設計する仕事が長らくの景気低迷で減ったので、需要が減ったのでしょうね。

当方も 1986年以降、脱サラするまでの10数年間、このような業務に直接携わることがなかったのと、設計開発業務が増えてきた 2012年以後は既に売っていなかったのと、必要性もあまり生じなかった(手持ちの古いもので何とか間に合っていた)ので購入する行動に出なかったわけです。

新しいものが欲しいんですが、売っていませんね。。

2016/02/16(火)H8/3069F 使用ボードの制作

今となっては古いマイクロコンピュータチップなんですが・・・
H8_3069F.jpg

旧日立製作所の半導体部門(現在のルネサス・テクノロジ)が2001年ころに商品化したマイクロコンピュータチップを使って2~3点ほど制御ボードを作ることになりそうです。。
今年はこの仕事がメインになりそうな勢い。

調査だけで徹夜になってしまいました。
必要なものの調達は概ね終わり、制作にあたっての課題は見えていますが、未経験な内容もあり、ちょっと先が思いやられます...orz

2016/02/15(月)2年1ヶ月で逝きやがった・・・

2017/10/12 19:16 雑多なトピック
元々、品質に問題があるメーカーではあるが・・・
時限爆弾のように逝ってしまいました。保証期間が過ぎたばかり。
最初読み込みがえらく時間かかるようになり、そのうち全く認識しなくなった。。
20160215.jpg

ちょうど1週間前に逝って、交換。相性問題は無いようです。
電子メールのほぼすべてと、いくつかのプライベートな画像や文書が消えてしまいました。。
業務文書や2013年12月の消失事故時から復旧で撮り溜めている画像は、いわゆるネットワークドライブにて別の場所にて常時バックアップ取りながら維持しているので、致命的な影響とまではなっていませんがダメージは大きい。。

今度は同容量の TOSHIBA 製にしてみたのですが、クラッシュ事故に遭われたユーザ報告もあるので、どんなもんだか・・・です。はい。

2016/02/10(水)再び、添付ファイルによるコンピュータウィルスメールが流行

2017/10/12 19:15 はんかくさい
ここ数日、「コンピュータウィルスやマルウェアに感染した」という報告を散発的に聞いていたのですが、、筆者のところにもそれと思われる添付ファイル付きのメールが来ました。。
20160210_1.jpg
20160210_2.jpg

一つ目の電子メールは、ヤマト運輸を装うものもあるそうで、普段ご利用している方々にとっては騙される可能性の高い電子メールと予測できます。

こういうものは、「文面がいつもと違う」「差出人がいつもと違う」「添付ファイルの名前がいつもと違う」「日本語の表記がいつもと違うし、言い回しが変だ」・・・等々と、「いつもと違う」に注意するしかないのかなと思われます。

どうやら、各種のアンチウィルスソフトウェアメーカにおいて対応が間に合わないらしく、ブロックできるようになるまでには、少し時間がかかるようです。

2016/01/23(土)35年前の名機 高級8bitパソコン SHARP MZ-80B BASIC SB-5520

2017/10/12 19:13 修理や再生など
手元のMZ-2500 による MZ-80B互換モードで動作させています。
研究・開発用途で使いたいので、もし MZ-80B/2000/2200/2500 で不要なソフトウェア・ハードウェア本体あれば引き取りますよ(^^)
#資金がないので買い取り料は払えませんが、それでも良ければ・・・・

20160123_1.jpg

個人的には MZ-2200 のデータレコーダが最も欲しいかな。。
MZ-2200 も手元にありますが、現在の機器に接続するためのボード等を自作するとしても、データレコーダだけはどうにも出来ないので。。

2016/01/11(月)今度は、未来から過去へ・・・orz

2017/10/12 19:12 はんかくさい
年を跨ぐ際の処理がダメダメ・・
この画面は、
https://www.basekernel.co.jp/pc/weather/disaster/index.html にて、1/25 昼すぎまで楽しめます(ばき☆)

そのほかの記載内容は問題ないですが、暖・寒候期予報の表示だけは昨年の寒候期予報のままで、更新が上手くいっていません。。
UTF-8 環境下で文字列判定に「~」を含めると上手くいかないことが原因として判明しています。2/25 の暖候期予報発表時に上手く更新できるかどうか・・です。

20160112.png

2015/11/16(月)半完成品

2017/10/12 19:10 電子工作
製作した基板の動作確認をして、すべて確認済みとなったので依頼元へ持っていきます。
問題は現場への設置で、ケース・バイ・ケースと思われるので、後日、この現場設置作業に出向くことになるんでないか、と思っています。
20151116.jpg