DEScrypt
Modular Crypt Format
DESを使用したもの。旧式
https://passlib.readthedocs.io/en/stable/lib/passlib.hash.des_crypt.html
パスワード8文字まで
salt 2文字まで hash64
符号 11文字 PASSWORD系(hash64-big?)
hash64-big は BASE64のPASSWORD文字並び [./0-9A-Za-z]
hash64 は Little-Endiann版(ここだけ?) 下位ビットから符号化する
saltを使った改変DESを使用する
keyはPASSWORDを8バイトにしたもの(各文字7bitの56bitを使用)
8バイトの00とsaltを使った改変DESで25回暗号化する
salt + 出力をhash64で文字列化したもの
DESの改変
E-boxの32bit入力側?のビットを入れ替えるはず(不明)
0から12bitとsaltのかけ合わせを24から12bitと入れ替えるらしいが詳細が不明
チェックサムは、DES暗号の暗号化モードにおける修正版によって生成されます。
パスワード文字列とソルト文字列が与えられます。
2文字のソルト文字列は、12ビット整数のソルト値にデコードされます。ソルト文字列は、リトルエンディアンのHash64エンコードを使用します。
パスワードが8バイト未満の場合は、末尾にNULLが埋め込まれ、8バイトになります。
パスワードの最初の8バイトの下位7ビットを使用して、56ビット整数が生成されます。最初のバイトが最上位7ビット、8番目のバイトが最下位7ビットとなります。
パスワードの残りの部分(もしあれば)は無視されます。
修正DES暗号化を25回繰り返します。NULL入力ブロックから開始し、手順4で得られた56ビット整数をDES鍵として使用します。
ソルトは、DES E-Box出力のビットiとi+24を入れ替えることで、通常のDES暗号化処理を変更するために使用されます。これは、ソルト値にビットiが設定されている場合のみ行われます。したがって、ソルトが0に設定されている場合、通常のDES暗号化が実行されます。(これは、通常のDES暗号化の最適化実装がこのアルゴリズムへの攻撃に利用されることを防ぐことを目的としています。)
ステップ5の最終ラウンドの64ビットの結果は、LSBに2つのゼロビットが埋め込まれます。
結果として得られる66ビット整数は、hash64-big形式を用いてビッグエンディアン順にエンコードされます。