Chương 7
MẬT MÃ KHÓA ĐỐI XỨNG
7.1 Lý thuyết cơ bản của Shannon
Nhiều người cho rằng kỷ nguyên của mật mã học hiện đại được bắt đầu với Claude
Shannon, người được coi là cha đẻ của mật mã toán học. Năm 1949 ông đã công bố bài
Lý thuyết về truyền thông trong các hệ thống bảo mật (Communication Theory of
Secrecy Systems) trên tập san Bell System Technical Journal - Tập san kỹ thuật của hệ
thống Bell - và một thời gian ngắn sau đó, trong cuốn Mathematical Theory of
Communication - Lý thuyết toán học trong truyền thông - cùng với tác giả Warren
Weaver. Những công trình này, cùng với những công trình nghiên cứu khác của ông về
lý thuyết về tin học và truyền thông (information and communication theory), đã thiết lập
một nền tảng lý thuyết cơ bản cho mật mã học và thám mã học. Với ảnh hưởng đó, mật
mã học hầu như bị thâu tóm bởi các cơ quan truyền thông mật của chính phủ, chẳng hạn
như NSA, và biến mất khỏi tầm hiểu biết của công chúng. Rất ít các công trình được tiếp
tục công bố, cho đến thời kỳ giữa thập niên 1970, khi mọi sự được thay đổi.
Claude Shannon xem xét mô hình 7.1, ở đây nguồn bản tin sinh ra bản rõ X, nguồn
khóa tạo ra khóa K, khóa K được truyền qua kênh mật từ nơi truyền đến nơi nhận.
Quá trình mã hóa biến đổi bản rõ X nhờ khóa thành bản mã Y:
)(XF
K
.
Quá trình giải mã, biến đổi bản mã nhận được Y thành bản rõ X cũng nhờ khóa K:
)(
1
YFX
K
−
=
.
Tội phạm (hay thám mã) sẽ tìm cách nhận được bản rõ và khóa trên cơ sỡ bản mã.
Claude Shannon xem xét các câu hỏi lý thuyết và thực hành mật. Để nhận được lý
thuyết mật Shannon hình thành các câu hỏi sau:
1. Hệ thống ổn định ở mức độ nào, nếu như thám mã không giới hạn thời gian và
có tất cả các thiết bị cần thiết đối với việc phân tích bản mã?
2. Bản mã liệu có một nghiệm duy nhất hay không?
3. Với lượng thông tin bản mã bao nhiêu mà thám mã cần thu nhặt để nghiệm trở
nên duy nhất?
Để trả lời câu hỏi của Shannon chúng ta đưa vào định nghĩa “tuyệt mật” với sự hổ trợ
các điều kiện sau: Bản mã thu được không đêm đến cho thám mã bất kỳ thông tin nào.
Theo định lý Bayes
)(/)()()( YPYPXPXP
XY
=
Hình 7.1. Mô hình truyền tin Shannon
Với P(X) là xác suất xuất hiện bản tin X;
)(YP
X
xác suất điều kiện, xuất hiện bản mã
Y với điều kiện bản tin X đã được chọn, có nghĩa là tổng xác suất của tất cả các khóa, mà
các khóa này chuyển bản tin X tương ứng với bản mã Y; P(Y)-xác suất nhận được bản
mã Y;
)(XP
Y
là xác suất nhận được bản rõ X với điều kiện nhặt được bản mã Y. Để
“tuyệt mật” thì giá trị của
)(XP
Y
và
)(XP
cần phải bằng nhau với tất cả giá trị của X và
Y.
Để chống lại phương pháp phân tích thống kê bản mã (đây là một cách thám mã)
Shannon đề ra hai phương pháp: khuyết tán và pha trộn.
Định nghĩa Entropy thông tin. Entropy thông tin mô tả mức độ hỗn loạn trong một
tín hiệu lấy từ một sự kiện ngẫu nhiên. Nói cách khác, entropy cũng chỉ ra có bao nhiêu
thông tin trong tín hiệu, với thông tin là các phần không hỗn loạn ngẫu nhiên của tín hiệu.
Lý thuyết về thông tin sẽ trình bày đầy đủ hơn về Entropy, ở đây chúng tôi chỉ đưa ra
cái cơ bản.
Claude E. Shannon đã xây dựng định nghĩa về entropy để thoả mãn các giả định sau:
1. Entropy phải tỷ lệ thuận liên tục với các xác suất xuất hiện của các phần tử
ngẫu nhiên trong tín hiệu. Thay đổi nhỏ trong xác suất phải dẫn đến thay đổi
nhỏ trong entropy.
2. Nếu các phần tử ngẫu nhiên đều có xác suất xuất hiện bằng nhau, việc tăng
số lượng phần tử ngẫu nhiên phải làm tăng entropy.
Nguồn
khóa
Nguồn bản
tin
Mã hóa Giải mã Nhận bản
tin
Tội phạm
K
K’
X’
X
Y
X
K
3. Có thể tạo các chuỗi tín hiệu theo nhiều bước, và entropy tổng cộng phải
bằng tổng có trọng số của entropy của từng bước.
Shannon cũng chỉ ra rằng bất cứ định nghĩa nào của entropy, cho một tín hiệu có thể
nhận các giá trị rời rạc, thoả mãn các giả định của ông thì đều có dạng:
∑
=
−
n
i
ipipK
1
)(log)(
Với K là một hằng số, chỉ phụ thuộc vào đơn vị đo; n là tổng số các giá trị có thể nhận
của tín hiệu; i là giá trị rời rạc thứ i; p(i) là xác suất xuất hiện của giá trị i;
Nếu một sự kiện ngẫu nhiên rời rạc x, có thể nhận các giá trị là 1 n, thì entropy của
nó là:
∑
=
−=
n
i
ipipxH
1
2
)(log)()(
,
với p(i) là xác suất xảy ra của giá trị i.
Entropy thông tin trong trường hợp phần tử tín hiệu ngẫu nhiên rời rạc còn được gọi
là entropy Shannon.
7.2 Định nghĩa mật mã đối xứng
Định nghĩa. Mật mã đối xứng là hệ mật mà quá trình mã hóa và quá trình giải mã
dùng chung một khóa mật, và việc bảo mật bản tin phụ thuộc vào quá trình lưu khóa mật.
Sơ đồ tổng quát của hệ mã đối xứng được miêu tả ở hình 7.2.
Hình 7.2. Sơ đồ mật mã đối xứng
Bản tin nguồn
(X)
Quá trình mã
hóa
Bản mã Y
truyền qua
kênh
Quá trình giải
mã
(X=)
Bản tin giải mã
X
Khóa mật (K) khóakhóa
Tạo ra khóa mật
ở đây bản tin nguồn X là thông tin cần mã để bảo mật, trước khi chuyển đến nơi nhận
nó phải được mã hóa bằng hàm mã hóa E, hàm mã hóa E là tổng hợp các phép biến đổi
với sự tham gia của khóa mật K; qua biến đổi của hàm E chúng ta thu được bản mã Y;
bản mã Y truyền qua kênh thông tin đến nơi người cần nhận, ở nơi nhận với sự giúp đở
của quá trình giải mã và khóa mật K, sẽ giải bản mã Y thành bản tin X ban đầu. Chú ý,
nếu như khóa K không đúng, hoặc bản mã Y bị biến đổi trong quá trình truyền thì quá
trình giải mã không thể thu được bản tin ban đầu X.
Như đã nói, mật mã đối xứng được chia ra làm hai phần, mật mã khối và mật mã
dòng. Chúng ta xem định nghĩa về chúng.
Định nghĩa mật mã khối. Mã khối là tổ hợp lệnh toán học (hoán vị, thay thế,…)
biến đổi dãy N bit
N
N
Fxxxx )2(), ,,(
21
∈=
thành một dãy N bit
N
N
Fyyyy )2(), ,,(
21
∈=
với sự tham gia của khóa mật k từ không gian khóa K, có thể viết dưới dạng
),( kxFy =
,
ở đây F là hàm mã hóa hay giải mã.
Định nghĩa mã dòng. Là một hệ mã đối xứng, trong đó từng ký tự của bản rõ được
biến đổi thành ký tự của bản mã phụ thuộc không chỉ vào khóa sử dụng mà còn vào vị trí
của nó trong bản rõ. Mã khối thì chia bản rõ ra các khối bằng nhau rồi thực hiện mã, nên
sẽ có một số khối giống nhau mã cùng một khóa, ở mã dòng thì không như vậy.
7.3 Các lệnh dùng để xây dựng thuật toán mật mã đối xứng
Hầu như tất cả các hệ mật đối xứng đảm bảo bảo mật thông tin thường được xây dựng
trên cơ sở các lệnh cơ sở sau:
7.3.1 Lệnh hoán đổi
Định nghĩa. Đây là phương pháp biến đổi mật mã đơn giản, là một phép hoán đổi các
vị trí của các kí tự trong bản rõ theo một quy luật nào đó. Chúng ta có thể biểu diễn
chúng bằng toán học như sau:
Hoán đổi
π
của tập hữu hạn
Ω
, với
Ω
gồm n phần tử, là một đơn ánh từ tập
Ω
vào tập
Ω
,
{ }
n, ,2,1=Ω
, lệnh hoán đổi
π
có dạng sau:
=
n
n
δ
α
δδ
αα
π
21
21
,
ở đây hang đầu tiên là vị trí ký tự của bản rõ, hang thứ 2 là các vị trí mà ký tự ban đầu
cần hoán đổi tương ứng,
{ }
jijiii
n
ααδδαδ
≠≠∈ ,(, ,2,1,
khi
ji ≠
), tức là vị trí thứ
1
α
đổi
cho vị trí thứ
1
δ
, vị trí thứ
2
α
đổi cho vị trí thứ
2
δ
tương tự như thế. Giá trị n gọi là chiều
dài hoán đổi.
Ví dụ:
=
41
43
32
21
π
.
Tập hợp tất cả các lệnh hoán đổi
π
ký hiệu là
n
π
, và rõ ràng rằng
!n
n
=
π
.
Có nhiều cách biểu diễn lệnh hoán vị. Ví dụ như từ ví dụ trên ta có các cách biểu diễn
sau:
)4)(1,3,2()4)(3,2,1( ==
π
.
Chúng ta thấy lệnh hoán đổi như một hàm, tham số của nó là số nguyên, hàm này có
thể ký hiệu
)(
i
απ
,với
{ }
ni
ii
, ,2,1,)( ∈∀=
δαπ
.
Tiêu chuẩn xây dựng nên lệnh hoán đổi: Chúng ta phải xây dựng lệnh hoán đổi sao
cho đạt được độ phát tán tốt, nhằm tăng hiệu ứng thác lũ.
7.3.2 Lệnh thay thế.
Định nghĩa.Trong mật mã, lệnh thay thế có thể hiểu là một qúa trình thay một số
phần tử này bằng một số phần tử khác, hay nói cách khác là thay thế một ký tự hay một
nhóm ký tự của bản tin bằng một ký tự hay một nhóm ký tự khác. Theo toán học thì
chúng ta có thể định nghĩa như sau:
Lệnh thay thế S là một ánh xạ s:
'
ΩΩ
, với
',ΩΩ
là tập hữu hạn và với
Ω∈∀
ω
, tồn
tại duy nhất một phần tử
)(':''
ωωω
S=Ω∈
.
Đối với
{ }
n
ωωω
, ,,
21
=Ω
lệnh hoán đổi có dạng:
=
''
2
'
1
21
n
n
S
ω
ω
ωω
ωω
,
Với
', ,,
''
2
'
1
Ω∈
n
ωωω
. Các giá trị
''
2
'
1
, ,,
n
ωωω
không bắt buộc là khác nhau.
Ví dụ lệnh thay thế 2 bit này thành 2 bít khác:
=
21
43
43
21
S
Tuy nhiên một số phép thay thế có thể biểu diễn ở dạng khác như đồ thị, dùng hàm
số…vv.
Tiêu chí để xây dựng nên lệnh thay thế: Khi sử dụng lệnh thay thế phải có được các
tính chất: Bậc đại số cao, có độ phi tuyến tính lớn, tạo ra tính tính pha trộn bít và phát tán
bít tốt.
7.3.3 Mạng hoán vị thay thế
Kết hợp lệnh hoán vị và lệnh thay thế, có thể xây dựng nên mạng hoán vị thay thế.
Đây là cấu trúc xen kẻ nhiều lớp mỗi lớp kết hợp phép thay thế và phép hoán vị. Với
mạng thay thế hoán vị, có thể tạo cho thuật toán có độ phân tán vào xáo trộn rất tố.
Chúng ta tìm ví dụ mạng hoán vị thay thế được miêu tả ở hình 7.3, đầu vào là 32 bít
qua mạng chuyển vị 4 lớp, mỗi lớp gồm 8 bảng thay thế 4 bít cho 4 bít, các bảng này có
thể khác nhau, sau phép thế là phép hoán vị.
S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4
S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4
S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4
S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4 S_4/4
Hình 7.3.Mạng hoán vị thay thế S_BOX 32/22
Để tạo ra mạng hoán vị, chúng ta cần tính toán đến hiệu quả thác lũ để chọn ra cách
xây dựng như ý.
7.3.4 Lệnh Gamma dành cho mã dòng
Nguyên lý cơ bản của mã dòng là tạo ra chuỗi khóa, cũng thường hay gọi là tạo ra
khóa dòng hay khóa dịch hay gamma được cho bằng chuỗi bít
i
kkk , ,,
21
… Chuỗi bít này
sẽ cộng với chuỗi bít bản rõ
, , ,,
21 i
ppp
để nhận được chuỗi bản mã:
iii
kpc ⊕=
Ở bên nhận bản mã sẽ cộng bản mã với cùng chuỗi khóa đó để khôi phục lại bản mã
ban đầu:
iiiiii
pkkpkc =⊕⊕=⊕
Sự vững chắc của hệ mã phụ thuộc hoàn toàn vào cấu trúc bên trong sinh ra chuỗi
khóa. Nếu việc sinh ra không tạo ra chuỗi với chu kỳ lớn thì hệ sẽ không vững chắc.
Có thể biểu diễn bằng sơ đồ sau quá trình mã và giải mã tương ứng ở hình 7.4 và 7.5.
Hình 7.4. Quá trình mã hóa gamma
Hình 7.5. Quá trình giải mã gamma
Độ an toàn khi dùng lệnh gamma. Claude Shannon đã chứng minh rằng mã bằng
lệnh gamma là tuyệt đối an toàn.
Chứng minh của Shannon:
Giả sử X và Y là giá trị ngẫu nhiên rời rạc. X là giá trị ngẫu nhiên đối với bản rõ, Y là
giá trị ngẫu nhiên đối với gamma, khi đó luật phân bố X sẽ là
X 0 1
i
P
p 1-p
Luật phân bố Y là
Y 0 1
i
P
1/2 1/2
ở đây
i
P
là xác suất gặp X, hoặc Y. Ở đây chúng thấy trong số gamma thì xác suất gặp 0
và 1 là như nhau. Z là giá trị ngẫu nhiên rời rạc cho bản mã. Từ hình chúng ta thấy rằng
Z=X+Y (mod 2). Chúng ta đi tính xác suất gặp 0 và 1 trong định luật phân bố Z:
Chúng ta dùng:
1)
)()()( BPAPBAP +=+
, nếu như A và B không giao nhau
2)
)(*)()*( BPAPBAP =
, nếu như A và B độc lập
Chúng ta có:
P(Z=0) = P(X=0,Y=0)+P(X=1,Y=1) =
= P(X=0)*P(Y=0)+P(X=1)*P(Y=1) =p*1/2+(1-p)*1/2 = 1/2 .
i
p
i
k
Bản rõ
gamma
Bản mã
i
c
i
c
i
k
Bản mã
gamma Bản rõ
i
p
Nên
P(Z=1) = 1-P(Z=0) = ½.
Điều này chúng ta thấy luật phân bố Z là đối xứng, có nghĩa là chúng ta nhận được
gamma hoặc là nhiễu (tức là Z không bao gồm một thông tin nào từ X) nên mã tuyệt
đối an toàn.
Cách chọn gamma:
1) Đối với từng trường hợp dùng gamma khác nhau;
2) Để tạo ra gamma dùng phương pháp tạo số ngẫu nhiên;
3) Gamma phải dài tương ứng với bản mã;
4) Lựa chọn gamma một cách thông minh để thám mã khó mò.
Mã dòng rất hữu ích đối với mã dòng dữ liệu liên tục, ví dụ trong mạng truyền tải dữ
liệu.
7.4 Một số sơ đồ dùng để thiết kế hệ mật
7.4.1 Mạng Feistel và các kiểu biến dạng của nó
Một trong các phương pháp thông dụng tạo ra mã khối là dựa trên cấu trúc có tên là
Feistel được Horst Feisel tạo ra. Cấu trúc một vòng của mạng Feistel biểu diễn hình 7.6.
Hình 7.6. Sơ đồ 1 vòng Feistel
Trong sơ đồ này thì hàm F là hàm cơ bản để xây nên khối mạng Feistel, nó luôn được
chọn là hàm phi tuyến tính và trong tất cả các trường hợp nó không có hàm ngược. Hàm
F có hai thám số, một là nữa khối bên phải và tham số còn lại là khóa.
R
F(R,K)
L’=R R’=F(R,K)
K
R
Giả sử X là khối bản tin, biểu diễn dưới dạng hai khối con có độ dài như nhau
{ }
RLX ,=
. Lúc này một vòng của mạng có thể biều diễn như sau, giả sử sau i vòng ta thu
được
{ }
iii
RLX ,=
, thì vòng thứ i+1 sẽ là:
{ }
iiiii
LKRFRX ⊕=
+
),(,
1
.
Mã khối xây dựng trên cơ sở mạng Feistel có r vòng như thế, số vòng này xác định độ
an toàn của hệ mã, và vòng cuối cùng không thực hiện hoán đổi giữa khối con bên phải
và khối con bên trái, tức là
{ }
1111
,),(
−−−−
⊕=
rrrrr
RLKRFX
,
Việc làm này không ảnh hưởng đến độ an toàn của thuật toán mã, mà nó sẽ làm cho
quá trình mã hóa và giải mã là hai quá trình thuận nghịch nhau, tức là sau khi mã chúng
ta thu được
r
X
, để giải mã, chúng ta dung đúng thuật toán mã hóa, tham số của thuật
toán bây giờ là khối dữ liệu là
r
X
và thực hiện r vòng với đảo thứ tự các khóa con ngược
với quá trình mã hóa, chúng ta thu được bản tin ban đầu.
Ưu và nhược điểm khi thực hiện mã khối trên cơ sở mạng Feistel.
Ưu điểm.
1. Quá trình mã hóa và giải mã trùng nhau, chỉ khác nhau ở thứ tự khóa con,
điều này sẽ tiết kiệm được nữa tài nguyên khi thực hiện thuật toán trên phần
cứng.
2. Hàm F có thể chọn với độ khó bất kỳ, vì không phải tìm hàm nghịch.
Nhược điểm.
1. Vì mỗi vòng mã chỉ thực hiện biến đổi nữa khối dữ liệu, nên cần số vong mã
hóa lớn để đảm bảo độ an toàn của hệ mật, điều này làm giảm đáng kể tốc độ
mã.
2. Ngoài ra xây dựng trên cơ sở mạng Feistel tồn tại lớp khóa tương đương, nên
làm không gian khóa giảm đi một nữa.
Ngoài ra chúng ta thấy nếu xây dựng một mã khối có kích cở lớn thì dùng mạng
Feistel với hai nhánh ở trên không thuận lợi, lúc này chúng ta dùng mạng Feistel 4 nhánh
với các kiểu của nó biểu diễn ở hình 7.7, 7.8 và 7.9.
Hình 7.7. Cấu trúc mở rộng mạng Feistel loại 2
Hình 7.8. Cấu trúc mở rộng mạng Feistel loại 3
2
X
3
X
4
X
F
K
2
X
3
X
4
X
F
K
2
X
3
X
4
X
F
K
Hình 7.9. Cấu trúc mở rộng mạng Feistel loại 2
7.4.2 Sơ đồ cấu trúc cộng nhân
Cấu trúc cộng nhân có thể xem như là một trong các kiểu hạt nhân cấu tạo nên các
hàm vòng, trong đó sử dụng các phép toán số học đơn giản và được nghiên cứu cẩn thận.
Cấu trúc này được đề xuất bởi J.L.Massey và X.Lai. Cấu trúc được cho như hình vẻ 7.10.
Hình 7.10. Sơ đồ cấu trúc cộng nhân
ở đây đây ta dùng hai phép toán số học là cộng và nhân theo modulo trong nhóm
tương ứng và
21
, XX
là các véctơ đầu vào,
21
,KK
là các khóa,
21
,YY
là véc tơ đầu ra.
Ưu điểm của cấu trúc. Khi thiết kế mã khối theo cấu trúc cộng nhân, thì mã khối có
tính khuyếch tán tốt.
7.5 Các bước cơ bản để thiết kế một hệ mật
Khi thiết kế mật mã thì vấn đề đảm bảo độ vững chắc của thuật toán là một vấn đề
quan trọng nhất.Và đây cũng là vấn đề phức tạp nhất. Đánh giá độ vững chắc của thuật
toán là một trong các công đoạn lâu nhất và khó nhất. Vì chưa có một lý thuyết hoàn
chỉnh để đánh giá độ an toàn của mã khối nên phương pháp sáng tạo là một cách quan
trọng nhất để đánh giá. Thế nhưng có thể đưa ra một số yêu cầu chung để xây dựng nên
một thuật toán mật mã. Nếu như mật mã thỏa mãn nhưng yêu cầu đó thì nói rằng thuật
toán an toàn.
Cần chú ý rằng vấn đề đảm bảo độ an toàn cao chưa phải là một mục đích duy nhất,
bởi khi xây dựng thuật toán mật mã đảm cần bảo được tốc độ mã hóa và việc thực hiện
chúng trên phần cứng và phần mền có phức tạp hay không cũng là yêu cầu không kém
1
K
1
X
2
X
2
K
1
Y
2
Y
quan trọng. Phụ thuộc vào yêu cầu của ứng dụng mà chọn sơ đồ mật mã và các bước
đánh giá cho phù hợp tức là tầm quan trọng của ứng dụng quyết định cho chúng ta chọn
thuật toán tương ứng với tham số mật mã (như công suất, độ phức tạp thực hiện, vv).
Quá trình xây dựng thuật toán mã khối được tiến hành theo các bước sau:
1. Nghiên cứu lĩnh vực ứng dụng. Ở bước này thực hiện chọn lựa kiểu hệ mật
và hình thành các yêu cầu ứng với tham số cơ bản của hệ mật. Mã dòng cho
phép nhận được tốc độ mã hóa cao nhất và đảm bảo khả năng độc lập biến đổi
từng bit và byte, và cho phép giảm khả năng lỗi khi truyền bản mật mã qua
kênh. Thế nhưng đối với mã dòng tỏ ra khó khoăn khi truy cập bất kỳ đến dữ
liệu mã hóa. Khuyết điểm này có thể tránh nếu sử dụng phần tử khóa gamma
phụ thuộc vào khóa mật và số thứ tự của phần tử đó. Trong các mật mã thế này
có dấu hiệu của mật mã khối. Hiện nay các mật mã khối được sử dụng rộng rãi
nhất. Mã khối đảm bảo được tính an toàn cao ở chế độ độc lập mã hóa từng
khối, và cho phép truy cập bất kỳ đến dữ liệu mã hóa. Trong số các thiết bị bảo
mật thông tin từ truy cập trai phép sử dụng các thuật toán mật mã file với tốc
độ cao ở chế độ on-line với sự kết hợp các kiểu hệ mật, tức là mã dòng và mã
khối. Ở mã dòng thực hiện biến đổi độc lập từng byte, nhưng nó thực hiện mã
phụ thuộc vào thứ tự của byte trong từng file và vào các dấu hiệu đặc biệt của
file. Căn cứ vào lĩnh vực ứng dụng mà xác định các giá trị của các phương án
thực hiện (chương trình, máy), độ phức tạp khi thực hiện trên máy và tốc độ
mã.
2. Lựa chọn chiều dài khóa mật. Cần chú rằng, bất kỳ một hệ mật với một chiều
dài khóa hữu hạn luôn luôn tồn tại khả năng tìm kiếm khóa mật bằng phương
pháp véc cạn khóa. Hiện nay đối với trường hợp tổng quát thì chiều dài khóa
được cho là an toàn nếu không nhỏ hơn 128 bit, nhưng trong một số trường
hợp riêng có thể dùng khóa với chiều dài 64 bit, có khi 56 bit, nếu như thông
tin cần bảo vệ không quá quan trọng.
3. Lựa chọn cách miêu tả khóa. Chúng ta có những cách miêu ta tả khóa khác
nhau, phần này xem cụ thể ở phần các cách miêu tả khóa.
4. Lựa chọn các phần tử mật mã cơ sở và cách xử lý hệ mật. Để hoàn thành
bước này cần am hiểu các phương pháp cơ bản để xây dựng mật mã, kiểu khối
các hệ mật, hiểu được từng lệnh sử dụng trong hệ mật, và cũng cần đánh giá về
chi phí khi thực hiện trên phần cứng cũng như thời gian trể của nó.
5. Đánh giá tài nguyên cần thiết để thực hiện thuật toán mật mã. Xem các
khả năng thực hiện trên phần cứng và phần mềm. Thực hiện các thí nghiệm
cũng như mô hình hóa chương trình cho hệ mật.
6. Đánh giá về cống suất của mật mã. Xác định tốc độ mã đối với các phương
án thực hiện khác nhau trên phần cứng và phần mềm. Nếu như trên bước 5 và
6 kết quả đánh giá nhận được không thỏa mãn giá trị mục đích của bước 1, thì
quay lại bước 4.
7. Xem độ an toàn của hệ mật đối với các kiểu tấn công mật mã khác nhau.
Xem xét các cách thám mã cơ bản, cũng như các khả năng tấn công khác với
việc sử dụng các ứng dụng đặc biệt. Dựa trên các cách tấn công đó, xác định
được độ khó tấn công và từ đó đánh giá được độ an toàn của hệ mật.
8. Biến đổi thuật toán. Cân nhắc kết qủa nhận được trên bước 7, có thể biến đổi
thuật toán, chọn lựa các phần tử tối ưu cho hệ mật nhằm nâng cao độ khó cho
cách tấn công hệ mật hiệu quả nhất. Nếu cần có thể lặp lại một số lần ở bước
này với các các thay đổi khác nhau nhằm đạt được mục đích.
9. Thực hiện phân tích chi tiết biến đổi hệ mật. Nếu như phân tích chi tiết vạch
ra sự tồn tại điểm yếu của hệ mật trong sơ đồ biến đổi thì lặp lại bước 8, nếu
cần có thể lặp lại cả bước 4.
10. Thực hiện kiểm tra thống kê và các thì nghiệm đặc biệt. Trên bước này
thực hiện chương trình thuật toán của hệ mật hoặc thực hiện chúng trên phần
cứng và tiến hành kiểm tra thống kê và các thí nghiệm đặc biệt, lập quy hoạch
kết quả phân tích để kiểm tra toàn diện và tương ứng với lý thuyết. Ngoài ra
việc kiểm tra hệ mật cũng chú ý đến các khả năng tấn công mới. Bước phân
tích hệ mật được tiếp tục thực hiện trong quá trình sử dụng hệ mật.
Các cách miêu tả khóa
1. Sử dụng tính trước. Ở đây chúng ta sử dụng một quá trình hay thuật toán để
biến đổi khóa mật thành khóa mở rộng. Việc sử dụng quá trình tính toán ban
đầu để mở rộng khóa cho phép đảm bảo được sự phụ thuộc phức tạp của
khóa vòng vào khóa mật. Cách làm này, nếu như có một thuật toán mở rộng
tốt thì sẽ tránh tấn công của thám mã nhằm đạt được khóa mật. Thế nhưng
phương pháp này có nhược điểm là sẽ làm giảm tốc độ mã trong ứng dụng ở
chế độ khóa phiên. Ngoài ra khi thực hiện trên máy cần tốn thêm một lượng
tài nguyên để thực hiện sơ đồ mở rộng khóa.
2. Trực tiếp sử dụng khóa mật. Ở đây sử dụng một phần khóa mật (kích cở là
32 hoặc 64 bit) cho mỗi vòng mã. Tiêu biểu cho cách sử dụng này là thuật
toán chuẩn liên xô 28147-89, chúng ta sẽ xem chi tiết thuật toán này ở phần
sau. Nhược điểm của phương pháp này là khóa vòng phụ thuộc rõ ràng vào
khóa mật nên thám mã có thể lợi dụng ở đây mà tấn công. Ngoài ra thực hiện
trực tiếp khóa mật tồn tại phần lớn lớp khóa yếu, tức là các khóa mà dùng
cho quá trình mã hóa và quá trình giải mã trùng nhau. Mặc dầu khóa yếu rất
hiếm xuất hiện và khi xử lý hệ mật thì tìm cách để tránh xuất hiện nó. Ưu
điểm khi dùng trực tiếp khóa mật làm khóa vòng là đảm bảo được tốc độ mã
ở chế độ khóa phiên và cũng không cần thêm tài nguyên cho quá trình mở
rộng khóa khi thực hiện trên máy.
3. Hình thành khóa vòng trong quá trình mã khối dữ liệu. Ở phương pháp
này thì vòng đầu tiên của quá trình mã sử dụng một phần khóa mật, nhưng
khi hoàn thành mã vòng đầu tiên thì hình thành khóa con cho vòng thứ hai.
Và khi mã vòng hai xong rồi thì tính toán khóa con cho vòng thứ ba và cứ
tiếp tục như thế. Quá trình giải mã cũng có qúa trình hình thành tương tự. Và
rõ ràng chúng ta thấy quan hệ khóa con giữa hai qúa trình mã và giải mã là
vòng mã thứ i và giải mã thứ R-i+1 có khóa con như nhau, ở đây R là số
vòng mã hay giải mã. Phương pháp này thì cũng cần thêm một lượng tài
nguyên khi thực hiện trên phần cứng nhưng nó đảm bảo được tốc độ mã ở
chế độ khóa phiên.
4. Biến đổi khóa con phụ thuộc vào biến đổi dữ liệu. Ở phương pháp này thì
một phần khóa mật được sử dụng trực tiếp, nhưng trước khi nó tham gia biến
đổi trên khối dữ liệu con thì nó bị biến đổi bằng lệnh, lệnh này phụ thuộc giá
trị hiện tại của một trong các khối con. Lệnh này có thể thực hiện đồng thời
với biến đổi của khối dữ liệu con khác, cho nên nó không làm giảm tốc độ
mã hóa. Phương pháp này cũng tồn tại xuất hiện khóa yếu, nhưng vấn đề này
có thể khắc phục bằng cách xây dựng hệ mật có một vòng mã không là thuận
nghịch (involution). Phương pháp này còn dễ thực hiện trên phần cứng và
đảm bảo được tốc độ cao ở chế độ khóa phiên.
7.6 Chuẩn mã khối DES và các biến dạng của nó
7.6.1 Tổng quan về DES.
DES (viết tắt của Data Encryption Standard, hay Tiêu chuẩn Mã hóa Dữ liệu) là một
phương pháp mật mã hóa được FIPS (Tiêu chuẩn Xử lý Thông tin Liên bang Hoa Kỳ)
chọn làm chuẩn chính thức vào năm 1976. Sau đó chuẩn này được sử dụng rộng rãi trên
phạm vi thế giới. DES mã hóa một xâu bit x dài 64 bằng một khóa có độ dài 56 bit. Và tất
nhiên bản mã cũng có độ dài 64 bit. Vì lý do DES có khóa mật quá ngắn, nên với kỹ
thuật hiện nay thì DES hoàn toàn bị phá. Nhưng để hiểu sâu về mã khối chúng ta không
thể không biết về DES.
Miêu tả thuật toán DES. Sơ đồ miêu tả DES được cho ở hình 7.11.
Hình 7.11 Sơ đồ thuật toán DES
Ta giải thích sơ đồ thuật toán, có thể xem thuật thuật toán có 3 giai đoạn sau:
1. Khối bản rõ x có độ dài 64. Nó sẽ bị biến đổi bằng lệnh hoán vị IP:
),()(
000
RLxIPx ==
,
Với hoán vị IP được cho bảng dưới.
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
IP
Bản rõ x
1
k
2
k
16
k
1−
IP
Bản mã y
F
F
F
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
Ở đây ta hiểu là, bit thứ 58 sẽ đổi về vị trí 1, bit thứ 50 về vị trí 2, tương tự như
thế cho các bit còn lại. Khối
0
x
chia thành hai khối con có độ dài bằng nhau
00
,RL
.
2. Khối
),(
00
RL
sẽ bị biến đổi qua 16 vòng, mỗi vòng sẽ biến đổi đúng trong
miểu tả mạng Feistel, tức là
{ }
iiiii
LKRFRx ⊕=
+
),(,
1
, chú ý là mỗi vòng sẽ có
một khóa
i
k
,khóa này được tạo ra bởi hàm tính toán khóa con, chúng ta sẽ
nói ở phần sau. Hàm F được miêu tả bằng sơ đồ trên hình 7.12:
Hình 7.12 Sơ đồ miêu tả hàm F của DES
Diễn giải sơ đồ như sau: Hàm F có hai tham số đầu vào, là khối dữ liệu 32 bit và
khóa con 48 bit, khối dữ liệu 32 bit sẽ mở rộng bằng hàm mỡ rộng E, để thành
48 bit, hàm E biểu diễn bằng bảng chọn bít sau:
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
E
32 bít dữ liệu
48 bít
48 bít khóa con
S
2
S
3
S
4
S
5
S
6
S
1
S
7
S
8
P
32 bít
Sau đó nó cộng loại trừ với khóa con 48 bit, như hình vẽ, ta sẽ thu được 48 bit,
48 bít này sẽ đi qua 8 bảng hoán đổi
821
, ,, SSS
, mỗi bảng S có 64 phần tử,xếp
thành 4 hàng, mỗi hàng 16 phần tử, mỗi phần tử là 4 bít. Giả sử đầu vào mỗi
bảng hoán đổi
i
S
là 6 bít
654321
bbbbbb
, thì đầu ra sẽ là 4 bít, cách xác định 4 bit đó
như sau: 2 bit
61
bb
xác định thứ tự hàng của bảng S, 4 bít
5432
bbbb
xác định cột của
bảng S, và phần tử cần xác định tương ứng có hàng thứ
61
bb
và cột thứ
5432
bbbb
.
Kết quả của quá trình hoán đổi chúng ta thu được là 32 bít. 32 bít này sẽ thực
hiện tiếp một hoán vị P và 32 bít nhận được là đầu ra của hàm F, với P được cho
ở bảng sau:
16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
6 bảng S được cho như sau:
S
1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S
2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S
3
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S
4
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
2 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S
5
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
2 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S
6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
2 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S
7
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
2 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S
8
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
Chú ý. Quá trình mã hóa thì thứ tự khóa con tham gia lần lượt cho 16 vòng là
1621
, ,, kkk
, quá trình giải mã thì thực hiện theo thứ tự ngược lại.
3. Qua 16 vòng, ta thu được 64 bit, và 64 bít này lại tiếp tục thực hiện hoán vị
ngược
1−
IP
của hoán vị
IP
ta thu được 64 bít mã.
1−
IP
tính ra như sau:
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
Quá trình sinh khóa con được miêu tả bằng sơ đồ hình 7.13.
PC1
Khóa 64 bít
<<<
<<<
PC2PC2
1
K
2
K
15
K
<<<
<<<
PC2
16
K
<<<
<<<<<<
<<<
PC2
Hình 7.13 Sơ đồ sinh khóa DES
Giải thích sơ đồ. Quá trình sinh khóa có thể chia ra hai giai đoạn sau:
1. Với 64 bit khóa ban đầu, ta loại các bit kiểm tra tính chẳn lẻ, còn lại 56 bit ta
thực hiện hoán vị cố định PC1, với PC1 được cho ở bảng dưới:
57 49 41 33 25 17 9 1 58 50 42 34 26 48
10 2 59 51 43 35 27 19 11 3 60 52 44 36
63 55 47 39 31 23 15 7 62 54 46 38 30 22
14 6 61 53 45 37 29 21 13 5 28 20 12 4
Với 56 bít nhận được phân chia ra hai khối con, mỗi khối 28 bít
00
,DC
.
2. Với i chạy từ 1 đến 16 thực hiện các bước sau:
Hai khối con
11
,
−− ii
DC
bít thực hiện dịch vòng trái
[ ]
ishifts
bít, với mảng
[ ] [ ]
1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1=shifts
, thu được 2 khối 28 bít
ii
DC ,
tương ứng.
Trong 56 bít thu được, ta thực hiện hoán vị cố định PC2 có 48 phần tử để thu
được khóa con
i
k
chiều dài là 48 bít, PC2 được cho ở bảng sau:
14 17 11 24 1 5 3 28 15 6 21 10
23 19 12 4 26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40 51 45 33 48
44 49 39 56 34 53 46 42 50 36 29 32
Chúng ta thấy PC2 vừa là hoán vị vừa là bảng chọn 48 bít từ 56 bít.
Biến dạng của DES.
Như nói ở phần trước, vì hạn chế của DES trước các phương pháp tấn công, nên họ
tìm cách làm tăng khả năng an toàn cho thuật toán. Chúng ta sẽ tìm hiểu hai cách biện
dạng hiệu quả trong số các biến dạng của DES.
3DES.
Sở dĩ nó có tên là 3DES bởi vì người ta dùng 3 lần liên tiếp DES với 3 khóa khác
nhau để mã hóa/giải mã. Chúng ta xem sơ đồ mã hóa 3DES trên hình 7.14, với E là quá
trình mã hóa của DES, tương ứng với quá trình giải mã là D.
Hình 7.14. Sơ đồ 3DES
Viết gọn như sau:
))((()(3
1
,,
23321
MDESDESDESMDES
KKKKK
−
=
Tức là bản tin ban đầu M sẽ được mã hóa bởi khóa
1
K
được
1
C
,
1
C
tiếp tục giải mã bởi
2
K
được
2
C
,
2
C
tiếp tục mã hóa bởi
3
K
được bản mã là C. Quá trình giải mã thì ngược lại,
tức là bản mã C sẽ giải mã bởi khóa
3
K
thu được
2
C
,
2
C
mã hóa bởi
2
K
thu được
1
C
,
1
C
giải mã bởi
1
K
ta thu được bản tin ban đầu M. Lúc này chiều dài khóa sẽ là 56.3=168 bít.
Chúng ta dễ dàng nhận thấy nếu
221
KKK ==
thì 3DES trở thành DES.
Nhưng tốt về hướng an toàn thuật toán thì có vấn đề về tốc độ thì 3DES khá chậm so
với bản thân DES, chính xác là chậm đi 3 lần so với DES. Ngoài ra khi thực hiện trên
phần cứng cũng tốn khá nhiều tài nguyên.
DESX.
D E
3
K
E
1
K
M
C
Năm 1984 Ron revert giới thiệu một DES mới có tên là DESX, khắc phục được
nhược điểm của DES. DESX được xác định như sau:
))(()(
12,,
21
KMDESKMDESX
KKKK
⊕⊕=
Khóa của DESX có chiều dài là 54+64+64=184 bít. Để mã khối dữ liệu M, đầu tiên
khối dữ liệu M sẽ cộng theo modulo 2 với khóa
1
K
theo từng bít, kết quả thu được được
mã hóa bỡi DES với khóa
K
và cuối cùng lại cộng từng bít theo modulo 2 với khóa
2
K
.
DESX làm tăng khả năng bảo vệ DES chống tấn công véc cạn khóa và đảm bảo được
độ an toàn chống lại các khả năng tấn công khác. Ngoài ra thuật toán này thực hiện đơn
giản và khi thực hiện trên phần cứng cũng đạt hiểu quả cao.
7.7 Thuật toán chuẩn mã khối Liên Xô GOST 28147-89
Đây là thuật toán có cấu trúc khá giống DES nhưng dễ thực hiện hơn, tốc độ mã lớn
hơn DES, hiện đang được sử dụng rộng rãi ở Nga. Nó mã hóa khối dữ liệu 64 bít, với
khóa là 256 bít. Đặc biệt thuật toán này dùng khóa mật trực tiếp tham gia vào quá trình
mã hóa, mà không sử dụng quá trình mở rộng khóa. Sơ đồ thuật toán được miêu tả ở hình
7.15.
Hình 7.15 Sơ đồ thuật toán chuẩn Liên Xô GOST 28147-89
S
<<<11
1
Q
S
<<<11
2
Q
S
<<<11
32
Q
Bản rõ 64 bít
Bản mã 64 bít
Thuật toán thực hiện 32 vòng biến đổi. S ở đây hàm thay thế 32 bít này thành 32 bít
khác, nó bao gồm 8 bảng
710
, ,, SSS
, mỗi bảng có 16 phần tử, mỗi phần tử 4 bít, 8 bảng
này được giữ bí mật để tạo thêm tham số mật cho hệ và nó được thay đổi theo chu kỳ thời
gian.
Các khóa con
i
Q
có chiều dài là 32 bít, nó được hình thành từ khóa mật. Khóa mật 256
bít chia ra 8 khóa con
i
K
. Và cách sử dụng các khóa con
'
,
ii
QQ
tương ứng với qúa trình
mã hóa và giải mã được miêu ta trong bảng sau.
Vòng thứ i 1 2 3 4 5 6 7 8 9 10 11
Mã hóa Q
i
K
1
K
2
K
3
K
4
K
5
K
6
K
7
K
8
K
1
K
2
K
3
Giải mã Q′
i
K
1
K
2
K
3
K
4
K
5
K
6
K
7
K
8
K
8
K
7
K
6
Vòng thứ i 12 13 14 15 16 17 18 19 20 21 22
Mã hóa Q
i
K
4
K
5
K
6
K
7
K
8
K
1
K
2
K
3
K
4
K
5
K
6
Giải mã Q′
i
K
5
K
4
K
3
K
2
K
1
K
8
K
7
K
6
K
5
K
4
K
3
Vòng thứ i 23 24 25 26 27 28 29 30 31 32
Mã hóa Q
i
K
7
K
8
K
1
K
2
K
3
K
4
K
5
K
6
K
7
K
8
Giải mã Q′
i
K
2
K
1
K
8
K
7
K
6
K
5
K
4
K
3
K
2
K
1
Có thể miêu ta thuật toán theo các bước sau:
Khối dữ liệu ban đầu chia ra thành hai khối con (L,R) có chiều dài là 32 bít. Và 1
vòng của thuật toán thực hiện biến đổi theo các bước sau:
1. Khối L cộng với khóa con
'
,
ii
QQ
theo modulo
32
2
.
2. 32 bít thu được ở bước 1, chia ra 8 phần mỗi phần 4 bít, 4 bít này qua phép
hoán đổi
i
S
ta thu được 32 bít mới.
3. 32 bít ở bước 2 tiếp tục bị biến đổi với phép dịch vòng trái 11 bít.
4. Kết quả nhận được ở bước 3 tiếp tục cộng từng bít theo modulo 2 với nhánh
R và thực hiến hoán đổi theo mạng Feistel và thực hiện vòng biến đổi mới.
7.8 Thuật toán mã khối Blowfish
Thuật toán này tuy không thông dụng như DES nhưng đây là thuật toán có độ an toàn
cao và dễ thực hiện hơn DES, do Bruce Schneier đề xuất năm 1993. Thuật toán này cũng
có 16 vòng, và xây dựng trên cơ sỡ sơ đồ Feistel. Blowfish mã hóa khối dữ liệu 64 bít, và
dùng khóa có chiều dài từ 32 đến 448 bít, tùy ứng dụng mà chúng ta chọn chiều dài khóa
thích hợp. Chúng ta xem sơ đồ thuật toán Blowfish ở hình 7.16.
Hình 7.16 Sơ đồ thuật toán Blowfish
Miêu tả thuật toán: Từ khóa mật hình thành nên 18 khóa con
1821
, ,, kkk
chiều dài 32
bít và 4 ma trận kích thước 256, mỗi phần tử có độ lớn là 32 bít:
Q
0
(1)
, Q
1
(1)
, …, Q
255
(1)
;
Q
0
(2)
, Q
1
(2)
, …, Q
255
(2)
;
Q
0
(3)
, Q
1
(3)
, …, Q
255
(3)
;
Q
0
(4)
, Q
1
(4)
, …, Q
255
(4)
.
ở đây Q
(i)
được dùng đối với hàm F(X), với X có độ lớn 32 bít. Hàm F được miêu tả như
sau. X - 32 bít biểu diễn dưới dạng sau: X= x
3
| x
2
| x
1
| x
0
. Sau đó diễn ra quá trình tính
F(X) như sau
F(X) = {[(Q
x3
(1)
+ Q
x2
(2)
) mod 2
32
] ⊕ Q
x1
(3)
} + Q
x0
(4)
( mod 2
32
).
Hàm F miêu tả ở hình 7.17.
1
k
F
16
k
F
18
k
17
k
14 vòng tiếp theo
64 bít mã/dữ liệu
Hình 7.17. Sơ đồ miêu tả hàm F của Blowfish
Thuật toán Blowfish có thể trình bày dưới dạng sau:
Thuật toán mã hóa:
Đầu vào: 64 bít khối dữ liệu rõ T=L|R, tức là biểu diễn dưới dạng 2 khối con có chiều
dài 32 bít.
1) Thiết lập i = 1.
2) Biến đổi gía trị khối con L và tính giá trị V hiện tại:
L := L ⊕ K
i
;
V := F(L).
3) Biến đổi khối con R:
R := R ⊕ V.
4) Nếu như i = 16, thì chuyển sang bước 7.
5) Tính i := i+1 và thực hiện hoán đổi giữa R và L:
W := R; R := L; L := W.
6) Chuyển về bước 2.
7) Biến đỗi khối con R:
R := R ⊕ K
17
.
8) Biến đổi khối con L:
L := L ⊕ K
18
.
Đầu ra: 64-bít khối bản mã L | R.
Thuật toán giải mã:
Đầu vào: 64-bít khối bản mã C = L | R.
1) Biến đổi khối con R:
1
S
2
S
3
S
4
S
32 bít
32 bít
32 bít
8 bít8 bít8 bít8 bít
R := R ⊕ K
17
.
2) Biến đổi khối con L:
L := L ⊕ K
18
.
3) Thiết lập i = 16.
4) Tính giá trị hiện tại của V và biến đổi khối con R:
V := F(L);
R := R ⊕ V.
5) Biến đổi khối con L:
L := L ⊕ K
17-i
.
6) Nếu i=1, thì chuyển sang bước 9.
7) Hoán đổi giữa R và L:
W := R; R := L; L := W.
8) i := i-1 và chuyển về bước 4.
Đầu ra là khối bản rõ: L | R.
7.9 Hệ mật mã khối RC2
Tác giả của nó là Ron Rivest – một trong 3 tác giả của hệ mật nổi tiếng RSA. RC2 sử
dụng khối có độ dài 64 bits, khóa có độ dài từ 8 đến 1024 bits. Thuật toán trong RC2
được thiết kế để có thể dễ dàng (và hiệu quả) triển khai trong hệ thống với bộ vi xử lý 16
bits (độ dài thanh ghi bằng 16 bits). Tốc độ mã của RC2 lớn hơn rất nhiều so với DES,
còn về độ an toàn thì có thể lớn hơn hoặc nhỏ hơn phụ thuộc vào chiều dài khóa mật
được chọn. Thực toán này thuộc sở hữu của công ty RSA Security Inc, nên muốn sử
dụng nó phải được đồng ý của công ty này. Chúng ta xem các thủ tục của thuật toán RC2.
Tạo khóa con
RC2 thực hiện một loạt thao tác với khóa chính để tạo 128 bytes khóa con. Khóa con
này được ghi trong mảng bytes: L[0], L[1], , L[127]. Một số phép biến đổi trong RC2
sẽ được mô tả đơn giản hơn nếu biểu diễn khóa con trên dưới dạng mảng các từ 2 bytes:
K[0], K[1], , K[63].
Giả sử khóa chính có độ dài T bytes (1 ≤ T ≤ 128). Trong RC2 có dự trù sẵn một thủ
tục cho phép làm giảm độ phức tạp của khóa đối với mã thám. Thủ tục này được sử dụng
trong trường hợp sản phẩm được dành để xuất khẩu. Ở đây chúng ta sẽ không xem xét
thủ tục này. Việc tạo khóa con được thực hiện bằng cách sao chép khóa chính (T bytes)