1. Trang chủ
  2. » Công Nghệ Thông Tin

Ứng dụng an toàn socket programming

36 68 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

TÓM TẮT NỘI DUNG ĐỀ TÀIGiới thiệu tổng quát về Socket Programming và cách sử dụng.Trình bày một số ứng dụng an toàn Socket Programming.Triển khai thực hiện các ứng dụng an toàn nêu trên.TÓM TẮT NỘI DUNG ĐỀ TÀIGiới thiệu tổng quát về Socket Programming và cách sử dụng.Trình bày một số ứng dụng an toàn Socket Programming.Triển khai thực hiện các ứng dụng an toàn nêu trên.

HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA AN TỒN THƠNG TIN  BÁO CÁO MÔN HỌC KỸ THUẬT LẬP TRÌNH ĐỀ TÀI ỨNG DỤNG AN TỒN SOCKET PROGRAMMING Hà Nội, 3-2023 HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA AN TỒN THƠNG TIN  BÁO CÁO MƠN HỌC KỸ THUẬT LẬP TRÌNH ĐỀ TÀI ỨNG DỤNG AN TỒN SOCKET PROGRAMMING Nhóm thực hiện: Nhóm Sinh viên thực hiện: Hà Nội, 2-2023 ii MỤC LỤC MỤC LỤC iii TÓM TẮT NỘI DUNG ĐỀ TÀI iv LỜI NÓI ĐẦU v CHƯƠNG 1: SOCKET PROGRAMMING 1 Khái niệm mục đích Socket programming Cơ chế hoạt động Socket programming Các ứng dụng Socket programming Các thư viện ngôn ngữ hỗ trợ Socket programming CHƯƠNG 2: ỨNG DỤNG AN TOÀN SOCKET PROGRAMMING Các nguy bảo mật Socket programming Các phương pháp bảo mật Socket programming 2.1 Xác thực người dung Socket programming 2.2 Advanced Encryption Standard (AES) 2.3 Giao thức SSL/TLS 10 CHƯƠNG 3: THỰC NGHIỆM 11 Mơ hình xây dựng 11 Kịch 12 2.1 Xây dựng Client Server với thư viện socket 12 2.2 Xây dựng xác thực người dùng Socket 14 2.3 Advanced Encryption Standard (AES) 18 2.4 Giao thức SSL/TLS 24 KẾT LUẬN 29 iii TÓM TẮT NỘI DUNG ĐỀ TÀI Giới thiệu tổng quát Socket Programming cách sử dụng Trình bày số ứng dụng an toàn Socket Programming Triển khai thực ứng dụng an toàn nêu iv LỜI NĨI ĐẦU Socket programming kỹ thuật lập trình sử dụng để truyền tải liệu máy tính thơng qua mạng Tuy nhiên, việc truyền tải liệu qua mạng mang theo nhiều rủi ro bảo mật, bao gồm nguy bị tin tặc đánh cắp thông tin hay xâm nhập vào hệ thống Do đó, để đảm bảo tính bảo mật tính xác thực liệu trình truyền tải qua mạng, việc sử dụng công nghệ bảo mật cần thiết Bài báo cáo trình bày công nghệ bảo mật SSL/TLS, access control, authentication AES cách sử dụng chúng socket programming để đảm bảo tính bảo mật tính xác thực q trình truyền tải liệu qua mạng Ngồi ra, báo cáo trình bày thực nghiệm đơn giản để minh họa cho việc sử dụng công nghệ bảo mật socket programming Với báo cáo này, mục đích hiểu rõ công nghệ bảo mật sử dụng socket programming cách sử dụng chúng để đảm bảo tính bảo mật tính xác thực liệu trình truyền tải qua mạng Chúng ta hy vọng báo cáo cung cấp cho bạn đọc nhìn tổng quan chủ đề hữu ích cho nhà phát triển chun gia an tồn thơng tin v CHƯƠNG 1: SOCKET PROGRAMMING Khái niệm mục đích Socket programming Socket programming kỹ thuật lập trình sử dụng để kết nối trao đổi liệu ứng dụng chạy máy tính khác thơng qua mạng internet Socket đối tượng lập trình mạng, cho phép ứng dụng truyền nhận liệu qua mạng internet Cụ thể, socket cổng mà ứng dụng sử dụng để truyền nhận liệu Các ứng dụng liên kết với socket truyền nhận liệu thơng qua socket Socket sử dụng giao thức TCP UDP để truyền nhận liệu Ví dụ, ứng dụng trị chuyện trực tuyến sử dụng socket programming để kết nối trao đổi liệu người dùng máy tính khác Mỗi người dùng có socket client để kết nối đến socket server ứng dụng trò chuyện Khi người dùng gửi tin nhắn, socket client người truyền tin nhắn đến socket server Socket server chuyển tiếp tin nhắn đến socket client người nhận tin nhắn Tóm lại, socket programming kỹ thuật lập trình sử dụng socket để kết nối trao đổi liệu ứng dụng mạng internet Các ứng dụng sử dụng socket để truyền nhận liệu cách dễ dàng hiệu Cơ chế hoạt động Socket programming Cơ chế hoạt động socket programming gồm bước sau:  Tạo socket: Đầu tiên, ứng dụng phải tạo socket máy tính cách sử dụng hàm tạo socket Ứng dụng tạo socket sử dụng giao thức khác TCP UDP  Liên kết socket cổng: Sau socket tạo, ứng dụng phải liên kết socket với địa IP cổng máy tính Điều cho phép socket truyền liệu đến máy tính khác mạng  Lắng nghe kết nối: Khi socket liên kết, ứng dụng bắt đầu lắng nghe kết nối đến từ máy tính khác mạng Nếu kết nối thực hiện, socket chấp nhận kết nối bắt đầu truyền liệu máy tính  Truyền liệu: Sau kết nối thiết lập, máy tính truyền liệu qua socket để trao đổi thông tin ứng dụng Khi sử dụng giao thức TCP UDP, socket programming sử dụng trường cờ (flag fields) để định nghĩa thông tin liên quan đến kết nối truyền liệu Trong trường hợp sử dụng giao thức TCP, socket programming sử dụng chế "threeway handshake" để thiết lập kết nối máy tính Khi thiết lập kết nối, gói tin SYN ACK sử dụng để xác nhận bên trao đổi thông tin Sau kết nối thiết lập, gói tin truyền qua socket theo thứ tự xác định đảm bảo đến đích cách xác Trong trường hợp sử dụng giao thức UDP, socket programming không yêu cầu thiết lập kết nối trước truyền liệu Các gói tin truyền qua socket mà không cần xác nhận hay đảm bảo đến đích cách xác TCP Thay vào đó, gói tin UDP truyền qua mạng cách nhanh chóng bị nhận sai thứ tự Để sử dụng giao thức TCP UDP socket programming, ứng dụng cần sử dụng hàm khác để thiết lập quản lý kết nối Ví dụ, hàm ‘connect()’ sử dụng để thiết lập kết nối TCP máy tính, hàm ‘sendto()’ sử dụng để truyền liệu qua socket UDP Các ứng dụng Socket programming Socket programming công nghệ quan trọng sử dụng nhiều ứng dụng khác để truyền liệu qua mạng Dưới số ví dụ ứng dụng socket programming:  Truyền tệp: Socket programming sử dụng để truyền tệp liệu lớn máy tính Ví dụ, ứng dụng FTP (File Transfer Protocol) sử dụng socket để truyền tệp máy tính nguồn đích  Trị chuyện trực tuyến: Socket programming sử dụng để xây dựng ứng dụng trò chuyện trực tuyến Skype, Zoom Microsoft Teams Các giao thức TCP UDP sử dụng để truyền liệu người dùng  Truyền tin nhắn: Socket programming sử dụng ứng dụng nhắn tin WhatsApp, Messenger hay Telegram Với socket programming, người dùng gửi nhận tin nhắn nhanh chóng hiệu  Chia sẻ tài nguyên: Socket programming sử dụng để chia sẻ tài nguyên máy in tệp máy tính mạng Việc sử dụng socket giúp máy tính truy cập vào tài nguyên chia sẻ cách nhanh chóng dễ dàng  Đa phương tiện: Socket programming sử dụng ứng dụng đa phương tiện YouTube, Netflix Spotify Với socket programming, người dùng truyền tệp âm video máy tính cách nhanh chóng hiệu Tóm lại, socket programming công nghệ quan trọng sử dụng nhiều ứng dụng khác để truyền liệu qua mạng Các ứng dụng socket programming bao gồm truyền tệp, trò chuyện trực tuyến, truyền tin nhắn, chia sẻ tài nguyên đa phương tiện Các thư viện ngôn ngữ hỗ trợ Socket programming Socket programming hỗ trợ nhiều thư viện ngơn ngữ lập trình khác Sau số thư viện ngôn ngữ phổ biến sử dụng để triển khai socket programming:  C/C++: C/C++ ngơn ngữ lập trình cổ điển sử dụng rộng rãi socket programming Các thư viện Winsock BSD Socket cung cấp chức cần thiết để tạo, kết nối truyền liệu socket C/C++  Python: Python ngôn ngữ lập trình phổ biến socket programming Python cung cấp số thư viện socket asyncio để triển khai socket programming Thư viện socket cung cấp chức cần thiết để tạo, kết nối truyền liệu socket Python Thư viện asyncio cung cấp cách tiếp cận đồng thời không đồng cho socket programming  Java: Java ngôn ngữ lập trình phổ biến cho socket programming Java cung cấp thư viện java.net để triển khai socket programming Các lớp Socket ServerSocket cung cấp chức cần thiết để tạo, kết nối truyền liệu socket Java  PHP: PHP ngơn ngữ lập trình phía máy chủ sử dụng rộng rãi socket programming PHP cung cấp thư viện socket để triển khai socket programming Thư viện socket cung cấp chức cần thiết để tạo, kết nối truyền liệu socket PHP  Ruby: Ruby ngôn ngữ lập trình đa sử dụng rộng rãi socket programming Ruby cung cấp thư viện socket để triển khai socket programming Thư viện socket cung cấp chức cần thiết để tạo, kết nối truyền liệu socket Ruby  JavaScript: JavaScript ngơn ngữ lập trình phổ biến cho ứng dụng web socket programming Node.js cung cấp số thư viện net socket.io để triển khai socket programming JavaScript Thư viện net cung cấp chức cần thiết để tạo, kết nối truyền liệu socket Node.js Thư viện socket.io cung cấp cách tiếp cận đồng thời không đồng cho socket programming Trong Python, để triển khai socket programming, ta sử dụng thư viện socket Đây thư viện chuẩn Python cài đặt sẵn phiên Python từ 2.0 trở lên Để sử dụng thư viện socket Python, ta làm sau: Import thư viện socket: Tạo socket: AF_INET họ địa cho IPv4 SOCK_STREAM kiểu socket dùng để truyền liệu liên tục Liên kết socket với cổng cụ thể: Lắng nghe kết nối đến socket: Chấp nhận kết nối đến socket truyền liệu: Trong đó, accept() chấp nhận kết nối đến socket trả đối tượng socket (client_socket) để truyền liệu với client Sau đó, ta sử dụng phương thức recv() sendall() để nhận truyền liệu server client CLIENT: 2.2.3 Kết đánh giá 17 Nhận xét : Về Server: Trong ví dụ này, máy chủ cho phép truy cập người dùng nằm danh sách “valid_user” Khi có yêu cầu truy cập từ máy khách , máy chủ yêu cầu người dùng đăng nhập thông tin đăng nhập kiểm tra xem thơng tin có hợp lệ khơng Nếu thơng tin đăng nhập hợp lệ , máy chủ gửi lại phản hồi Về Client: Trong ví dụ này, client sử dụng hàm input() để yêu cầu người nhập thông tin đăng nhập sử dụng hàm sendall() để gửi thơng tin người dùng đến Server Sau đó, client nhận phản hồi từ Server để biết thông tin có hợp lệ hay khơng 2.3 Advanced Encryption Standard (AES) 2.3.1 Mục tiêu  Hiểu cách sử dụng AES để bảo mật liệu Socket programming  Hiểu cách triển khai mã hóa AES Python sử dụng thư viện PyCrypto  Hiểu cách sử dụng Socket để gửi nhận liệu Client Server 2.3.2 Thực Để sử dụng AES Python qua socket, cần cài đặt thư viện pycryptodome: pip install pycryptodome a) Xây dựng AES Python  Mã hóa: Bước 1: Sử dụng hàm AES.new(key,A ES_MODE_CBC,IV) để tạo đối tượng AES với chế độ CBC để mã hóa tin nhắn cipher = AES.new(key, AES.MODE_CBC, b'This is an IV456') 18 Bước 2: Đệm tin nhắn thành bội số kích thước khối padded_message = message + b'\0' * (AES.block_size - len(message) % AES.block_size) Bước 3: Trả Ciphertext ciphertext = cipher.encrypt(padded_message) Code: def encrypt(message): cipher = AES.new(key, AES.MODE_CBC, b'This is an IV456') padded_message = message + b'\0' * (AES.block_size - len(message) % AES.block_size) ciphertext = cipher.encrypt(padded_message) return ciphertext  Giải mã Bước 1: Sử dụng hàm AES.new(key,AES_MODE_CBC,IV) để tạo đối tượng AES với chế độ CBC để giải mã mã plaintext = cipher.decrypt(ciphertext) Bước 2: Loại bỏ phần đệm thêm vào rõ plaintext.rstrip(b'\0') Code: def decrypt(ciphertext): cipher = AES.new(key, AES.MODE_CBC, b'This is an IV456') plaintext = cipher.decrypt(ciphertext) return plaintext.rstrip(b'\0') b) Xây dựng AES với socket python  Server: Bước 1: Khai báo khóa vector 19 Bước 2: Tạo socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 5000)) server_socket.listen(1) Bước 3: Kết nối với client client_socket, client_address = server_socket.accept() Bước 4: Nhận tin nhắn từ Client giải mã Ta sử dụng hàm recv() để nhận tin nhắn Ta sử dụng def decrypt(ciphertext) mà ta xây dựng để giải mã tin nhắn từ Client Bước : Gửi phản hồi mã hóa đến cho Client Ta sử dụng hàm def encrypt(ciphertext) để mã hóa Ta sử dụng hàm sendall() để gửi tin nhắn đến Client  Client Bước 1: Tạo khóa vector Bước 2: Tạo socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 5000)) Bước 3: Gửi tin nhắn mã hóa đến Server Ta sử dụng hàm def encrypt(ciphertext) để mã hóa Ta sử dụng hàm sendall() để gửi tin nhắn đến Server Bước 4: Nhận tin nhắn từ Server giải mã Ta sử dụng hàm recv() để nhận tin nhắn từ Server Ta sử dụng def decrypt(ciphertext) mà ta xây dựng để giải mã tin nhắn nhận 20 Server 21 Client 22 2.3.3 Kết đánh giá Khi chạy server.py client.py, client kết nối với server gửi thơng điệp mã hóa AES cho server Server nhận thông điệp giải mã để hiển thị nội dung Qua đó, thành công việc sử dụng AES để bảo mật liệu socket programming Đánh giá: Kịch thực thành công cho thấy tương tác socket programming AES Tuy nhiên, để có ứng dụng hoàn chỉnh bảo mật, cần phải xem xét nhiều yếu tố khác 23 2.4 Giao thức SSL/TLS 2.4.1 Mục tiêu  Hiểu cách sử dụng SSL/TLS để bảo mật liệu socket programming  Hiểu cách triển khai SSL/TLS Python sử dụng thư viện OpenSSL  Hiểu cách sử dụng socket để gửi nhận liệu Client Server 2.4.2 Thực a) Cài đặt thư viện PyOpenSSL PyOpenSSL thư viện mã nguồn mở Python cho phép sử dụng SSL/TLS để bảo mật liệu ứng dụng Socket Programming PyOpenSSL xây dựng dựa OpenSSL, thư viện mã nguồn mở cung cấp cơng cụ mã hóa giải mã liệu, sử dụng rộng rãi hệ thống UNIX Linux Với PyOpenSSL, người lập trình dễ dàng tạo kết nối SSL/TLS an tồn máy tính PyOpenSSL cung cấp giao diện lập trình ứng dụng (API) cho phép tạo chứng SSL/TLS, mã hóa giải mã liệu, thiết lập kết nối bảo mật máy khách máy chủ Để sử dụng PyOpenSSL, ta cần cài đặt thư viện máy tính sau sử dụng lệnh hàm có sẵn thư viện để xây dựng kết nối SSL/TLS ứng dụng Socket Programming Trên Linux, cài đặt OpenSSL lệnh sau: sudo apt-get install python-openssl Trên Windows, để cài đặt OpenSSL, thực bước sau: Tải cài đặt OpenSSL tương thích với phiên Python từ trang web https://slproweb.com/products/Win32OpenSSL.html Chú ý chọn phiên cho hệ điều hành Windows phiên Python (32-bit 64-bit) Cài đặt OpenSSL cách chạy tệp cài đặt tải Có thể chọn đường dẫn mặc định tùy chỉnh đường dẫn cài đặt Cài đặt PyOpenSSL cách sử dụng pip Có thể mở Command Prompt chạy lệnh sau để cài đặt PyOpenSSL: pip install pyopenssl Kiểm tra xem PyOpenSSL cài đặt thành công hay chưa cách nhập lệnh sau Python: 24 import OpenSSL Nếu khơng có lỗi, thư viện PyOpenSSL cài đặt thành công sử dụng SSL/TLS ứng dụng Socket Programming b) Thiết lập kết nối an tồn SSL/TLS Bước 1: Tạo socket kết nối tới server: import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('example.com', 443)) Bước 2: Tạo SSL/TLS context, bao gồm cấu hình thơng số mã hóa xác thực: import ssl context = ssl.create_default_context() Chúng ta sử dụng hàm create_default_context() để tạo SSL/TLS context với thông số mặc định Tùy thuộc vào yêu cầu ứng dụng, cấu hình thêm thơng số mã hóa xác thực khác cách sử dụng chứng số, thuật tốn mã hóa, vv Bước 3: Tạo SSL/TLS object, bao gồm socket tạo bước trước SSL/TLS context tạo bước trên: ssl_sock = context.wrap_socket(s, server_hostname='example.com') Hàm wrap_socket() sử dụng để tạo SSL/TLS object bao gồm socket tạo SSL/TLS context tạo bước Trong đó, server_hostname truyền vào để xác định hostname server, giúp cho SSL/TLS object kiểm tra tính hợp pháp chứng số cấp phát cho server Bước 4: Thiết lập kết nối SSL/TLS cách gọi hàm SSL_connect(): ssl_sock.connect(('example.com', 443)) Sau tạo SSL/TLS object, sử dụng method connect() để thiết lập kết nối an toàn với server Method connect() thiết lập kết nối TCP thơng thường, sau thiết lập kết nối SSL/TLS sử dụng SSL/TLS context socket tạo 25 Bước 5: Sử dụng SSL/TLS object để truyền liệu an toàn client server: ssl_sock.send(b'Hello, server!') data = ssl_sock.recv(1024) Sau thiết lập kết nối an toàn, sử dụng SSL/TLS object để truyền liệu an toàn client server cách sử dụng method send() recv() Bước 6: Đóng kết nối SSL/TLS socket: ssl_sock.close() s.close() SERVER: CLIENT 26 2.4.3 Kết đánh giá SERVER CLIENT Như vậy, client nhận phản hồi từ server chuỗi "Hello, world!" mã hóa truyền tải an tồn thông qua giao thức TLS 27 Giám sát phân tích gói tin qua Wireshark Dựa đoạn mã giao tiếp client server qua Wireshark, ta phân tích tính bảo mật việc sử dụng SSL/TLS ứng dụng socket programming sau: Truyền liệu mã hóa: Tất liệu truyền qua giao thức SSL/TLS mã hóa thuật tốn mã hóa đối xứng khơng đối xứng, giúp đảm bảo tính bảo mật thơng tin truyền tải Xác thực đối tác kết nối: Khi thực trình bắt tay SSL/TLS, client server trao đổi chứng SSL/TLS, đảm bảo đối tác kết nối bên tin cậy khơng phải hacker giả mạo Tính bí mật phiên: Mỗi phiên SSL/TLS tạo với khóa bí mật riêng biệt, giúp đảm bảo tính bảo mật giải mã thơng tin khóa Tính tồn vẹn liệu: SSL/TLS cung cấp tính kiểm tra tồn vẹn liệu, giúp phát thay đổi liệu truyền tải Qua đó, ta thấy việc sử dụng SSL/TLS ứng dụng socket programming cần thiết để đảm bảo tính bảo mật an toàn cho liệu truyền tải máy tính 28 KẾT LUẬN Trong q trình nghiên cứu phát triển ứng dụng, tìm hiểu khái niệm socket programming cách sử dụng để phát triển ứng dụng mạng Chúng ta phát triển ứng dụng chat đơn giản sử dụng socket programming kiểm tra tính ứng dụng cách thực kết nối mạng máy tính Chúng ta hiểu cách thiết kế ứng dụng mạng đơn giản, cách sử dụng chức socket Python để thiết lập kết nối gửi/nhận liệu qua mạng Ngồi ra, tìm hiểu vấn đề bảo mật socket programming cách giải chúng Đóng góp hướng phát triển cho nghiên cứu tương lai socket programming bảo mật mạng: Trong tương lai, nghiên cứu socket programming bảo mật mạng tập trung vào vấn đề sau:  Tăng cường bảo mật cho ứng dụng mạng: Để đảm bảo an toàn cho ứng dụng mạng, nhà nghiên cứu phát triển công nghệ để tăng cường bảo mật cho socket programming Ví dụ, mã hóa liệu trước gửi qua mạng, thiết lập chế xác thực để đảm bảo người phép truy cập vào ứng dụng  Nghiên cứu giao thức mới: Các nhà nghiên cứu tìm hiểu giao thức mạng để phát triển ứng dụng mạng tốt hiệu Ví dụ, giao thức mạng WebSocket sử dụng để tạo ứng dụng mạng thời gian thực  Tăng tốc độ truyền liệu qua mạng: Để cải thiện tốc độ truyền liệu qua mạng, nhà nghiên cứu tìm hiểu thuật tốn để tối ưu hóa kết nối mạng  Ứng dụng socket programming vào lĩnh vực khác: Socket programming không sử dụng để phát triển ứng dụng mạng, áp dụng vào lĩnh vực khác IoT, robotics, gaming, nhiều lĩnh vực khác Các nhà nghiên cứu tìm hiểu áp dụng socket programming vào lĩnh vực để phát triển ứng dụng hiệu  Tối ưu hóa hiệu suất socket programming: Vì socket programming đóng vai trị quan trọng việc phát triển ứng dụng mạng, việc tối ưu hóa hiệu suất socket programming giúp tăng hiệu giảm thời gian phát triển 29 ứng dụng Các nhà nghiên cứu tìm hiểu cách thức tối ưu hóa hiệu suất socket programming áp dụng chúng vào ứng dụng mạng  Tích hợp socket programming vào framework thư viện phát triển phần mềm: Để giúp cho nhà phát triển phần mềm dễ dàng sử dụng socket programming, nhà nghiên cứu tích hợp socket programming vào framework thư viện phát triển phần mềm Django, Flask, hay Node.js Tóm lại, socket programming lĩnh vực quan trọng việc phát triển ứng dụng mạng Tuy nhiên, để phát triển ứng dụng mạng an toàn hiệu hơn, cần có nghiên cứu tiếp tục socket programming bảo mật mạng Các đóng góp hướng phát triển đề cập giúp cho socket programming trở nên tốt phù hợp với nhu cầu phát triển ứng dụng mạng 30 31

Ngày đăng: 22/04/2023, 00:06

Xem thêm:

w