aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man3/crypt.3
blob: e260c162f0cfbb4c28c69ce69756ce19bc3e32e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
.\" 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.
.\"
.\"	%Id: crypt.3,v 1.6 1997/02/22 14:40:30 peter Exp %
.\"
.\" Manual page, using -mandoc macros
.\"
.\" $FreeBSD$
.Dd March 9, 1994
.Dt CRYPT 3
.Os
.Sh 名称
.Nm crypt ,
.Nm setkey ,
.Nm encrypt ,
.Nm des_setkey ,
.Nm des_cipher
.Nd DES 暗号化
.Sh 書式
.Fd #include <unistd.h>
.Ft char *
.Fn crypt "const char *key" "const char *setting"
.Ft int
.Fn setkey "const char *key"
.Ft int
.Fn encrypt "char *block" "int flag"
.Ft int
.Fn des_setkey "const char *key"
.Ft int
.Fn des_cipher "const char *in" "char *out" "long salt" "int count"
.Sh 解説
.Fn crypt
関数は、パスワードの暗号化を行います。これは
.Tn NBS
データ暗号化規格
(NBS Data Encryption Standard)
に由来するものです。キー検索の試みを
防止するために、その他のコードが追加されています。
.Nm crypt
の最初の引数は
.Dv NUL
で終了するストリングです
(
通常は、ユーザが入力したパスワード
)
。
2 番めの
引数は、長さが
9 バイトのキャラクタ配列であり、アンダースコア
(``_'')
に、
4 バイトの反復カウントと
4 バイトの
salt
が続いたもので構成されます。反復
.Fa count
と
.Fa salt
の両方が、キャラクタ当たり
6 ビットでエンコードされます。
最下位ビットが最初です。それぞれ
0 から
63 の値が、
``./0-9A- Za-z''
キャラクタによってエンコードされます。
.Pp
.Fa salt
を使用して、
16777216 個の可能な方法の
1 つで、
.Tn DES
アルゴリズム内に
無秩序を引き起こします
(
特に、
.Ar salt
のビット
.Em i
が設定されており、
.Em i
ビットと
.Em i+24
ビットが
.Tn DES
"E" ボックス出力でスワップされる場合です
)
。
.Ar key
は
8 キャラクタのグループに分けられ
(
最後の短いグループは
NULL
でパッドされます
)
、各キャラクタの下位の
7 ビット
(
グループごとに
56 個
)
が、以降のように
DES
キーを形成するのに使用されます。
56 ビットの最初のグループが、初期
DES
キーになります。その他の各グループについては、グループビットおよび
DES
キー自体の暗号化の排他的論理和
(XOR)
が次の
DES
キーになります。最後に、
最終的な
DES
キーが使用されて
64 ビット定数の
.Ar count
累積暗号化が
実行されます。返される値は、
.Dv NUL
で終了するストリングで、長さは
20 バイト、
.Ar setting
にエンコードされた
64 ビットの暗号化が続いたもので構成されます。
.Pp
.Xr crypt 3
の過去のバージョンとの互換性のために、
.Ar setting
は、上記のように
エンコードされた
2 バイトの
salt
で構成できます。この場合、反復
.Ar count
25
が
使用され、摂動の少ない
.Tn DES
が利用でき、最長
8 キャラクタの
.Ar key
が
使用されます。返される値は
.Dv NUL
で終了する長さが
13 バイトのストリング
です。
.Pp
関数
.Fn encrypt
、
.Fn setkey
、
.Fn des_setkey
、および
.Fn des_cipher
では、
.Tn DES
アルゴリズムに、制限されたアクセスができます。
.Fn setkey
へのキー
.Ar key
引数は、
64 キャラクタのバイナリ値
(
数字の
0 または
1)
の配列です。
56 ビットの
キーはこの配列から導出されます。そのためには、配列を
8 つのグループに
分割し、各グループ内の最後のビットを無視します。
.Pp
.Fn encrypt
の引数
.Fa block
も、バイナリ値の
64 キャラクタ配列です。
.Fa flag
の値が
0 の場合、引数
.Fa block
は暗号化されます。そうでない場合は、
暗号解除されます。暗号化または暗号解除は、それを処理するために
.Fn setkey
が
指定したキーを使用した後、オリジナルの配列
.Fa block
内に返されます。
.Pp
.Fn des_setkey
関数と
.Fn des_cipher
関数は高速ですが、
.Fn setkey
および
.Fn encrypt
より移植性は劣ります。
.Fn des_setkey
への引数は、長さが
8 の
キャラクタ配列です。各キャラクタの
.Em 最下位
ビットは無視され、各キャラクタの
次の
7 ビットが連結されて
56 ビットのキーを生成します。関数
.Fn des_cipher
は、
.Tn DES
の
.Fa count
反復の
.Xr abs 3
を使用して
.Fa in
で
8 キャラクタ内に保存された
64 ビットを暗号化
(
または
.Fa count
が負の場合は暗号解除
)
し、
64 ビットの結果を
8 キャラクタで
.Fa out
に保存します。
.Fa salt
は、前記のように
.Tn DES
の摂動を
指定します。
.Pp
関数
.Fn crypt
は、処理が成功した場合は暗号化された値を指すポインタを返し、
処理が失敗した場合は
NULL
を返します。関数
.Fn setkey
、
.Fn encrypt
、
.Fn des_setkey
、および
.Fn des_cipher
は、処理が成功した場合は
0 を返し、処理が
失敗した場合は
1 を返します。歴史的には、関数
.Fn setkey
と
.Fn encrypt
はどのような値も返しませんでした。これらの関数が戻り値を指定されたのは、
主にハードウェアサポートが備わっているものの使用はできない場合、または
通常の方針の愚かさのために
DES
が利用できない場合に、システムを
区別するためです。
.Pp
.Fn crypt
を使用するには、
.Nm libcrypt
ライブラリとのリンクが必要です。
.Fn setkey
、
.Fn encrypt
、
.Fn des_setkey
、および
.Fn des_cipher
は、
.Nm libcipher
ライブラリ内に
見つかります。
(
標準の
C
ライブラリ、
.Nm libc
にはこれらのルーチンへのかけらしか
入っていません
)
。
.Sh 関連項目
.Xr login 1 ,
.Xr passwd 1 ,
.Xr getpass 3 ,
.Xr passwd 5
.Rs
.%T "Mathematical Cryptology for Computer Scientists and Mathematicians"
.%A Wayne Patterson
.%D 1987
.%N ISBN 0-8476-7438-X
.Re
.Rs
.%T "Password Security: A Case History"
.%A R. Morris
.%A Ken Thompson
.%J "Communications of the ACM"
.%V vol. 22
.%P pp. 594-597
.%D Nov. 1979
.Re
.Rs
.%T "DES will be Totally Insecure within Ten Years"
.%A M.E. Hellman
.%J "IEEE Spectrum"
.%V vol. 16
.%P pp. 32-39
.%D July 1979
.Re
.Sh 歴史
ローターを採用した
.Fn crypt
関数は、
.At v6
で現れました。現在の
スタイルの
.Fn crypt
は、最初に
.At v7
に現れました。
.Sh バグ
.Fn des_setkey
への引数の各キャラクタの
.Em 最下位
ビットを
落とすのはとんでもないことです。
.Pp
.Fn crypt
関数は、結果を内部の静的オブジェクトに残し、そのオブジェクトを指す
ポインタを返します。後で
.Fn crypt
を呼び出すと、同じオブジェクトが
修正されます。