bdes.1 revision 1.2.8.1

This commit is contained in:
Kazuo Horikawa 2001-03-24 19:04:19 +00:00
parent 6bea22d836
commit 873267ff76
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=9068

View file

@ -33,6 +33,7 @@
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.\" @(#)bdes.1 8.1 (Berkeley) 6/29/93 .\" @(#)bdes.1 8.1 (Berkeley) 6/29/93
.\" %FreeBSD: src/secure/usr.bin/bdes/bdes.1,v 1.2.8.2 2001/01/16 15:36:41 ru Exp %
.\" jpman %Id: bdes.1,v 1.3 1999/10/03 08:35:01 horikawa Stab % .\" jpman %Id: bdes.1,v 1.3 1999/10/03 08:35:01 horikawa Stab %
.\" .\"
.\" word: initialization vector 初期化ベクトル[bdes.1] .\" word: initialization vector 初期化ベクトル[bdes.1]
@ -42,125 +43,145 @@
.\" word: message authentication code メッセージ認証コード[bdes.1] .\" word: message authentication code メッセージ認証コード[bdes.1]
.\" word: DISCLAIMER 免責条項(.SHタイトル) .\" word: DISCLAIMER 免責条項(.SHタイトル)
.\" .\"
.TH BDES 1 "June 29, 1993" .Dd June 29, 1993
.UC 6 .Dt BDES 1
.SH 名前 .Os
bdes \- Data Encryption Standard による暗号化 / 復号化 .Sh 名称
.SH 書式 .Nm bdes
.nf .Nd "Data Encryption Standard による暗号化 / 復号化"
.ft B .Sh 書式
bdes [ \-abdp ] [ \-F N ] [ \-f N ] [ \-k key ] .Nm
.ti +5 .Op Fl abdp
[ \-m N ] [ \-o N ] [ \-v vector ] .Op Fl F Ar N
.ft R .Op Fl f Ar N
.fi .Op Fl k Ar key
.SH 解説 .Op Fl m Ar N
.I bdes .Op Fl o Ar N
は FIPS PUB 81 で規定されるすべての DES モード処理を実装しています。 .Op Fl v Ar vector
.Sh 解説
.Nm
%T "FIPS PUB 81"
で規定されるすべての
.Tn DES
モード処理を実装しています。
新しい暗号化フィードバックモード (alternative cipher feedback mode 新しい暗号化フィードバックモード (alternative cipher feedback mode
(CFB)) と両方の認証モードも含まれます。 (CFB)) と両方の認証モードも含まれます。
.I bdes .Nm
は標準入力を読んで標準出力へ書き出します。 は標準入力を読んで標準出力へ書き出します。
オプションを指定しなければ、 オプションを指定しなければ、
入力は暗号化ブロック連鎖モード (cipher block chaining mode (CBC)) で 入力は暗号化ブロック連鎖モード (cipher block chaining mode (CBC)) で
暗号化されます。 暗号化されます。
暗号化と復号化に同一の鍵を使うことで平文を復元します。 暗号化と復号化に同一の鍵を使うことで平文を復元します。
.PP .Pp
電子暗号表モード (electronic code book mode (ECB)) 以外のすべてのモードは 電子暗号表モード (electronic code book mode (ECB)) 以外のすべてのモードは
初期化ベクトル (initialization vector) を必要とし、 初期化ベクトル (initialization vector) を必要とし、
指定されない場合はゼロベクトルが使われます。 指定されない場合はゼロベクトルが使われます。
コマンドラインに コマンドラインに
.I key .Ar key
(鍵) を指定しない場合は、対話的に入力を求めます (詳しくは (鍵) を指定しない場合は、対話的に入力を求めます (詳しくは
.IR getpass (3) .Xr getpass 3
を参照して下さい)。 を参照して下さい)。
.PP .Pp
オプションは次の通りです: オプションは次の通りです:
.TP .Bl -tag -width indent
\-a .It Fl a
鍵と初期化ベクトル文字列は ASCII 文字列として扱われ、 鍵と初期化ベクトル文字列は
``0X'', ``0x'', ``0B'', および ``0b'' ではじまる文字列に対する .Tn ASCII
特別の変換はされません。 文字列として扱われ、
.Dq Li 0X ,
.Dq Li 0x ,
.Dq Li 0B ,
.Dq Li 0b
ではじまる文字列に対する特別の変換はされません。
このフラグは、鍵と初期化ベクトルの このフラグは、鍵と初期化ベクトルの
.I 両方 .Em 両方
に作用します。 に作用します。
.TP .It Fl b
\-b
電子暗号表モード (ECB) で動作します。 電子暗号表モード (ECB) で動作します。
.TP .It Fl d
\-d
入力を復号化します。 入力を復号化します。
.TP .It Fl F Ar N
\-F .Ar N
.IR N ビット ビット
の新しい暗号化フィードバックモード (CFB) で動作します。 の新しい暗号化フィードバックモード (CFB) で動作します。
現状では 現状では
.I N .Ar N
は 7 以上 56 以下の 7 の倍数であることが必要です は 7 以上 56 以下の 7 の倍数であることが必要です
(この制限は新しい暗号化フィードバックモード (CFB) の仕様には (この制限は新しい暗号化フィードバックモード (CFB) の仕様には
適合しません)。 適合しません)。
.TP .It Fl f Ar N
\-f .Ar N
.IR N ビット ビット
の暗号化フィードバックモード (CFB) で動作します。 の暗号化フィードバックモード (CFB) で動作します。
現状では 現状では
.I N .Ar N
は 8 以上 64 以下の 8 の倍数であることが必要です は 8 以上 64 以下の 8 の倍数であることが必要です
(この制限は標準の暗号化フィードバックモード (CFB) の仕様には適合しません)。 (この制限は標準の暗号化フィードバックモード (CFB) の仕様には適合しません)。
.TP .It Fl k Ar key
\-k .Ar key
.I key
を暗号化方式の鍵とします。 を暗号化方式の鍵とします。
.TP .It Fl m Ar N
\-m
入力を 入力を
.I N .Ar N
ビットのメッセージ認証コード (message authentication code (MAC)) ビットのメッセージ認証コード (message authentication code (MAC))
で処理します。 で処理します。
.I N .Ar N
は 1 以上 64 以下であることが必要です。 は 1 以上 64 以下であることが必要です。
.I N .Ar N
が 8 の倍数でないとき、 が 8 の倍数でないとき、
MAC のビット長が 8 の倍数になるまで 0 のビットが付け加えられます。 MAC のビット長が 8 の倍数になるまで 0 のビットが付け加えられます。
出力は必ず MAC になります。 出力は必ず MAC になります。
MAC は暗号化ブロック連鎖モード (CBC) あるいは MAC は暗号化ブロック連鎖モード (CBC) あるいは
暗号化フィードバックモード (CFB) でのみ有効です。 暗号化フィードバックモード (CFB) でのみ有効です。
.TP .It Fl o Ar N
\-o .Ar N
.IR N ビット ビット
の出力フィードバックモード (output feedback mode (OFB)) で動作します。 の出力フィードバックモード (output feedback mode (OFB)) で動作します。
現状では 現状では
.I N .Ar N
は 8 以上 64 以下の 8 の倍数であることが必要です は 8 以上 64 以下の 8 の倍数であることが必要です
(この制限は OFB モードの仕様には適合しません)。 (この制限は OFB モードの仕様には適合しません)。
.TP .It Fl p
\-p
パリティビットのリセットをしません。 パリティビットのリセットをしません。
このフラグにより鍵のパリティビットは入力された通りに解釈され、 このフラグにより鍵のパリティビットは入力された通りに解釈され、
それぞれの文字を奇数パリティに直すことはしません。 それぞれの文字を奇数パリティに直すことはしません。
鍵が ASCII 文字列の場合にのみ使用されます。 鍵が
.TP .Tn ASCII
\-v 文字列の場合にのみ使用されます。
.It Fl v Ar vector
初期化ベクトルとして 初期化ベクトルとして
.IR vector .Ar vector
を使用します。 を使用します。
vector は鍵と同じ方式で解釈されます。 vector は鍵と同じ方式で解釈されます。
vector は電子暗号表モード (ECB) では無効です。 vector は電子暗号表モード (ECB) では無効です。
.PP .El
鍵と初期化ベクトルは ASCII 文字列として与えられ、 .Pp
鍵と初期化ベクトルは
.Tn ASCII
文字列として与えられ、
そのままのビット並びとして扱われます。 そのままのビット並びとして扱われます。
``0X'' あるいは ``0x'' ではじまっている場合、ビット並びを表す 16 進数値 .Dq Li 0X
あるいは
.Dq Li 0x
ではじまっている場合、ビット並びを表す 16 進数値
として扱われます。 として扱われます。
``0B'' あるいは ``0b'' ではじまっている場合は、ビット並びを表す 2 進数値 .Dq Li 0B
あるいは
.Dq Li 0b
ではじまっている場合は、ビット並びを表す 2 進数値
として扱われます。 として扱われます。
どちらの場合でも、 どちらの場合でも、
最初の 64 ビットまでが鍵あるいは初期化ベクトルとして使われ、 最初の 64 ビットまでが鍵あるいは初期化ベクトルとして使われ、
64 ビットに満たない場合は 64 ビットになるまで 0 のビットが追加されます。 64 ビットに満たない場合は 64 ビットになるまで 0 のビットが追加されます。
.PP .Pp
DES 標準に従い、鍵文字列の各文字の最下位ビットは削られます。 .Tn DES
ほとんどの ASCII 文字の最上位ビットは 0 なので、 標準に従い、鍵文字列の各文字の最下位ビットは削られます。
ほとんどの
.Tn ASCII
文字の最上位ビットは 0 なので、
単純に下位ビットを削ると、 単純に下位ビットを削ると、
有効な鍵空間の大きさは 2\u\s-356\s0\d 個から 2\u\s-348\s0\d 個まで縮小します。 有効な鍵空間の大きさは 2^56 個から 2^48 個まで縮小します。
これを防ぐため、 これを防ぐため、
最上位ビットは最下位ビットに部分的に依存する関数であることが必要です。 最上位ビットは最下位ビットに部分的に依存する関数であることが必要です。
例えば、最上位ビットは奇数パリティを満たすような値になるように 例えば、最上位ビットは奇数パリティを満たすような値になるように
@ -168,28 +189,32 @@ DES ɸ
これで鍵空間の大きさが保持されます。 これで鍵空間の大きさが保持されます。
このパリティビットの再設定は、鍵が 2 進数あるいは 16 進数で このパリティビットの再設定は、鍵が 2 進数あるいは 16 進数で
与えられた場合には 与えられた場合には
.I 行なわれません。 .Em 行なわれません。
さらに、 さらに、
ASCII の鍵であっても再設定しないようにできることを注意しておきます。 .Tn ASCII
.PP の鍵であっても再設定しないようにできることを注意しておきます。
DES は非常に強固な暗号法とされており、 .Pp
.Tn DES
は非常に強固な暗号法とされており、
table lookup attacks, key search attacks, および table lookup attacks, key search attacks, および
Hellman's time-memory tradeoff Hellman's time-memory tradeoff
(これらはすべてたいへんな手間と時間を要します) を除けば、 (これらはすべてたいへんな手間と時間を要します) を除けば、
公の文献に関する限り DES を突破する解析法は知られていません。 公の文献に関する限り
.Tn DES
を突破する解析法は知られていません。
鍵の選択と鍵そのものの保安が 鍵の選択と鍵そのものの保安が
.IR bdes .Nm
の信頼性を決定するものと信じて間違いありません。 の信頼性を決定するものと信じて間違いありません。
.SH 実装に関する注釈 .Sh 実装に関する注釈
このプログラムと互換性のあるソフトウェアを実装したい人は、 このプログラムと互換性のあるソフトウェアを実装したい人は、
以下の点に注意してください。 以下の点に注意してください。
このソフトウェアは Sun Microsystems, Inc. が公開している このソフトウェアは Sun Microsystems, Inc. が公開している
data encryption standard の実装と互換であるものとされています。 data encryption standard の実装と互換であるものとされています。
.PP .Pp
電子暗号表 (ECB) モードおよび暗号化ブロック連鎖 (CBC) モードでは、 電子暗号表 (ECB) モードおよび暗号化ブロック連鎖 (CBC) モードでは、
平文が 64 ビット (8 バイト = 1 ブロック) 単位で暗号化されます。 平文が 64 ビット (8 バイト = 1 ブロック) 単位で暗号化されます。
平文のファイルが正しく暗号化されることを保証するために、 平文のファイルが正しく暗号化されることを保証するために、
.I bdes .Nm
は (内部動作として) 1 から 8 バイトを追加し、 は (内部動作として) 1 から 8 バイトを追加し、
そのうちの最後のバイトは、最後のブロックが平文のファイルからの入力として そのうちの最後のバイトは、最後のブロックが平文のファイルからの入力として
何バイトを読み込んで暗号化したかを示します。 何バイトを読み込んで暗号化したかを示します。
@ -203,55 +228,55 @@ data encryption standard
最後のバイトは、0 か、モードサイズとして使われるバイト数から 最後のバイトは、0 か、モードサイズとして使われるバイト数から
1 を減じた数値になります。 1 を減じた数値になります。
(これはモードサイズが 8 の倍数であることが必要な理由の一つです。) (これはモードサイズが 8 の倍数であることが必要な理由の一つです。)
.PP .Pp
Sun の実装と異なり、最後のブロック内の利用されないバイトは不定ではなく、 Sun の実装と異なり、最後のブロック内の利用されないバイトは不定ではなく、
一つ前のブロックの対応するバイトと同じになります。 一つ前のブロックの対応するバイトと同じになります。
これにより、暗号化の強度を損なうことなく、処理速度と移植性を改善しています。 これにより、暗号化の強度を損なうことなく、処理速度と移植性を改善しています。
.PP .Pp
鍵が ASCII 文字列で入力された場合、 鍵が
.Tn ASCII
文字列で入力された場合、
鍵の各文字のパリティビットは奇数パリティとなるように設定されます。 鍵の各文字のパリティビットは奇数パリティとなるように設定されます。
Sun の実装と異なり、 Sun の実装と異なり、
2 進あるいは 16 進の鍵もコマンドラインで指定できますが、 2 進あるいは 16 進の鍵もコマンドラインで指定できますが、
その場合、パリティビットが再設定されることは その場合、パリティビットが再設定されることは
.I ありません .Em ありません
これにより任意のビットパターンを鍵として試すことができます。 これにより任意のビットパターンを鍵として試すことができます。
.PP .Pp
Sun の実装では常に初期化ベクトルを 0 (全部 0) としています。 Sun の実装では常に初期化ベクトルを 0 (全部 0) としています。
.I bdes .Nm
でも既定動作は同様ですが、コマンドラインから指定して変更できます。 でも既定動作は同様ですが、コマンドラインから指定して変更できます。
.SH 関連項目 .Sh 関連項目
crypt(3), getpass(3) .Xr crypt 3 ,
.sp .Xr getpass 3
.IR "Data Encryption Standard" , .Rs
Federal Information Processing Standard #46, .%T "Data Encryption Standard"
National Bureau of Standards, .%R "Federal Information Processing Standard #46"
U.S. Department of Commerce, .%Q "National Bureau of Standards, U.S. Department of Commerce, Washington DC"
Washington DC .%D "January 1977"
(Jan. 1977) .Re
.sp .Rs
.IR "DES Modes of Operation" , .%T "DES Modes of Operation"
Federal Information Processing Standard #81, .%R "Federal Information Processing Standard #81"
National Bureau of Standards, .%Q "National Bureau of Standards, U.S. Department of Commerce, Washington DC"
U.S. Department of Commerce .%D "December 1980"
Washington DC .Re
(Dec. 1980) .Rs
.sp .%A "Dorothy Denning"
Dorothy Denning, .%B "Cryptography and Data Security"
.IR "Cryptography and Data Security" , .%Q "Addison-Wesley Publishing Co., Reading, MA"
Addison-Wesley Publishing Co., .%D 1982
Reading, MA .Re
\(co1982. .Rs
.sp .%A "Matt Bishop"
Matt Bishop, .%T "Implementation Notes on bdes(1)"
.IR "Implementation Notes on bdes(1)" , .%R "Technical Report PCS-TR-91-158"
Technical Report PCS-TR-91-158, .%Q "Department of Mathematics and Computer Science, Dartmouth College, Hanover, NH 03755"
Department of Mathematics and Computer Science, .%D "April 1991"
Dartmouth College, .Re
Hanover, NH 03755 .Sh 免責条項
(Apr. 1991). .Bd -literal
.SH 免責条項
.nf
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -263,48 +288,61 @@ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. SUCH DAMAGE.
.fi .Ed
.SH バグ .Sh バグ
DES が今後の数年間も安全であるかどうかについて激しい論争がありました。 .Tn DES
が今後の数年間も安全であるかどうかについて激しい論争がありました。
専用ハードウェアの出現により前述の各種攻撃方法の費用が低減されることは 専用ハードウェアの出現により前述の各種攻撃方法の費用が低減されることは
あり得るので、 あり得るので、
これらの攻撃方法が計算量の点から非現実的とはもはや言えません。 これらの攻撃方法が計算量の点から非現実的とはもはや言えません。
.PP .Pp
鍵あるいは鍵の一覧がメモリに納められるので、 鍵あるいは鍵の一覧がメモリに納められるので、
メモリを読み出せる場合は暗号化の安全性が損なわれる可能性があります。 メモリを読み出せる場合は暗号化の安全性が損なわれる可能性があります。
さらに、 さらに、
コマンドラインで鍵や初期化ベクトルを指定したときには、 コマンドラインで鍵や初期化ベクトルを指定したときには、
プログラムの引数を表示するプログラムによって傍受される可能性もあります。 プログラムの引数を表示するプログラムによって傍受される可能性もあります。
これを回避するために これを回避するために
.I bdes .Nm
は引数を上書きしますが、 は引数を上書きしますが、
残念ながら、これらが競合することは明らかで、現状では回避できません。 残念ながら、これらが競合することは明らかで、現状では回避できません。
.PP .Pp
ある種の鍵は潜在的な危険を持ち込むことになるので、 ある種の鍵は潜在的な危険を持ち込むことになるので、
使用を避けるべきです。 使用を避けるべきです。
これらの鍵は、 これらの鍵は、
.I "弱い鍵 (weak key)" .Em "弱い鍵 (weak key)"
.I "やや弱い鍵 (semiweak key)" .Em "やや弱い鍵 (semiweak key)"
と呼ばれており、以下のものです と呼ばれており、以下のものです
(16 進数表記で p を 0 あるいは 1 とし、P を e あるいは f とする) : (16 進数表記で
.sp .Ar p
.nf を 0 あるいは 1 とし、
.in +10n .Ar P
.ta \w'0x0p0p0p0p0p0p0p0p\0\0\0'u+5n
0x0p0p0p0p0p0p0p0p 0x0p1P0p1P0p0P0p0P .Ql e
0x0pep0pep0pfp0pfp 0x0pfP0pfP0pfP0pfP あるいは
0x1P0p1P0p0P0p0P0p 0x1P1P1P1P0P0P0P0P .Ql f
0x1Pep1Pep0Pfp0Pfp 0x1PfP1PfP0PfP0PfP とする) :
0xep0pep0pfp0pfp0p 0xep1Pep1pfp0Pfp0P .Bl -column "0x0p0p0p0p0p0p0p0p" -offset indent
0xepepepepepepepep 0xepfPepfPfpfPfpfP .It "0x0p0p0p0p0p0p0p0p 0x0p1P0p1P0p0P0p0P"
0xfP0pfP0pfP0pfP0p 0xfP1PfP1PfP0PfP0P .It "0x0pep0pep0pfp0pfp 0x0pfP0pfP0pfP0pfP"
0xfPepfPepfPepfPep 0xfPfPfPfPfPfPfPfP .It "0x1P0p1P0p0P0p0P0p 0x1P1P1P1P0P0P0P0P"
.fi .It "0x1Pep1Pep0Pfp0Pfp 0x1PfP1PfP0PfP0PfP"
.in -10n .It "0xep0pep0pfp0pfp0p 0xep1Pep1pfp0Pfp0P"
.sp .It "0xepepepepepepepep 0xepfPepfPfpfPfpfP"
これは DES アルゴリズムに固有の性質です。 .It "0xfP0pfP0pfP0pfP0p 0xfP1PfP1PfP0PfP0P"
(Moore と Simmons の .It "0xfPepfPepfPepfPep 0xfPfPfPfPfPfPfPfP"
\*(LqCycle structure of the DES with weak and semi-weak keys,\*(Rq .El
.I "Advances in Cryptology \- Crypto '86 Proceedings" , .Pp
Springer-Verlag New York, \(co1987, pp. 9-32 を参照) これは
.Tn DES
アルゴリズムに固有の性質です (
.Rs
.%A Moore
.%A Simmons
.%T "Cycle structure of the DES with weak and semi-weak keys"
.%B "Advances in Cryptology \- Crypto '86 Proceedings"
.%Q "Springer-Verlag New York"
.%D 1987
.%P "pp. 9-32"
.Re
を参照)。