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.. Mọi thuật toán mã hóa cổ điển đều là mã hóa đối xứng, vì ở
Trang 1Trườ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
Trang 2Mã 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
Trang 3Cá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 :
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 AThuật toán
Trang 4}printf("\n");
Trang 7II 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ệctrê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):
Ek() = (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
Ek(”N”)=(3.“N”+5 )mod 26= “S”
Trang 8Ek(“O”)=(3.“O”+5 )mod 26= “V”
Ek(“T”)=(3.“T”+5 )mod 26= “K”
Ek(“E”)=(3.“E”+5 )mod 26= “R”
Ek(“V”)=(3.“V”+5 )mod 26= “Q” C= “SVKRQ”
Ví Dụ 2: Muốn mã hóa P= “ABACD”
Ví Dụ 3: Muốn mã hóa P= “GHIKL”
Ví Dụ 4: Muốn mã hóa P= “SAUNA”
Ví Dụ 5: Muốn mã hóa P= “GHIKL”
với a = 2, b=2
Trang 9III 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 deVigenère (1523-1596)
VIGENERE cũng giống như CAESAR, nhưng ở đây khoá được thay đổi theotừng bước Hình vuông VIGENERE được sử dụng để mã hoá và giải mã
Ví dụ để mã hóa bản rõ PURPLE với từ khoá CRYPTO, đầu tiên ta tìm điểm giaonhau 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
Trang 10Ta thấy rằng trong hệ mã hoá VIGENERE, với khoá có độ dài d thì sẽ có 26d 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ỏikhá nhiều thời gian.
“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”
“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”
Trang 11“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”
“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”
“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”
Trang 12Ta 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
3 3
17 15
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à Ccũ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:
11
.theo công thức mã hoá ta có
3 3
3 3
Trang 1317 15
17 15
3 3
3 3
17 15
17 15
3 3
3 3
‘ED’= ‘AZ’ = C2
Chúng ta thu được bản mã “XNAZ”
Trang 1417 15
17 15
3 3
3 3
17 15
17 15
3 3
‘BC’ = ‘NV’ = C1 và
Trang 153 3
17 15
17 15
ở đâ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à:
Trang 16Để giải mã ta dùng ma trận nghịch đảo K-1 =
Và áp dụng công thức P= K-1C 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 đượcbả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ặpnhiề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
Trang 17Thự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)
Trang 18Để 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
Trang 19+ Ư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ã
Trang 20Mã 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
Trang 21+ 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)