耐コリジョンハッシュ
via: http://yendot.org/
IETF のドラフト。既存のハッシュ関数を使う。SHA1 なら CR-SHA1、MD5 なら CR-MD5 等。
上のドラフトでは ASN.1 の DER エンコードを例にしているので、読んでみる。
ASN.1 の書式はこう。
DigestInfo ::= SEQUENCE { digestAlgorithm AlgorithmIdentifier, digest OCTET STRING }
AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL }
CR-MD5 を選択した場合、 CR-MD5 の OBJECT IDENTIFIER は 1.3.6.1.4.1.10471.6.4.3.1 になる予定で、 これを DER エンコードすると、
30 1f 06 0b 2b 06 01 04 01 d1 67 06 04 03 01 04 10 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX は乱数列になる。
例えば、 XX が 109de96f90aa7d08814c32fc456f9e6e6a となるような ASN.1 ストリームと 平分 f8f04799c4ea178042b604660a6fe3f166599a815aa9e2edf4 を受け取ったとき、
digest(平分) => MD5(4f63cc47a5cc2d2e563b54cd0b38f5d7)
digest(乱数列 + 平分) => CR-MD5(faa4702ab6e7fa890627192cd6cc6333)
となる。なるほど。入力を制御しようという試みか。これって salt の発想そのもの?