EN JA
NTP-KEYGEN(8)
NTP-KEYGEN(8) FreeBSD System Manager's Manual NTP-KEYGEN(8)

名称

ntp-keygenntpd のためのキー (鍵) 生成プログラム

書式

ntp-keygen [ -deGgHIMnPT][ -c scheme][ -i name][ -p password][ -S [ RSA | DSA]][ -s name][ -v nkeys]

解説

このプログラムは、NTPv4 認証と識別スキームによって使用される暗号データファイルを生成します。それは対称キー暗号で使用される MD5 キーファイルを生成します。さらに、OpenSSL ソフトウェアライブラリがインストールされているなら、公開キー暗号で使用されるキー、証明書と識別ファイルを生成します。これらのファイルは、インターネット標準のセキュリティインフラストラクチャと互換性があるクッキー暗号化、デジタル署名、チャレンジ/レスポンス識別アルゴリズムで使用されます。

すべてのファイルは、PEM でエンコードされた印刷可能な ASCII 形式であるので、他のサイトと認証局へのメールに MIME アタッチメント (添付) として、それらを埋め込むことができます。デフォルトでは、ファイルは、暗号化されていません。 -p password オプションは、以前に暗号化されたファイルのための、書き込みパスワードを指定し、 -q password オプションは、読み込みパスワードを指定します。暗号化されたファイルとパスワードを読み込むなら、パスワードのための ntp-keygen プログラムがプロンプトを出すことは、不足しているか、または不正確です。暗号化されたファイルの読み込みが成功し、書き込みパスワードが指定されていないなら、読み込みパスワードが、デフォルトの書き込みパスワードとして使用されます。

ntpd(8) 設定コマンド crypto pw password は、以前に暗号化されたファイルのための読み込みパスワードを指定します。パスワードが不足しているか、または不正確であるなら、デーモンは、直ちに期限切れとなります。便宜のために、ファイルが以前に暗号化されていたなら、デフォルトの読み込みパスワードは、プログラムを実行しているホストの名前です。以前の書き込みパスワードがホスト名として指定されているなら、そのホストは、明白なパスワードなしでこれらのファイルを読み込むことができます。

ファイル名は、接頭辞 ntpkey_ で始まり、接尾辞 _hostname.filestamp で終ります、ここで hostname は、所有者名であり、通常、Unix gethostname() ルーチンで返される文字列です、そして filestamp は、ファイルが生成されたときの 10 進数字の NTP 秒です。 rm ntpkey* コマンドで直ちにすべてのファイルを削除することができるか、または rm *filestamp コマンドで特定の時間に生成されたすべてのファイルを削除することができるので、これは、独自性を保証して、保守管理を簡素化します。設定ミスの危険をさらに減少させるために、ファイルの最初の 2 行にコメントとしてファイル名、生成日付と時間を含んでいます。

すべてのファイルは、デフォルトで、通常、NFS でマウントされたネットワークで共有されたファイルシステムである、主要なディレクトリ /usr/local/etc にインストールされます。設定コマンドによって主要なディレクトリの実際の位置とそれぞれのファイルを上書きすることができますが、これは、推薦されません。通常、各ホストのためのファイルは、そのホストによって生成されて、そのホストによって単に使用されますが、例外は、存在し、このページの後で注意します。

通常、ホストキー、サインキーと識別パラメータを含めてプライベート値を含むファイルは、root に対して読み込み書き込み専用のパーミッションがあります。一方、他のパブリック値を含むものは、全体の読み込み可能パーミッションがあります。代わりに、プライベート値を含むファイルを暗号化することができ、これらのファイルは、全体の読み込み可能パーミッションがあり、これらは、共有ファイルシステムの保守管理をを簡素化します。ユニークは、ホスト名とファイル名の拡張によって保障されているので、 NFS サーバとクライアント依存のファイルを同じ共有ディレクトリにすべてインストールすることができます。

推奨案は、ファイルをインストールするとき、ファイル名の拡張を保存することと、このページのほかの場所で指定された一般的な名前から生成されたファイルにソフトリンクを張ることです。これによって、新しいファイルの世代は、単にリンクを変更することによってアクティブにできます。リンクが存在しているなら、ntpd は、ファイルスタンプを抽出するためにファイル名に続きます。リンクが存在していないなら、 ntpd(8) は、ファイル自体からファイルスタンプを抽出します。これによって、クライアントは、ファイルと世代時間が常にカレントであるか検証できます。 ntp-keygen プログラムは、同時に生成されたすべてのファイルのために同じタイムスタンプ拡張子を使用するので、各世代は、区別され、モニタしているデータで直ちに認識することができます。

プログラムの実行

ntp-keygen プログラムを実行する最も安全な方法は、直接 root としてログインすることです。お勧めの手順は、キーとなるディレクトリを通常 /usr/local/etc に変更し、プログラムを実行することです。初めて実行するとき、またはすべての ntpkey ファイルが削除されているなら、プログラムは、RSA ホストキーファイルと多くの場合、これがあれば十分である、適合する RSA-MD5 証明書ファイルを生成します。また、プログラムは、一般的な名前からそれぞれのファイルにソフトリンクを生成します。再び実行されるなら、プログラムは、同じホストキーファイルを使用しますが、新しい証明書ファイルとリンクを生成します。

ホストキーは、必要であるとき、クッキーを暗号化するために使用され、そして RSA タイプでなければなりません。また、デフォルトで、ホストキーは、シグネチャ (署名) を暗号化するために使用されるサインキーです。必要であるときに、異なったサインキーを指定することができ、 RSA または DSA タイプのいずれかを指定できます。デフォルトで、メッセージダイジェストタイプは、MD5 ですが、 MD2、MD5、SHA、SHA1、MDC2 と RIPE160 メッセージダイジェストアルゴリズムを使用するものを含んで、OpenSSL ライブラリによってサポートされたサインキータイプとメッセージダイジェストタイプの任意の組み合わせも指定することができます。しかしながら、証明書で指定されたスキームは、サインキーと互換性がなければなりません。任意のダイジェストアルゴリズムを使用する証明書は、RSA サインキーと互換性があります。しかしながら、SHA と SHA1 証明書だけが DSA サインキーと互換性があります。

プライベート/パブリックキーファイルと証明書は、他の OpenSSL アプリケーションとたぶん同様な他のライブラリと互換性があります。それらに由来する (1 つまたは複数の) 証明書要求は、実在の業界の慣習と互換性があるべきですが、何人かのユーザは、X509v3 拡張フィールドの解釈がいくらか寛容であることがわかるかもしれませんが。しかしながら、識別パラメータファイルは、他のファイルのようにエンコードされますが、たぶん Autokey 以外のどれとも互換性がありません。

root 以外でプログラムを実行し、root を装うために Unix の su コマンドを使用することは、デフォルトで OpenSSL ライブラリは、ユーザホームディレクトリのランダムシード (種) ファイル .rnd を検索するので、適切に動作しないかもしれません。しかしながら、ルートディレクトリに一番便利な .rnd のみあるはずなので、 /.rnd へのパスとして OpenSSL ライブラリによって使用される $RANDFILE 環境変数を定義するのが便利です。

root としてキーをインストールすることは、root でさえ、 NFS クライアントが共有されたキーディレクトリに書き込むことができないので、 NFS でマウントされた共有ファイルシステムで動作しないかもしれません。この場合は、NFS クライアントは、 keysdir コマンドを使用して /etc のような別のディレクトリのファイルを指定することができます。これらのデータは、Autokey プロトコルによって自動的に取得されるので、 1 つのクライアントは、他のクライアントまたはサーバのキーと証明書を読み込む必要はありません。

通常、暗号ファイルは、それらを使用するホストによって生成されますが、信頼されているエージェント (TA) が他のホストのためにこれらのファイルを生成させることは可能です。しかしながら、そのような場合、ファイルは、常に暗号化されるべきです。サブジェクト名と信頼される名前は、ファイルを生成したホストのホスト名をデフォルトとしますが、コマンドラインオプションによって変更することができます。それぞれ、証明書のサブジェクトと発行フィールドとして、所有者名と信頼されている名前を指定することは便利です。また、信頼されている名前は、識別ファイルのために使用されますが、所有者名は、ホストとサインキーファイルのために使用されます。

信頼されているホストとグループ

それぞれの暗号の設定は、 ntp.conf(5)認証コマンド セクションで説明されるように、cryptotype と呼ばれる、シグネチャスキームと識別スキームの選択を必要とします。デフォルトの cryptotype は、RSA 暗号化、MD5 メッセージダイジェストと TC 識別を使用します。最初に、他のすべてのホストが直接的または間接的に同期を導く 1 つ以上の低い層 (low-stratum) の信頼のあるホストを含む NTP サブネットを設定します。信頼されたホストは、証明書を信頼します。他のすべてのホストは、証明書を信頼しません。これらのホストは、自動的で動的に 1 つ以上の信頼されたホストのための正式な証明書トレイル (追跡) を構築します。信頼されたグループは、直接的または間接的に信頼されたホストにおける証明書トレイルの終りがある、すべてのホストの集合です。トレイルは、 ntp.conf(5)自動 NTP 設定オプション セクションで説明された静的な設定ファイルエントリまたは動的な手段で定義されます。

root としてのそれぞれの信頼されたホストでは、キーディレクトリに変更します。新たなファイルセット (fileset) を保障するためには、すべての ntpkey ファイルを削除します。そして、キーと信頼された証明書を生成するために、 ntp-keygen -T 実行します。同じように行う他のすべてのホストでは、キーと信頼されない証明書を生成するために -T フラグを省きます。完了したとき、最も低い層で始まって、ツリーをワークアップする (まとめる) NTP デーモンを開始します。サブネット中に証明書トレイルを例示するための Autokey のためにいくらかの時間がかかりますが、環境を設定することは、完全に自動です。

デフォルトでなく異なったサインキーまたは異なったダイジェスト/シグネチャのスキームを使用する必要があるなら、 -S type タイプオプションで ntp-keygen を実行します、ここで type は、 RSA または DSA のいずれかです。ほとんどの場合、DSA サインがある証明書が使用されているとき、これを行う必要があります。デフォルトでなく異なった証明書スキームを使用する必要があるなら、必要に応じて -c scheme オプションと選択された schementp-keygen を実行します。 ntp-keygen が再びこれらのオプションなしで実行されるなら、同じスキームとサインキーを使用して新しい証明書を生成します。

環境を設定した後に、正しい間隔を拡張するためだけなら、時々証明書を更新することは、賢明です。既存のキーを使用して新しい生成するためにこれまでのように、同じフラグで ntp-keygen を単に実行します。しかしながら、ホストまたは、サインキーを変更されるなら、 ntpd(8) を再開するべきです。 ntpd(8) が再開されるとき、任意の新しいファイルをロードして、プロトコルを再開します。他の依存するホストは、プロトコルが再開する時点で、シグネチャがリフレッシュされるまで、いつもののとおりに継続します。

識別スキーム

Autonomous Authentication ページで述べられているように、デフォルト TC 識別スキームは、仲介者の攻撃に対して弱いです。しかしながら、“Identification Schemes” (識別スキーム) ページ ( http://www.eecis.udel.edu/%7emills/keygen.html で多分利用可能) で記述されている PC, IFF, GQ と MV を含んで、利用可能なより安全な識別スキームがあります。これらのスキームは、TA、1 つ以上の信頼されたホストといくつかの信頼されていないホストに基づいています。信頼されたホストは、残っているホストが、そのホストでその終りの信頼されたホストと証明書トレイルによって提供された値を使用して識別 (dentity) を検証する間に、TA によって提供された値を使用して識別を検証します。また、信頼されたホストの名前は、信頼された証明書で su group の名前とサブジェクトと発行された名前です。 TA は、この意味で信頼されたホストが必要ではありませんが、しかししばしば必要となる場合もあります。

いくつかのスキームでは、サーバとクライアントのための別々のキーがあります。また、サーバは、別のサーバのクライアントとなるかもしれませんが、クライアントは、別のクライアントのためのサーバとなるはずはありません。一般的に、サーバとクライアントの両方として動作している信頼されたホストと信頼されていないホストは、サーバとクライアントキーの両方を含むパラメータファイルがあります。クライアントだけとして動作しているホストは、クライアントキーだけを含むキーファイルがあります。

PC スキームは、グループ内の 1 つの信頼されたホストだけをサポートします。信頼されたホスト alice では、ホストキーファイル ntpkey_RSAkey_alice.filestamp と信頼されたプライベート証明書ファイル ntpkey_RSA-MD5_cert_alice.filestamp を生成するために ntp-keygen -P -p password を実行します。すべてのグループのホストに両方のファイルをコピーします。それらは、他のスキームで生成されるファイルを置き換えます。それぞれのホスト bob で、一般的な名前 ntpkey_host_bob からホストキーファイルへ、およびソフトリンク ntpkey_cert_bob からプライベート証明書ファイルへソフトリンクを貼ります。一般的なリンクは、bob にありますが、信頼されたホスト alice によって生成されたファイルを指すことに注意してください。このスキームでは、それらをグループの他のすべてのホストにコピーしないでキーまたは証明書のいずれかをリフレッシュすることはできません。

IFF スキームのためには、キーと証明書を生成ために TC スキームのように続行し、すべてのグループのホストのためには、次に、グループのすべての信頼されたホストのためには、 IFF パラメータファイルを生成します。訳注: 原文の文章がおかしくて訳せません。信頼されたホスト alice では、サーバとクライアントキーの両方を含んでいる her パラメータファイル ntpkey_IFFpar_alice.filestamp を作り出すために ntp-keygen -T -I -p password を実行します。このファイルを、サーバとクライアントの両方として動作するすべてのグループのホストにコピーし、一般的な ntpkey_iff_alice からこのファイルにソフトリンクを貼ります。クライアントとして動作するためだけに制限されたホストがななら、これ以上何もすることはありません。 IFF スキームがキーと証明書に依存していないなら、必要に応じてこれらのファイルをリフレッシュすることができます。

rogue (ならず者) クライアントにパラメータファイルがあるなら、正式なサーバのふりをして、仲介者の脅威が存在していかもしれません。この脅威を排除するために、クライアントキーをパラメータファイルから抽出して、すべての制限されたクライアントに配信することができます。 alice で、パラメータファイルを生成した後に、 ntp-keygen -e を実行し、出力をファイルまたはメールプログラムにパイプで渡します。このファイルをすべての制限されたクライアントにコピーするか、またはメールします。これらのクライアントで、一般的な ntpkey_iff_alice からこのファイルへのソフトリンクを貼ります。さらにキーの整合性を保護するために、秘密のパスワードで各ファイルを暗号化することができます。

GQ スキームのためにはキーと証明書を生成ために TC スキームのように続行し、すべてのグループのホストのためには、次に、グループのすべての信頼されたホストのためには、 IFF パラメータファイルを生成します。訳注: 原文の文章がおかしくて訳せません。信頼されたホスト alice で、サーバとクライアントキーの両方を含んでいる her パラメータファイル ntpkey_GQpar_alice.filestamp を作り出すために ntp-keygen -T -G -p password を実行します。このファイルを、すべてのグループのホストにコピーし、一般的な ntpkey_gq_alice からこのファイルにソフトリンクを貼ります。さらに、それぞれのホスト bob で、一般的な ntpkey_gq_bob からこのファイルにソフトリンクを貼ります。 GQ スキームが同時に GQ パラメータファイルと証明書を更新するとき、必要に応じてキーと証明書を再生成することができます。

MV スキームのために、すべてのグループのホストのためのキーと証明書を生成する TC スキームのように続行します。例として、trish は、TA、いくつかの信頼されたたホストの一つ alice と her クライアントの一つ bob であると仮定します。 TA trish で、 ntp-keygen -V n -p password を実行します、ここで n は、パラメータファイル ntpkeys_MVpar_trish.filestamp とクライアントキーファイル ntpkeys_MVkeyd_trish.filestamp を作成する取り消すことができるキー (通常 5) の数です、ここで d は、キー番号 (0 < d < n) です。 alice にパラメータファイルをコピーし、一般的な ntpkey_mv_alice からこのファイルのソフトリンクを貼ります。クライアントキーファイルの 1 つを、her クライアントに後で配信するために alice にコピーします。それらは、すべて同じように動作するので、どのクライアントキーファイルを alice に持って行くのは問題ではありません。 alice は、クライアントキーファイルをすべての her クライアントにコピーします。クライアント bob で、一般的な ntpkey_mvkey_bob からクライアントキーファイルにソフトリンクを貼ります。 MV スキームがキーと証明書に依存していないとき、必要に応じてこれらのファイルをリフレッシュすることができます。

コマンドラインオプション

-c scheme
証明書メッセージダイジェスト/シグネチャ暗号化スキームを選択します。 scheme には、次の 1 つが指定できます: RSA-MD2, RSA-MD5, RSA-SHA, RSA-SHA1, RSA-MDC2, RSA-RIPEMD160, DSA-SHA または DSA-SHA1。 RSA スキームは、RSA サインキーとともに使用されなければなりません、そして DSA スキームは、DSA サインキーとともに使用されなければならないことに注意してください。このオプションがない場合のデフォルトは、 RSA-MD5 です。
-d
デバッグを有効にします。このオプションは、目のに優しい掲示板 (billboard) で作り出された暗号データを表示します。
-e
標準出力に IFF クライアントキーを書き込みます。これは、メールによって自動的なキー配信を目的としています。
-G
存在するかもしれない時代遅れの、GQ 識別スキームのためにパラメータとキーを生成します。
-g
既存の GQ パラメータを使用して、GQ 識別スキームのためのキーを生成します。 GQ パラメータがまだ存在していないなら、最初に、それらを作成します。
-H
存在するかもしれない時代遅れの、新しいホストキーを生成します。
-I
存在するかもしれない時代遅れの、IFF 識別スキームのためのパラメータを生成します。
-i name
サブジェクト名を name に設定します。これは、証明書およびホストとサインキーのためのファイル名のサブジェクトフィールドとして使用されます。
-M
存在するかもしれない時代遅れの、MD5 キーを生成します。
-P
プライベート証明書を生成します。デフォルトで、プログラムは、パブリック証明書を生成します。
-p password
password と DES-CBC アルゴリズムでプライベートデータを含む生成されたファイルを暗号化します。
-q
読み込みファイルのためのパスワードをパスワードに設定します。
-S [ RSA | DSA]
存在するかもしれない時代遅れの、指定されたタイプの新しいサインキーを生成します。デフォルトで、プログラムは、サインキーとしてホストキーを使用します。
-s name
発行名を name に設定します。これは、証明書と識別ファイルのためのファイル名で発行フィールドのために使用されます。
-T
信頼された証明書を生成します。デフォルトで、プログラムは、信頼されない証明書を生成します。
-V nkeys
Mu-Varadharajan (MV) 識別スキームのためのパラメータとキーを生成します。

ランダムシードファイル

すべての暗号サウンドキー生成スキームは、ライブラリルーチンによって使用される内部の疑似乱数生成器を初期化するために使用されるエントロピシードをランダム化する手段がなければなりません。 OpenSSL ライブラリは、このために指定されたランダムシードファイルを使用します。このファイルは、NTP デーモンと ntp-keygen プログラムを開始するとき、利用可能でなければなりません。サイトが、OpenSSL またはその仲間の OpenSSH をサポートするなら、たぶんこれを行う手段が既に利用可能である可能性があります。

エントロピが各世代のために進化しなければならないことを理解していることは重要です、さもなければ、乱数シーケンスが予測できるようになるでしょう。これを行うためにキーストローク間隔を使用することができるように、様々な手段は、外部のイベントに依存し、いくつかのシステムには、組み込みのエントロピソースがあります。適切な手段は、OpenSSL ソフトウェア文書に説明されていますが、このページの範囲の外です。

OpenSSL ライブラリによって使用されるエントロピシードは、NTP デーモンまたは ntp-keygen プログラムを開始するとき利用可能でなければならない、通常、 .rnd と呼ばれるファイルに含まれています。 NTP デーモンは、最初に、 crypto 設定コマンドの randfile サブコマンドで指定されたパスを使用してファイルを検索します。このように指定されないなら、または ntp-keygen プログラムを開始するとき、OpenSSL ライブラリは、root またはある他のユーザであるかにかかわらず、ユーザのホームディレクトリの RANDFILE 環境変数によって指定されたパスを使用してファイルを検索します。 RANDFILE 環境変数が存在していないなら、ライブラリは、ユーザのホームディレクトリの .rnd ファイルを検索します。ファイルが利用可能でないか、または書き込むことができないなら、デーモンは、システムログにメッセージを出力して終了し、プログラムは、適切なエラーメッセージで終了します。

暗号データファイル

他のすべてのファイル形式は、2 つの行で始まります。 1 番目は、生成されたホスト名とファイルスタンプ (filestamp) を含むファイル名を含んでいます。 2 番目は、従来の Unix 日付の形式で日付スタンプ (datestamp) を含んでいます。 # で始まる行は、コメントとみなされ、 ntp-keygen プログラムと ntpd(8) デーモンによって無視されます。暗号の値は、最初に ASN.1 規則を使用してエンコードされ、次に、必要なら、暗号化され、最終的に先行する PEM エンコードされた印刷可能な ASCII 形式が書き込まれ、 MIME 内容識別行が続きます。

対称キーファイルの形式は、後方互換性のために他のファイルといくらか異なっています。 DES-CBC が NTPv4 で推奨されないので、重要な唯一のキー形式は、 MD5 の英数字の文字列です。次の hte heard キーは、形式

keyno type key

で行ごとに 1 つに入れられます、ここで keyno は、範囲 1 から 65,535 の正の整数で、 type は、キー形式を定義する文字列 MD5 であり、 key は、16 文字以下の印刷可能な ASCII 文字列である、キー自体です。各文字は、空白と‘ #’文字を除いて、範囲 0x21 から 0x7f の印刷可能な 93 個の文字から選択されます。

一般的に、人間に解読可能な ASCII 形式でこれらのキーを指定することが適切であるので、 ntpq(8)ntpdc(8) プログラムによって使用されるキーは、プログラムによって要求されたパスワードに対してチェックされ、手動で入力されることに注意してください。

ntp-keygen プログラムは、MD5 対称キーファイル ntpkey_MD5key_hostname.filestamp を生成します。ファイルは、プライベートな共有キーを含んでいるので、root のみに可視であり、安全な手段によって他のサブネットホストに配信されるべきです。 NTP デーモンは、ファイル ntp.keys をロードするで、 ntp-keygen は、この名前から生成されたファイルにソフトリンクを貼ります。その次に、同様のソフトリンクは、手動によって貼られるか、または、自動化された手段で他のサブネットホストにインストールされなければなりません。このファイルは、Autokey バージョン 2 プロトコルで使用されませんが、 ntpq(8)ntpdc(8) ユーティリティによって使用されたいくつかのリモート設定コマンドを認証する必要があります。

バグ

いくつかの暗号の値を生成するのに、UltraSPARC のような最新のアーキテクチャでは、1 から数分まで、SPARC IPC のような、古いアーキテクチャでは、10 分から 1 時間以上かかるかもしれません。
May 17, 2006 FreeBSD