307 lines
8.5 KiB
Groff
307 lines
8.5 KiB
Groff
.\" FreeSec: libcrypt for NetBSD
|
|
.\"
|
|
.\" Copyright (c) 1994 David Burren
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 4. Neither the name of the author nor the names of other contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" %FreeBSD: src/lib/libcrypt/crypt.3,v 1.6.2.12 2001/12/17 10:08:29 ru Exp %
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.\" Manual page, using -mandoc macros
|
|
.\"
|
|
.Dd January 19, 1997
|
|
.Dt CRYPT 3
|
|
.Os
|
|
.Sh 名称
|
|
.Nm crypt
|
|
.Nd トラップドア暗号化
|
|
.Sh ライブラリ
|
|
.Lb libcrypt
|
|
.Sh 書式
|
|
.In unistd.h
|
|
.Ft char *
|
|
.Fn crypt "const char *key" "const char *salt"
|
|
.Ft const char *
|
|
.Fn crypt_get_format "void"
|
|
.Ft int
|
|
.Fn crypt_set_format "const char *string"
|
|
.Sh 解説
|
|
.Fn crypt
|
|
関数は、パスワードのハッシュ化を行ない、キー検索の試みを
|
|
思いとどまらせるためのコードを付加します。
|
|
ハッシュ化には異なるアルゴリズムを使用することができます。
|
|
.\"
|
|
.\" NOTICE:
|
|
.\" If you add more algorithms, make sure to update this list
|
|
.\" and the default used for the Traditional format, below.
|
|
.\"
|
|
現在含まれるアルゴリズムは、
|
|
.Tn NBS
|
|
.Tn Data Encryption Standard (DES) ,
|
|
.Tn MD5 ,
|
|
.Tn Blowfish
|
|
です。
|
|
.Tn DES
|
|
や
|
|
.Tn Blowfish
|
|
がインストールされているかどうか、また、
|
|
デフォルトを変更するために
|
|
.Fn crypt_set_format
|
|
がすでに呼び出されているかどうかにより、
|
|
使用されるアルゴリズムは salt
|
|
(モジュール化暗号フォーマット (Modular Crypt Format (MCF)) に従います)
|
|
のフォーマットに依存します。
|
|
.Pp
|
|
.Nm
|
|
の最初の引数はハッシュ化のためのデータ (通常はパスワードです) で、
|
|
ヌル文字で終了する文字列です。
|
|
2 番めの引数は salt で、次の 3 個のうちのいずれかの形式です。
|
|
.Pp
|
|
.Bl -tag -width Traditional -compact -offset indent
|
|
.It Extended
|
|
アンダスコア
|
|
.Pq Dq _
|
|
で始まる場合、鍵の解釈も salt の解釈もともに、次に概要を説明する
|
|
.Tn DES
|
|
拡張形式を使用します。
|
|
.It Modular
|
|
文字列
|
|
.Dq $digit$
|
|
で始まる場合、次に概要を説明する
|
|
モジュール化暗号フォーマット (MCF) を使用します。
|
|
.It Traditional
|
|
上のいずれにも該当しない場合、伝統的なフォーマット (Traditional Format)
|
|
を想定し、文字列全体 (または最初の部分) を salt として使用します。
|
|
.El
|
|
.Pp
|
|
どのルーチンも計算に時間が掛かる設計になっています。
|
|
.Tn Pentium
|
|
166/MMX で簡単なテストをすると、
|
|
.Tn DES
|
|
暗号化では、1 CPU 秒当たり暗号化を約 2640 回行ない、
|
|
MD5 暗号化では、1 CPU 秒当たり暗号化を約 62 回行ないました。
|
|
.Ss DES 拡張形式:
|
|
.Pp
|
|
鍵
|
|
.Ar key
|
|
は 8 文字からなるグループに分割されます (最後のグループにはナルバイトが
|
|
詰められます)。
|
|
各キャラクタの下位 7 ビット (グループごとに 56 ビット) が、
|
|
次に説明するようにして、
|
|
.Tn DES
|
|
キーを作るために用いられます。
|
|
最初のグループの 56 ビットは、
|
|
.Tn DES
|
|
鍵の初期値です。
|
|
その後のグループごとに、現在の
|
|
.Tn DES
|
|
鍵それ自身とそのグループのビットを XOR することで暗号化し、次の
|
|
.Tn DES
|
|
鍵とします。
|
|
.Pp
|
|
salt は 9 キャラクタの配列であり、アンダスコアの後ろに 4 バイトの
|
|
反復回数と 4 バイトの salt からなります。
|
|
これらは印字可能文字でエンコードされます。
|
|
6 ビットごとに 1 文字を対応させ、最下位キャラクタを最初にして、
|
|
エンコードされます。
|
|
0 から 63 までの値は ``./0-9A-Za-z'' としてエンコードされます。
|
|
これにより
|
|
.Fa count
|
|
と
|
|
.Fa salt
|
|
のそれぞれに 24 ビットを使うことができます。
|
|
.Pp
|
|
.Fa salt
|
|
は
|
|
.Tn DES
|
|
アルゴリズムに対し、16777216 通りまたは 4096 通り
|
|
(つまり、24 ビットまたは 12 ビット)
|
|
中の 1 通りという不規則性を導入します (
|
|
.Ar salt
|
|
のビット
|
|
.Em i
|
|
が設定されている場合、
|
|
.Tn DES
|
|
E-Box 出力中の
|
|
ビット
|
|
.Em i
|
|
とビット
|
|
.Em i+24
|
|
とが交換されます) 。
|
|
.Pp
|
|
.Tn DES
|
|
鍵を使い、64ビットの定数に
|
|
.Ar count
|
|
回 DES を繰り返し適用し暗号化します。
|
|
返される値は、
|
|
.Dv ヌル文字で終了する
|
|
文字列で、長さは
|
|
20 バイトまたは 13 バイト (にヌル文字が加わります) で、
|
|
.Ar salt
|
|
の後に、エンコードされた 64 ビットの暗号化を続いたもので
|
|
構成されます。
|
|
.Ss モジュール化暗号:
|
|
.Pp
|
|
salt が文字列
|
|
.Fa $digit$
|
|
から始まる場合は、モジュール化暗号フォーマット (MCF) が使用されます。
|
|
.Fa digit
|
|
は暗号化の際にどのアルゴリズムが使用されるかを表します。
|
|
その後ろのトークンが実際の salt として暗号化に用いられます。
|
|
salt の長さは 16 キャラクタに制限されています。
|
|
これは、返す出力の長さも _PASSWORD_LEN で制限されているからです。
|
|
salt はヌル文字かドル記号を末尾に置く必要があります。
|
|
ドル記号の後ろの文字はなんであれ無視されます。
|
|
.Pp
|
|
現在サポートするアルゴリズムは、
|
|
.Pp
|
|
.Bl -enum -compact -offset indent
|
|
.It
|
|
MD5
|
|
.It
|
|
Blowfish
|
|
.El
|
|
.Pp
|
|
これ以外の暗号化フォーマットは容易に追加できます。
|
|
salt の例として次のものがあります。
|
|
.Bl -tag -offset indent
|
|
.It Cm "$3$thesalt$rest"
|
|
.El
|
|
.Pp
|
|
.Ss "Traditional" 暗号化:
|
|
.Pp
|
|
.\"X The algorithm used will depend upon whether
|
|
使用されるアルゴリズムは、
|
|
.Fn crypt_set_format
|
|
.\"X has been called and whether a global default format has been specified.
|
|
がすでに呼び出されているか否か、グローバルデフォルトフォーマットが
|
|
すでに指定されているか否かに依存します。
|
|
.\"X Unless a global default has been specified or
|
|
グローバルデフォルトがあらかじめ指定されているか、
|
|
.Fn crypt_set_format
|
|
.\"X has set the format to something else, the built-in default format is
|
|
.\"X used.
|
|
で何か他のフォーマットを設定されているか、そのどちらでもない場合、
|
|
組み込みのデフォルトフォーマットが使用されます。
|
|
.\"X This is currently
|
|
現在のところ、これは、
|
|
.\"X .\"
|
|
.\"X .\" NOTICE: Also make sure to update this
|
|
.\"X .\"
|
|
.\"X DES
|
|
.\"X if it is available, or MD5 if not.
|
|
DES が使えるなら DES に、そうでないなら MD5 になります。
|
|
.Pp
|
|
.\"X How the salt is used will depend upon the algorithm for the hash. For
|
|
.\"X best results, specify at least two characters of salt.
|
|
salt をどのように用いるかはハッシュ化のアルゴリズムに依存します。
|
|
最高の結果を得るために、少なくとも 2 文字の salt を指定してください。
|
|
.Pp
|
|
.Fn crypt_get_format
|
|
.\"X function returns a constant string that represents the name of the
|
|
.\"X algorithm currently used.
|
|
関数は現在使用しているアルゴリズムを表す定数文字列を返します。
|
|
有効な値は、
|
|
.\"X Valid values are
|
|
.\"X .\"
|
|
.\"X .\" NOTICE: Also make sure to update this, too, as well
|
|
.\"X .\"
|
|
.Ql des ,
|
|
.Ql blf ,
|
|
.Ql md5
|
|
です。
|
|
.Pp
|
|
.Fn crypt_set_format
|
|
関数は指定する
|
|
.Fa string
|
|
に従い、デフォルトエンコードフォーマットを設定します。
|
|
.Pp
|
|
グローバルデフォルトフォーマットは、
|
|
.Pa /etc/auth.conf
|
|
ファイルで、
|
|
.Va crypt_default
|
|
属性を使い設定することができます。
|
|
.Sh 戻り値
|
|
.Fn crypt
|
|
は、処理が成功した場合、暗号化された値を指すポインタを返します。
|
|
処理が失敗した場合、NULL を返します。
|
|
注意: これは通常の挙動ではありません。
|
|
AT&T の
|
|
.Fn crypt
|
|
は常に文字列を指すポインタを返します。
|
|
.Pp
|
|
.Fn crypt_set_format
|
|
.\"X will return 1 if the supplied encoding format was valid.
|
|
は、与えられたエンコードフォーマットが正当であれば、1 を返します。
|
|
.\"X Otherwise, a value of 0 is returned.
|
|
それ以外の場合、値 0 が返されます。
|
|
.Sh 関連項目
|
|
.Xr login 1 ,
|
|
.Xr passwd 1 ,
|
|
.Xr auth_getval 3 ,
|
|
.Xr cipher 3 ,
|
|
.Xr getpass 3 ,
|
|
.Xr auth.conf 5 ,
|
|
.Xr passwd 5
|
|
.Sh バグ
|
|
.Fn crypt
|
|
関数は静的データへのポインタを返します。
|
|
そして、以後の
|
|
.Fn crypt
|
|
の呼び出しは同じデータを変更します。
|
|
.Fn crypt_set_format
|
|
も同様に静的データを変更します。
|
|
.Sh 歴史
|
|
ロータを採用した
|
|
.Fn crypt
|
|
関数は、
|
|
.At v6
|
|
で登場しました。
|
|
現在のスタイルの
|
|
.Fn crypt
|
|
は、
|
|
.At v7
|
|
ではじめて登場しました。
|
|
.Pp
|
|
.Tn DES
|
|
セクションのコード (FreeSec 1.0) は、アメリカ合衆国のみで使える
|
|
.Nx
|
|
libcrypt 暗号化ライブラリに対して、そのような障害のない置き換えとして
|
|
アメリカ合衆国の外で開発されました。
|
|
.Sh 作者
|
|
.An -nosplit
|
|
元は
|
|
.An David Burren Aq davidb@werj.com.au
|
|
によって書かれました。
|
|
その後の追加、更新は、
|
|
.An Poul-Henning Kamp ,
|
|
.An Mark R V Murray ,
|
|
.An Kris Kennaway ,
|
|
.An Brian Feldman ,
|
|
.An Paul Herman ,
|
|
.\"X and
|
|
.An Niels Provos
|
|
によって行なわれました。
|