Mã hóa thông tin là một ngành quan trọng và có nhiều ứng dụng trong đời sống xã hội.Ngày nay, các ứng dụng mã hóa và bảo mật thông tin đang đợc sử dụng ngày càng phổ biếnhơn trong các lĩ
Trang 1TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN
- -ĐỒ ÁN TỐT NGHIỆP
Đề Tài:
TÌM HIỂU XÂY DỰNG CHƯƠNG TRÌNH MÃ
HÓA VÀ BẢO MẬT THÔNG TIN HỆ MÃ CHUẨN
Trang 2đại học vinh, gia đình, bạn bè và những ngời thân Đặc biệt, tôi xin cảm ơn Thầy giáo Lê Văn Minh đã tận tình hớng dẫn và giúp đỡ tôi trong suốt thời gian tôi thực hiện đồ án tốt nghiệp này
Trong quá trình thực hiện đồ án tốt nghiệp, do thời gian và khả năng
có hạn nên đồ án tốt nghiệp của tôi không thể tránh khỏi những sai sót Rất mong đợc sự góp ý chân thành của quý thầy cô và các bạn Tôi xin chân thành cảm ơn !
Vinh,thaựng 5 naờm 2009
Sinh Vieõn
Dửụng Khaộc Linh
MụC Lục
MụC Lục 1
LờI NóI ĐầU 4
Chơng I: PHƯƠNG PHáP M HóA Và GIảI Mã HóA Và GIảI Mã ã HóA Và GIảI Mã 5
I 1 Giới thiệu 5
I 2 Các Hệ Mã Thông Dụng: 6
a Hệ Mã Đầy (Shift Cipher ) 6
b Hệ KEYWORD-CEASAR 6
c Hệ Mã Vuông (SQUARE) 6
d Mã Thế Vị 6
e Phơng Pháp Affine 7
f Phơng Pháp Vigenere 7
g Hệ Mã Hill 8
h Mã Hoán Vị 8
i Mã Vòng 9
I 3 Quy Trình Thám Mã: 9
Chơng II: Hệ M CHUẩN DESã HóA Và GIảI Mã (Data Encryption Standard) 10
II 1 Đặc Tả DES 10
II 2 Lập Mã DES 15
Chơng III: THáM M DESã HóA Và GIảI Mã 17
III 1 Thám Mã Hệ DES - 3 Vòng 20
III 2 Chơng Trình Hệ Mã DES - 3 Vòng 23
Chơng IV: ĐáNH GIá KếT QUả Và HƯớNG PHáT TRIểN 94
TàI LIệU THAM KHảO 95
Trang 3LờI NóI ĐầU
Hệ thống mạng máy tính hiện trở nên phổ biến trong mỗi cơ quan, doanh nghiệp, vàtrên toàn thế giới, vấn đề quản lý tài nguyên mạng và đảm bảo an toàn thông tin trong các
tổ chức doanh nghiệp và nhà nớc ngày càng trở nên cấp thiết và quan trọng trong thời đạingày nay
Mã hóa thông tin là một ngành quan trọng và có nhiều ứng dụng trong đời sống xã hội.Ngày nay, các ứng dụng mã hóa và bảo mật thông tin đang đợc sử dụng ngày càng phổ biếnhơn trong các lĩnh vực khác nhau trên thế giới, từ các lĩnh vực an ninh, quân sự, quốcphòng…, cho đến các lĩnh vực dân sự nh, cho đến các lĩnh vực dân sự nh thơng mại điện tử, ngân hàng…, cho đến các lĩnh vực dân sự nh
Ứng dụng mã hóa và bảo mật thông tin trong các hệ thống thơng mại điện tử, giao dịch
chứng khoán,…, cho đến các lĩnh vực dân sự nh đã trở nên phổ biến trên thế giới và sẽ ngày càng trở nên quen thuộc vớingời dân Việt Nam Tháng 7/2000, thị trờng chứng khoán lần đầu tiên đợc hình thành tạiViệt Nam; các thẻ tín dụng bắt đầu đợc sử dụng, các ứng dụng hệ thống thơng mại điện tử
đang ở bớc đầu đợc quan tâm và xây dựng Do đó, nhu cầu về các ứng dụng mã hóa và bảomật thông tin trở nên rất cần thiết
Thấy đợc sự cần thiết của việc bảo mật thông tin, nên quá trình thực tập và làm đồ án
tốt nghiệp cuối khóa, tôi đã chọn đề tài: “Tìm Hiểu Xây Dựng Chơng Trình Mã Hóa Và Bảo Mật Thông Tin Hệ Mã Chuẩn DES ”
Nội dung Đề Tài gồm 2 Phần:
Phần 1: Tìm Hiểu Các Hệ Mã Và Hệ Mã Chuẩn DES.
Phần 2: Xây Dựng Chơng Trình Mã Hóa DES
Chơng I: PHƯƠNG PHáP Mã HóA Và GIảI Mã HóA Và GIảI Mã HóA Và GIảI Mã
I 1 Giới thiệu
- Mã hóa là phơng pháp để biến thông tin ( phim ảnh , văn bản , hình ảnh )
từ định dạng bình thờng sang dạng thông tin không thể hiểu đợc nếu không có
ph-ơng tiện giải mã.
- Giải mã là phơng pháp để đa từ dạng thông tin đã đợc mã hóa về dạng thông tin ban đầu, quá trình ngợc của mã hóa.
- Mã hóa là quá trình chuyển bản rõ thành bản mã, thông thơng bao gồm việc
áp dụng thuật toán mã hóa và một số quá trình xử lý thông tin kèm theo.
- Giải mã chuyển bản mã thành bản rõ, đây là quá trình ngợc lại của mã hóa.
Trang 4- 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 Thông thờng khi đa các mã mạnh ra làm chuẩn dùng chung giữa các ngời sử dụng, các mã đó đợc các kẻ thám mã cũng nh những ngời phát triển mã tìm hiểu nghiên cứu các phơng pháp giải một phần bản mã với các thông tin không đầy đủ Một hệ thống mã hóa bao gồm các thành phần:
1 thông tin trớc khi mã hóa, kí hiệu là P
2 thông tin sau khi mã hóa, kí hiệu là C
3 chìa khóa, kí hiệu là K
4 phơng pháp mã hóa/giải mã, kí hiệu là E/D.
Quá trình mã hóa đợc tiến hành bằng cách áp dụng hàm toán học E lên thông tin P, vốn đợc biểu diễn dới dạng số, để trở thành thông tin đã mã hóa C.
Quá trình giải mã đợc tiến hành ngợc lại: áp dụng hàm D lên thông tin C để đợc thông tin đã giải mã P.
Định nghĩa 1.1: Một hệ mã mật (cryptosystem) là một bộ-năm (P, C, K, E, D)
thỏa mãn các điều kiện sau:
1 P là không gian bản rõ tập hợp hữu hạn tất cả các mẩu tin nguồn cần mã hóa
có thể có
2.C là không gian bản mã tập hợp hữu hạn tất cả các mẩu tin có thể có sau khi
mã hóa
3.K là không gian khoá tập hợp hữu hạn các khóa có thể đợc sử dụng
4.Với mỗi khóa kK, tồn tại luật mã hóa ekE và luật giải mã dkD tơng ứng Luật mã hóa ek: P C và luật giải mã ek: C P là hai ánh xạ thỏa mãn
k k
d e x x x P
Tính chất 4 là tính chất chính và quan trọng của một hệ thống mã hóa Tính chất
này bảo đảm việc mã hóa một mẩu tin xP bằng luật mã hóa ekE có thể đợc giải mã chính xác bằng luật dkD
Định nghĩa 1.2: Zm đợc định nghĩa là tập hợp {0, 1, , m-1}, đợc trang bị phép cộng (ký hiệu +) và phép nhân (ký hiệu là ) Phép cộng và phép nhân trong Zm đợc
thực hiện tơng tự nh trong Z, ngoại trừ kết quả tính theo modulo m
Ví dụ: Giả sử ta cần tính giá trị 11 13 trong Z16 Trong Z, ta có kết quả của phép nhân 1113=143 Do 14315 (mod 16) nên 1113=15 trong Z16.
Một số tính chất của Zm
1 Phép cộng đóng trong Zm, i.e., a, b Zm, a+b Zm
2 Tính giao hoán của phép cộng trong Zm, i.e., a, b Zm, a+b =b+a
3 Tính kết hợp của phép cộng trong Zm, i.e., a, b, c Zm, (a+b)+c =a+(b+c)
4 Zm có phần tử trung hòa là 0, i.e., a Zm, a+0=0+a=a
5 Mọi phần tử a trong Zm đều có phần tử đối là m – a
6 Phép nhân đóng trong Zm, i.e., a, b Zm, ab Zm
7 Tính giao hoán của phép cộng trong Zm, i.e., a, b Zm, ab=ba
8 Tính kết hợp của phép cộng trong Zm, i.e., a, b, c Zm, (ab)c
=a(bc)
9 Zm có phần tử đơn vị là 1, i.e., a Z m , a1=1a=a
10.Tính phân phối của phép nhân đối với phép cộng, i.e., a, b, c Z m , (a+b)c =(ac)+
(bc)
11.Z m có các tính chất 1, 3 – 5 nên tạo thành 1 nhóm Do Z m có tính chất 2 nên tạo thành
nhóm Abel Z m có các tính chất (1) – (10) nên tạo thành 1 vành
I 2 Các Hệ Mã Thông Dụng:
a Hệ Mã Đầy (Shift Cipher )
Shift Cipher là một trong những phơng pháp lâu đời nhất đợc sử dụng để mã hóa.
Thông điệp đợc mã hóa bằng cách dịch chuyển (xoay vòng) từng ký tự đi k vị trí
trong bảng chữ cái
Phơng pháp Shift Cipher
Cho P = C = K = Z26 Với 0 K 25, ta định nghĩa
eK = x + K mod 26 và
Trang 5trong đó 26 là số ký tự trong bảng chữ cái La tinh, một cách tơng tự cũng có thể
định nghĩa cho một bảng chữ cái bất kỳ Đồng thời ta dễ dàng thấy rằng mã đẩy là một hệ mật mã vì dK(eK(x)) = x với mọi xZ26
b Hệ KEYWORD-CEASAR
Trong hệ mã này khóa là một từ nào đó đợc chọn trớc, ví dụ PLAIN Từ này xác
định dãy số nguyên trong Z26 (15,11,0,8,13) tơng ứng với vị trí các chữ cái của các chữ đợc chọn trong bảng chữ cái Bây giờ bản rõ sẽ đợc mã hóa bằng cách dùng các hàm lập mã theo thứ tự:
và định nghĩa d(y) = -1(y)
với -1 là hoán vị ngợc của hoán vị .
Trong mã thế vị ta có thể lấy P và C là các bảng chữ cái La tinh Ta sử dụng Z26trong mã đẩy vì lập mã và giải mã đều là các phép toán đại số.
dK = a-1(y-b) mod 26 (x,y Z26)
Phơng pháp Affine lại là một trờng hợp đặc biệt khác của Substitution Cipher
Để có thể giải mã chính xác thông tin đã đợc mã hóa bằng hàm ek E thì ek phải là
một song ánh Nh vậy, với mỗi giá trị yZ26, phơng trình ax+by (mod 26) phải có nghiệm duy nhất xZ26.
Phơng trình ax+by (mod 26) tơng đơng với ax(y–b ) (mod 26) Vậy, ta chỉ cần khảo sát phơng trình ax(y–b ) (mod 26)
Định lý1.0: Phơng trình ax+by (mod 26) có nghiệm duy nhất xZ26 với mỗi giá trị
bZ26 khi và chỉ khi a và 26 nguyên tố cùng nhau.
Vậy, điều kiện a và 26 nguyên tố cùng nhau bảo đảm thông tin đợc mã hóa bằng hàm ek có thể đợc giải mã và giải mã một cách chính xác.
Gọi (26) là số lợng phần tử thuộc Z26 và nguyên tố cùng nhau với 26.
Định lý 1.0: Nếu
m i
e
i i
p n
e i
e
i i p i p n
Trang 6Vấn đề đặt ra cho phơng pháp mã hóa Affine Cipher là để có thể giải mã đợc thông
tin đã đợc mã hóa cần phải tính giá trị phần tử nghịch đảo a–1 Z26
f Phơng Pháp Vigenere
phơng pháp mã hóa Vigenere sử dụng một từ khóa (keyword) có độ dài m Có thể xem nh phơng pháp mã hóa Vigenere Cipher bao gồm m phép mã hóa Shift Cipher
đợc áp dụng luân phiên nhau theo chu kỳ.
Không gian khóa K của phơng pháp Vigenere có số phần tử là 26, lớn hơn hẳn
ph-ơng pháp số lợng phần tử của không gian khóa K trong phph-ơng pháp Shift Cipher Do
đó, việc tìm ra mã khóa k để giải mã thông điệp đã đợc mã hóa sẽ khó khăn hơn đối
với phơng pháp Shift Cipher.
Phơng pháp mã hóa Vigenere Cipher
Chọn số nguyên dơng m Định nghĩa P = C = K = (Z 26)m
K = { (k0, k1, , k r-1 ) (Z 26)r}
Với mỗi khóa k = (k0, k1, , k r-1 ) K, định nghĩa:
e k (x1, x2, , x m ) = ((x1+k1) mod 26, (x2+k2) mod n, , (x m +k m) mod 26)
d k (y1, y2, , y m ) = ((y1–k1) mod n, (y2–k2) mod n, , (y m –k m ) mod 26)
với x, y (Z 26)m
g Hệ Mã Hill
Phơng pháp Hill Cipher đợc Lester S Hill công bố năm 1929: Cho số nguyên dơng
m, định nghĩa P = C = (Z26)m Mỗi phần tử xP là một bộ m thành phần, mỗi thành phần thuộc Z26 ý tởng chính của phơng pháp này là sử dụng m tổ hợp tuyến tính của
m thành phần trong mỗi phần tử xP để phát sinh ra m thành phần tạo thành phần tử yC.
Phơng pháp mã hóa Hill Cipher
Chọn số nguyên dơng m Định nghĩa:
P = C = (Z 26)m và K là tập hợp các ma trận mm khả nghịch
Với mỗi khóa K
k k
k
k k
k k
k k
m m m
m
m m
, 1 ,
, 2 1
, 2
, 1 2
, 1 1 , 1
m
m m m
k
k k
k
k k
k k
k x x x xk
x
e
, 2
, 1 ,
, 2 1
, 2
, 1 2
, 1 1 , 1 2
và d k (y) = yk–1 với y C
Mọi phép toán số học đều đợc thực hiện trên Z n
h Mã Hoán Vị
Những phơng pháp mã hóa nêu trên đều dựa trên ý tởng chung: thay thế mỗi ký tự trong thông điệp nguồn bằng một ký tự khác để tạo thành thông điệp đã đợc mã hóa.
ý tởng chính của phơng pháp mã hoán vị là vẫn giữ nguyên các ký tự trong thông
điệp nguồn mà chỉ thay đổi vị trí các ký tự; nói cách khác thông điệp nguồn đợc mã hóa bằng cách sắp xếp lại các ký tự trong đó
Trang 7mỗi hoán vị của tập hợp {1, 2, , m} , ta xác định ma trận k = (ki, j ) theo công thức sau:
neỏu , 0 , 1
,
j i
Ma trận k là ma trận mà mỗi dòng và mỗi cột có đúng một phần tử mang giá trị 1, các phần tử còn lại trong ma trận đều bằng 0 Ma trận này có thể thu đợc bằng cách
hoán vị các hàng hay các cột của ma trận đơn vị Im nên k là ma trận khả nghịch Rõ
ràng, mã hóa bằng phơng pháp Hill với ma trận k hoàn toàn tơng đơng với mã hóa bằng phơng pháp mã hoán vị với hoán vị .
i Mã Vòng
Trong các hệ trớc đều cùng một cách thức là các phần tử kế tiếp nhau của bản rõ đều đợc mã hóa với cùng một khóa K Nh vậy xâu mã y sẽ có dạng sau:
y = y1y2 = eK(x1) eK(x2)
Các hệ mã loại này thờng đợc gọi là mã khối (block cipher).
Còn đối với các hệ mã dòng ý tởng ở đây là sinh ra một chuỗi khóa z = z1z2 , và
sử dụng nó để mã hóa xâu bản rõ x = x1x2 theo qui tắc sau:
)
()(
Tính an toàn của nó phụ thuộc vào các yếu tố :
Không gian khoá phải đủ lớn
Với các phép trộn thích hợp các hệ mã đối xứng có thể tạo ra đợc một hệ mã mới có tính an toàn cao
Bảo mật cho việc truyền khóa cũng cần đợc xử lý một cách nghiêm túc
Và một hệ mã hoá dữ liệu ra đời (DES) DES đợc xem nh là chuẩn mã hóa dữ liệu cho các ứng dụng từ ngày 15 tháng 1 năm 1977 do ủy ban Quốc gia về Tiêu chuẩn của Mỹ xác nhận và cứ 5 năm một lần lại có chỉnh sửa, bổ sung
DES là một hệ mã đợc trộn bởi các phép thế và hoán vị với phép trộn thích hợp thì việc giải mã nó lại là một bài toán khá khó Đồng thời việc cài đặt hệ mã này cho những ứng dụng thực tế lại khá thuận lợi Chính những lý do đó nó đợc ứng dụng rộng rãi của DES trong suốt hơn 20 năm qua, không những tại Mỹ mà còn là hầu nh trên khắp thế giới Mặc dù theo công bố mới nhất (năm 1998) thì mọi
hệ DES, với những khả năng của máy tính hiện nay, đều có thể bẻ khóa trong hơn 2 giờ Tuy nhiên DES cho đến nay vẫn là một mô hình chuẩn cho những ứng dụng bảo mật trong thực tế.
Trang 8Chơng II: Hệ Mã HóA Và GIảI Mã CHUẩN DES (Data Encryption Standard)
II 1 Đặc Tả DES
Phơng pháp DES mã hóa từ x có 64 bit với khóa k có 56 bit thành một từ có y 64 bit.
Thuật toán mã hóa bao gồm 3 giai đoạn:
1 Với từ cần mã hóa x có độ dài 64 bit, tạo ra từ x0 (cũng có độ dài 64 bit) bằng
cách hoán vị các bit trong từ x theo một hoán vị cho trớc IP (Initial Permutation) Biểu diễn x0 = IP(x) = L0R0, L0 gồm 32 bit bên trái của x0, R0 gồm 32 bit bên phải của
x0
x 0
Hình Biểu diễn dãy 64 bit x thành 2 thành phần L và R
2 Xác định các cặp từ 32 bit Li, Ri với 1 i 16theo quy tắc sau:
Li = Ri-1
Ri = Li-1 f (Ri-1, Ki)
với biểu diễn phép toán XOR trên hai dãy bit, K1, K2, , K16 là các dãy 48 bit
phát sinh từ khóa K cho trớc (Trên thực tế, mỗi khóa Ki đợc phát sinh bằng cách
hoán vị các bit trong khóa K cho trớc).
Hình Quy trình phát sinh dãy 64 bit Li Ri từ dãy 64 bit Li-1Ri-1và khóa Ki
3 áp dụng hoán vị ngợc IP-1 đối với dãy bit R16L16, thu đợc từ y gồm 64 bit Nh vậy,
Trang 9Hàm f có gồm 2 tham số: Tham số thứ nhất A là một dãy 32 bit, tham số thứ hai J là một dãy 48 bit Kết quả của hàm f là một dãy 32 bit Các bớc xử lý của hàm f(A, J)nh sau:
Tham số thứ nhất A (32 bit) đợc mở rộng thành dãy 48 bit bằng hàm mở rộng
E Kết quả của hàm E(A) là một dãy 48 bit đợc phát sinh từ A bằng cách hoán vị theo một thứ tự nhất định 32 bit của A, trong đó có 16 bit của A đợc lập lại 2 lần trong E(A).
Thực hiện phép toán XOR cho 2 dãy 48 bit E(A) và J, ta thu đợc một dãy 48 bit B Biểu diễn B thành từng nhóm 6 bit nh sau:B = B1B2B3B4B5B6B7B8
Sử dụng 8 ma trận S1, S2, , S8, mỗi ma trận Si có kích thớc 416 và mỗi dòng
của ma trận nhận đủ 16 giá trị từ 0 đến 15 Xét dãy gồm 6 bit Bj =
b1b2b3b4b5b6, Sj(Bj) đợc xác định bằng giá trị của phần tử tại dòng r cột c của Sj, trong
đó, chỉ số dòng r có biểu diễn nhị phân là b1b6, chỉ số cột c có biểu diễn nhị phân là
b2b3b4b5 Bằng cách này, ta xác định đợc các dãy 4 bit Cj = Sj(Bj), 1 j 8.
Tập hợp các dãy 4 bit Cj lại ta có đợc dãy 32 bit C = C1C2C3C4C5C6C7C8 Dãy
32 bit thu đợc bằng cách hoán vị C theo một quy luật P nhất định chính là kết quả của hàm F(A, J)
các hàm đợc sử dụng trong DES.
Hoán vị khởi tạo IP sẽ nh sau:
Điều này có nghĩa là bit thứ 58 của x là bit đầu tiên của IP(x); bit thứ 50 của
x là bit thứ hai của IP(x) v.v.
4847464544
1615141312
5655545352
2423222120
6463626160
3231302928
Trang 1037111519232731
48121620242832
5913172125291
Tám S-hộp và hoán vị P sẽ đợc biểu diễn nh sau:
137148
1482
214134
15269
111321
81117
310155
1061211
61293
1211714
59310
95100
0356
78013
84710
147111
615103
112415
38134
41412
912511
7086
21127
1310612
12690
0935
511214
105159
14990
6386
34159
15638
51007
12114
138115
125214
714123
1112511
411105
215142
81712
3506
061210
615111
90713
103138
14159
2714
8235
5121411
111512
121027
41482
159414
112117
74100
1071314
111372
61813
85156
50915
315120
151059
133610
0934
14805
96143
152512
9729
21285
691215
85310
06711
131014
31341
414107
14016
711130
53118
118613
147138
154121
0934
81710
1310147
314109
123155
9560
712815
52014
101552
6893
16212
S 8
13 2 8 4 6 15 11 1 10 9 3
Trang 112 1 14 7 4 10 8 13 15 12 9
P
1629152321922
71215188271311
20282331243304
21172610149625
K là xâu có độ dài 64 bit, trong đó có 56 bit dùng làm khóa và 8 bit dùng để kiểm tra sự bằng nhau (để phát hiện lỗi) Các bit ở các vị trí 8, 16, , 64 đợc xác
định, sao cho mỗi byte chứa số lẻ các số 1 Vì vậy, từng lỗi có thể đợc phát hiện trong mỗi 8 bit Các bit kiểm tra sự bằng nhau là đợc bỏ qua khi tính lịch khóa.
1 Cho khóa 64 bit K, loại bỏ các bit kiểm tra và hoán vị các bit còn lại của K t ơng
ứng với hoán vị (cố định) PC-1 Ta viết PC-1(K) = C0D0, với C0 bao gồm 28 bit đầu tiên của PC-1(K) và D0 là 28 bit còn lại.
2 Với i nằm trong khoảng từ 1 đến 16, ta tính
Ci = LSi(Ci-1)
Di = LSi(Di-1)
và Ki = PC-2(CiDi), LSi biểu diễn phép chuyển chu trình (cyclic shift) sang trái hoặc của một hoặc của hai vị trí tùy thuộc vào trị của i; đẩy một vị trí nếu i = 1, 2, 9 hoặc 16 và đẩy 2 vị trí trong những trờng hợp còn lại PC-2 là một hoán vị cố định khác.
Việc tính lịch khóa đợc minh họa nh hình vẽ sau:
Các hoán vị PC-1 và PC-2 đợc sử dụng trong việc tính lịch khóa là nh sau:
PC-1
57110
49582
415059
334251
253443
172635
91827
Trang 125562613
754615
39465328
31384520
23303712
1522294
PC-2
143231641304446
172819750404942
1115122731513950
24642037455636
121261347333429
5108255485332
Bây giờ ta sẽ hiển thị kết quả việc tính lịch khóa Nh đã nhận xét ở trên, mỗi vòng sử dụng khóa 48 bit tơng ứng với 48 bit trong K Các thành phần trong các bảng sau sẽ chỉ ra các bit trong K đợc sử dụng trong các vòng khác nhau.
00100011010010101010100110111011 11101111010010100110010101000100 E(R 1 )
00111100101010111000011110100011 11001100000000010111011100001001 E(R 2 )
01001101000101100110111010110000 10100010010111000000101111110100
10111011001000110111011101001100 011101110
E(R ) = 101110101110100100000100000000000000001000001010
Trang 1310011110010001011100110100101100 11101001011001111100110101101001
10001100000001010001110000100111 00000110010010101011101000010000 E(R 7 )
00111100000011101000011011111001 11010101011010010100101110010000 E(R 8 )
00100010001101100111110001101010 00100100011111001100011001111010 E(R 9 )
01100010101111001001110000100010 10110111110101011101011110110010 E(R 10 )
11100001000001001111101000000010 11000101011110000011110001111000 E(R 11 )
11000010011010001100111111101010 01110101101111010001100001011000 E(R 12 )
11011101101110110010100100100010 00011000110000110001010101011010 E(R ) = 000011110001011000000110100010101010101011110100
Trang 1410110111001100011000111001010101 11000010100011001001011000001101 E(R 14 )
01011011100000010010011101101110 01000011010000100011001000110100 E(R 15 )
11001000110000000100111110011000 00001010010011001101100110010101
Cuối cùng, áp dụng IP-1 cho R16L16 ta nhận đợc bản mã trong dạng thập lục phân
nh sau:
85E813540F0AB405
Chơng III: THáM Mã HóA Và GIảI Mã DES
Một phơng pháp rất nổi tiếng trong thám mã DES là “thám mã vi sai“ (differential cryptanalysic) do Biham và Shamir đề xuất Đó là phơng pháp thám với bản rõ đợc chọn Nó không đợc sử dụng trong thực tế để thám mã DES 16 vòng, mà chỉ đợc sử dụng để thám các hệ DES có ít vòng hơn.
Bây giờ ta sẽ mô tả những ý tởng cơ bản của kỹ thuật này Để đạt mục đích thám mã, ta có thể bỏ qua hoán vị khởi tạo IP và hoán vị đảo của nó (bởi vì điều đó không cần thiết cho việc thám mã) Nh đã nhận xét ở trên, ta xét các hệ DES n vòng, với n 16 Trong cài đặt ta có thể coi L0R0 là bản rõ và LnRn nh là bản mã Thám mã vi sai đòi hỏi phải so sánh x-or (exclusive-or) của hai bản rõ với x-or của hai bản mã tơng ứng Nói chung, ta sẽ quan sát hai bản rõ L0R0 và L0 R0 với trị x-
or đợc đặc tả L0’R0’ = L0R0 L0 R0 Trong những thảo luận sau ta sẽ sử dụng ký hiệu (‘) để chỉ x-or của hai xâu bit.
Định nghĩa 3.1: Cho Sj là một S-hộp (1 j 8) Xét một cặp xâu 6-bit là (Bj,Bj*).
Ta nói rằng, xâu nhập x-or (của Sj) là Bj Bj* và xâu xuất x-or (của Sj) là Sj(Bj)
Sj(Bj*).
Chú ý là xâu nhập x-or là xâu bit có độ dài 6, còn xâu xuất x-or có độ dài 4.
Định nghĩa 3.2: Với bất kỳ Bj ’ (Z2) 6, ta định nghĩa tập (Bj’) gồm các cặp (Bj,Bj*) có x-or nhập là Bj’.
Dễ dàng thấy rằng, bất kỳ tập (Bj’) nào cũng có 26 = 64 cặp, và do đó
(Bj’) = {(Bj, Bj Bj’) : Bj (Z2) 6 } Với mỗi cặp trong (Bj’), ta có thể tính xâu x-or xuất của Sj và lập đợc phân bố kết quả Có 64 xâu xuất x-or, đợc phân bố trong 24 = 16 giá trị có thể có Tính không
đồng đều của các phân bố đó là cơ sở để mã thám.
Ví dụ 3.1: Giả sử ta xét S1 là S-hộp đầu tiên và xâu nhập x-or là 110100 Khi
đó
(110100) = {(000000, 110100), (000001, 110101), , (111111, 001011)} Với mỗi cặp trong tập (110100), ta tính xâu xuất x-or của S1 Chẳng hạn,
S1(000000) = E16 = 1110, S1(110100) = 1001,
nh vậy xâu xuất x-or cho cặp (000000,110100) là 0111
Trang 15xâu x-or xuất sau:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 8 16 6 2 0 0 12 6 0 0 0 0 8 0 6
Trong ví dụ 3.1, chỉ có 8 trong số 16 xâu x-or xuất có thể có xuất hiện thật sự Ví
dụ cụ thể này đã chỉ ra sự phân bố rất không đều của các xâu x-or xuất Nói chung, nếu ta cố định S-hộp Sj và xâu nhập x-or Bj’, thì trung bình có khoảng 75 - 80% các xâu x-or xuất có thể có xuất hiện thực sự.
Để mô tả các phân bô đó ta đa ra định nghĩa sau.
Định nghĩa 3.3: Với 1 j 8 và với các xâu bit Bj ’ độ dài 6 và Cj’ độ dài 4, ta
định nghĩa:
INj(Bj’,Cj’) = {Bj (Z2)6 : Sj(Bj) Sj(Bj Bj’) = Cj’}
và
Nj(Bj’, Cj’) = INj(Bj’, Cj’)
Bảng sau sẽ cho các xâu nhập có thể có với xâu x-or nhập 110100
Xâu xuất x-or Các xâu nhập có thể có0000
0001 000011, 001111, 011110, 011111
101010, 101011, 110111, 1110110010
01100111
101010111100
1101 000110, 010000, 010110, 011100
110010, 100100, 101000, 1100101110
1111 000111, 001010, 001011, 110011
111110, 111111
Nj(Bj’, Cj’) tính số các cặp với xâu nhập x-or bằng Bj’ có xâu xuất x-or bằng
Cj’ với S-hộp Sj Các cặp đó có các xâu nhập x-or đợc đặc tả và đa ra cách tính các xâu xuất x-or có thể nhận đợc từ tập INj(Bj’, Cj’) Để ý rằng, tập này có thể phân thành Nj(Bj’, Cj’) /2 cặp, mỗi cặp có xâu x-or nhập bằng Bj’.
Phân bố trong ví dụ 3.1 chứa các trị N1(110100, C1’), C1’ (Z2)4 Trong bảng trên chứa các tập IN(110100, C1’).
Với mỗi tám S-hộp, có 64 xâu nhập x-or có thể có Nh vậy, có 512 phân bố có thể tính đợc Nhắc lại là, xâu nhập cho S-hộp ở vòng thứ i là B= E J, với E = E(Ri-1)
là mở rộng của Ri-1 và J = Ki gồm các bit khóa của vòng i Bây giờ xâu nhập x-or (cho tất cả tám S-hộp) có thể tính đợc nh sau:
B B* = (E J) (E* J) = E E*
Điều này rất quan trọng để thấy rằng, xâu nhập x-or không phụ thuộc vào các bit
Trang 16Ta sẽ viết mỗi B, E và J nh là nối của tám xâu 6-bit:
Định nghĩa 3.4: Giả sử Ej và Ej * là các xâu bit độ dài 6, và Cj’ là xâu bit độ dài 4.
Ta định nghĩa:
testj(Ej, Ej *, Cj’ ) = { Bj Ej : Bj INj(Ej’ , Cj’ ) }, với Ej’ = Ej Ej *.
IN1(110100, 1101) = {000110, 010000, 010110, 011100, 100010, 100100, 101000, 110010}
Cho nên
test1(000001, 110101,1101) = {000111, 010001, 010111, 011101, 100011, 100101,
101001, 110011}
Nếu ta có một bộ ba thứ hai nh thế E1, E1 , C1’, khi đó ta sẽ nhận đợc tập thứ hai
test1 của các trị cho các bit khóa trong J1 Trị đúng của J1 cần phải nằm trong giao của các S-hộp Nếu ta có một vài bộ ba nh vậy, khi đó ta có thể mau chóng tìm đợc các bit khóa trong J1 Một cách rõ ràng hơn để thực hiện điều đó là lập một bảng của 64 bộ đếm biểu diễn cho 64 khả năng của của 6 khóa bit trong J1 Bộ đếm sẽ
tăng mỗi lần, tơng ứng với sự xuất hiện của các bit khóa trong tập test1 cho một bộ
ba cụ thể Cho t bộ ba, ta hy vọng tìm đợc duy nhất một bộ đếm có trị t; trị đó sẽ
t-ơng ứng với trị đúng của các bit khóa trong J1.
III 1 Thám Mã Hệ DES - 3 Vòng
Bây giờ ta sẽ xét ý tởng vừa trình bày cho việc thám mã hệ DES - ba vòng.
Ta sẽ bắt đầu với cặp bản rõ và các bản mã tơng ứng: L0R0, L0 R0 , L3R3 và L3 R3 .
Ta có thể biểu diễn R3 nh sau:
R3 = L2 f(R2, K3) = R1 f(R2, K3) = L0 f(R0, K1) f(R2, K3)
R3* có thể biểu diễn một cách tơng tự , do vậy:
R3’ = L0’ f(R0, K1) f(R0 , K1) f(R2, K3) f(R2 , K3) Bây giờ, giả sử ta đã chọn đợc các bản rõ sao cho R0 = R0 , chẳng hạn:
R0’ = 00 0 Khi đó f(R0, K1) = f(R0 , K1), và do đó:
P(C) P(C*) = R3’ L0’
và kết quả là:
Trang 17Đó là xâu xuất x-or cho tám S-hộp trong vòng ba.
Bây giờ, R2 = L3 và R2* = L3* là đã biết (chúng là một phần của các bản mã) Từ
Việc mã thám sẽ sử dụng một số bộ ba E, E*, C’ nh vậy Ta sẽ lập tám bảng các bộ
đếm và do đó xác định đợc 48 bit trong K3, là khóa cho vòng ba 56 bit trong khóa khi đó có thể tìm đợc hoàn toàn từ 28 = 256 khả năng cho 8 bit khóa.
Bây giờ ta sẽ minh họa điều đó qua ví dụ sau.
03C70306D8A09F1078560A0960E6D4CB486911026ACDFF31
375BD31F6ACDFF31 45FA285BE5ADC730134F7915AC253457 357418DA013FEC86
12549847013FEC86 D8A31B2F28BBC5CF0F317AC2B23CB944
Từ cặp đầu tiên ta tính các xâu nhập của S-hộp (cho vòng 3) từ các phơng trình (2) và (3) Chúng là:
Trang 18Cuối cùng ta sẽ trình bày các bảng Nếu ta xem các xâu bit độ dài 6 nh là biểu diễn của các số nguyên trong khoảng 0-63, thì 64 trị sẽ tơng ứng với 0, 1, , 63 Các mảng đếm sẽ là nh sau:
Trong mỗi tám mảng đếm, có duy nhất một bộ đếm có trị là 3 Vị trí của các
bộ đếm đó xác định các bit khóa trong J1, , J8 Các vị trí đó là: 47, 5, 19, 0, 24, 7,
7, 49 Chuyển các số nguyên đó sang dạng nhị phân, ta nhận đợc J1, , J8:
Trang 19B©y giê ta cã thÓ t¹o ra 48 bit khãa, b»ng c¸ch quan s¸t lÞch khãa cho vßng ba Suy
Form lËp m· vµ gi¶i m· DES(Des.vb)
Source code mét
sè hµm chÝnh trong form giai m· Des
ImportsSystem.IOPublic Classdes
InheritsSystem.Windows.Forms.Form
khai baobien
Trang 20Dim s(7) As DataTable
Dim ip() As String
'Dim iptru() As String
Dim e() As String
Dim daynhap(29) As String
Dim daybanma(29) As String
Trang 24Ham khoi tao s2
Trang 35Function hvpc1(ByVal k As String) As String
Dim tam(63) As Char
Dim i As Integer
For i = 0 To 63
tam(i) = k.Substring(i, 1)
Next
Trang 36Function hvpc2(ByVal str As String) As String
Dim tam(47) As Char
Function ls(ByVal s As String, ByVal n As Integer) As String
Return s.Substring(n, s.Length - n) + s.Substring(0, n)
Trang 37Function bi_acsii(ByVal int As Integer) As String
Dim tam(7) As Char
Dim i As Integer
For i = 0 To 7
Trang 38tam(i) = (int Mod 2).ToString
Function hvip(ByVal x As String) As String
Dim tam(63) As Char
Function hve(ByVal r As String) As String
Dim tam(47) As Char
Function hvp(ByVal c As String) As String
Dim tam(31) As Char
Function hviptru(ByVal c As String) As String
Dim tam(63) As Char
Trang 39Dim l0 As String = x0.Substring(0, 32)
Dim r0 As String = x0.Substring(32, 32)
Trang 40Dim haibitcuoi As String = b(i).Substring(0, 1) + b(i).Substring(5, 1)
Dim bonbitgiua As String = b(i).Substring(1, 4)
Dim srow = thapphan(haibitcuoi)
Dim scol = thapphan(bonbitgiua)
Dim sij As Integer = s(i).Rows(srow).Item(scol)
Function doirachu(ByVal y As String) As String
Dim tam As String = y
Dim tam1 As String = ""