Thực hiện 5 mixing rounds (j=43) 3 Thực hiện 1 mashing round.

Một phần của tài liệu Tài liệu Kỹ thuật lập trình - Chương 7 Kiểm tra và xây dựng số nguyên tố (Trang 28 - 30)

3. Thực hiện 1 mashing round. 4. Thực hiện 6 mixing rounds (j=19). 5. Thực hiện 1 mashing round. 6. Thực hiện 5 mixing rounds (j=0).

Chú ý: các phép tốn trong 2 vịng Mixing round và Mashing round đều thực hiện theo modulo232.

7.10 Hệ mật mã khối RC5

Giống như RC2 đây cũng là sản phẩm của tác giả Ron Rivest đề xuất năm 1994. Nhưng hệ này tỏ ra mềm dẻo hơn trong việc lựa chọn tham số cho hệ mật, cụ thể là kích thước khối mã có thể là 32, 64 hoặc 128, khóa có độ dài từ 0 đến 2040 bít, số vịng từ 0 đến 255. Tham số ban đầu đề xuất là khối mã 64 bít, khóa 128 bít và số vịng là 12.

Tạo khóa con

Trong RC5 quy định một thủ tục phức tạp để tạo t khóa con từ khóa chính K, mỗi khóa con có kích thước w bít. Mỗi chu kỳ sử dụng 2 khóa con. Ngồi ra cịn có 2 khóa con được sử dụng trong một phép biến đổi không thuộc bất kỳ chu kỳ nào. Như thế, số

lượng khóa con cần tạo là t=2r+2. Các khóa con được lưu trong mảng t phần tử: S[0], S[1], ..., S[t-1], kích thước của mỗi phần tử phụ thuộc vào kích thước khối dữ liệu chọn. Sơ đồ sinh khóa con được miêu tả ở hình 7.19.

Hình 7.19. Q trình sinh khóa con của RC5

Bước 1. Với r là số vịng, w= kích thước khối / 2 . Hàm Odd[x] cho số lẻ gần x nhất.

Bước này thực hiện loạt các phép tính sau:

[ w] w Odd e P = ( −2).2 , với e = 2,718281828459, [ w] w Odd f Q = ( −2).2 , với f =0,5.(1+ 5), Cụ thể tính ra như sau, các giá trị của Pw,Qwở dạng hexa:

w 16 32 64

w

P B7E1 B7E15163 B7E151628AED2A6B

w

Q 9E37 9E3779B9 9E3779B97F4A7C15

Thuật tốn khởi tạo mảng S có thể biểu diễn như sau: S[0] = Pw

Với i từ 1 đến t-1 thì thực hiện: S[i] = (S[i-1] + Qw) (mod 2w)

Bước 2

Khóa chính được lưu trong mảng K[0..b-1] gồm b phần tử, mỗi phần tử có kích thước 1 byte. Biến đổi mảng K thành mảng L[0..c-1] gồm c phần tử, mỗi phần tử có kích thước w bít, giá trị ban đầu của mỗi phần tử bằng 0. Nếu b chia hết w thì c = b/w; nếu b khơng chia hết w thì c = b/w + 1. Phép biến đổi từ K sang L chỉ đơn giản là sao chép các byte của mảng K sang mảng L theo đúng thứ tự trong K. Trong trường hợp b khơng chia hết w thì có một số bits bên phải của L sẽ giữ nguyên bằng 0.

Bước 3.

Thực hiện một thủ tục “xáo trộn” để kết hợp giá trị mảng L với giá trị khởi tạo của mảng S nhằm xác định giá trị cuối cùng cho mảng khóa con S. Để đạt được điều này cần duyệt 3 lần mảng lớn nhất trong hai mảng L, S:

i = j = X = Y = 0 do 3×max(t,c) times

begin

S[i] = (S[i] + X + Y) <<< 3; X = S[i]; i = (i+1) mod t L[j] = (L[j] + X + Y) <<< (X+Y); Y=L[j]; j = (j+1) mod c

end

Tác giả RC5 Ron Rivest khẳng định rằng thủ tục sinh khóa con mang tính chất của hàm một chiều – rất khó có thể xác định khóa K khi biết mảng S.

Một phần của tài liệu Tài liệu Kỹ thuật lập trình - Chương 7 Kiểm tra và xây dựng số nguyên tố (Trang 28 - 30)

Tải bản đầy đủ (DOC)

(81 trang)
w