EN JA
BDES(1)
BDES(1) FreeBSD General Commands Manual BDES(1)

名称

bdesData Encryption Standard (DES) を使用して暗号化 / 復号化する

書式

bdes [ -abdp][ -F N][ -f N][ -k key][ -m N][ -o N][ -v vector]

解説

DES 暗号は、もはや安全であると考えられるべきではありません。より新しい代わりとなるものを使用することを考慮してください。

bdes ユーティリティは、代替の暗号化フィードバックモード (alternative cipher feedback mode (CFB)) と両方の認証モードを含んで、 FIPS PUB 81 で規定されるすべての DES モードの操作を実装しています。 bdes ユーティリティは標準入力を読んで標準出力へ書き込みます。オプションを指定しなければ、入力は暗号化ブロック連鎖モード (cipher block chaining mode (CBC)) で暗号化されます。暗号化と復号化に同一の鍵を使うことで平文を復元します。

電子暗号表モード (electronic code book mode (ECB)) 以外のすべてのモードは初期化ベクトル (initialization vector) を必要とし、指定されない場合は 0 ベクトルが使われます。コマンドラインに key (鍵) を指定しない場合は、対話的に入力を求めます (詳しくは getpass(3) を参照して下さい)。

オプションは、次の通りです:

-a
鍵と初期化ベクトル文字列は ASCII 文字列として扱われ、“ 0X”, “ 0x”, “ 0B”と“ 0b”ではじまる文字列に対する特別の変換はされません。このフラグは、鍵と初期化ベクトルの 両方 に作用します。
-b
電子暗号表モード (ECB) で動作します。
-d
入力を復号化します。
-F N
N ビットの代替の暗号化フィードバックモード (CFB) で動作します。現状では N は 7 以上 56 以下の 7 の倍数であることが必要です (この制限は、代替の暗号化フィードバックモード (CFB) の仕様には適合しません)。
-f N
N ビットの暗号化フィードバックモード (CFB) で動作します。現状では N は 8 以上 64 以下の 8 の倍数であることが必要です (この制限は標準の暗号化フィードバックモード (CFB) の仕様には適合しません)。
-k key
key を暗号化方式の鍵とします。
-m N
入力を N ビットのメッセージ認証コード (message authentication code (MAC)) で処理します。 N は 1 以上 64 以下であることが必要です。 N が 8 の倍数でないとき、 MAC のビット長が 8 の倍数になるまで 0 のビットが付け加えられます。出力は必ず MAC になります。 MAC は暗号化ブロック連鎖モード (CBC) あるいは暗号化フィードバックモード (CFB) でのみ有効です。
-o N
N-ビットの出力フィードバック (output feedback (OFB)) モードを使用します。現状では N は 8 以上 64 以下の 8 の倍数であることが必要です (この制限は OFB モードの仕様には適合しません)。
-p
パリティビットのリセットをしません。このフラグにより鍵のパリティビットは入力された通りに解釈され、それぞれの文字を奇数パリティに直すことはしません。鍵が ASCII 文字列の場合にのみ使用されます。
-v vector
初期化ベクトルとして vector を使用します。 vector は鍵と同じ方式で解釈されます。 vector は電子暗号表モード (ECB) では無効です。

鍵と初期化ベクトルは ASCII 文字列として与えられ、そのままのビット並びとして扱われます。“ 0X”あるいは“ 0x”ではじまっている場合、ビット並びを表す 16 進数値として扱われます。“ 0B”あるいは“ 0b”ではじまっている場合は、ビット並びを表す 2 進数値として扱われます。どちらの場合でも、最初の 64 ビットまでが鍵あるいは初期化ベクトルとして使われ、 64 ビットに満たない場合は 64 ビットになるまで 0 のビットが追加されます。

DES 標準に従い、鍵文字列の各文字の最下位ビットは削られます。ほとんどの ASCII 文字の最上位ビットは 0 なので、単純に下位ビットを削ると、有効な鍵空間の大きさは 2^56 個から 2^48 個まで縮小します。これを防ぐため、最上位ビットは最下位ビットに部分的に依存する関数であることが必要です。例えば、最上位ビットは奇数パリティを満たすような値になるように設定されるようにする方法があります。これで鍵空間の大きさが保持されます。このパリティビットの再設定は、鍵が 2 進数あるいは 16 進数で与えられた場合には 行なわれません。 さらに、 ASCII の鍵であっても再設定しないようにできることを注意しておきます。

実装に関する注

このプログラムと互換性のあるソフトウェアを実装したい人は、以下の点に注意してください。このソフトウェアは Sun Microsystems, Inc. が公開している data encryption standard の実装と互換であるものとされています。

電子暗号表 (ECB) モードおよび暗号化ブロック連鎖 (CBC) モードでは、平文が 64 ビット (8 バイト = 1 ブロック) 単位で暗号化されます。平文のファイルが正しく暗号化されることを保証するために、 bdes は (内部動作として) 1 から 8 バイトを追加し、そのうちの最後のバイトは、最後のブロックが平文のファイルからの入力として何バイトを読み込んで暗号化したかを示します。したがって、復号化のときには最後のブロックは 0 から 7 文字までの平文データと、末尾のバイトとしてその文字数を含みます。復号化の際にファイルの最後のバイトが 0 から 7 までの間の整数でなかった場合、ファイルが破壊されているか間違った鍵が指定されたかのどちらかであることに注意してください。同様の機構が OFB と CFB のモードでも利用されていますが、それらでは入力の長さがモードサイズの倍数であることが必要なだけで、最後のバイトは、0 か、モードサイズとして使われるバイト数から 1 を減じた数値になります。 (これはモードサイズが 8 の倍数であることが必要な理由の一つです。)

Sun の実装と異なり、最後のブロック内の利用されないバイトは不定ではなく、一つ前のブロックの対応するバイトと同じになります。これにより、暗号化の強度を損なうことなく、処理速度と移植性を改善しています。

鍵が ASCII 文字列で入力された場合、鍵の各文字のパリティビットは奇数パリティとなるように設定されます。 Sun の実装と異なり、 2 進あるいは 16 進の鍵もコマンドラインで指定できますが、その場合、パリティビットが再設定されることは ありません 。これにより任意のビットパターンを鍵として試すことができます。

Sun の実装では常に初期化ベクトルを 0 (全部 0) としています。 bdes でも既定動作は同様ですが、コマンドラインから指定して変更できます。

関連項目

getpass(3) Data Encryption Standard, Federal Information Processing Standard #46, National Bureau of Standards, U.S. Department of Commerce, Washington DC, January 1977. DES Modes of Operation, Federal Information Processing Standard #81, National Bureau of Standards, U.S. Department of Commerce, Washington DC, December 1980. Dorothy Denning, Cryptography and Data Security, Addison-Wesley Publishing Co., Reading, MA, 1982. Matt Bishop, Implementation Notes on bdes(1), Technical Report PCS-TR-91-158, Department of Mathematics and Computer Science, Dartmouth College, Hanover, NH 03755, April 1991.

免責条項

THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.

バグ

鍵あるいは鍵の一覧がメモリに納められるので、メモリを読み出せる場合は暗号化の安全性が損なわれる可能性があります。さらに、コマンドラインで鍵や初期化ベクトルを指定したときには、プログラムの引数を表示するプログラムによって傍受される可能性もあります。これを回避するために bdes は引数を上書きしますが、残念ながら、これらが競合することは明らかで、現状では回避できません。

ある種の鍵は潜在的な危険を持ち込むことになるので、使用を避けるべきです。これらの鍵は、 弱い鍵 (weak key)やや弱い鍵 (semiweak key) と呼ばれており、以下のものです (16 進数表記で p を 0 あるいは 1 とし、 P を‘ e’あるいは‘ f’とする) :

0x0p0p0p0p0p0p0p0p 0x0p1P0p1P0p0P0p0P
0x0pep0pep0pfp0pfp 0x0pfP0pfP0pfP0pfP
0x1P0p1P0p0P0p0P0p 0x1P1P1P1P0P0P0P0P
0x1Pep1Pep0Pfp0Pfp 0x1PfP1PfP0PfP0PfP
0xep0pep0pfp0pfp0p 0xep1Pep1pfp0Pfp0P
0xepepepepepepepep 0xepfPepfPfpfPfpfP
0xfP0pfP0pfP0pfP0p 0xfP1PfP1PfP0PfP0P
0xfPepfPepfPepfPep 0xfPfPfPfPfPfPfPfP

これは、 DES アルゴリズムに固有のものです。 Moore and Simmons, Cycle structure of the DES with weak and semi-weak keys, Advances in Cryptology - Crypto '86 Proceedings, pp. 9-32, Springer-Verlag New York, 1987. を参照してください。

September 20, 2013 FreeBSD