電子暗号表モード (electronic code book mode (ECB)) 以外のすべてのモードは 初期化ベクトル (initialization vector) を必要とし、 指定されない場合は 0 ベクトルが使われます。 コマンドラインに key (鍵) を指定しない場合は、対話的に入力を求めます (詳しくは getpass(3) を参照して下さい)。
オプションは次の通りです:
鍵と初期化ベクトルは 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 を突破する解析法は知られていません。 鍵の選択と鍵そのものの保安が の信頼性を決定するものと信じて間違いありません。
電子暗号表 (ECB) モードおよび暗号化ブロック連鎖 (CBC) モードでは、 平文が 64 ビット (8 バイト = 1 ブロック) 単位で暗号化されます。 平文のファイルが正しく暗号化されることを保証するために、 は (内部動作として) 1 から 8 バイトを追加し、 そのうちの最後のバイトは、最後のブロックが平文のファイルからの入力として 何バイトを読み込んで暗号化したかを示します。 したがって、復号化のときには最後のブロックは 0 から 7 文字までの 平文データと、末尾のバイトとしてその文字数を含みます。 復号化の際にファイルの最後のバイトが 0 から 7 までの間の整数でなかった場合、 ファイルが破壊されているか間違った鍵が指定されたかのどちらかであることに 注意してください。 同様の機構が OFB と CFB のモードでも利用されていますが、 それらでは入力の長さがモードサイズの倍数であることが必要なだけで、 最後のバイトは、0 か、モードサイズとして使われるバイト数から 1 を減じた数値になります。 (これはモードサイズが 8 の倍数であることが必要な理由の一つです。)
Sun の実装と異なり、最後のブロック内の利用されないバイトは不定ではなく、 一つ前のブロックの対応するバイトと同じになります。 これにより、暗号化の強度を損なうことなく、処理速度と移植性を改善しています。
鍵が ASCII 文字列で入力された場合、 鍵の各文字のパリティビットは奇数パリティとなるように設定されます。 Sun の実装と異なり、 2 進あるいは 16 進の鍵もコマンドラインで指定できますが、 その場合、パリティビットが再設定されることは ありません 。 これにより任意のビットパターンを鍵として試すことができます。
Sun の実装では常に初期化ベクトルを 0 (全部 0) としています。 でも既定動作は同様ですが、コマンドラインから指定して変更できます。
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.
鍵あるいは鍵の一覧がメモリに納められるので、 メモリを読み出せる場合は暗号化の安全性が損なわれる可能性があります。 さらに、 コマンドラインで鍵や初期化ベクトルを指定したときには、 プログラムの引数を表示するプログラムによって傍受される可能性もあります。 これを回避するために は引数を上書きしますが、 残念ながら、これらが競合することは明らかで、現状では回避できません。
ある種の鍵は潜在的な危険を持ち込むことになるので、 使用を避けるべきです。 これらの鍵は、 弱い鍵 (weak key) と やや弱い鍵 (semiweak key) と呼ばれており、以下のものです (16 進数表記で p を 0 あるいは 1 とし、 P を `e' あるいは `f' とする) :
これは
DES
アルゴリズムに固有の性質です (