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ả
Trang 1BỘ 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
Cán bộ hướng dẫn : ThS Mai Văn Hà
Đà Nẵng 03/2013
Trang 2Đề 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
II.2.1 Các chế độ giao tiếp 10
II.3 Socket 11
II.3.1 Khái niệm Sockets 11
II.3.2 Phân loại Sockets 12
II.4 Giao Thức TCP 12
II.4.1 Đặc điểm của giao thức TCP( có kết nối) 12
II.4.2 Hoạt động của giao thức TCP 13
II.4.3 Thiết lập kết nối 13
II.4.4 Truyền dữ liệu 13
II.4.5 Kết thúc kết nối 14
II.4.6 Cấu trúc gói tin TCP 14
III Thuật toán mã hóa MD5 15
III.1 Giới thiệu 15
III.2 Mô tả thuật toán MD5 16
III.3 Các bước mã hóa thông điệp 18
III.4 Ứng dụng của MD5 Trong thực tế 19
III.5 Tổng kết 19
IV Thuật toán mã hóa 3DES 19
IV.1 Giới thiệu 19
VI.2 Các mẫu hoạt động của 3DES 20
VI.3 Ưu và nhược điểm của 3DES 20
VI.4 Ứng dụng của thuật toán DES trong thực tế 20
CHƯƠNG III XÂY DỰNG CHƯƠNG TRÌNH 20
CHƯƠNG IV KẾT QUẢ 21
CHƯƠNG V KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
21 CHƯƠNG I TỔNG QUAN VỀ ĐỀ TÀI
Trang 3I.1 Mục tiêu của đề tài
- 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
Trang 4I 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
Tính toàn vẹn (integrity): tính chất này đảm bảo thông tin không thể bị thay đổi
mà không bị phát hiện Tính chất này không đảm bảo thông tin không bị thay đổi, nhưng một khi nó bị nghe lén hoặc thay đổi thì người nhận được thông tin có thể biết được là thông tin đã bị nghe lén hoặc thay đổi Các hàm một chiều (one-way function) như MD5, SHA-1, MAC được dùng để đảm bảo tính toàn vẹn cho thông tin
Tính xác thực (authentication): người gửi (hoặc người nhận) có thể chứng minh
đúng Người ta có thể dụng một password, một challenge dựa trên một thuật toán mã hóa hoặc một bí mật chia sẻ giữa hai người để xác thực Sự xác thực này
có thể thực hiện một chiều (one-way) hoặc hai chiều (multual authentication)
Tính không chối bỏ (non-repudiation): người gửi hoặc nhận sau này không thể
chối bỏ việc đã gửi hoặc nhận thông tin Thông thường điều này được thực hiện thông qua một chữ ký điện tử (electronic signature)
Trang 5 Tính nhận dạng (identification): người dùng của một hệ thống, một tài nguyên
sở hữu một chứng minh thư (identity) như là một chìa khóa ban đầu (primary key) identity này sẽ xác định những chức năng của người dùng, giới hạn cho phép của người dùng cũng như các thuộc tính liên quan (thường gọi chung là credential) Identity có thể là login, dấu vân tay, ADN, giản đồ võng mạc mắt,
âm thanh
I.3 Khái niệm về chìa khoá
Password: mật khẩu, là một hay nhiều từ mà người dùng phải biết để được cấp
quyền truy cập Trong thực tế, mật khẩu do người dùng tạo ra thường không đủ độ
an toàn để được dùng trực tiếp trong thuật toán Vì vậy, trong bất cứ hệ thống mã hóa dữ liệu nghiêm túc nào cũng phải có bước chuyển đổi mật khẩu ban đầu thành chìa khóa có độ an toàn thích hợp Bước tạo chìa khóa này thường được gọi là key derivation, key stretching hay key initialization
Key Derivation Function: là một hàm hash (sẽ giải thích rõ hơn ở phần sau) được
thiết kế sao cho chìa an toàn hơn đối với tấn công kiểu brute-force hay cổ điển 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
Trang 6• 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
dùng chìa khóa riêng (hay bí mật) Các thuật toán loại này lý tưởng cho mục đích mã hóa dữ liệu của cá nhân hay tổ chức đơn lẻ nhưng bộc lộ hạn chế khi thông tin đó phải được chia sẻ với một bên thứ hai
• Block ciphers (thuật toán khối): Trong đó từng khối dữ liệu trong văn bản ban
đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài Độ dài mỗi khối gọi là block size, thường được tính bằng đơn vị bit Ví dụ thuật toán 3-Way có kích thước khối bằng 96 bit Một số thuật toán khối thông dụng là: DES, 3DES, RC5, RC6, 3-Way, CAST, Camelia, Blowfish, MARS, Serpent, Twofish, GOST
Stream ciphers (thuật toán dòng): trong đó dữ liệu đầu vào được mã hóa từng bit
một Các thuật toán dòng có tốc độ nhanh hơn các thuật toán khối, được dùng khi khối lượng dữ liệu cần mã hóa chưa được biết trước, ví dụ trong kết nối không dây Có thể coi thuật toán dòng là thuật toán khối với kích thước mỗi khối là 1 bit Một số thuật toán dòng thông dụng: RC4, A5/1, A5/2, Chameleon
Mã hóa bất đối xứng(Asymmetric cryptography)
• Sử dụng một cặp chìa khóa có liên quan với nhau về mặt toán học, một chìa công khai dùng để mã hoá (public key) và một chìa bí mật dùng để giải mã (private key) Một thông điệp sau khi được mã hóa bởi chìa công khai sẽ chỉ
có thể được giải mã với chìa bí mật tương ứng Do các thuật toán loại này sử dụng một chìa khóa công khai (không bí mật) nên còn có tên gọi khác là
public-key cryptography (thuật toán mã hóa dùng chìa khóa công khai) Một số
thuật toán bất đối xứng thông dụng là : RSA, Elliptic Curve, ElGamal, Diffie Hellman
• Một trong những hạn chế của các thuật toán mã hóa bất đối xứng là tốc độ chậm, do đó trong thực tế người ta thường sử dụng một hệ thống lai tạp trong
đó dữ liệu được mã hóa bởi một thuật toán đối xứng, chỉ có chìa dùng để thực hiện việc mã hóa này mới được mã hóa bằng thuật toán bất đối xứng Hay nói một cách khác là người ta dùng thuật toán bất đối xứng để chia sẻ chìa khóa bí mật rồi sau đó dùng thuật toán đối xứng với chìa khóa bí mật trên để truyền thông tin
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
Trang 7• 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.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
và client nói chuyện với nhau bằng các thông điệp (messages) thông qua một cổng truyền thông liên tác IPC (Interprocess Communication) Thực tế trong các ứng dụng của mô hình client/server, các chức năng hoạt động chính là sự kết hợp giữa client và server với sự chia
sẻ tài nguyên, dữ liệu trên cả 2 máy Vai trò của client Trong mô hình client/server, client được coi như là người sử dụng các dịch vụ trên mạng do một hoặc nhiều máy chủ cung cấp
Trang 8và server được coi như là người cung cấp dịch vụ để trả lời các yêu cầu của các clients Điều quan trọng là phải hiểu được vai trò hoạt động của nó trong một mô hình cụ thể, một máy client trong mô hình này lại có thể là server trong một mô hình khác Máy client có thể sử dụng các hệ điều hành bình thường như Win9x, DOS, OS/2 Các server thường có cấu hình mạnh (tốc độ xử lý nhanh, kích thước lưu trữ lớn) hoặc là các máy chuyên dụng nên nó hoạt động sẽ tốt hơn nếu hệ điều hành của nó là đa nhiệm với các tính năng hoạt động độc lập song song với nhau như hệ điều hành UNIX, WINDOWS
II.1.1 Dựa vào chức năng có thể chia thành các loại server như sau
File Server: phục vụ các yêu cầu hệ thống tập tin trong mạng
Print Server: phục vụ các yêu cầu in ấn trong mạng
Application Server: cho phép các ứng dụng chạy trên các server và trả về kết quả cho client
Mail Server: cung cấp các dịch vụ về gởi nhận e-mail
Web Server: cung cấp các dịch vụ về web
Database Server: cung cấp các dịch vụ về lưu trữ, tìm kiếm thông tin
Communication Server: quản lý các kết nối từ xa
II.1.2 Ưu điểm và nhược điểm của mô hình Client-Server
Ưu điểm :
• Với mô hình client-server thì mọi thứ dường như đều nằm trên bàn của người
sử dụng, nó có thể truy cập dữ liệu từ xa (bao gồm các công việc như gửi và nhận file, tìm kiếm thông tin, ) với nhiều dịch vụ đa dạng mà mô hình cũ không thể làm được
• Có nhiều loại server như Mail Server, File Server, Web Server nên dữ liệu đượ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ả
Trang 9• 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 (protocol) của ứng dụng
II.2.1.
Các chế
blocked)
nghẽn:
Trong chế độ này, khi quá trình client hay server phát ra lệnh gởi dữ liệu, (thông thường bằng lệnh send) , sự thực thi của nó sẽ bị tạm dừng cho đến khi quá trình nhận phát ra lệnh nhận số dữ liệu đó (thường là lệnh receive)
Hình 3:quá trình yêu cầu và trả lời thông điệp
Trang 10Hình 4: Chế độ ngẽn.
Tương tự cho trường hợp nhận dữ liệu, nếu quá trình nào đó, client hay server, phát ra lệnh nhận dữ liệu, mà ở thời điểm đó chưa có dữ liệu gởi đến, sự thực thi của nó cũng tạm dừng cho đến khi có dữ liệu gởi đến
Chế độ không nghẽn
Hình 5: Chế độ không ngẽn.
II.3 Socket
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…