Tải bản đầy đủ (.doc) (21 trang)

Nghiên cứu về mã hóa cổ điển

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 (301.61 KB, 21 trang )

Trường Đại học Sư phạm Kỹ thuật Hưng Yên
Khoa Công nghệ thông tin

Tiểu luận: An Toàn Bảo Mật thông tin
Đề tài: Nghiên cứu về mã hóa cổ điển
Giảng viên hướng dẫn : Nguyễn Duy Tân
Sinh viên thực hiện : Hoàng Trịnh Khánh Hoàn
Lớp : TK6LC1
Hưng yên 1/2010
Mã cổ điển là phương pháp mã hóa đơn giản nhất xuất hiện đầu tiên
trong lịch sử ngành mã hóa. Thuật toán đơn giản và dễ hiểu. Những phương pháp
mã hóa cổ điển là cơ sở cho việc nghiên cứu và phát triển thuật toán mã hóa đối
xứng được sử dụng ngày nay. Trong mã hóa cổ điển có hai phương pháp nổi bật đó
là:
Mã thay thế
Mã hoán vị.
Mọi thuật toán mã hóa cổ điển đều là mã hóa đối xứng, vì ở đó thông tin
về khóa được chia sẻ giữa người gửi và người nhận. Mã đối xứng là kiểu duy nhất
trước khi phát minh ra khóa công khai. Hiện nay khóa công khai và mã đối xứng tiếp
tục phát triển và hoàn thiện.
Sau đây là một số khái niệm cơ bản về mã hóa:
1. Bản rõ: X được gọi là bản tin gốc. Bản rõ có thể được chia nhỏ có kích thước
phù hợp.
2. Bản mã: Y là bản gốc đã được mã hóa. Ở đây ta thường xét phương pháp mã
hóa mà không làm thay đổi kích thước của bản rõ, tức là chúng có cùng độ dài.
3. Mã là thuật toán E chuyển bản rõ thành bản mã. Thông tin chúng ta cần thuật
toán mã hóa mạnh, cho dù kẻ thù biết được thuật toán nhưng không biết thông
tin về khóa cũng không tìm được bản rõ.
4. Khóa K là thông tin tham số để mã hóa, chỉ có người gửi và người nhận biết,
Khóa độc lập với bản rõ và có độ dài phù hợp với yêu cầu bảo mật.
5. Mã hóa là quá trình chuyển bản rõ thành bản mã.


6. Giải mã là quá trình chuyển bản mã lại bản rõ.
7. Thám mã nghiên cứu các nguyên lý và phương pháp giải mã mà không biết
khóa.
8. Mật mã là chuyên ngành khoa học của khoa học máy tính nghiên cứu và
nguyên lý và phương pháp mã hóa.
Các phương pháp mã hóa cổ điển.
I.Mã dịch vòng (Shift cipher caesar)
Là 1 hệ mã hóa sử dụng phương pháp thay thế để mã hóa thông tin, thay thế ở đây
có nghĩa là mỗi kí tự trong bảng mã được thay thế bằng một kí tự khác trong nguyên
bản và sử dụng theo công thức :
E
k
( )=( ) mod 26.
Thuật toán giải mã tương ứng D
k
là lùi lại k bước trong bảng chữ cái theo modul
26.
D
k
(α) = (α - k) MOD 26
Thông tin mã hóa sử dụng 1 bảng mã gồm 26 chữ cái từ
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Quy tắc thay thế dựa theo công thức trên đó chính là thay thế một kí tự bằng một
kí tự khác có khoảng cách bằng k.
Thám mã ceaser
Là việc đơn giản do số khóa có thể là rất ít.
Chỉ có 26 khóa có thể, vì A chỉ có thể ánh xạ được đến 26 chữ cái trong bảng chữ
cái tiếng Anh. Các chữ khác sẽ được xác định bằng số bước tịnh tiến tương ứng của A
Thuật toán

Input: bản rõ M.
Output: bản mã, được mã hóa bằng mã Shift cipher caesar.
Thuật toán.
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
void mahoacaesar()
{
int i,i1;
char chuoi[100],dich[100];
printf("\nNhap chuoi can ma hoa:");fflush(stdin);
gets(chuoi);
printf("Chuoi duoc ma hoa:");
for(i=0;i<strlen(chuoi);i++)
{ if(chuoi[i]==88) printf("%c",chuoi[i]-23);
else
if(chuoi[i]==89) printf("%c",chuoi[i]-23);
else
if(chuoi[i]==90) printf("%c",chuoi[i]-23);
else
if(chuoi[i]>=120)
printf("%c",chuoi[i]-23);
else
printf("%c",chuoi[i]+3);
} printf("\n");
printf("\nNhap chuoi can giai ma:");fflush(stdin);
gets(dich);
printf("Chuoi da giai ma:");
for(i1=0;i1<strlen(dich);i1++)

{
if(dich[i1]==65) printf("%c",dich[i1]+23);
else
if(dich[i1]==66) printf("%c",dich[i1]+23);
else
if(dich[i1]==67) printf("%c",dich[i1]+23);
else
if(dich[i1]<=99&&dich[i1]>=97)printf("%c",dich[i1]+23);
else
printf("%c",dich[i1]-3);
}printf("\n");
}
void main()
{
textcolor(WHITE);
textbackground(BLUE);
clrscr();
mahoacaesar();
getch();
}
Ví Dụ 1: Muốn mã hóa P= “ABCY”.
với k=3.
E
k
(“A”)=(“A”+3 )mod 26= “D”
E
k
(“B”)=(“B”+3 )mod 26= “E”
E
k

(“C”)=(“C”+3 )mod 26= “D”
E
k
(“Y”)=(“Y”+3 )mod 26= “B”
 C= “DEFB”.
Giải mã
D
k
(“D”)=(“A”-3 )mod 26= “A”
D
k
(“E”)=(“E”-3)mod 26= “B”
E
k
(“F”)=(“F”-3)mod 26= “C”
E
k
(“B”)=(“B”-3 )mod 26= “Y”
 P= “ABCY”.
Ví Dụ 2: Muốn mã hóa P= “IBM”.
với k=25.
E
k
(“I”)=(“I”+ 25 )mod 26= “H”
E
k
(“B”)=(“B”+ 25 )mod 26= “A”
E
k
(“M”)=(“C”+ 25)mod 26= “L”

 C= “HAL”.
Giải mã
D
k
(“H”)=(“H”-25 )mod 26= “I”
D
k
(“A”)=(“A”-25 )mod 26= “B”
E
k
(“L”)=(“L”-25 )mod 26= “M”
 P= “IBM”.
Ví Dụ 3: Muốn mã hóa P= “MUPID”.
với k=6.
E
k
(“M”)=(“M”+6 )mod 26= “S”
E
k
(“U”)=(“U”+6 )mod 26= “A”
E
k
(“P”)=(“P”+6 )mod 26= “V”
E
k
(“I”)=(“I”+ 6 )mod 26= “O”
E
k
(“D”)=(“D”+6 )mod 26= “J”
 C= “SAVOJ”.

Giải mã
D
k
(“S”)=(“M”-6 )mod 26= “M”
D
k
(“A”)=(“U”-6 )mod 26= “U”
D
k
(“V”)=(“P”-6 )mod 26= “P”
D
k
(“O”)=(“I”-6 )mod 26= “I”
D
k
(“J”)=(“D”-6 )mod 26= “D”
 P= “MUPID”.
Ví Dụ 4: Muốn mã hóa P= “HELP”.
với k=3.
E
k
(“H”)=(“H”+ 3)mod 26= “K”
E
k
(“E”)=(“E”+3 )mod 26= “H”
E
k
(“L”)=(“P”+3 )mod 26= “O”
E
k

(“P”)=(“I”+ 3 )mod 26= “S”
 C= “KHOS”.
Giải mã
D
k
(“K”)=(“K”-3 )mod 26= “H”
D
k
(“H”)=(“H”-3 )mod 26= “E”
D
k
(“O”)=(“O”-3 )mod 26= “L”
D
k
(“S”)=(“S”-3)mod 26= “P”
 P= “HELP”.
Ví Dụ 5: Muốn mã hóa P= “HOMEH”.
với k=1.
E
k
(“H”)=(“H”+ 1)mod 26= “I”
E
k
(“O”)=(“O”+1 )mod 26= “P”
E
k
(“M”)=(“M”+1 )mod 26= “N”
E
k
(“E”)=(“E”+ 1 )mod 26= “F”

E
k
(“H”)=(“H”+ 1)mod 26= “I”
 C= “IPNFI”.
Giải mã
D
k
(“I”)=(“I”-1 )mod 26= “H”
D
k
(“P”)=(“P”-1 )mod 26= “O”
D
k
(“O”)=(“O”-1 )mod 26= “M”
D
k
(“F”)=(“F”-1)mod 26= “E”
D
k
(“I”)=(“I”-1 )mod 26= “H”
 P= “HOMEH”.
Như vậy khóa k sẽ chỉ nằm trong khoảng 0 25 để thám mã theo phương pháp
này ta có thể viết 25 dạng biểu diễn khác nhau của bản mã này thì chúng ta sẽ nhận
được một nguyên bản.
II. Hệ mã hoá AFFINE
Hệ mã hoá AFFINE được xác định bởi hai số nguyên a và b, với điều kiện 0 ≤ a,b
≤ 25 (tức a, b thuộc bảng chữ cái tiếng Anh 26 ký tự). ở đây chúng ta xét hệ làm việc
trên các số tự nhiên thay cho các ký tự như đã nói ở phần trên, các phép toán số học
được thực hiện theo modul 26.
Sự thay thế mỗi ký tự α sẽ được xác định bằng công thức (hàm mã hoá AFFINE):

E
k
(α) = (aα + b) MOD 26
Lưu ý: khi a = 1 thì ta có hệ mã hoá CAESAR.
Ví Dụ 1: Muốn mã hóa P= “NOTEV”.
với a = 3, b=5.
E
k
(”N”)=(3.“N”+5 )mod 26= “S”
E
k
(“O”)=(3.“O”+5 )mod 26= “V”
E
k
(“T”)=(3.“T”+5 )mod 26= “K”
E
k
(“E”)=(3.“E”+5 )mod 26= “R”
E
k
(“V”)=(3.“V”+5 )mod 26= “Q”
C= “SVKRQ”.
Ví Dụ 2: Muốn mã hóa P= “ABACD”.
với a = 2, b=5.
E
k
(”A”)=(2.“A”+5 )mod 26= “I”
E
k
(”B”)=(2.“B”+5 )mod 26= “K”

E
k
(”A”)=(2.“A”+5 )mod 26= “I”
E
k
(”C”)=(2.“C”+5 )mod 26= “L”
E
k
(”D”)=(2.“D”+5 )mod 26= “M”.
C= “IKILM”.
Ví Dụ 3: Muốn mã hóa P= “GHIKL”.
với a = 2, b=3.
E
k
(”G”)=(2.“G”+3 )mod 26= “Q”
E
k
(”I”)=(2.“I”+3 )mod 26= “T”
E
k
(”K”)=(2.“K”+3 )mod 26= “V”
E
k
(”L”)=(2.“L”+3 )mod 26= “Z”
E
k
(”M”)=(2.“M”+3 )mod 26= “B”
C= “QTVZB”.
Ví Dụ 4: Muốn mã hóa P= “SAUNA”.
với a = 3, b=5.

E
k
(“S”)=(3.“S”+5 )mod 26= “H”
E
k
(“A”)=(3.“A”+5 )mod 26= “F”
E
k
(“U”)=(3.“U”+5 )mod 26= “N”
E
k
(“N”)=(3.“N”+5 )mod 26= “S”
E
k
(“A”)=(3.“A”+5 )mod 26= “F”
C= “HFNSF”.
Ví Dụ 5: Muốn mã hóa P= “GHIKL”.
với a = 2, b=2.
E
k
(”G”)=(2.“G”+2 )mod 26= “O”
E
k
(”I”)=(2.“I”+2 )mod 26= “R”
E
k
(”K”)=(2.“K”+2 )mod 26= “U”
E
k
(”L”)=(2.“L”+2 )mod 26= “Y”

E
k
(”M”)=(2.“M”+2 )mod 26= “A”
C= “ORUYA”.
III. Hệ mã hoá VIGENERE
Hệ mã hoá này được đặt theo tên của một nhà mật mã người Pháp Blaise de
Vigenère (1523-1596).
VIGENERE cũng giống như CAESAR, nhưng ở đây khoá được thay đổi theo
từng bước. Hình vuông VIGENERE được sử dụng để mã hoá và giải mã.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
Hình vuông VIGENERE
Mỗi cột của hình vuông VIGENERE có thể xem như là một hệ CAESAR, với các
khoá 0, 1, 2, , 25. Để mã hoá thì bản rõ được đọc từ các hàng và khoá được đọc từ
các cột.
Ví dụ để mã hóa bản rõ PURPLE với từ khoá CRYPTO, đầu tiên ta tìm điểm giao
nhau của hàng P và cột C, ta được R. Cứ như vậy ta được bản mã RLPEES. Ta sẽ thu
được bản mã tương tự nếu ta thay đổi vai trò của hàng và cột trong khi mã hoá. Để
giải mã bản mã RLPEES vừa mã hoá, ta nhìn vào hàng nào có chứa R trong cột C,
theo cách này ta sẽ tìm được P. Và như vậy ta tìm được bản rõ là PURPLE.
Khoá được áp dụng một cách tuần hoàn, tức là nếu bản rõ dài hơn khoá thì khoá
lại được bắt đầu lại từ đầu. Ví dụ khoá CRYPTO được áp dụng với bản rõ có độ dài
15 ký tự là CRYPTOCRYPTOCRY.
Ta thấy rằng trong hệ mã hoá VIGENERE, với khoá có độ dài d thì sẽ có 26
d
khoá
hợp lệ. Vì vậy, chỉ cần với giá trị d nhỏ thì phương pháp thám mã vét cạn cũng đòi hỏi

khá nhiều thời gian.
Ví dụ 2: P= “ABCD”, Key=”GHI”.
“A” khóa G tịnh tiến 5: “G”
“B” khóa H tịnh tiến 6: “J”
“C” khóa G tịnh tiến 7: “K”
“D” khóa G tịnh tiến 8: “L”.
C= “GJKL”
Giải mã
“G” khóa G lùi lại 5: “A”
“J” khóa H lùi lại 6: “B”
“K” khóa G lùi lại 7: “C”
“L” khóa G lùi lại 8: “D”.
Ví dụ 3: P= “DECEPI”, Key=”WEAR”.
“D” khóa W tịnh tiến 23: “Z”
“E” khóa E tịnh tiến 4: “J”
“C” khóa A tịnh tiến 0: “C”
“E” khóa R tịnh tiến 18: “V”
“P” khóa E tịnh tiến 4: “T”.
“I” khóa W tịnh tiến 23: “F”
C= “ZJCVTF”
Giải mã
“Z” khóa W lùi lại 23: “D”
“J” khóa E lùi lại 4: “E”
“C” khóa A lùi lại 0: “C”
“V” khóa R lùi lại 18: “E”.
“T” khóa E lùi lại 4: “P”.
“F” khóa W lùi lại 23: “F”
C= “DECEPI”
Ví dụ 4: P= “WEARED”, Key=”DECE”.
“W” khóa D tịnh tiến 3: “Z”

“E” khóa E tịnh tiến 4: “I”
“A” khóa C tịnh tiến 2: “C”
“R” khóa E tịnh tiến 4: “V”
“E” khóa D tịnh tiến 3: “H”.
“D” khóa E tịnh tiến 4: “H”
C= “ZICVHH”
Giải mã
“Z” khóa D lùi lại 3: “W”
“I” khóa E lùi lại 4: “E”
“C” khóa C lùi lại 2: “A”
“V” khóa E lùi lại 4: “R”
“H” khóa D lùi lại 3: “E”.
“H” khóa E lùi lại 4: “D”
P= “WEARED”
Ví dụ 5: P= “AEARED”, Key=”DACE”.
“A” khóa D tịnh tiến 3: “D”
“E” khóa A tịnh tiến 0: “E”
“A” khóa C tịnh tiến 2: “C”
“R” khóa E tịnh tiến 4: “V”
“E” khóa D tịnh tiến 3: “H”.
“D” khóa A tịnh tiến 0: “D”
C= “DECVHD”
Giải mã
“D” khóa D lùi lại 3: “A”
“E” khóa A lùi lại 4: “E”
“C” khóa C lùi lại 2: “A”
“V” khóa E lùi lại 4: “R”
“H” khóa D lùi lại 3: “E”.
“D” khóa E lùi lại 4: “D”
P= “AEARED”

I V. Hệ mã hoá HILL
Hệ mã hoá này dựa trên lý thuyết về đại số tuyến tính do Lester S.Hill đưa ra năm
1929.
Cả không gian bản rõ và bản mã đều là Σ
*
, trong đó Σ là bản chữ cái tiếng Anh.
Chúng ta sử dụng các số tự nhiên thay cho các ký tự và các phép toán số học được
thực hiện theo modul 26 như đã nói ở phần trên.
Ta chọn một số nguyên d ≥ 2. Xét M là ma trận vuông d phần tử. Các phần tử của
M là các số nguyên từ 0 đến 25. Hơn nữa M phải là ma trận khả nghịch, tức là tồn tại
M
-1
. Ví dụ:
M =








5 2
3 3
và M
-1
=









9 20
17 15
.
Để mã hoá, bộ d chữ cái của bản rõ được mã hoá cùng nhau. Trong các trường
hợp sẽ xét dưới đây ta lấy d=2.
Quá trình mã hoá được thực hiện theo công thức:
MP = C
trong đó P và C được viết thành các vector cột d chiều. Mỗi bộ d chữ cái của bản
rõ được viết thành vector P với các thành phần là các số biểu diễn các ký tự. Và C
cũng thể hiện khối d ký tự của bản mã.
Còn khi giải mã ta phải dùng ma trận nghịch đảo M
-1
:
P = M
-1
C
Ví dụ1, bản rõ “HELP” được viết thành hai vector
P
1
=









E
H
=








4
7
và P
2
=








P
L
=









15
11
.
theo công thức mã hoá ta có
MP
1
=








5 2
3 3









4
7
=








34
33
=








8
7
=









I
H
= C
1

MP
2
=








5 2
3 3









15
11
=








97
78
=








19
0
=









T
A
= C
2
Chúng ta thu được bản mã “HIAT”.
Giải mã
Theo công thức mã hoá ta có
M
-1
C
1
=








9 20
17 15
.









8
7
=








4
7
=








E
H

= P
1

MP
2
=








9 20
17 15








19
0
=









15
11
=








P
L
= P
2
P= ‘HELP’
Ví dụ 2 : P= ‘ABCD’
Viết bản rõ thành 2 vecto
P
1
= ‘AB’
P
2
= ‘CD’
Theo công thức mã hoá ta có

MP
1
=








5 2
3 3
‘AB’ = ‘LN’ = C
1

MP
2
=








5 2
3 3
‘CD’= ‘VZ’ = C

2
Chúng ta thu được bản mã “LNVZ”.
Giải mã
Theo công thức mã hoá ta có
M
-1
C
1
=








9 20
17 15
. ‘LN’ = ‘AB’= P
1

M
-1
C
2
=









9 20
17 15
‘VZ’= ‘CD’ =P
2
P= ‘ABCD’
Ví dụ 3 : P= ‘FBED’
Viết bản rõ thành 2 vecto
P
1
= ‘FB’
P
2
= ‘ED’
Theo công thức mã hoá ta có
MP
1
=









5 2
3 3
‘FB’ = ‘XN’ = C
1

MP
2
=








5 2
3 3
‘ED’= ‘AZ’ = C
2
Chúng ta thu được bản mã “XNAZ”.
Giải mã
Theo công thức mã hoá ta có
M
-1
C
1
=









9 20
17 15
. ‘XN’ = ‘FB’= P
1

M
-1
C
2
=








9 20
17 15
‘AZ’= ‘ED’ =P
2
P= ‘FBED’
Ví dụ 4 : P= ‘AECF’

Viết bản rõ thành 2 vecto
P
1
= ‘AE’
P
2
= ‘CF’
Theo công thức mã hoá ta có
MP
1
=








5 2
3 3
‘AE’ = ‘LA’ = C
1

MP
2
=









5 2
3 3
‘CF’= ‘VX’ = C
2
Chúng ta thu được bản mã “LAVX”.
Giải mã
Theo công thức mã hoá ta có
M
-1
C
1
=








9 20
17 15
. ‘LA’ = ‘AE’= P
1


M
-1
C
2
=








9 20
17 15
‘VX’= ‘CF’ =P
2
P= ‘AECF’
Ví dụ 5 : P= ‘BCDF’
Viết bản rõ thành 2 vecto
P
1
= ‘BC’
P
2
= ‘DF’
Theo công thức mã hoá ta có
MP
1
=









5 2
3 3
‘BC’ = ‘NV’ = C
1

MP
2
=








5 2
3 3
‘DF’= ‘ZX’ = C
2
Chúng ta thu được bản mã “NVZX”.
Giải mã

Theo công thức mã hoá ta có
M
-1
C
1
=








9 20
17 15
. ‘NV’ = ‘BC’= P
1

M
-1
C
2
=









9 20
17 15
‘ZX’= ‘DF’ =P
2
P= ‘BCDF’
Với độ lớn dữ liệu mã hóa m=3, hệ thống được mô tả như sau:
C
1
= (k
11P1
+ k
12P2
k
13P3
) mod 26
C
2
= (k
21P1
+ k
22P2
k
23P3
) mod 26
C
3
= (k
31P1

+ k
32P2
k
33P3
) mod 26
Điều này có thể được trình bày trong vector cột hoặc ma trận:
= mod 26
Hoặc C= KP mod 26.
ở đây C và P là các vector có độ dài bằng 3 và ma trận khóa K là ma trận 3x3. Ví
dụ mã hóa bane plaintext “paymoremoney” sử dụng ma trận khóa là:
k=
Đầu tiên 3 từ của nguyên bản được thực hiện:
PK= = mod 26 = = LNS
Cuối cùng ta thu được bản mã là : “LNSHDLEWMTRW”.
Để giải mã ta dùng ma trận nghịch đảo K
-1
=
Và áp dụng công thức P= K
-1
C mod 26, ta thu được bản rõ ban đầu là:
“paymoremoney”.
Ngoài ra còn một số phương pháp mã hóa cổ điển khác nhưng do thời gian
có hạn nên em chưa thể tìm hiểu kỹ được như:
 Mã Raill Fence
Đây là mã hoán vị đơn giản. Viết các chữ của bản rõ theo đường chéo trên một
số dòng. Sau đó đọc các chữ theo từng dòng sẽ nhận được bản mã.
 Mã Playfair
Được nhà bác học Charles sáng tạo ra năm 1854. Mỗi chữ cái được mã hóa
bằng 7 chữ khác.
 Mã dịch vòng

Viết các chữ cái của bản tin theo dòng và số cột xác định. Sau đó thay đổi thứ
tự các cột theo một dãy số khóa cho trước, rồi đọc lại chúng theo các cột để nhận
được bản mã.
 Mã tích
Kết hợp cả hai phương pháp thay thế và hoán vị sử dụng đan xen hoặc vòng lặp
nhiều lần.
Điểm yếu của mã hóa cổ điển:
 Phương pháp mã hóa cổ điển có thể dễ dàng bị giải mã bằng cách đoán chữ
dựa trên phương pháp thống kê tần xuất xuất hiện các chữ cái trên bản mã và so sánh
với bản thống kê quan sát của bản rõ.
 Để dùng được mã cổ điển thì bên mã hóa và bên giải mã phải thống nhất
với nhau về cơ chế mã hóa cũng như giải mã. Nếu không hai bên sẽ không thể làm
việc được với nhau.
Để khắc phục những điểm yếu đó ngày nay người ta đã sử dụng mã khóa khóa
đối xứng.Dưới đây là 2 loại mã khóa đối xứng thường được sử dụng
1-Mã hóa Feistel
Đề xuất bởi Horst Feistel dựa trên khái niệm hệ mã hóa tích hợp thuận nghịch của
Shannon
Phân mỗi khối dài 2w bit thành 2 nửa L0 và R0
Xử lý qua n vòng
Chia khóa K thành n khóa con K1, K2, , Kn
Tại mỗi vòng i
Thực hiện thay thế ở nửa bên trái Li-1 bằng cách XOR nó với F(Ki, Ri-1)
F thường gọi là hàm chuyển đổi hay hàm vòng
Hoán vị hai nửa Li và Ri cho nhau
Involution (đối hợp)
Đặc biệt, hàm cơ sở vòng lặp f thông thường là một hàm có đặc tính đối hợp
(involution), tức là nó bằng hàm ngược của nó: f = f-1 hay là f(f(x)) = x
Ví dụ:
x ∈ {tập các chuỗi nhị phân độ dài 3}

(bit thứ nhất và thứ hai đổi chỗ cho nhau, bit thứ ba giữ nguyên).
Như thế ta có f là một hàm xoáy ốc, chẳng hạn cụ thể là
f(101 = 011)
f(f(101)) = 101
Mỗi khối được chia thành 2 phần có độ dài bằng nhau: L và R (left và right). Quá
trình mã hóa được biểu diễn bởi công thức:
L2 = R1
R2 = f(R1, K2) ⊕ L1
Để mã hóa (giải mã) một khối, sơ đồ Feistel có thể được dùng nhiều lần; con số
này trong DES là 16 và trong Gost 28147-89 là 32. Khi thực hiện chu trình cuối cùng,
kết quả mã hóa sẽ không phải đảo ngược (tráo vị trí nửa phải và nửa trái cho nhau) mà
giữ nguyên trật tự. Tức là:
RN = RN-1
LN = f(RN, KN) ⊕ LN-1 .
Các đặc trưng hệ Feistel
Độ dài khối: Khối càng lớn càng an toàn (thường 64 bit)
Độ dài khóa : Khóa càng dài càng an toàn (thường 128 bit)
Số vòng : Càng nhiều vòng càng an toàn (thường 16 vòng)
Giải thuật sinh mã con : Càng phức tạp càng khó phá mã
Hàm vòng : Càng phức tạp càng khó phá mã
Ảnh hưởng đến cài đặt và phân tích
Giải mã Feistel
Giống giải thuật mã hóa, chỉ khác
Bản mã là dữ liệu đầu vào, các khóa con được dùng theo thứ tự ngược lại
Tại mỗi vòng kết quả đầu ra chính là các dữ liệu đầu vào của quá trình mã hóa
Đối với quá trình mã hóa: Li = Ri-1, Ri = Li-1 ⊕ F(Ri-1, Ki)
Đối với quá trình giải mã : Ri-1 = Li, Li-1 = Ri ⊕ F(Li-1, Ki)
Ưu và nhược điểm của sơ đồ Feistel
Ưu điểm
+ Ưu điểm đầu tiên rất dễ nhận ra – đó là để giải mã không cần phải tìm hàm

ngược của hàm f(). Như thế chọn hàm f() với độ phức tạp bất kỳ, kể cả những hàm
không dễ gì tìm được hàm ngược.
+ Ưu điểm thứ hai rất quan trọng là sơ đồ giải mã trùng với sơ đồ mã hóa. Từ góc
nhìn của người lập trình, có thể dùng chung một đoạn chương trình cho cả mã hóa lẫn
giải mã.
Nhược điểm
+ Trong mỗi chu kỳ chỉ có ½ khối được mã hóa; ½ còn lại được giữ nguyên so
với đầu vào. Như thế số lần lặp phải tăng lên 2 lần.
+ Còn một nhược điểm nữa của sơ đồ Feistel, đó là sự có mặt của khóa tương
đương. Nó làm cho không gian khóa bị giảm đi 2 lần.
1- Data Encryption Standard (DES)
Mã hóa 1 khối
Khối 64 bits bản rõ (M) chịu sự biến đổi trong khối hoán vị xuôi
Kết quả được cắt làm 2 phần L0 và R0; L0 chiếm 32 bits cao, R0 chiếm 32 bits
thấp.
Đối với i=1 15: khối Li nhận giá trị của Ri-1. Khối Ri-1 sau đó chịu biến đổi bởi
hàm f cùng với khóa chu kỳ ki, đem giá trị thu được cộng từng bit theo module 2 với
Li-1 và ghi kết quả vào Ri.
Ở chu kỳ cuối cùng (i=16) việc hoán đổi vị trí không xảy ra.
Kết quả thu được sau chu kỳ thứ 16 chịu sự biến đổi trong khối hóan vị ngược để
có được khối mã (C).
Giải mã 1 khối
Nhận xét rằng nếu không tính hai khối hóan vị IP và IP-1 thì sơ đồ mã hóa cơ bản
của DES là tập hợp 16 mắt xích Feistel. Vì thế để giải mã khối C ta chỉ cần:
Tráo đổi vị trí của hai khối IP và IP-1 cho nhau.
Đảo ngược thứ tự khóa chu kỳ ki: k1, k2, , k16 → k16, k15, , k1.
Cho khối mã C đi qua sơ đồ mới thu được. Ở đầu ra ta sẽ nhận được khối rõ M
Phép hoán vị IP và IP-1
Phép hóan vị xuôi IP
+ Gán i=1

+ Tìm giá trị phần tử thứ i của dãy IP: k=IP[i]
+ Sao chép giá trị của bits thứ k của khối X sang bits thứ i của khối T.
+ Tăng i lên 1
+ Nếu i≤64 thì quay lại bước 2
+ Kết thúc.
Phép hóan vị ngược IP-1
+ Gán i=1
+ Tìm giá trị phần tử thứ i của dãy IP: k=IP[i]
+ Sao chép giá trị của bits thứ i của khối T sang bits thứ k của khối X.
+ Tăng i lên 1
+ Nếu i≤64 thì quay lại bước 2
+ Kết thúc.
Hàm mã hóa f()
Hoạt động của hàm f()
Khối Ri-1 32 bits được “nới rộng” (kéo dài) thành 48 bits bởi hàm E
+ Sau đó đem cộng từng bits theo module 2 (XOR) với khóa chu kỳ ki.
+ Kết quả 48 bits được chia làm 8 phần, mỗi phần 6 bits sẽ chịu biến đổi trong
khối thay thế Sj (j=1 8) để thu được khối 4 bits. 8 khối 4 bits được hợp lại với nhau
thành khối 32 bit và chịu biến đổi trong khối hoán vị P.
+ Kết quả thu được (32 bits) chính là giá trị của hàm f(Ri-1, ki).

×