one-time-password authentication frequently asked questions $Id: otp-faq.txt,v 1.13 1997/12/21 17:37:06 itojun Exp $ Absolutely no warranty. Freely redistributable as long as there's no modification made. 編: 伊藤いとぢゅん純一郎 御協力: otp mailing listの皆様 コメントや追加は編者までemailで。 一般論 ====== Q: 使い捨てパスワードってなんですか? A: ふつうにunixマシン等にloginするときに利用されているunix password による認証方式には、 ネットワーク上を流れているパケットを盗み聞きされていると パスワードがすぐ盗まれる という大問題があります。 (註: パスワードを打つとき、文字は画面にでませんけども、「画面に でてない」だけで、login先のマシンまでネットワーク上をそのまま 流れています) 自分の端末 ------------------------------------ login先のサーバ <--- "Login: " ---> "johndoe\r\n" <--- "Password: " ---> "NaiShoDaze\r\n" | v 悪いひとが盗み聞きしていたら、 すぐ悪用されてしまいます! よって、通常のunix passwordによる認証は、以下のような場合にしか 使ってはいけません。 1. 自分の端末とlogin先のサーバの間に盗聴者がいないことが明白な場合 (例: 会社の部署内ネットワークでの通信) 2. 自分の端末とlogin先のサーバの間の通信が暗号化されている場合 (例: SSLtelnetやsshなどを使っている) unix passwordによる認証の問題点を回避するために、いくつかの アプローチがあります。 a. 自分の端末とlogin先のサーバの間の通信を暗号化する b. 使い捨てパスワードシステムを利用する a.はパスワードと同時に全ての通信内容を守れるため、比較的安全度が 高いのですが、自分の端末およびlogin先サーバに特殊なプログラムを あらかじめインストールしておく必要が有ります。このため、 他人の端末を借りる場合などには有効ではありません。 また、端末を借りる場合、「端末の所有者を信用できるか」という 問題も発生します。(*) (*)他人の端末自体に盗み聞きプログラムがインストールされている 可能性がありますので、そもそも所有者をしらない/所有者を 信用できない端末に秘密のパスワードを入力すること自体も 危険です。 通信を暗号化するための計算コストも結構ばかになりません。 b.が、この文書で取り扱う、「使い捨てパスワードシステム」です。 使い捨てパスワードシステムにはいくつかの方法がありますが、 otp(s/key)の場合を想定して述べます。(他の方法については別項参照) 1. サーバから種が送られてきます。 2. 種と自分の知っているないしょの文字列を使って、 使い捨てパスワードを「自分の端末側で」計算します。 f(種 + ないしょの文字列) -> 使い捨てパスワード 3. 使い捨てパスワードを自分の端末からサーバへ送ります。 4. サーバ側では、使い捨てパスワードを検証してloginの可否を決めます。 このとき、使い捨てパスワードは同じものが2度と登場しないように システムが作られていますので、盗み聞きされても悪用される心配は ありません。さらに、使い捨てパスワードを計算するためのソフトウェアは PDA等でも動作します。ので、使い捨てパスワード計算ソフトいりのPDAを 持ち歩いていれば、端末を借りる場合でも「端末信用できない問題」を 回避することができます。 自分の端末 ------------------------------------ login先のサーバ <--- "Login: " ---> "johndoe\r\n" <--- "種" <--- "Password: " (計算する) ---> "使い捨てパスワード" | v 盗み聞きしても、使えません。 簡単に表にまとめます。 暗号通信 使い捨てパスワード --- --- 利点 通信内容も守られる PDAで鍵生成できる 他人の端末を借りても安心 端末側のインストールが楽 計算コストはlogin時だけ 欠点 端末/サーバともインストールが必要 通信内容は守られない 他人の端末を借りられない 暗号化の計算コストがかかる Q: /bin/login以外に、使い捨てパスワード対応しているサービスには なにがありますか? A: popプロトコルをs/key対応させる、skey-popってのがあります。 A: httpの認証をSecureNet Key対応させるものがあります。 Q: 使い捨てパスワードについて議論する場所はありませんか? A: otp mailing listというのがあります。 加入方法などについては、majordomo@jp.win.or.jp宛てに、 info otp という*本文*のmailをだしてください。 Q: どこかに実装が集まってるところはありませんか? A: ftp://ftp.win.or.jp/pub/network/security/ ftp://ftp.st.ryukoku.ac.jp/pub/security/ ftp://ftp.aist-nara.ac.jp/pub/Security/tool/ 付近がおすすめです。 Q: rfcってどこにいったら見れるんですか? A: ftp://ftp.iij.ad.jp/pub/rfc/ あたりをみてください。 Q: internet-draftってどこにいったら見れるんですか? A: ftp://ftp.iij.ad.jp/pub/internet-drafts/ あたりをみてください。 Q: 他になにか参考になるドキュメントはありませんか? A: http://rigs.st.ryukoku.ac.jp/otp/ A: http://tethys.st.ryukoku.ac.jp/~kjm/security/otp/otp-supported-list A: 山本和彦、「転ばぬ先のセキュリティ(11) S/KEY」、 UNIXマガジン1995年3月号、ASCII. A: 山本和彦、「転ばぬ先のセキュリティ(23) OTP(One-Time Password)」、 UNIXマガジン1996年2月号、ASCII. Q: この文書に書いてあるftpサーバはネットワーク的に遠いのですが。 A: この文書に書いてあるftpサーバの多くは、日本にあるミラーサーバです。 また、ミラーサーバなんで古いファイルしか置いてないかもしれません。 必要に応じて、近所のftpサーバ、または配布元のftpサーバを使って下さい。 otp(s/key) ========= Q: otpとs/keyの違いはなんですか? A: s/keyはBellcoreでつくられました。S/KeyはBellcoreの商標です。 s/key自体については、rfc1760に詳しく解説されています。 s/keyのシステムをIETFの標準にするための活動が行われ、 otp(One-Time Password system)という名前で標準化されました。 otpについてはrfc1938に述べられています。 (名前が変わった理由は、特定の会社の商品名をIETFの標準にするのは よろしくないとかのいろんな理由によります) というわけで、rfc1760はinformational RFCで、rfc1938はstandard track RFCになっています。 s/keyとotpは、種を表示するためのプロンプト文字列などが 違うだけで、動作原理は全く同じです。 ですから、「s/keyがインストールされたサーバ」に、「otpの使い捨て鍵 計算プログラム」を使ってloginできます(もちろん逆も大丈夫)。 ただし、種を表示するためのプロンプト文字列が違うので、 s/keyのプロンプト文字列を監視するような賢いtelnetクライアントなどは、 もしかすると動かないかもしれません。 以下、この文書では、"otp"と書いたらs/keyの実装のことも含むことに しています。 Q: otpの運用上、注意することはなんですか? A: 種の初期化のとき、sequence numberの初期値はちいさめに。 同じseedを持つ使い捨て鍵を長いこと使っていると、 sequence numberがn以上の使い捨て鍵群から、sequence numberが n-1のときの使い捨て鍵を予想されて、攻撃される可能性が あります。sequence numberを200以上にするのはやめといた方が いいでしょう。 ユーザがこの注意を守れないようなら、初期化コマンド (opiepasswd/keyinit)に細工して、200以上指定したら200に するようにしちゃいましょう。 種の初期化は安全な端末から。 種の初期化をするときは生のパスワードが端末からサーバの間を 流れるので、安全な端末(例: サーバのconsole)からやりましょう。 種初期化プログラムには、使い捨てパスワードを使って初期化する モードがついている場合があります(keyinit -sとか)。 これを使えば、安全でない端末からでも大丈夫です。 passpharseは十分長く。 passphraseは8文字の制約ありませんので、長くしても いいんじゃないでしょうかね。長くしすぎて忘れないでね。 鍵計算に使うPDAは肌身離さず。 一部のPDA用鍵計算ソフトは、passphraseをメモリ中に 覚えていてくれます。これ、操作が楽になるのはいいんですが、 PDAを紛失したり目の届かないところに放置したりすると、 折角otpを使ってる意味がなくなります。 鍵計算は信頼できる端末で。 鍵計算は信頼できる端末を使ってやりましょう。 信頼できない端末で使い捨て鍵の計算をやると、passphraseを 盗まれる可能性があります。 Q: いつもX端末を使っているんですが、鍵計算はどうやったらいいんでしょう? X端末とマシンの間の通信は守れませんよね? A: ローカルネットワークが信頼できるなら、気にしなくていいです。 A: Xプロトコルによる通信を全部暗号化してしまえば問題ないです。 A: X端末を鍵の計算に使わなければ大丈夫。PDAとか、独立した端末とかを 使いましょう。 Q: otpを標準で実装しているいるOSにはなにがありますか? A: FreeBSDには標準でs/keyが入ってます。 A: BSDI BSD/OS(2.1以降)では/etc/login.confをいじるだけでs/keyが利用 できます。設定や使い方が若干普通ではないので、使い方については マニュアルをよく見て下さい。 Q: 実装がいろいろあって、コマンド名がばらばらなんですけど... A: はい、ばらばらです。とりあえず、こんなもんでしょうかね。 logdaemon opie BSD/OS --- --- --- 種の初期化(console) keyinit opiepasswd -c skeyinit 種の初期化(remote) keyinit -s opiepasswd skeyinit -s 使い捨て鍵の計算(md4) key opiekey skey 種の情報 keyinfo opieinfo skeyinfo otpでsu keysu opiesu su -a skey Q: otpに関する仕様書はどこですか? A: Haller, "The S/KEY One-Time Password System", rfc1760. Haller and Metz, "A One-Time Password System", rfc1938. Q: otpの鍵計算プログラムが欲しいんですけど。 A: unix向けなら、donkeyがいいでしょう。 ftp://ftp.aist-nara.ac.jp/pub/Security/tool/donkey/ A: 各種プラットフォーム向けは、 ftp://ftp.win.or.jp/pub/network/security/tool/skey-key/ ftp://ftp.aist-nara.ac.jp/pub/Security/tool/skey-key/ にあります。97/6/2現在、 MS-DOS Windows Hewlett-Packard HP95/100/200LX MacOS Apple Newton Message Pad Psion Sharp ザウルス(5000以降; 要ZauSH) 用が置いてあります。 MacOS用は ftp://ftp.nrl.navy.mil/pub/security/opie/contrib/macopie-1.1.hqx が新しいようですね。 A: USRobotics Pilot用もあります。 http://www.inforamp.net/~adam/pilot/a/pilototp.zip ftp://ftp.nrl.navy.mil/pub/security/opie/contrib/ A: Windows用の鍵計算プログラムdotkey95が以下にあります。 ftp://ftp.nec.co.jp/pub/packages/sotools/ ftp://ftp.win.or.jp/pub/network/security/tool/sotools/ A: java用もあるみたいです。 http://www.cs.umd.edu/~harry/jotp/ Q: いちいち鍵計算プログラムを手で呼ぶのがめんどくさいんですが、 自動でやってくれるtelnetクライアント等はないですか? A: Windows用のsockets DLL、otpsockがあります。winsockを通る データを監視し、チャレンジが通るとパスフレーズ入力ダイアログを 表示します。 ftp://ftp.nec.co.jp/pub/packages/sotools/ ftp://ftp.win.or.jp/pub/network/security/tool/sotools/ A: ptyを使う、unix用があったような気がする...どこだっけ... Q: otpの(サーバ側の)フリーな実装はありませんか? A: logdaemonというパッケージがあります。 もちろん鍵計算プログラムも含んでいます。 ftp://ftp.win.or.jp/pub/network/security/tool/logdaemon/ ftp://ftp.aist-nara.ac.jp/pub/Security/tool/logdaemon/ A: opieというパッケージがあります。 もちろん鍵計算プログラムも含んでいます。 ftp://ftp.nrl.navy.mil/pub/security/opie/ ftp://ftp.win.or.jp/pub/network/security/tool/logdaemon/ ftp://ftp.st.ryukoku.ac.jp/pub/security/tool/opie/ ftp://ftp.aist-nara.ac.jp/pub/Security/tool/opie/ SecureNet Key ============= Q: SecureNet Keyのフリーな実装はありませんか? A: logdaemonというパッケージがあります。 ftp://ftp.win.or.jp/pub/network/security/tool/logdaemon/ ftp://ftp.aist-nara.ac.jp/pub/Security/tool/logdaemon/