BÁO CÁO THỰC TẬP-XÂY DỰNG ỨNG DỤNG MÃ HÓA MD5 & 3DES TRAO ĐỔI THÔNG TIN TRÊN MẠNG - Pdf 27

TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN MẠNG VÀ TRUYỀN THÔNG
 
ĐỒ ÁN LẬP TRÌNH MẠNG
NGÀNH CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI :
XÂY DỰNG ỨNG DỤNG MÃ HÓA MD5 & 3DES
TRAO ĐỔI THÔNG TIN TRÊN MẠNG
Sinh viên : Trần Văn Huynh
: Trần Văn Nghĩa
Lớp : 11TLT.CNTT
Cán bộ hướng dẫn : ThS. Mai Văn Hà
Đà Nẵng 03/2013
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
Đề cương chi tiết
I.1. Mục tiêu của đề tài 4
I.2. Hướng giải quyết 4
I.3. Triển khai 4
CHƯƠNG II. CƠ SỞ LÝ THUYẾT 4
I Khái niệm về mã hóa và giải mã 5
I.1. Giới thiệu 5
I.2. Các nguyên lý cơ bản của quá trình bảo mật và mã hóa 5
I.3. Khái niệm về chìa khoá 6
I.4. Thuật toán mã hóa 6
I.5. Hàm hash 7
II. Tổng quan về lập trình mạng 8
II.1. Mô hình Client-Server 8
II.1.1. Dựa vào chức năng có thể chia thành các loại server như sau 9
II.1.2. Ưu điểm và nhược điểm của mô hình Client-Server 9
II.2. Kiến trúc mô hình Client-Server 10

- Xây dựng được một chương trình mã hóa MD5 và 3DES
- Tìm hiểu về bảo mật trong java.
- Tìm hiểu các hàm băm.
- Tìm hiểu gói java lập trình mạng.
I.2. Hướng giải quyết
- Tìm hiểu cơ chế hoạt động của thuật toán MD5 và 3DES
- Xây dựng chương trình bằng ngôn ngữ java
- Cài đặt các công cụ cần thiết hỗ trợ chương trình.
- Từ đó tìm ra hướng giải quyết và viết chương trình mô phỏng cho bài toán.
I.3. Triển khai
Chương trình mô phỏng mã hóa và giả mã hai thuật toán MD5 và 3DES trong mô hình
Client – Server.
CHƯƠNG II. CƠ SỞ LÝ THUYẾT
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 4
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
I Khái niệm về mã hóa và giải mã
I.1. Giới thiệu
Mật mã và bảo mật trong hệ thống viễn thông là một lĩnh vực có nhiều thuật ngữ có thể
làm cho nhiều người "ngơ ngác": như "hash function", "one-time pad" hay Rijndael Thread
này nhằm giải thích các khái niệm thường dùng trong ngành mật mã học (cryptography) với
hy vọng có thể giúp ích cho những ai mong muốn tìm hiểu về lĩnh vực này.
Trước tiên mật mã học (crypto) là một nghệ thuật nhằm giấu thông tin, bằng cách chuyển
đổi (encrypt) thông tin thành dạng thông tin không đọc được (cipher text). Chỉ có những
người giữ chìa khóa (key) bí mật mới có thể giải mã (decrypt) thông tin thành dạng thông tin
có thể hiểu được (plain text). Thông tin đôi khi bị giải mã mà không cần biết khóa bí mật.
Ngành học nghiên cứu về việc bẻ khóa (attack/crack/hack) này còn gọi là cryptanalysis.
Hình 1:Sơ đồ mã hóa và giải mã.
I.2. Các nguyên lý cơ bản của quá trình bảo mật và mã hóa
 Tính bí mật (confidentiality/privacy): tính chất này đảm bảo thông tin chỉ được
hiểu bởi những ai biết chìa khóa bí mật.

Hàm này được thực hiện lại nhiều lần trên mật khẩu ban đầu cùng với một số
ngẫu nhiên để tạo ra một chìa khóa có độ an toàn cao hơn. Số ngẫu nhiên này gọi
là salt, còn số lần lặp lại là iteration.
 Keylength (Keysize): Độ dài (hay độ lớn) của chìa khóa. Nói một chìa khóa có độ
dài 128 bit có nghĩa chìa đó là một số nhị phân có độ dài 128 chữ số. Một thuật
toán có chìa khóa càng dài thì càng có nhiều khả năng chống lại tấn công kiểu
brute-force.
 Brute-force attack: (exhaustive key search): phương pháp tấn công bằng cách thử
tất cả những chìa khóa có thể có. Đây là phương pháp tấn công thô sơ nhất và
cũng khó khăn nhất. Theo lý thuyết, tất cả các thuật toán hiện đại đều có thể bị
đánh bại bởi brute-force nhưng trong thực tiễn việc này chỉ có thể thực hiện được
trong thời gian dài. Vì thế có thể coi một thuật toán là an toàn nếu như không còn
cách nào khác để tấn công nó dễ hơn là brute-force. Ngoài ra để chống lại tấn
công này, chìa khóa bị mật được thay đổi một cách thường xuyên hơn.
I.4. Thuật toán mã hóa
 Cổ điển(cái này ngày nay vẫn hay dùng trong trò chơi tìm mật thư).
• Substitution (thay thế): phương pháp mã hóa trong đó từng kí tự (hoặc từng
nhóm kí tự) của văn bản ban đầu được thay thế bằng một (hay một nhóm) kí
tự khác. Tuy không còn được sử dụng nhưng ý tưởng của phương pháp này
vẫn được tiếp tục trong những thuật toán hiện đại
• Transposition (hoán vị): phương pháp mã hóa trong đó các kí tự trong văn bản
ban đầu chỉ thay đổi vị trí cho nhau còn bản thân các kí tự không hề bị biến
đổi.
 Hiện đại
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 6
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
• Symmetric cryptography (mã hóa đối xứng): Tức là cả hai quá trình mã hóa và
giải mã đều dùng một chìa khóa. Để đảm bảo tính an toàn, chìa khóa này phải
được giữ bí mật. Vì thế các thuật toán loại này còn có tên gọi khác là secret
key cryptography (hay private key cryptography), tức là thuật toán mã hóa

I.5. Hàm hash
 Hàm hash (hash function): là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì
qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
 Hai tính chất quan trọng của hàm này là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này tương
tự như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà suy ra ai là chủ
của nó được.
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 7
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai
thông điệp khác nhau có cùng một kết quả hash, là cực kì nhỏ.
 Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: chương trình chống xâm nhập so sánh giá trị
hash của một file với giá trị trước đó để kiểm tra xem file đó có bị ai đó thay
đổi hay không.
• Bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng: Bằng cách kiểm tra
giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiện những thay đổi
cho dù là nhỏ nhất.
• Tạo chìa khóa từ mật khẩu.
• Tạo chữ kí điện tử.
II. Tổng quan về lập trình mạng
II.1. Mô hình Client-Server
Client-server là mô hình mạng trên đó có các máy chủ (server) và máy khách (client) giao
tiếp với nhau theo 1 hoặc nhiều dịch vụ. Ý tưởng của mô hình này là máy con (đóng vài trò
là máy khách) gửi một yêu cầu (request) để máy chủ (đóng vai trò người cung ứng dịch vụ),
máy chủ sẽ xử lý và trả kết quả về cho máy khách.
Hình 2: Mô hình client – server
Trong mô hình mạng khách-chủ có một hệ thống máy tính cung cấp các tài nguyên và
dịch vụ cho cả hệ thống mạng sử dụng gọi là các máy chủ (server). Một hệ thống máy tính
sử dụng các tài nguyên và dịch vụ này được gọi là máy khách (client). Chương trình server

được phân tán rõ ràng và dễ quản lý hơn.
• Dữ liệu được lưu trữ tập trung nên dễ dàng bổ sung hoặc nâng cấp server.
• Tất cả các dữ liệu đều nằm trên máy chủ nên việc bảo mật được tốt hơn (máy
chủ thường được bảo mật tốt hơn máy khách). Máy chủ có thể kiểm soát truy
cập tài nguyên để đảm bảo rằng chỉ những máy khách được cho phép mới có
quyền truy cập và thay đổi dữ liệu.
• Mô hình client/server cung cấp một nền tảng lý tưởng cho phép tích hợp các
kỹ thuật hiện đại như mô hình thiết kế hướng đối tượng, hệ chuyên gia, hệ
thông tin địa lý (GIS)
• Nhược điểm :
• Client-Server không phải là mô hình dữ liệu dùng chung nên các hệ thống con
có thể sử dụng các tổ chức dữ liệu khác nhau. Do đó, việc trao đổi dữ liệu có
thể không hiệu quả.
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 9
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
• Các server chuyên dụng rất đắt tiền, và dữ liệu tập trung trên máy chủ nên cần
được bảo mật, do đó: phải có nhà quản trị cho hệ thống.
• Một khi số lượng các máy khách truy cập đồng thời quá nhiều, máy chủ có thể
trở nên quá tải ảnh hưởng đến việc truy cập dữ liệu.
• Do phải trao đổi dữ liệu giữa 2 máy ở 2 khu vực khác nhau cho nên dễ dàng
xảy ra hiện tượng thông tin truyền trên mạng bị lộ.
II.2. Kiến trúc mô hình Client-Server
Client/Server là mô hình tổng quát nhất, trên thực tế thì một server có thể được nối tới
nhiều server khác nhằm làm việc hiệu quả và nhanh hơn. Đầu tiên, client sẽ gởi một thông
điệp yêu cầu (Request Message) mô tả về công việc muốn server thực hiện. Khi nhận được 1
yêu cầu từ client, server tiến hành phân tích để xác định công việc cần phải thực thi. Nếu
việc thực hiện yêu cầu này có sinh ra kết quả trả về, server sẽ gởi nó cho client trong một
thông điệp trả lời (Reply Message). Nếu không được thì server này có thể gửi tiếp yêu cầu
vừa nhận được cho server khác để xử lý rồi trả kêt quả về cho client. Dạng thức (format) và
ý nghĩa của các thông điệp trao đổi giữa client và server được qui định rõ bởi giao thức

II.3.1. Khái niệm Sockets
 Socket là một giao diện lập trình ứng dụng (API) mạng, thông qua giao diện này
chúng ta có thể lập trình điều khiển việc truyền thông giữa hai máy sử dụng các
giao thức mức thấp là TCP, UDP…
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 11
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
 Socket là sự trừu tượng hoá ở mức cao, có thể tưởng tượng nó như là thiết bị
truyền thông hai chiều gửi – nhận dữ liệu giữa hai máy tính với nhau.
II.3.2. Phân loại Sockets
 Stream socket: Sử dụng giao thức TCP có thiết lập kết nối giữa hai máy trước khi
trao đổi dữ liệu. Stream socket cung cấp cơ chế trao đổi dữ liệu theo 2 chiều, bảo
đảm tính tin cậy, có thứ tự, không lặp.
 Datagram socket: Sử dụng với giao thức UDP, không thiết lập kết nối giữa 2
máy trước khi trao đổi dữ liệu. Việc định vị Server và client thông qua điạ chỉ
đích trong gói tin.
 Raw socket: Cung cấp sự truy xuất vào các giao thức giao tiếp nền có hỗ trợ
socket. Raw socket chỉ dành cho người muốn phát triển các giao tiếp giao
thức mới hoặc muốn truy xuất sâu vào các tiện ích bí mật của giao thức đó.
Hình 6: Các loại Socket.
II.4. Giao Thức TCP
II.4.1. Đặc điểm của giao thức TCP( có kết nối)
 Có 1 đường kết nối ảo giữa 2 tiến trình
 Một trong 2 tiến trình phải đợi tiến trình kia yêu cầu kết nối.
 Có thể sử dụng để liên lạc theo mô hình Client/Server
 Trong mô hình Client/Server thì Server lắng nghe và chấp nhận một yêu cầu kết
nối
 Mỗi thông điệp gửi đều có xác nhận trở về
 Các gói tin chuyển đi tuần tự
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 12
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà

 Truyền lại các gói dữ liệu mất trên đường truyền
 Loại bỏ các gói dữ liệu trùng lặp
 Cơ chế hạn chế tắc nghẽn đường truyền
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 13
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
Ở hai bước đầu tiên trong ba bước bắt tay, hai máy tính trao đổi một số thứ tự gói ban
đầu (Initial Sequence Number -ISN). Số này có thể chọn một cách ngẫu nhiên. Số thứ tự này
được dùng để đánh dấu các khối dữ liệu gửi từ mỗi máy tính. Sau mỗi byte được truyền đi,
số này lại được tăng lên. Nhờ vậy ta có thể sắp xếp lại chúng khi tới máy tính kia bất kể các
gói tới nơi theo thứ tự thế nào.
Trên lý thuyết, mỗi byte gửi đi đều có một số thứ tự và khi nhận được thì máy tính nhận
gửi lại tin báo nhận (ACK). Trong thực tế thì chỉ có byte dữ liệu đầu tiên được gán số thứ tự
trong trường số thứ tự của gói tin và bên nhận sẽ gửi tin báo nhận bằng cách gửi số thứ tự
của byte đang chờ.
II.4.5. Kết thúc kết nối
Để kết thúc kết nối hai bên sử dụng quá trình bắt tay 4 bước và chiều của kết nối kết thúc
độc lập với nhau. Khi một bên muốn kết thúc, nó gửi đi một gói tin FIN và bên kia gửi lại
tin báo nhận ACK. Vì vậy, một quá trình kết thúc tiêu biểu sẽ có 2 cặp gói tin trao đổi. Một
kết nối có thể tồn tại ở dạng "nửa mở": một bên đã kết thúc gửi dữ liệu nên chỉ nhận thông
tin, bên kia vẫn tiếp tục gửi.
II.4.6. Cấu trúc gói tin TCP
Một gói tin TCP bao gồm 2 phần:
 header
 dữ liệu
Phần header có 11 trường trong đó 10 trường bắt buộc. Trường thứ 11 là tùy chọn (trong
bảng)có tên là: options.
Hình 7: Cấu trúc gói tin TCP
 Source port : Số hiệu của cổng tại máy tính gửi.
 Destination port : Số hiệu của cổng tại máy tính nhận.
 Sequence number :Trường này có 2 nhiệm vụ. Nếu cờ SYN bật thì nó là số thứ

III. Thuật toán mã hóa MD5
III.1. Giới thiệu
Thuật toán nhận vào 1 thông điệp độ dài tùy ý và tạo ra một số 128 bit, là một dạng “vân
tay “ hay “mã số thông điệp” ( message digest ) của đầu vào. Người ta cho rằng sẽ không
khả thi về mặt tính toán để tạo ra 2 thông điệp có cùng mã số thông điệp, hoặc tạo ra một
thông điệp với mã số cho trước.Thuật toán MD5 được dự tính áp dụng cho những ứng dụng
chữ ký điện tử, ở đó một file lớn phải được “nén“ một cách an toàn trước khi mã hóa với
một khóa cá nhân ( private key ) dưới một hệ mã hóa công khai như RSA. Thuật toán MD5
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 15
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
được thiết kế để chạy tương đối nhanh trên các máy 32 bit, có thể được thực hiện một cách
khá gọn. Thuật toán MD5 là sự mở rộng của thuật toán MD4. MD5 chậm hơn một chút so
với MD4 nhưng an toàn hơn. MD5 được thiết kế vì người ta cảm thấy có thể MD4 đã được
chấp nhận trong sử dụng quá nhanh so với sự đánh giá nó. MD4 được thiết kế để chạy rất
nhanh, nó đã “nằm trên ranh giới“ theo cách nói về nguy cơ của sự thành công trong việc
phá mã. MD5 đã lùi lại một chút, từ bỏ một chút tốc độ cho sự bảo mật. Nó kết hợp một số
ý kiến góp ý của các chuyên gia, thuật toán MD5 hiện đang được đánh giá và có thể được
chấp nhận như một chuẩn.
Hình 8: Xử lý MD5
III.2. Mô tả thuật toán MD5
Giả sử chúng ta có thông điệp b bit ở đầu vào, và ta muốn tìm mã số của thông điệp. Ở
đây b là số không âm bất kỳ, b có thể bằng 0 và không cần chia hết cho 8, độ lớn có thể bất
kỳ. Tưởng tượng rằng các bit của thông điệp được viết như sau :
m_0 m_1 m_2 … m_{b-1} Đầu vào là những khối 512 bit, được chia cho 16 khối con 32
bit. Đầu ra của thuật toán là một thiết lập của 4 khối 32 bit để tạo thành một hàm Băm 128
bit duy nhất.
Đầu tiên, ta chia bức điện thành các khối 512 bit, với khối cuối cùng (đặt là x và x <
512bit) của bức điện, chúng ta cộng thêm một bit 1 vào cuối của x, theo sau đó là các bit 0
để được độ dài cần thiết (512 bit). Kết quả là bức điện vào là một chuỗi M có độ dài chia hết
cho 512, vì vậy ta có thể chia M ra thành các N khối con 32 bit (N khối này sẽ chia hết cho

A
B
C
D
A
B
C
D
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
F(X,Y,Z ) = (X and Y) or ((not X) and Z)
G(X,Y,Z ) = ((X and Z) or (Y and (not Z)))
H(X,Y,Z ) = X xor Y xor Z
I(X,Y,Z ) = Y xor (X or (not Z)).
Những hàm này được thiết kế sao cho các bit tương ứng của X, Y và Z là độc lập và không
ưu tiên, và mỗi bit của kết quả cũng độc lập và ngang bằng nhau.
Nếu Mj là một biểu diễn của khối con thứ j (j = 16) và <<<s là phép dịch trái của s bit, thì
các vòng lặp có thể biểu diễn như sau:
FF(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + F(b,c,d) + Mj + ti) <<< s)
GG(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + G(b,c,d) + Mj + ti) <<< s)
HH(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + H(b,c,d) + Mj + ti) <<< s)
II(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + I(b,c,d) + Mj + ti) <<< s).
Bốn vòng (64 bước) sẽ được thực hiện.
III.3. Các bước mã hóa thông điệp
 Các bit gắn thêm
Thông điệp được mở rộng, thêm bit vào phía sau sao cho độ dài của nó ( tính theo bit )
đồng dư với 448 theo môđun 512. Nghĩa là thông điệp được mở rộng sao cho nó còn thiếu
64 bit nữa thì sẽ có một độ dài chia hết cho 512. Việc này luông được thực hiện ngay cả khi
bản thân độ dài thông điệp đã đồng dư với 448 theo môđun 512.
Việc thêm bit này thực hiện như sau : một bit “1“ được thêm vào sau thông điệp, sau đó các
bit “0“ được thêm vào để có một độ dài đồng dư với 448 môđun 512. Trong tất cả các

III.4. Ứng dụng của MD5 Trong thực tế
Chính các đặc điểm của MD5 làm cho nó thường được ứng dụng trong một số trường hợp
như sau: Nó thường được dùng để checksum toàn bộ file. Các nhà phát triển ứng dụng
thường dùng MD5 trong việc cho phép download file trên NET. Họ sẽ cho “xuất bản” một
tín hiệu md của file download. Khi chúng ta tải file về , thì file chúng ta vừa download sẽ có
một tín hiệu md, nếu tín hiệu này khớp với tín hiệu các nhà phát triển ứng dụng đã “xuất
bản” ở trên. Thì OK, không có vấn đề. Nếu hai tín hiệu md này khác nhau, có thể có trong
file download có virut hay cái gì đó tương tự. Một ứng dụng thường được dùng nữa là hash
một password. Được dùng cho việc bảo mật một ứng dụng, hay những gì tương tự …
III.5. Tổng kết
Thuật toán số hóa thông điệp MD5 khá đơn giản để thực hiện, cung cấp một dạng “vân
tay“ hay mã số của thông điệp với độ dài tùy ý. Người ta cho rằng độ khó để tìm được 2
thông điệp có cùng mã số là khoảng 2^64 bước tính, và độ khó để tim được một thông điệp
với mã số cho trước là 2^128 bước tính. Thuật toán MD5 đã được dò tìm điểm yếu một cách
cẩn thận. Tuy nhiên đây là một thuật toán tương đối mới và việc phân tích cẩn thận về sự
an toàn là cần thiết.
IV. Thuật toán mã hóa 3DES
IV.1. Giới thiệu
Thuật toán mã hoá 3DES là một biến thể phụ của DES, như ta đã biết DES vẫn tồn tại
nhiều nhược điểm như: Có thể bẽ gãy bằng những máy có mục đích đặc biệt để tìm ra khóa .
Thuật toán mã hoá 3DES gồm 3 chìa khoá 64 bit, tức là toàn bộ chiều dài khoá là 192
bit. Trong khi mã hoá riên tư, chúng ta đơn giản là nhập toàn bộ 192 bit khoá đơn là
vào mỗi 3 chìa khoá cá nhân.
SVTH: Trần Văn Huynh – Trần Văn Nghĩa Trang: 19
Báo cáo Đồ án- Lập Trình Mạng GVHD: Th.S Mai Văn Hà
Hình 10: Mô tả 3DES
Thủ tục mã hoá cũng tương tự DES nhưng nó được lặp lại 3 lần tức là tăng lên 3 lần DES.
Dữ liệu được mã hoá với chìa khoá đầu tiên, và được giải mã với chìa khoá 2, sau đó mã
hoá lần nữa với chìa khoá thứ 3 để thu được dữ liệu mã hoá cuối cùng.
VI.2. Các mẫu hoạt động của 3DES


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status