해시 함수 h_n은 2n비트로 이루어진 수 A를 다음과 같이 암호화한다.
A=(a_2n−1a_2n−2⋯a_1a_0)_2라고 하자. a_i는 A의 i번째 비트이다.
2n비트로 이루어진 수 B=(b_2n−1b_2n−2⋯b_1b_0)_2는 다음과 같이 구한다.
b_i=a_i⊕a_2i+1, for 0≤i<n,
b_i=a_i⊕a_4n−2i−2, for n≤i<2n,
여기서 ⊕는 비트별 배타적 논리합(XOR)이다. 달리 말해 B=A⊕(a_0a_2⋯a_2n−4a_2n−2a_2n−1a_2n−3⋯a_3a_1)_2이다.
다음으로 2n비트로 이루어진 수 C=B⊕RSH(B)를 구한다. 여기서 RSH(B)는 B를 1비트 순환 오른쪽 시프트한 값이다. 달리 말해 C=B⊕(b_0b_2n−1b_2n−2⋯b_2b_1)_2이다.
마지막으로 해시 값은 h_n(A)=239A+153Cmod(22n−1−1)이다.
예를 들어 n=4이고 A=00001101_2=13이라고 하자. 그러면 B=00001101_2⊕11000010_2=11001111_2=207이다. 이어서 C=11001111_2⊕11100111_2=00101000_2=40이다. 마지막으로 h_4(A)=239×13+153×40mod(27−1)=9227mod127=83이다.
이 해시 함수의 역함수를 구하는 것이 목표이다. 주어진 n과 H에 대해 h_n(A)=H를 만족하는 A를 찾아라.