総合手引 | セクション 1 | オプション |
電子暗号表モード (electronic code book mode (ECB)) 以外のすべてのモードは 初期化ベクトル (initialization vector) を必要とし、 指定されない場合は 0 ベクトルが使われます。 コマンドラインに key (鍵) を指定しない場合は、対話的に入力を求めます (詳しくは getpass(3) を参照して下さい)。
オプションは次の通りです:
| |
鍵と初期化ベクトル文字列は ASCII 文字列として扱われ、 "0X", "0x", "0B", "0b" ではじまる文字列に対する特別の変換はされません。 このフラグは、鍵と初期化ベクトルの 両方 に作用します。 | |
| |
電子暗号表モード (ECB) で動作します。 | |
| |
入力を復号化します。 | |
| |
N ビット の新しい暗号化フィードバックモード (CFB) で動作します。 現状では N は 7 以上 56 以下の 7 の倍数であることが必要です (この制限は新しい暗号化フィードバックモード (CFB) の仕様には 適合しません)。 | |
| |
N ビット の暗号化フィードバックモード (CFB) で動作します。 現状では N は 8 以上 64 以下の 8 の倍数であることが必要です (この制限は標準の暗号化フィードバックモード (CFB) の仕様には適合しません)。 | |
| |
key を暗号化方式の鍵とします。 | |
| |
入力を N ビットのメッセージ認証コード (message authentication code (MAC)) で処理します。 N は 1 以上 64 以下であることが必要です。 N が 8 の倍数でないとき、 MAC のビット長が 8 の倍数になるまで 0 のビットが付け加えられます。 出力は必ず MAC になります。 MAC は暗号化ブロック連鎖モード (CBC) あるいは 暗号化フィードバックモード (CFB) でのみ有効です。 | |
| |
N ビット の出力フィードバックモード (output feedback mode (OFB)) で動作します。 現状では N は 8 以上 64 以下の 8 の倍数であることが必要です (この制限は OFB モードの仕様には適合しません)。 | |
| |
パリティビットのリセットをしません。 このフラグにより鍵のパリティビットは入力された通りに解釈され、 それぞれの文字を奇数パリティに直すことはしません。 鍵が ASCII 文字列の場合にのみ使用されます。 | |
| |
初期化ベクトルとして 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 の鍵であっても再設定しないようにできることを注意しておきます。
DES は非常に強固な暗号法とされており、 table lookup attacks, key search attacks, および Hellman's time-memory tradeoff (これらはすべてたいへんな手間と時間を要します) を除けば、 公の文献に関する限り DES を突破する解析法は知られていません。 鍵の選択と鍵そのものの保安が bdes の信頼性を決定するものと信じて間違いありません。
電子暗号表 (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 でも既定動作は同様ですが、コマンドラインから指定して変更できます。
Federal Information Processing Standard #46, Data Encryption Standard, January 1977.
,Federal Information Processing Standard #81, DES Modes of Operation, December 1980.
,Cryptography and Data Security, , 1982.
,Technical Report PCS-TR-91-158, Implementation Notes on bdes(1), 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 アルゴリズムに固有の性質です (
Advances in Cryptology \- Crypto '86 Proceedings, , pp. 9-32, Cycle structure of the DES with weak and semi-weak keys, 1987.
を参照)。 , ,BDES (1) | June 29, 1993 |
総合手引 | セクション 1 | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | To err is human...to really foul up requires the root password. | ” |