Bitslice DES
Bitslice DESとは - 並列処理することでスループットを稼ぐ
仕組み
DESのソフトウェア実装についての詳細解説は以下のサイトなどを参照ください。
- http://ruffnex.oc.to/kenji/xrea/des.txt (Kenji Aiko氏のサイトより)
DESにおいて最も時間を食っている箇所は「16段の暗号化オペレーション」で示されるループ処理です。十分に最適化された実装においても処理時間は全体の9割以上になります。 libdesやUFCなどのライブラリは、拡大転置・S-Box・縮小転置のテーブル参照を纏めておこなうことで、メモリ参照の回数を削減し性能を向上させています。
逆の発想で、1回の処理は遅くなるが複数のデータを並列処理することで性能を稼ごうというのがBitslice DESです。 nビットプロセッサをn並列動作のベクトル型1ビットマシンとみなし、まとめて実行します。現在、ほとんどのモダンなCPUは32bitもしくは64bitプロセッサですので、32並列、あるいは64並列で実行することができるわけです。
この並列化において問題となるのはS-BOXといわれるランダムテーブル参照処理です。 テーブル参照をするには、6ビットずつのブロックに再構成し、再度分解する必要があるからです。
S-BOXは入力は64通り6ビットの値を取り、出力は0〜15の4ビットとなります。 このテーブル参照処理と等価のビット入出力を全てビット論理演算の組み合わせで実装してしまうことで、都度ビット列を再構成するコストを大幅に減らし、DESのコアループの全ての処理をレジスタ幅分のビット数分の並列演算で実装できるわけです。
イスラエルの暗号学者であるEli Biham教授はこのアルゴリズムを、モダンなRISC向けの高速なDESの並列化実装として発表しました。
ビット論理演算の回数を減らす改良が何度も加えられ、現在はMatthew Kwan氏の実装が 多くのRISCプロセッサ向けとして最良といわれています。
SIMD命令の応用
Intel x86のMMX/SSE*やPowerPCのAltiVec(VMX)は、64並列ないし128並列のマシンとみなすことができます。 汎用レジスタでは32bitあるいは64bit分の並列度しか得られませんが、64bitあるいは128bitのSIMD命令に置き換えあるいは並列動作させることで、より高速な計算が可能になります。
- An Implementation of Bitsliced DES on the Pentium MMX Processor
UNIX cryptおよび2chトリップの並列演算への応用
UNIXのcryptはDESを応用したものなので、Bitslice DESのアルゴリズムもそのまま利用することができます。Bitslice DESアルゴリズムをUNIX cryptのクラックに応用したソフトとしてはJohn the Ripperが有名です。
Windows用トリップ検索プログラムであるTripcode ExplorerもMatthew Kwan氏のS-boxをベースにしたBitslice DESアルゴリズムを利用しています。
Enhanced Bitslice DES - 3入力論理演算をサポートする特化型実装
個別ページに移動しました
- Cell SPU/Altivec用
- AVX + AMD XOP(VPCMOV)用
- AMD SSE5(PCMOV)用
- SSE5とBitslice DES(obsolete)
資料1 主要なCPU命令セットにおけるビット論理演算命令の種類
とりあえず自分用資料として論理演算命令をまとめてみました。
SPU | AltiVec | SSE | AVX | AMD XOP(+AVX) | NEON | PowerPC | x86/x64 | CUDA | ATI Stream | |
NOT | ○ | ○ | ▲ | ● | ● | ○ | ○ | △ | ○ | ○ |
AND | ○ | ○ | △ | ○ | ○ | ○ | ○ | △ | ○ | ○ |
OR | ○ | ○ | △ | ○ | ○ | ○ | ○ | △ | ○ | ○ |
XOR (EOR) | ○ | ○ | △ | ○ | ○ | ○ | ○ | △ | ○ | ○ |
AND-NOT (ANDC) | ○ | ○ | △ | ○ | ○ | ○ | ○ | − | − | − |
OR-NOT (ORC) | ○ | − | − | − | − | ○ | ○ | − | − | − |
NAND | ○ | − | − | − | − | − | ○ | − | − | − |
NOR | ○ | ○ | − | − | − | − | ○ | − | − | − |
XNOR (EQV) | ○ | − | − | − | − | − | ○ | − | − | − |
SEL (MUX) | ○ | ○ | − | − | ○ | △ | − | − | − | − |
- ○: デスティネーションと全てのソースを独立に指定可能。
- △: ソースの一つを破壊するため必要に応じてレジスタ値をコピー。
- ●▲: 定数値との(V)PXORで代用
Keyword(s):[Bitslice DES]
References:[FrontPage] [SSE5とBitslice DES]