Khối bản tin đầu vào 64 bít được biểu diễn dưới dạng 4 từ 16 bits: R[0], R[1], R[2], R[3] và kết quả đầu ra được ghi vào chính các từ này. Thuật tốn RC2 chứa 18 vịng, 16 vòng “xáo trộn” (mixing round) và và 2 vòng “nghiền nát” (mashing round), chúng ta đi tìm hiểu hai vịng này dành cho q trình mã hóa.
Mixing round.
Vịng Mixing round hình thành từ 4 thủ tục con MIX transformation, thủ tục MIX transformation, thủ tục này miêu tả ở hình 7.18.
Hình 7.18. Thủ tục MIX - transformation Vịng mixing round có thể biểu diễn dưới dạng công thức sau:
R[0] = R[0] + K[j] + (R[3] ^ R[2]) + (NOT(R[3]) ^ R[1]) R[0] = R[0] <<< 1 j=j+1 R[1] = R[1] + K[j] + (R[0] ^ R[3]) + (NOT (R[0]) ^ R[2]) R[1] = R[1] <<< 2 j=j+1
R[2] = R[2] + K[j] + (R[2] ^ R[0]) + (NOT (R[1]) ^ R[3]) R[2] = R[2] <<< 3 j=j+2 R[3] = R[3] + K[j] + (R[2] ^ R[1]) + (NOT (R[2]) ^ R[0]) R[3] = R[3] <<< 5 j=j+3 Mashing round.
4 từ R[0], R[1], R[2], R[3] được biến đổi bằng cách cộng với khóa con, ở đây việc chọn khóa con K[j] phụ thuộc vào giá trị biến đổi dữ liệu:
R[0] = R[0] + K[R[3] & 63]; R[1] = R[1] + K[R[0] & 63]; R[2] = R[2] + K[R[1] & 63]; R[3] = R[3] + K[R[2] & 63];
Q trình mã hóa
Sau khi định nghĩa mixing round và mashing round, ta đã có thể mơ tả q trình mã hóa của RC2. Nó bao gồm các bước sau đây (trong dấu ngoặc là giá trị của j sau khi thực hiện các chu kỳ tương ứng):
1. giá trị cho j=0.
2. Thực hiện 5 mixing rounds (j=20). 3. Thực hiện 1 mashing round. 4. Thực hiện 6 mixing rounds (j=44). 5. Thực hiện 1 mashing round. 6. Thực hiện 5 mixing rounds (j=64).
Quá trình giải mã
Quá trình giải mã thực hiện giống như q trình mã hóa, nhưng các phép tốn trong q trình giải mã thì ngược với q trình mã hóa. Tức là 2 vịng Mixing round và Mashing round được viết lại như sau:
Mixing round.
Vịng mixing round có thể biểu diễn dưới dạng cơng thức sau: R[3] = R[3] - K[j] - (R[2] ^ R[1]) - (NOT (R[2]) ^ R[0]) j=j-1
R[2] = R[2] - K[j] - (R[2] ^ R[0]) - (NOT (R[1]) ^ R[3]) j=j-1 R[1] = R[1] >>> 2 R[1] = R[1] - K[j] - (R[0] ^ R[3]) - (NOT (R[0]) ^ R[2]) j=j-1 R[0] = R[0] >>> 1 R[0] = R[0] - K[j] - (R[3] ^ R[2]) - (NOT(R[3]) ^ R[1]) j=j-1; Mashing round.
4 từ R[0], R[1], R[2], R[3] trong quá trình giải mã thực hiện như sau: R[3] = R[3] - K[R[2] & 63];
R[2] = R[2] - K[R[1] & 63]; R[1] = R[1] - K[R[0] & 63]; R[0] = R[0] - K[R[3] & 63];
Quá trình giải mã cũng tiến hành trong 18 vòng như sau.