Kae Bước 2: Sử dụng phép hoán vị khởi tạo đầu IP Initial Permutation để hoán vị tất cả các bit của M, kết quả nhận là Lạ gồm 32 bit đầu và Ro Trong đó: kí hiệu cộng theo modulo 2 của 2
Trang 1
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN HỌC PHẦN: BẢO MẬT MÁY TÍNH
TÊN ĐỀ TÀI: THUẬT TOÁN DES
NHÓM:
Trang 2
DANH SÁCH NHÓM
Bảng đánh giá
Trang 3LỜI NÓI ĐẦU
Thuật toán DES (Data Encryption Standar) đây là
thuật toán chuẩn của Mỹ, được Mỹ và nhiều nước trên thế giới
sử dụng, thuật toán này được đưa vào sử dụng nhiều năm nhưng vẫn giữ được tính bảo mật của nó Tuy nhiên với công
nghệ phát triển như hiện nay thì thuật toán DES trở lên không
được an toàn tuyệt đối nữa, người ta đã đưa ra thuật toán 3DES dựa trên nền tảng của thuật toán DES nhưng số bit được mã hóa tăng lên
Mã hóa và các lược đồ chia sẻ bí mật có thể được ứng dụng trong rất nhiều lĩnh vực ví dụ: phát hành thẻ ATM, trong thi tuyển sinh, trong lĩnh vực quân sự
Trang 42 M6 ta DES (Data Encryption Standard) c con 1
3 Độ an toàn của mã hóa DES nh nho 3
3.1 Ưu Điểm LH nh nh HT kế ng Tre 3 3.2 Nhược điểm nh nh HH kh no Hee 3
4 Mã hóa DES: ch nh nh nh HH HH tre 5 4.1 Cách tính biến Xọ: Tnhh nhà ghế no 5 4.2 Cách tính L¡R:: co nh nh heo 5 4.3 Xác định bản mã: nh nh Ha 11
5 Giải mã DES nhá BE TẾ EEg 11
6 Ví dụ về thuật toán DES nh nh nh nh ha nh 12 6.1 Ví dụ về mã hóa DES nh nh Ho 12
7 Chương trình thuật toán DES c ch neo 16
7.1 Giải thuật L n nh nh nh HH HH HH He g gu ge 16
7.2 Giao diện cu nh nh nh ha kh nh eg 29
8 Giao diện thuật toán Q he 31
Trang 5Phần 2 THUẬT TOÁN DES
1 Giới thiệu
DES được phân biệt giữa hai khái niệm là Chuẩn mã hoá dữ liệu (DES - Data Encryption Standard) và Thuật toán mã hoá dữ liệu (DEA - Data Encryption Algorithm) Thuật toán mã hoá là thành phần cơ bản của Chuẩn mã hoá Việc nghiên cứu, phân tích về DES chính là nghiên cứu, phân tích về thuật toán của nó
Trong lĩnh vực mật mã học, có hai loại hệ mật mã thường được đề cập đến, đó là mật mã khoá công khai (khoá bất đối xứng) và mật mã khoá bí mật (khoá đối xứng) Riêng đối với hệ mật mã đối xứng lại chia ra làm hai loại là mã hoá, giải mã theo khối và mã hoá, giải mã theo dòng DES (Data Encryption Standard) hay Chuẩn mã hóa dữ liệu thuộc hệ mật mã khoá đối xứng và thực hiện mã hoá, giải mã theo khối Độ dài của khối thông tin mã hoá, giải mã là 64 bit
2 Mô tả DES (Data Encryption Standard) aes
DES là thuật toán mã hóa khối: nó xử lý từng khối
thông tin của bản rõ có độ dài xác định và biến đổi | {a | 7
theo những quá trình phức tap để tré thanh khéi thong >
tin của bản mã có độ dài không thay đổi Trong trường {a | 4
hợp của DES, độ dài mỗi khối là 64 bit DES cũng sử ©— — ——¬
dụng khóa để cá biệt hóa quá trình chuyển đổi Nhờ
vậy, chỉ khi biết khóa mới có thể giải mã được văn bản
mã Khóa dùng trong DES có độ dài toàn bộ là 64 bit
Tuy nhiên chỉ có 56 bit thực sự được sử dụng; 8 bit còn
lại chỉ dùng cho việc kiểm tra Vì thế, độ dài thực tế
của khóa chỉ là 56 bit
Trang 6
Bước 1: Sinh khóa con sử dụng thuật toán sinh khóa con từ khóa K
ta sẽ được 16 khóa con Ki, Ko, Kae
Bước 2: Sử dụng phép hoán vị khởi tạo đầu IP (Initial Permutation)
để hoán vị tất cả các bit của M, kết quả nhận là Lạ gồm 32 bit đầu và Ro
Trong đó: kí hiệu cộng theo modulo 2 của 2 chuỗi bit
f la mét ham ma cua Ria, ki
Ki la cac chudi bit dé dai 48 bit duoc tinh nhu ham
của khóa k (Trên thực tế mỗi k¡ là một phép chọn
hoán vị bit trong k)
Bước 4: Đổi vị trí khối L:s, Ris ta được khối RieLis = bibz bea
Bước 5: Sử dụng phép hoán vị khởi tạo đảo IP-1 ta thu được bản mã cần tìm :
C = IP-1(bib2 be4)
Trang 7PLAINTEXT [P
Lưu đồ giải thuật mã hóa DES
3 Độ an toàn của mã hóa DES
3.1 Ưu Điểm
¢ C6 tinh bao mat cao
e Khóa công khai dé hiểu
e Có thể triễn khai trên các thiết bị điện tử có khích thước nhỏ
Trang 83.2.1 Tính bù của giải thuật DES
Ký hiệu u là phần bù của u (ví dụ 0100101 và 1011010 là bù của nhau)
thì DES có tính chất sau:
y= DESz| x) y=DESz(x) Cho nên nếu biết mã y được mã hóa từ thông tin x với khóa z thì ta suy
ra y được mã hóa từ thông tin x với khóa z Tính chất này chính là một điểm yếu của DES bởi vì nhờ đó đối phưỡng có thể loại trừ một nửa số khóa cần phải thử khi tiến hành phép thử-giải mã theo kiểu tìm kiếm vét cạn không gian khó
3.2.2 Khóa yếu
Khóa yếu là các khóa mà theo giải thuật sinh khóa con thì chúng đều
như nhau:
K1=K2= K16
Điều này khiến cho việc giải mã và mã hóa giống hệt nhau
Bên cạnh đó còn có 6 cặp khóa nữa yêu Có thuôc tính như sau:
Y=DES(x,k1) va y=DES(x,k2) Tuy nhiên có thể dễ dàng tránh được những khóa này khi thực hiện thuật toán, có thể bằng cách thử hoặc chọn khóa một cách ngẫu nhiên Khi đó khả năng chọn phải khóa yếu là rất nhỏ
3.2.3 Phương pháp vét cạn
DES có 2”° - 101 khóa Nếu chúng ta biết được một cặp “tin/mã” thì
chúng ta có thể thử tất cả 101 khả năng này để tìm ra khóa cho kết
quả khớp nhất Giả sử như một phép thử mất 10s, thì chúng sẽ mất 1011s, tức 7300 năm Nhưng với các máy tính được chế tạo theo xử lý song song Chẳng hạn với 10” con chip mã DES chạy song song thì bây giờ mỗi một con chipset chỉ phải chịu trách nhiệm tính toán với 1019
Trang 9phép thử Chipset mã DES ngày nay co thể xử lý tốc độ 4.5x107 bit/s
tức có thể làm được hơn 10° phép mã DES trong một giây
Vào năm 1976 và 1977, Diefïie và Hellman đã ước lượng rằng có thể
chế tạo được một máy tính chuyên dụng để vét cạn không gian khóa DES trong nữa ngày với cái giá 20 triệu đô la Năm 1984, chipset mã hóa DES với tốc độ mã hóa 256000 lần/giây Năm 1987, đã tăng lên
512000 lần/giây Vào năm 1993, Michael Wiener đã thiết kế một máy tính chuyên dụng với giá 1 triệu đô la sử dụng phương pháp vét cạn để giải mã DES trung bình trong vòng 3,5 giờ (và chậm nhất là 7giờ) 3.2.4 Phương pháp mã hóa vi sai
Năm 1990, hai nhà toán học người Do Thái Biham và Shamir - đã phát minh ra phương pháp mã hóa vi sai (diferential cryptanalyis), đây là một kỹ thuật sử dụng những phỏng đoán khác nhau trong bản rõ để đưa ra những thông tin trong bản mã Với phương pháp này, Biham và Shamir đã chứng minh rằng nó hiệu quả hơn cả phương pháp vét cạn Phá mã vi sai là thuật toán xem xét những cặp mã khóa khác nhau, đây là những cặp mã hóa mà bản mã của chúng là khác biệt Người ta
sẽ phân tích tiến trình biến đổi của những cặp mã này thông qua các vòng của DES khi chúng được mã hóa với cùng một khóa K Sau đó sẽ chọn hai bản rõ khác nhau một cách ngẫu nhiên hợp lý nhất Sử dụng
sự khác nhau của kết quả bản mã và gán cho những khóa khác nhau một cách phù hợp nhất Khi phân tích nhiều hơn những cặp bản mã, chúng ta sẽ tìm ra một khóa được xem là đúng nhất
Trang 10Theo bảng IP 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ứ 2 của IP(x), bit ở vị trí thứ 7 là bit cuối của IP(x)
4.2 Cách tính L:R.:
Để tính trước hết ta phải xác định hàm E
4.2.1 Các biến trong hàm E:
Có 2 biến vào:
e Bién thứ nhất R.¡ là chuỗi bit độ dài 32
se _ Biến thứ hai J là chuỗi độ dài 48
se Đầu ra của E là một chuỗi bit độ dài 32 bit Hàm E thực hiện qua các bước sau:
Bước 1: Xác định biến thứ nhất (biến A)
Chuỗi bit của R;¡ được mở rộng thành một chuỗi bit có độ dài 48 theo một hàm mở rộng cố định E
Trang 11Bưới 2: Xác định biến thứ hai (biến J)
Biến J là phép hoán vị và dịch vòng của chuỗi bit khóa k
Thuật toán tạo 16 khóa con k1, k2, k16
Trang 13Mỗi phần sẽ đượ xử lí một cách độc lập:
C¡ = LSi(C¡-1) D¡ = LSi(D;-1) với 1< ¡ >16 Trong đó:
e LS; biểu diễn phép dịch bit vòng sang trái ( theo bảng LeftShift)
e PC-2 là hoán vị cố định sẽ hoán vị chuỗi C¡ - D¡ 56 bit thành
chuỗi 48 bit
Round i i2 |3 ịa 5 6 7 8 9 190 11 (12 (13 |14 |15 |16
#keyblts 1 1 |2 lê 2 2 2 2 1 2 2 2 2 2 2 1
shifted
Figure - number of key bits shifted per round
Bang dich bit (Left Shift)
Trang 14se _ Biến thứ nhất R;: là chuỗi bit có độ dài 32 bit
e« Biến thứ hai k¡ là chuỗi bit có độ dài 48 bit
Đầu ra của hàm f có độ dài 32 bit, quy trình hoạt động cùa hàm f như sau:
se Biến thứ nhất R¡¡ đưuọc mở rộng thành một chuỗi có độ dài 48 bit theo hàm mở rộng E (Expansion permutation)
e Tinh E(Ria) XOR Ki
e Tach két qua cla phép tinh trén thanh 8 khối 6 bit B:, Bo, ., Bs
e Dua cac khéi 8 bit B; vao 8 bang Si, Sz, ., Ss (NOP S-Box) Mdi hdp S- Box là bảng cố định có các cột từ 0 đến 15 và các hàng từ 0 đến 3 Với mỗi khối 6 bit b; = Bi Bz B3 Ba Bs Be tinh dugc SiB; nhu sau:
o Hai bit bibs xac dinh hang r trong hép Si, b6n bit babababs xác định cột c trong hộp S¡ Khi d6, Si(Bi) sé xac dinh phan tu Ci = Si(r,c), phan tu nay viét dudi dang nhi phan 4 bit Nhu vay, 8 khối 6 bit Bi (1 s i < 8) sẽ cho ra 8 khối 4 bit C¡ với (1 < ¡ < 8)
10
Trang 15f(Ri-1,Ki)
11
Trang 16ƒ(R,K) = P(S:(B,)S(B;) Sạ(Bạ))
B,B; Bạ = K@E(R) Giá trị của hàm f(R, K) được sử dụng để tính giá trị Rn, Kn tại mỗi vòng theo công thức như sau:
Trang 17Một số bước được thay đổi như sau:
e Đầu vào là dữ liệu cần giải mã (Ciphertext) và đầu ra là kết quả giải mã (Plaintext)
Khóa vòng trong vòng lặp sẽ ngược với quá trình mã hóa Tại vòng lặp đầu tiên, khóa vòng được sử dụng là K:s và vòng lặp giải
Trang 18Chuyển bản rõ và khóa sang dạng nhị phân là:
Li = 0001 1000 1100 1010 0001 1000 1010 1101
Ra = 0100 1010 0001 0010 0001 0000 1111 0110
Trang 20Sử dụng bảng hoán vị lựa chọn PC-1, thu được Co và Da:
= 000110 000001 110001 011101 011101 011100
BỊH@D1 101161100100 001010 101000 001111 110100 001110 EŒ11D@ @o©@1100101 110000 101000 001001 011110 101101
QQ1100 110141901100 110011 000011 000101 110110 011010 D911 101101
HGF © Kis = 169880194 009 Pro 1t91o‡410o4898 8989oo Ris Kis} = 0011 0001 1110 0000 0111 0001 0001 1001
Trang 21
7 Chương trình thuật toan DES
7.1 Giải thuật
7.1.1 Hàm chuyển đổi hệ cơ số
- Hàm chuyển đổi từ hệ cơ số 16 sang nhị phân:
Khởi tạo 1 chuổi để lưu lại chuỗi nhị phân
Đưa chuỗi hex ban đầu vào vòng lặp for với số vòng lặp bằng
độ dài của chuổi hex
Trong vòng lặp thực hiện so sánh các ký tự trong chuổi hex với bảng mp và chuyển chúng sang dạng mã nhị phân
Returnkết quả của hàm
- Hàm chuyển nhị phân sang cơ số 16:
Khởi tạo 1 chuổi để lưu lại chuỗi hex
Đưa chuỗi nhị phân ban đầu vào vòng lặp for với số vòng lặp bằng độ dài của chuổi nhị phân và bước nhảy của mỗi vòng lặp
là 4
Trong vòng lặp sẽ khởi tạo 1 chuỗi để lưu 4 bit và 4 bit đó sẽ được so sánh với bảng mp và chuyển chúng sang dạng mã hex
Return kết quả của hàm
17
Trang 22e _ Và hàm bintohex ngược lại
- Hàm chuyển nhị phân sang thập phân:
se Tạo 1 biến lưu và chuyển giá trị đi vào sang dạng int (chuyển chuổi nhập vào sang dạng số vị dụ: 0001 sẽ được chuyển thành 1, việc chuyển này sẽ tránh việc xảy ra lỗi dữ liệu)
se _ Khởi tạo 1 biến để lưu số thập phân và 1 biến ¡ mang ý nghĩa là
vị trí của bit
18
Trang 23e Đưa giá trị ban đầu vào vòng lặp cho đến khi hết giá trị ban
đầu = 0:
o Bl: Cho gia tri dec = giá trị ban đầu % cho 10
o_B2: Khởi tạo 1 giá tri decimal = decimal + dec * pow(2,Ì)
o_B3: Cho giá trị ban đầu chi 10 và lấy phần nguyên và biến ¡
sẽ + thêm cho 1
e Return kết quả
bintodec(binary
- Ham chuyén déi thap phan sang nhi phan:
e« Tạo 1 biến res và gán cho nó chuổi bin được chuyển từ giá trị ban đầu (replace("0b", "") dùng để xóa ký tự 0b ở đầu chuổi ký
Trang 24Và hàm dectobin ngược lại
7.1.2 Hàm toán thao tác bit
Hàm thực hiện hoán vị (permutation) trên một chuỗi kí tự:
Là hàm sẽ hoán vị các ký tự theo bản đã cho sẵn với 3 gái trị truyền vào là:
+ k: chuỗi được truyền vào
+ arr: bảng tra được truyền vào
+ n: số ký tự
Cách thực hiện như sau:
+ B1: khởi tạo 1 chuỗi rỗng để lưu lại chuỗi được hoán vị
+ B2:tạo vòng lặp bằng số ký tự và thay thế chúng vào vị trí tương ứng với bảng tra (lưu ý: code ghi k[arr[i] - 1] vì mảng bắt đầu từ 0 nên các vị trí sẽ bị lùi đi 1)
Trang 25Ví dụ:
se Nếu gọi hàm permute (‘ABCDEF’, [2, 4, 1, 6, 3, 5], 6)
e Két quả trả về sẽ là chuỗi 'BDAFCE' (tương ứng với hoán vị chuỗi
‘ABCDEF’ dua trén chi số [2, 4, 1, 6, 3, 5]
Hàm thực hiện phép dịch bit sang trái (shift left) trên một
chuỗi kí tự theo số lần dịch:
se Dung dé lùi giá trị sang bên trái với 2 giá trị truyền vào là:
+ K: chuổi truyền vào
+ nth_shifts: la s6 ký tự sẽ lùi
se _ Cách thực hiện như sau:
+ khởi tạo 1 chuỗi rỗng (S)
+ tạo vòng lặp với số vòng lặp là nth_shifts, bên trong được thực hiện như sau:
o_B2.1: tạo 1 vòng lặp với số vòng là độ dài của K và cho S =
Trang 26e Két qua tra vé là chuỗi 'DEFGABC' ứng với việc dịch trái chuỗi ba lần
Hàm thực hiện phép XOR giữa hai chuỗi:
e_ Truyền vào 2 chuỗi a và b và khởi tạo ans = rỗng
»« Tạo vòng lặp với số vòng là độ dài của chuỗi a, và so sánh ký tự
của a và b nếu giống nhau sẽ bằng 0, khác nhau sẽ bằng 1, sau
đó truyền các ký tự đó vào ans
7.1.3 Bản biến biến đổi
Hoán vị khởi tạo - IP
22