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 (244.17 KB, 39 trang )
An ton v bo mt thụng tin
7
#include
void main()
{
int c;
while ((c == getchar()) != EOF)
{
if (c >= a && c <= m)
c = c + 13;
else
if (c >= n && c <= z)
c = c 13;
else
if (c >= A && c <= M)
c = c + 13;
else
if (c >= N && c <= Z)
c = c-13;
putchar(c);
}
}
Mã hoá một file hai lần bằng ROT13 và lu giữ kết quả trong file gốc:
P = ROT13(ROT13(P))
Có rất nhiều hệ mã hoá có thể dễ dàng bẻ gẫy bởi vì bản mã không ẩn đi đợc
tần số xuất hiện của các ký tự khác nhau của bản rõ, khoảng 26 ký tự tiếng Anh.
Một nhà thám mã giỏi có thể xây dựng lại đợc bản rõ.
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
8
1. Hệ mã hoá CAESAR
Hệ mã hoá nổi tiếng CAESAR là một hệ mã hoá đợc biết sớm nhất, sáng tạo
bởi Julius Caesar. Lần đầu tiên đợc sử dụng trong quân sự. Hệ mã hóa này làm việc
trên bảng chữ cái tiếng Anh 26 ký tự (A, B,... , Z).
Trong hệ CAESAR và các hệ tơng tự còn lại ta sử dụng các số tự nhiên thay
cho các ký tự - đánh số các ký tự trong bảng chữ cái theo thứ tự: A là 0, B là 1,...
và Z là 25.
A B
C D E F G H I
J
... L
M N
... W X
Y
Z
0
2
9
... 1
1
1
... 2
2
2
2
1
2
3
2
3
3
5
1
3
4
5 6 7 8
Các phép toán số học thực hiện theo modul 26. Có nghĩa là 26 đồng nhất với
0, 27 đồng nhất với 1, 28 đồng nhất với 2,... Ví dụ:
2ì17 + 5ì9 = 79 = 1 + 3ì26 = 1
Thuật toán:
- Bớc 1: Đa vào bản rõ cần mã hóa
- Bớc 2: Cho khóa k (0 k 25)
- Bớc 3: thay thế mỗi ký tự trong bản rõ bằng 1 ký tự khác bằng cách dịch
ký tự cần mã hóa sang phảI k bớc theo modul 26. Tơng ứng với công
thức:
Ek() = ( + k) MOD 26
với là một ký tự, k là khóa (0 k 25), MOD là phép chia lấy phần d.
Không gian khoá của hệ CAESAR bao gồm 26 số 0, 1, 2,... 25.
Ví dụ: với k=3, A đợc thay bằng D, B đợc thay bằng E,... , W đợc thay bằng
Z,... , X đợc thay bằng A, Y đợc thay bằng B, và Z đợc thay bằng C. Ta có:
Bảng chữ cái gốc
A B C D E F G H I J K L MN O P Q R S T U V WX Y Z
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
9
Bảng chữ cái dùng để mã hoá
D E F G H I J K L MN O P Q R S T U V WX Y Z A B C
Ví dụ:
Ví dụ 1: =GOOD, k=8 ta có:
E8(G)=(6+8) MOD 26 =14 =O
E8(O)=(14+8) MOD 26 =22 =W
E8(D)=(3+8) MOD 26 =11 =L
Vậy với bản rõ GOOD ta sẽ mã hóa thành OWWL
Ví dụ 2: =Tinhoc, k=10 ta có:
E10(T)=(19+10) MOD 26 =3 =D
E10(I)=(8+10) MOD 26 =18 =S
E10(N)=(13+10) MOD 26 =23 =X
E10(H)=(7+10) MOD 26 =17 =R
E10(O)=(14+10) MOD 26 =24 =Y
E10(C)=(2+10) MOD 26 =12 =M
Vậy với bản rõ TINHOC ta sẽ mã hóa thành DSXRYM
Ví dụ 3: =Baomat, k=17 ta có:
E17(B)=(1+17) MOD 26 =18 =S
E17(A)=(0+17) MOD 26 =17 =R
E17(O)=(14+17) MOD 26 =5 =F
E17(M)=(12+17) MOD 26 =3 =D
E17(T)=(19+17) MOD 26 =10 =K
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
10
Vậy với bản rõ BAOMAT ta sẽ mã hóa thành SRFDRK
* Thuật toán giải mã tơng ứng Dk là lùi lại k bớc trong bảng chữ cái theo
modul 26.
Dk() = ( - k) MOD 26
Để minh họa, ta xét một vài ví dụ minh hoạ:
Ví dụ 1: = HPWNZXP
- Xét với k=1 ta có thể lùi lại 1 bớc trong bảng chữ cái. Nh vậy bản mã trên
tơng ứng là: GOVMYWO
- k=2, tơng tự thu đợc bản rõ FNULXVN
- k=3, thu đợc bản rõ EMTKWUM
- k=4, thu đợc bản rõ DLSJVTL
- k=5, thu đợc bản rõ CKRIUSK
- k=6, thu đợc bản rõ BJQHTRJ
- k=7, thu đợc bản rõ AIPGSQI
- k=8, thu đợc bản rõ ZHOFRPH
- k=9, thu đợc bản rõ YGNEQOG
- k=10, thu đợc bản rõ XFMDPNF
- k=11, thu đợc bản rõ WELCOME
Đến đây bản rõ có nghĩa (WELCOME) nên ta xác định đợc khóa k = 11
Ví dụ 2: Cho bản mã JBCRCLQRWCRVNBJENBWRWN ta thử liên tiếp các khóa
giải mã để thu đợc các bản rõ:
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
11
JBCRCLQRWCRVNBJENBWRWN
(k=1)
IABQBKPQVBQUMAIDMAVQVM
(k=2)
HZAPAJOPUAPTLZHCLZUPUL
(k=3)
GYZOZINOTZOSKYGBKYTOTK
(k=4)
FXYNYHMNSYNRJXFAJXSNSJ
(k=5)
EWXMXGLMRXMQIWEZIWRMRI
(k=6)
DVWLWFKLQWLPHVDYHVQLQH
(k=7)
CUVKVEJKPVKOGUCXGUPKPG
(k=8)
BTUJUDIJOUJNFTBWFTOJOF
(k=9)
ASTITCHINTIMESAVESNINE
Tới đây ta thu đợc bản rõ có nghĩa và dừng lại, khóa tơng ứng k = 9.
Một số thuộc tính của Ek và Dk là:
Tính giao hoán: Ek và Dk đợc áp dụng lần lợt, thứ tự không quan trọng.
Ví dụ: E3 D7 E6 D11 = E3 E6 D7 D11 = D9 = E17.
Với k bất kỳ thoả mãn 1 k 26 ta có: Dk = E26-k, DkEk = E0 = D0.
Hệ CAESAR là hệ mã hoá cũ và không an toàn vì không gian khoá của nó
rất nhỏ, do đó có thể thám mã theo phơng pháp vét cạn. Khoá giải mã có thể tính
ngay ra đợc từ khoá mã hoá. Do chỉ có 26 khoá nên ta có thể thử lần lợt các khoá
cho đến khi tìm đợc khoá đúng.
2. 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.
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
12
Thuật toán:
- Bớc 1: Đa vào bản rõ cần mã hóa
- Bớc 2: Cho bớc nhảy các ký tự, tức là giá trị a và b
- Bớc 3: Thay thế ký tự ở bản rõ bằng ký tự đợc xác định bởi:
Ek() = (a + b) MOD 26
Lu ý: khi a = 1 thì ta có hệ mã hoá CAESAR.
Ví dụ: nếu a = 3 và b = 5 thì ta có, bảng số tự nhiên tơng ứng với bảng chữ
cái gốc:
0
1
13 14
2
3
4
5
6
7
8
9
10
11
12
15
16
17
18
19
20
21
22
23
24
25
bảng số tự nhiên sau khi mã hoá:
5
8
18 21
11
14
17
20
23
0
3
6
9
12
15
24
1
4
7
10
13
16
19
22
25
2
Tơng ứng ta có bảng chữ cái gốc:
A B C D E F G H I J K L MN O P Q R S T U V WX Y Z
và bảng chữ cái dùng để mã hoá:
F I L O R U X A D G J MP S V Y B E H K N Q T WZ C
Ví dụ1: = THUHIEN, với a=3, b=5 ta có:
Ek(T) = (3.19 + 5) MOD 26 = 10 = K
Ek(H) = (3.7 + 5) MOD 26 = 0 = A
Ek(U) = (3.20 + 5) MOD 26 = 13 = N
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
13
Ek(I) = (3.8 + 5) MOD 26 = 3 = D
Ek(E) = (3.4 + 5) MOD 26 = 17 = R
Ek(N) = (3.13 + 5) MOD 26 = 18 = S
Vậy, với bản rõ THUHIEN ta thu đợc bản mã: KANADRS
Ví dụ2: = KHOGHE, với a=9, b=3 ta có:
Ek(K) = (9.10+3) MOD 26 = 15 = P
Ek(H) = (9.7+3) MOD 26 = 14 = O
Ek(O) = (9.14+3) MOD 26 = 25 = Z
Ek(G) = (9.6+3) MOD 26 = 5 = F
Ek(E) = (9.4+3) MOD 26 = 13 = N
Ek(N) = (3.13 + 5) MOD 26 = 18 = S
Vậy, với bản rõ KHOGHE ta thu đợc bản mã: POZFON
Ví dụ3: = TOTNGHIEP, với a=4, b=11 ta có:
Ek(T) = (4.19+11) MOD 26 = 9 = J
Ek(O) = (4.14+11) MOD 26 = 15 = P
Ek(N) = (4.13+11) MOD 26 = 11 = L
Ek(G) = (4.6+11) MOD 26 = 9 = J
Ek(H) = (4.7+11) MOD 26 = 13 = N
Ek(I) = (4.8+11) MOD 26 = 17 = R
Ek(E) = (4.4+11) MOD 26 = 1 = B
Ek(P) = (4.15+11) MOD 26 = 19 = T
Vậy, với bản rõ TOTNGHIEP ta thu đợc bản mã: JPJLJNRBT
Để có thể giải mã đợc ta chú ý rằng hàm mã hoá AFFINE:
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
14
Ek()=(a + b) MOD 26
phải là hàm đơn ánh hay nói cách khác hàm này có ánh xạ 1-1. Ví dụ với a = 10,
b= 1 ta có ánh xạ 10 + 1. ánh xạ này không thoả mã vì hai ký tự A và N cùng ánh
xạ tới B, vì vậy khi giải mã B có thể đợc giải mã thành A và N. Ngợc lại không có
một ký tự nào ánh xạ tới O, và vì vậy O không xuất hiện trong bảng chữ cái thay
thế. Ta có thể dễ dàng tìm thấy tất cả các cặp ký tự cùng ánh xạ tới một ký tự cũng
nh tất cả các ký tự không xuất hiện trong bảng chữ cái thay thế.
3. Hệ mã hoá Playfair
Nh chúng ta đã thấy, không phải số khóa lớn trong mã bảng chữ đơn đảm
bảo an toàn mã. Một trong các hớng khắc phục là mã bộ các chữ tức là mỗi chữ sẽ
đợc mã bằng 1 số chữ khác nhau tùy thuộc vào các chữ mà nó đứng cạnh. Playfair
là một trong các mã nh vậy, nó đợc sáng tạo bởi Charles Wheastone vào năm 1854
và mang tên ngời bạn là Barlon Playfair. ở đây mỗi chữ có thể đợc mã bằng 1 trong
7 chữ khác nhau tùy ý vào cặp chữ đứng cùng nó trong bảng chữ cái.
Ma trận khóa Playfair: cho trớc 1 từ làm khóa, với điều kiện trong từ khóa đó
không có chữ nào bị lặp. Ta lập ma trận Playfair là ma trận cỡ 5x5 dựa trên từ khóa
đã cho và gồm các chữ trên bảng chữ cái, đợc sắp xếp theo thứ tự nh sau:
- Trớc hết, viết các chữ của từ khóa vào các hàng của ma trận bắt đầu từ
hàng thứ nhất.
- Nếu ma trận còn trống, viết các chữ khác lên bảng chữ cái cha đợc sử
dụng vào các ô còn lại. Có thể viết theo 1 trình tự quy ớc trớc, chẳng hạn
từ đầu bảng chữ cái cho đến cuối.
- Vì có 26 chữ cái tiếng Anh nên thiếu 1 ô. Thông thờng ta dồn 2 chữ nào
đó vào 1 ô chung, chẳng hạn I và J.
- Giả sử sử dụng từ khóa MONARCHY. Lập ma trận khóa Playfair:
MONAR
CHYBD
EFGIK
LPQST
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
15
UVWXZ
Mã hóa và giải mã: bản rõ đợc mã hóa hai chữ cùng 1 lúc theo quy tắc nh sau:
- Chia bản rõ thành từng cặp chữ. Nếu 1 cặp nào đó có 2 chữ nh nhau thì
chèn thêm 1 chức lọc, chẳng hạn X. Ví dụ trớc khi mã ballon biến đổi thành
balxlon.
- Nếu cả hai chữ trong cặp đều rơi vào cùng 1 hàng thì mã mỗi chữ bằng chữ
ở phía bên phải nó trong cùng 1 hàng của ma trận khóa (cuộn vòng quanh từ cuối
về đầu), chẳng hạn ar thì biến thành RM.
- Nếu cả hai chữ trong cặp đều rơi vào cùng 1 cột, thì mã mỗi chữ bằng chữ ở
phía bên dới nó trong cùng 1 cột của ma trận khóa (cuộn vòng quanh từ cuối về
đầu), chẳng hạn mu thì biến thành CM.
- Trong các trờng hợp khác, mỗi chữ trong cặp đợc mã bởi chữ cùng hàng với
nó và cùng cột với chữ cùng cặp với nó trong ma trận khóa, chẳng hạn hs mã
thành BP và ea thành IM hoặc JM (tùy theo sở thích).
An toàn của mã Playfair:
- An toàn đợc nâng cao hơn so với bảng đơn, vì ta tổng cộng 26x26 = 676
cặp. Mỗi chữ có thể đợc mã bằng 7 chứ khác nhau nên tần suất các chữ cái trên văn
bản tiếng Anh nói chung.
- Muốn sử dụng thống kê tần suất, cần có bảng tần suất 676 cặp để thám mã
(so với 26 của bảng đơn). Nh vậy phải xem xét nhiều trờng hợp hơn và tơng ứng sẽ
có thể có nhiều bản mã hơn cần lựa chọn. Do đó khó thám mã hơn trên mã bảng
chữ đơn.
- Mã Playfair đợc sử dụng rộng rãi nhiều năm trong giới tuân sự Mỹ và Anh
trong chiến tranh Thế giới thứ nhất. Nó có thể bị bẻ khóa nếu cho trớc vài trăm chữ
vì bản mã vẫn còn chứa nhiều cấu trúc của bản rõ.
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
16
4. 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, nhng ở đâ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 MN O P Q R S T U V WX Y Z
B C D E F G H I J K L MN O P Q R S T U V WX Y Z A
C D E F G H I J K L MN O P Q R S T U V WX Y Z A B
D E F G H I J K L MN O P Q R S T U V WX Y Z A B C
E F G H I J K L MN O P Q R S T U V WX Y Z A B C D
F G H I J K L MN O P Q R S T U V WX Y Z A B C D E
G H I J K L MN O P Q R S T U V WX Y Z A B C D E F
H I J K L MN O P Q R S T U V WX Y Z A B C D E F G
I J K L MN O P Q R S T U V WX Y Z A B C D E F G H
J K L MN O P Q R S T U V WX Y Z A B C D E F G H I
K L MN O P Q R S T U V WX Y Z A B C D E F G H I J
L MN O P Q R S T U V WX Y Z A B C D E F G H I J K
MN O P Q R S T U V WX Y Z A B C D E F G H I J K L
N O P Q R S T U V WX Y Z A B C D E F G H I J K L M
O P Q R S T U V WX Y Z A B C D E F G H I J K L MN
P Q R S T U V WX Y Z A B C D E F G H I J K L MN O
Q R S T U V WX Y Z A B C D E F G H I J K L MN O P
R S T U V WX Y Z A B C D E F G H I J K L MN O P Q
S T U V WX Y Z A B C D E F G H I J K L MN O P Q R
T U V WX Y Z A B C D E F G H I J K L MN O P Q R S
U V WX Y Z A B C D E F G H I J K L MN O P Q R S T
V WX Y Z A B C D E F G H I J K L MN O P Q R S T U
WX Y Z A B C D E F G H I J K L MN O P Q R S T U V
X Y Z A B C D E F G H I J K L MN O P Q R S T U V W
Y Z A B C D E F G H I J K L MN O P Q R S T U V WX
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
17
Z A B C D E F G H I J K L MN O P Q R S T U V WX 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.
Thuật toán:
- Bớc 1: Cho bản rõ cần mã hóa có độ dài tùy ý
- Bớc 2: Cho trớc khóa k là 1 xâu có độ dài tùy ý. Khóa đợc áp dụng một
cách tuần hoàn, tức là nếu bản rõ dài hơn khóa thì khóa sẽ đợc áp dụng lại
từ đầu.
- Bớc 3: Đọc bản rõ từ các hàng, khóa đợc đọc từ các cột, điểm giao nhau
giữa bản rõ và khóa là ký tự trong bản mã.
Ví dụ1: 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.
Tơng tự, quy ớc G(X,Y) là giao của hàng X và cột Y
G(U,R) = L
G(R,Y) = P
G(P,P) = E
G(L,T) = E
G(E,O) = S
Nh vậy ta thu đợc bản mã RLPEES
Ví dụ2: mã hóa bản rõ VIGENERE với từ khoá MAHOA
G(V,M) = H
G(I,A) = I
G(G,H) = N
Nguyn Th Thu Hin - TK6LC1