パスワードは不可逆で保存しよう

社内インフラ

メールサーバーをDockerコンテナで再構築するときにインターネットを検索していると下記のような内容の記事を目にしました。

メールのパスワード認証をCRAM_MD5にするとサーバー側に平文(クリアテキスト)パスワードが必要になります。
平文(クリアテキスト)パスワードをそのままデータベースに保存するのは危険なので暗号化して保存しましょう。

ふむふむと一瞬納得しそうになって……、ちょっと、待ったぁぁ~~~。

パスワード認証をCRAM_MD5にする限り平文(クリアテキスト)パスワードが必要になります。
ということは、データベースに暗号化して保存したとしても、サーバーのどこかに復号化するためのキーが存在しますので、サーバーが平文(クリアテキスト)パスワードを持っていることに変わりはありません。
サーバーのデータのみ盗まれた場合は安全化かもしれませんが、復号化できるということはやはり危険です。

パスワードは不可逆(復号不能)で暗号化して保存するというのが最近のセキュリティの基本です。

メールサーバーにおいては、パスワードを不可逆で暗号化してデータベースに保存することを前提とするならば、パスワード認証はPLAINもしくはLOGINにするしかありません。
PLAINもしくはLOGIN認証では、平文(クリアテキスト)パスワードが伝送路に流れることになりますのでSSLによる伝送路の暗号化が必須となります。

弊社の受信メールサーバーはSSLでしか接続できないようにしています。

(参考)
CRAM_MD5のパスワード認証は、クライアント側がパスワードをキーとしてサーバーから送られてきたチャレンジ文字列(タイムスタンプ@サーバー名)のHMAC-MD5ハッシュ値を生成して、それをサーバーに返します。
パスワードそのものを表すような文字列が伝送路に現れないため、伝送路からパスワードが盗まれることはありません。

コメント

タイトルとURLをコピーしました