Tải bản đầy đủ (.docx) (14 trang)

THUẬT TOÁN SERPENT (DOTNET)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (455.75 KB, 14 trang )

ĐỒ ÁN MÔN HỌC
LẬP TRÌNH DOTNET
Đề tài: THUẬT TOÁN SERPENT
Giáo viên hướng dẫn
Sinh viên thực hiện
:
:
Thầy Phan Việt Anh
Nguyễn Huy Linh
(MSV: 10150320, Lớp Tin học 9A)
HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
O0O
Hà Nội, tháng 05 năm 2013
LẬP TRÌNH DOTNET
MỤC LỤC
Thuật toán Serpent | Trang 2 / 13
LẬP TRÌNH DOTNET
1. Lịch sử thuật toán Serpent
 NIST đã đề nghị một sự thay thế cho thuật toán DES – Thuật toán AES.
 Các thuộc tính của AES:
− Khối mã hóa 128 bit.
− Khóa đối xứng.
− Các biến thể của độ dài khóa: 128, 192, 256 bit.
− Nhanh hơn DES 3 lần.
− An toàn như 3DES.
2. Giới thiệu khái chung về thuật toán Serpent
 Serpent là một thuật toán mã nguồn mở mã hóa ở dạng khối, còn gọi là khóa
đối xứng. Về cơ bản chỉ có một khóa được sử dụng để mã hóa và giải mã
thông điệp.
 Thuật toán được phát triển vào năm 1998 bởi 3 nhà nghiên cứu: Ross


Anderson, Lars Knudsen và Eli Biham.
 Serpent là một trong 5 ứng viên cuối vào vị trí thuật toán AES (Advanced
Encryption Standard).
 Được thiết kế dựa trên mạng chuyển vị - thay thế (S-P Network).
 Các tác giả thiết kế thuật toán này hướng tới việc tuân thủ dựa trên các thiết
kế đã có và coi trọng tính an toàn của thuật toán hơn là tính mới lạ và tốc độ
của thuật toán.
 Trong mỗi vòng của thuật toán bao gồm 8 hộp S dựa trên các hộp S của mã
DES, nó được thiết kế cho phép tất cả các toán tử có thể thực hiện song
song.
Thuật toán Serpent | Trang 3 / 13
LẬP TRÌNH DOTNET
 Sơ đồ thuật toán
Thuật toán Serpent | Trang 4 / 13
LẬP TRÌNH DOTNET
 Thuật toán bao gồm 32 vòng. Các tác giả của thuật toán khẳng định
rằng 16 vòng đã đảm bảo độ an toàn của thuật toán (32 vòng sẽ đảm
bảo khả năng chống lại các kiểu tấn công trong tương lai).
 Điều này dễ dàng tạo cho thuật toán một sự an toàn cần thiết (Serpent được
nhìn nhận là thuật toán an toàn nhất trong các thuật toán chung khảo AES),
 Nhưng sự trả giá của nó là hiệu suất thấp của thuật toán so với tất cả các
thuật toán chung khảo AES.
 Tuy nhiên, vì yêu cầu ít bộ nhớ khi thực hiện, vì vậy thuật toán rất
thích hợp để thực hiện trên smart card (chính điều này giúp cho Serpent
chiến thắng thuật toán CAST-256, mặc dù chúng có cùng hiệu năng và
độ an toàn).
3. Quy trình mã hóa – giải mã
a. KHỞI TẠO VÀ PHÂN BỔ KHÓA
 Việc mã hóa của thuật toán Serpent đòi hỏi 132 từ 32 bit của toàn bộ khóa.
Đầu tiên, từ khóa K 256 bits người sử dụng cung cấp, ta mở rộng nó thành

33 khóa con 128 bit (K
0
, …, K
32
) bằng cách ghi khóa K thành 8 từ 32 bit (w
-8
,
, w
-1
) và mở rộng các từ này thành khóa trung gian w
0
, …, w
131
bằng công
thức sau:
w
i
=(w
i- 8
⊕ w
i-5
⊕ w
i-3
⊕ w
i-1
⊕ φ ⊕ i) <<< 11
Trong đó:
φ: là phần phân số của tỉ số vàng (sqrt(5) + 1) / 2 hoặc số hexa
0x9e3779b9
<<< : là phép vòng trái 11 bits

 Những khóa thực hiện một chu kỳ được suy ra từ các khóa trước khi sử dụng
các S–box. Sử dụng S–box để biến đổi các khóa w
i
thành các từ k
i
của khóa
chu kỳ theo cách sau:
{k
0
, k
1
, k
2
, k
3
}:= S
3
(w
0
, w
1
, w
2
, w
3
)
{k
4
, k
5

, k
6
, k
7
}:= S
2
(w
4
, w
5
, w
6
, w
7
)
{k
8
, k
9
, k
10
, k
11
}:= S
1
(w
8
, w
9
, w

10
, w
11
)
{k
12
, k
13
, k
14
, k
15
}:= S
0
(w
12
, w
13
, w
14
, w
15
)
{k
16
, k
17
, k
18
,k

19
}:= S
7
(w
16
, w
17
, w
18
, w
19
)

Thuật toán Serpent | Trang 5 / 13
LẬP TRÌNH DOTNET
{k
124
, k
125
, k
126
, k
127
} := S
4
(w
124
, w
125
, w

126
, w
127
)
{k
128
, k
129
, k
130
, k
131
} := S
3
(w
128
, w
129
, w
130
, w
131
)
Ta đánh số lại các giá trị 32 bit k
j
giống các subkey 128 bit K
i
(cho i ∈ 0,
…, r) như sau:
K

i
:={k
4i
, k
4i+1
, k
4i+2
, k
4i+3
}
 Ví dụ:
− Khóa:
133457799BBCDFFIIFDCBB997754331133457799BBCDFFIIFDCBB9
97754331 (256 bit).
− Khóa này ở dạng nhị phân là một chuỗi bít như sau:
0001001000100100010101110111100
1
w
-8
1001101110111100110111111111000
1
w
-7
0001111111111101110010111011100
1
w
-6
1001011101110101010000100010000
1
w

-5
0001001000100100010101110111100
1
w
-4
1001101110111100110111111111000
1
w
-3
0001111111111101110010111011100
1
w
-2
1001011101110101010000100010000
1
w
-1
− Tính w
i
w
i
=(w
i- 8
⊕ w
i-5
⊕ w
i-3
⊕ w
i-1
⊕ φ ⊕ i) <<< 11

w
0
=(w
-8
⊕ w
-5
⊕ w
-3
⊕ w
-1
⊕ φ ⊕ i) <<< 11
Thuật toán Serpent | Trang 6 / 13
LẬP TRÌNH DOTNET
0001001000100100010101110111100
1
w
-8
1001011101110101010000100010000
1
w
-5
1001101110111100110111111111000
1
w
-3
1001011101110101010000100010000
1
w
-1
1001111000110111011110011011100

1
φ
0000000000000000000000000000000
0
i
0000010110001011101001100100100
0
0101110100110010010000000010110
0
<<< 11
0101110100110010010000000010110
0
w
0
− Cứ như vậy lần lượt ta tính được 132 từ 32 bit.
− Tính k
j
: sau khi tính được các w
i
ta tính được các khóa:
{k
0
, k
1
, k
2
, k
3
}:= S
3

(w
0
, w
1
, w
2
, w
3
)
{k
4
, k
5
, k
6
, k
7
}:= S
2
(w
4
, w
5
, w
6
, w
7
)
{k
8

, k
9
, k
10
, k
11
}:= S
1
(w
8
, w
9
, w
10
, w
11
)
{k
12
, k
13
, k
14
, k
15
}:= S
0
(w
12
, w

13
, w
14
, w
15
)
{k
16
, k
17
, k
18
,k
19
}:= S
7
(w
16
, w
17
, w
18
, w
19
)

{k
124
, k
125

, k
126
, k
127
} := S
4
(w
124
, w
125
, w
126
, w
127
)
{k
128
, k
129
, k
130
, k
131
} := S
3
(w
128
, w
129
, w

130
, w
131
)
− Ta đánh số lại các giá trị 32 bit k
j
:
Thuật toán Serpent | Trang 7 / 13
LẬP TRÌNH DOTNET
k
i
:={k
4i
, k
4i+1
, k
4i+2
, k
4i+3
}
tương ứng ta được:
k
0
={k
0
, k
1
, k
2
, k

3
}:= S
3
(w
0
, w
1
, w
2
, w
3
)
k
1
={k
4
, k
5
, k
6
, k
7
}:= S
2
(w
4
, w
5
, w
6

, w
7
)
……
k
31
={k
128
, k
129
, k
130
, k
131
} := S
3
(w
128
, w
129
, w
130
,w
131
)
− Mô hình phát sinh khóa
− Kế đến áp dụng phép
hoán vị đầu vào khóa thực
hiện một chu kỳ để định vị
các bit khóa vào đúng vị

trí (cột): K
i
= IP(K
i
)
b. CÁC BẢNG ĐIỀU KHIỂN
 Bảng hoán vị khởi đầu (IP -
Initial
Permutation):
Thuật toán Serpent | Trang 8 / 13
LẬP TRÌNH DOTNET
 Trong thuật toán ta cần hoán vị cả khóa và bản rõ qua bảng IP để định vị các
bit khóa và bit rõ vào vị trí đúng cột.
 Ví dụ:
− Nội dung bản rõ là:
0123456789ABCDEFFEDCBA9876543210 (128 bit)
− Đưa về dạng nhị phân:
00000001001000110100010101100111
10001001101010111100110111101111
11111110110111001011101010011000
01110110010101000011001000010000
− Ta lần lượt đánh vị trí các bít (0 -> 127) và sau đó lấy các bít có vị trí
theo bảng IP: do đó sau khi qua bảng IP ta được bản rõ sau khi hoán vị là:
01100110001100110011011000110011
11000110001111000011011000111100
11000110110000110011011011000011
11000110110011000011011011001100
 Bảng hoán vị cuối (FP – Final Permutation):
− Bảng hoán vị cuối FP được sử dụng sau khi qua 33 chu kì và ta thu được
kết quả là bản mã.

Thuật toán Serpent | Trang 9 / 13
LẬP TRÌNH DOTNET
c. LINEAR TRANSFORMATION (BIẾN ĐỔI TUYẾN TÍNH)
 Applied on the result of the S-Boxes, I.e. on Si(Bi ⊕ Ki).
 Each output bit is an exclusive or of some input bits.
 For Example, output bit 0 is an exclusive or of input bits: 16, 52, 56, 70, 83,
94 and bit 105.
 The number of input bits XORed to give one output bit is variant and not
fixed to seven.
d. S-BOX
 S–box của Serpent là phép hoán vị 4 bit. S–box được phát sinh theo cách
sau: sử dụng một ma trận gồm 32 dãy, mỗi dãy 16 phần tử. Ma trận được
khởi gán với 32 hàng của S–box DES và được biến đổi bằng cách hoán đổi
các phần tử trong dãy r tùy thuộc vào giá trị của các phần tử trong dãy (r + 1)
và chuỗi ban đầu đại diện cho một khóa. Nếu dãy kết quả có các đặc tính
như mong muốn (vi phân và tuyến tính), ta lưu dãy này như một Serpent S–
box. Lặp đi lặp lại thủ tục này đến khi 8 S–box được phát sinh.
 S-box sử dụng khi mã hóa trong thuật toán Serpent:
 Cách tra bảng S-box:

Thuật toán Serpent | Trang 10 / 13
LẬP TRÌNH DOTNET
 S-box nghịch đảo sử dụng khi giải mã trong thuật toán Serpent:
e. QUY TRÌNH MÃ HÓA
 Việc mã hóa bao gồm:
− B1: Phép hoán vị đầu IP (initial permutation);
− B2: 32 chu kỳ, mỗi chu kỳ bao gồm một phép trộn khóa, một lượt duyệt
qua các S–box và một phép biến đổi tuyến tính (cho tất cả các chu kỳ trừ
chu kỳ cuối). Ở chu kỳ cuối cùng, phép biến đổi tuyến tính này thay thế
bằng một phép trộn khóa.

− B3: Phép hoán vị cuối FP (final permutation).
 Ta sử dụng các ký hiệu như sau: Phép hoán vị đầu IP áp dụng vào văn bản
ban đầu P cho ra dữ liệu BÂ
0
là đầu vào chu kỳ thứ nhất (các chu kỳ đánh số
từ 0 đến 31). Dữ liệu ra của chu kỳ thứ nhất là BÂ
1
, dữ liệu ra của chu kỳ thứ
hai là BÂ
2
, dữ liệu ra của chu kỳ thứ i là BÂ
i+1
… cho đến chu kỳ cuối cùng.
Phép biến đổi tuyến tính ở chu kỳ cuối cùng thay thế bằng phép trộn khóa
được ký hiệu BÂ
32
. Phép hoán vị cuối FP áp dụng vào BÂ
32
cho ra văn bản
mã hóa C.
 Cho K
i
là subkey 128 bit chu kỳ thứ i và S–box S
i
được sử dụng ở chu kỳ
thứ i. Cho L là phép biến đổi tuyến tính. Khi đó hàm thực hiện một chu kỳ
được định nghĩa như sau :
− X
i
← B

i
⊕ K
i
− Y
i
← S
i
(X
i
)
− B
i-1
←L(Y
i
), i = 0, …, 30
− B
i-1
← Y
i
⊕ K
i-1
, i = 31
Như vậy quá trình mã hóa tương đương:
Thuật toán Serpent | Trang 11 / 13
LẬP TRÌNH DOTNET
− B
0
:= IP(P)
− B
i+1

:= R
i
(B
i
)
− C := FP(B
32
)
ở đây:
− R
i
(X) = L(^S
i
(X ^K
i
)), i = 0,…, 30
− R
i
(X) = ^S
i
(X ^K
i
) ^K
32
, i = 31
 Ở mỗi chu kỳ vòng R
i
(i ∈ {0, …, 31}) chỉ sử dụng một bản sao S–box. R
i
sử dụng bảng S(i mod 8). Bộ tám S–box (S

0
…S
7
) được sử dụng 4 lần. Do
đó sau khi sử dụng S
7
ở chu kỳ 7, S
0
lại tiếp tục được sử dụng ở chu kỳ 8, S
1
ở chu kỳ 9…, cuối các vòng là phép biến đổi tuyến tính và ngoại lệ là vòng
R
31
, vòng này sau khi sử dụng S
7
cho:
(B
31
⊕ K
31
) kết quả thu được đem XOR với K
32
.
 Sau đó, kết quả B
32
được hoán vị bằng FP cho ra văn bản mã hóa.
 Cấu trúc mã hóa:
 Phép biến đổi tuyến tính L trên Yi = (y0 , y1, y2, y3) định nghĩa như sau:
y
0

← y
0
<<< 13
Thuật toán Serpent | Trang 12 / 13
LẬP TRÌNH DOTNET
y
2
← y
2
<<< 3
y
1
← y
0
⊕ y
1
⊕ y
2
y
3
← y
2
⊕ y
3
⊕ (y
0
<< 3)
y
1
← y

1
<<< 1
y
3
← y
3
<<< 7
y
0
← y
0
⊕ y
1
⊕ y
3
y
2
← y
2
⊕ y
3
⊕ (y
1
<< 7)
y
0
←y
0
<<< 5
y

2
← y
2
<<< 22
B
i+1
← (y
0
, y
1
, y
2
, y
3
)
Thuật toán Serpent | Trang 13 / 13
LẬP TRÌNH DOTNET
f. QUY TRÌNH GIẢI MÃ
 Quy trình giải mã có khác với quy trình mã hóa. Cụ thể là nghịch
đảo các S–box (S–box –1) phải được sử dụng theo thứ tự ngược lại, cũng
như nghịch đảo của biến đổi tuyến tính và nghịch đảo thứ tự các subkey.
4. Chương trình Demo
 Chúng em xin phép được báo cáo chương trình Demo trong một buổi khác.
5. Kết luận
 Thuật toán có độ an toàn cao hơn thuật toán AES và có tốc độ nhanh hơn
thuật toán DES.
 Vì yêu cầu ít bộ nhớ khi thực hiện, vì vậy thuật toán rất thích hợp
để thực hiện trên smart card (chính điều này giúp cho Serpent chiến thắng
thuật toán CAST-256, mặc dù chúng có cùng hiệu năng và độ an toàn).
6. Tài liệu tham khảo

 http:// w ikipedia.com
 Bài giảng Mã hóa thông tin – Thầy Nguyễn Hiếu Minh, HV KTQS
Thuật toán Serpent | Trang 14 / 13

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×