Phúc triển chiến CNTT3k21 bài tập lớn lập trình mã hóa giải mã

15 6 0
Phúc triển chiến CNTT3k21 bài tập lớn lập trình mã hóa giải mã

Đ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

TRƯỜNG ĐẠI HỌC HẢI PHÒNG KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN Đề Tài Lập Trình Mã hóa và giải mã bằng Python Giáo viên hướng dẫn GS Lê Đắc Nhường Nhóm sinh viên thực hiện Phúc,Triển,Chiến Lớp ĐHCNTT3.

TRƯỜNG ĐẠI HỌC HẢI PHỊNG KHOA CƠNG NGHỆ THƠNG TIN BÀI TẬP LỚN Đề Tài : Lập Trình Mã hóa giải mã Python Giáo viên hướng dẫn : GS Lê Đắc Nhường Nhóm sinh viên thực : Phúc,Triển,Chiến Lớp : ĐHCNTT3 Khóa : K21(2020 - 2024) HẢI PHỊNG, năm 2022 Mục lục Chương Mã hóa gì? 1.Mã hóa gì? Trong ngành mật mã học, mã hóa q trình dùng để biến thơng tin từ dạng sang dạng khác ngăn người khơng phận tiếp cận vào thơng tin Bản thân việc mã hóa khơng ngăn chặn việc thơng tin bị đánh cắp, có điều thơng tin lấy không xài được, không đọc hay hiểu làm biến dạng Ví dụ: bạn có thư tỏ tình muốn gửi cho đồng nghiệp ngồi phòng bên, ngặt phòng bên có nhiều người nhìn thấy thư trước gái bạn thích Ngay bạn giao thư tận tay cho cô có khả người bới móc lại thư mà đọc Vì để việc tỏ tình diễn an tồn bí mật, bạn mã hóa thư tỏ tình theo cách mà bạn cô gái hiểu, người khác nhìn vào thấy đống kí tự loằng ngoằng, rối rắm Mã hóa mang lại tính an tồn cao cho thông tin, đặc biệt thời đại Internet ngày nay, mà thông tin phải qua nhiều trạm trung chuyển trước đến đích Nếu khơng có mã hóa, khả thơng tin bạn bị xem trộm q trình truyền tải, lợi dụng để làm việc xấu hoàn toàn hữu Thử nghĩ đến việc bạn gửi tài liệu mật cho đồng nghiệp thành phố khác, khơng mã hóa tài liệu đối thủ cạnh tranh thấy kế hoạch kinh doanh bí mật cơng ty bạn làm bạn doanh thu, thị trường Về lý thuyết, thơng điệp mã hóa bị giải mã mà không cần biết thuật tốn khóa mã hóa (sẽ nói thêm bên dưới), vấn đề nguồn lực tính tốn cần thiết Có lúc, để giải mã tài liệu phải cần đến siêu máy tính chạy liên tục 24 ngày, ngày tuần, 365 ngày năm Khi thơng tin giải mã khơng cịn giá trị nên khơng đáng để bỏ cơng sức, nguồn lực vào chuyện Cịn biết thuật tốn khóa mã hóa người nhận nhanh chóng giải mã tích tắc khơng gặp trở ngại Các loại mã hóa liệu thơng dụng Hiện có biện pháp mã hố liệu thơng dụng: 2.1Mã hóa cổ điển Mã hóa cổ điển cách đơn giản nhất, tồn lại lâu giới không cần khóa bảo mật, cần người gửi người nhận biết thuật tốn Ví dụ: dùng thuật tốn đổi kí tự câu văn thành kí tự liền kề bảng chữ chữ “Tinh tế” biến thành “Ujoi uf” Người nhận nhận chữ “Ujoi uf” việc dịch ngược lại xong Tuy nhiên, giải pháp xem khơng an tồn, người thứ ba biết thuật tốn xem thơng tin khơng cịn bảo mật Việc giữ bí mật thuật tốn trở nên quan trọng, khơng phải giữ bí mật cách trọn vẹn Có khả người rị rỉ ra, có ngồi giải thuật tốn xem thua 2.2 Mã hóa chiều (hash) Phương pháp dùng để mã hóa thứ khơng cần dịch lại ngun gốc Ví dụ, bạn đăng nhập vào Tinh tế, mật mà bạn nhập chuyển thành chuỗi dài kí tự thứ gọi hash function (tạm dịch: hàm băm) Chuỗi lưu vào sở liệu, không lưu mật thơ bạn nhằm tăng tính bảo mật Lỡ hacker có trộm liệu thấy thứ FIiyXYB547bhvyuuUIbZ password thật bạn Mỗi lần bạn đăng nhập, hash function “băm” password thật bạn thành chuỗi kí tự so sánh với sở liệu, khớp đăng nhập tiếp, khơng báo lỗi Chúng ta khơng có nhu cầu dịch ngược chuỗi nói lại thành password thật để làm Nói thêm hash function, nhiệm vụ chuyển chuỗi có độ dài thành chuỗi kí tự có độ dài cố định Ví dụ, bạn quy định chuỗi kí tự sau “băm” dài 10 kí tự dù đầu vào bạn có chữ kết nhận ln 10 10 kí tự mà Đặc điểm hash function điều kiện, liệu đầu vào kết sau băm y hệt Nếu đổi chút xíu thơi, có kí tự nhỏ chuỗi kết khác hồn tồn Cũng mà người ta dùng hash function để kiểm tra tính tồn vẹn liệu Ví dụ, trước gửi tập tin Word cho người bạn dùng mã hóa chiều tạo chuỗi sau băm DFYUBUfyeufuefu Khi người bạn tải tập tin máy, băm nhận chuỗi DFYUBUfyeufuefu có nghĩa tập tin khơng bị can thiệp hacker, cịn kết khác có nghĩa q trình truyền tải bị lỗi làm phần liệu, tệ có xén bớt hay thêm vào thứ Hiện nay, hai thuật tốn hash function thường dùng MD5 SHA Nếu bạn tải tập tin mạng đơi thấy dịng chữ MD5 tác giả cung cấp, mục đích để bạn so sánh file tải với file gốc xem có bị lỗi khơng 2.3 Mã hóa đối xứng (symmetric key encryption) Chúng ta bắt đầu tìm hiểu việc bảo mật có dùng khóa Khóa gọi “key”, mấu chốt để thuật tốn nhìn vào mà biết đường mã hóa giải mã liệu Cũng giống cánh cửa nhà bạn, bạn có khóa bạn nhanh chóng vào trong, cịn khơng có khóa bạn đục cửa hay kêu thợ sửa khóa, tốn thời gian cơng sức Mỗi chìa khóa cho ổ khóa giới với đường rãnh khơng chìa giống chìa – key mã hóa tương tự Ở phương pháp mã hóa đối xứng, chìa khóa để mã hóa giải mã nên người ta gọi đối xứng, tiếng Anh symmetric Theo số tài liệu mã hóa đối xứng giải pháp sử dụng phổ biến Giả sử cần mã hóa tập tin để gửi cho bạn, quy trình sau: Mình sử dụng thuật tốn mã hóa, cộng với khóa để mã hóa file (cách tạo khóa tạm thời khơng bàn đến, chủ yếu dùng giải thuật ngẫu nhiên) Bằng cách đó, giao cho bạn khóa giống với mình, giao trước sau mã hóa tập tin Khi bạn nhận tập tin, bạn dùng khóa để giải mã tập tin gốc đọc Vấn đề đây, phải để chuyển khóa cho bạn cách an tồn Nếu khóa bị lộ xài thuật tốn nói để giải mã tập tin, tính bảo mật khơng Ngày người ta thường xài password khóa, cách bạn nhanh chóng nhắn cho người nhận đoạn password để xài làm khóa giải mã Các thuật tốn mã hóa thường thấy DES AES Trong đó, AES phổ biến giới đại dùng để thay cho DES vốn xuất từ năm 1977 Hiện nhiều quan phủ giới quy định tài liệu gửi qua mạng phải thuật toán AES Thuật toán AES dùng nhiều kích thước nhớ khác để mã hóa liệu, thường thấy 128-bit 256-bit, có số lên tới 512-bit 1024-bit Kích thước nhớ lớn khó phá mã hơn, bù lại việc giải mã mã hóa cần nhiều lực xử lý Hiện chế độ mã hóa mặc định Android 5.0 xài AES 128-bit Điều có nghĩa bạn chuẩn bị ghi liệu xuống nhớ máy hệ điều hành mã hóa tiến hành ghi Tương tự, OS chuẩn bị đọc liệu Android phải giải mã trước chuyển ngồi, hình ảnh được, tập tin nhạc chơi tài liệu đọc Bằng cách này, bạn có lỡ làm máy người lượm xem trộm liệu bạn (giả sử bạn lock hình) Nếu người có gỡ chip nhớ để đọc liệu mã hóa hết Tất nhiên, Android xài key dạng symmetric (tạo dựa vào password bạn), key cịn băm thêm lần SHA 256-bit để tăng tính an tồn Mình khơng có tài liệu Windows 10 OS X, chế mã hóa hai hệ điều hành tương tự, tức xài AES xài key tạo password kết hợp thêm SHA 2.4 Mã hóa bất đối xứng (public key encryption) Nếu trên, khóa mã hóa khóa giải mã giống với phương pháp bất đối xứng, hai khóa hồn tồn khác Để phân biệt hai khóa người ta gọi khóa mã hóa public key, cịn khóa giải mã private key Public, tên gợi ý, mang tính chất “cơng cộng” sử dụng để mã hóa liệu Tuy nhiên, người nằm tay private key có khả giải mã liệu để xem Quy trình mã hóa bất đối xứng sau: Bên nhận tạo cặp public + private key Người giữ lại private key cho riêng cất cẩn thận, cịn public key chuyển cho bên gửi (dưới hình thức email, copy qua USB, v.v) post lên mạng Bên gửi sử dụng public key để mã hóa liệu, sau gửi file mã hóa lại cho bên nhận Bên nhận lúc xài private key lưu để giải mã liệu sử dụng Đơn giản khơng? Một nhược điểm mã hóa bất đối xứng tốc độ giải mã chậm so với phương thức đối xứng; tức phải tốn nhiều lực xử lý CPU hơn, phải chờ lâu hơn, dẫn đến “chi phí” cao Khoảng thời gian lâu cịn tùy vào thuật tốn, cách thức mã hóa key Chính mà mã hóa file phương pháp bất đối xứng Thay vào đó, họ xài phương pháp bất đối xứng để mã hóa key dùng mã hóa đối xứng (hoặc tạo key cách tổng hợp public private key bên gửi nhận) Như nói trên, mã hóa đối xứng có nhược điểm key bị lộ coi xong đời, mã hóa ln key cho an tồn gửi key thoải mái Một giải mã bất đối xứng để key gốc tiến hành giải mã thêm lần phương pháp đối xứng để file ban đầu Một thuật tốn mã hóa thường xài RSA 3.Ứng dụng mã hóa Ứng dụng phương thức chủ yếu để tránh nhìn soi mói người tị mị tọc mạch, nói chung người mà bạn không muốn thông tin lộ ngồi HTTPS ví dụ, dùng thuật tốn TLS (lai đối xứng bất đối xứng) để mã hóa liệu bạn gửi thơng tin trình duyệt máy chủ Bằng cách này, kẻ tọc mạch với hi vọng đánh cắp liệu lúc liệu gửi khơng biết xác liệu (do chúng khơng nắm key tay) HTTPS dạng mã hóa thơng tin di chuyển, người ta cịn dùng mã hóa để đảm bảo an toàn cho nhiều thứ khác, từ email, thông tin di động, Bluetooth ứng dụng vào máy ATM Ngồi ra, người ta cịn mã hóa liệu nằm yên, ví dụ hình máy, tập tin lưu vơ ổ cứng sở liệu công ty Một USB Flash Drive có chức mã hóa mật Nhiều USB Flash Drive ngày cung cấp phần mềm AES kèm để bạn mã hóa liệu thơng qua mật (password), lỡ có làm rớt USB khơng lo bị lấy trộm liệu chứa bên Ngay kẻ xấu cố gắng gỡ chip ra, gắn vào phần cứng khác để đọc thấy liệu khơng cịn đọc mà thơi Chúng ta hay nghe đến “chữ kí điện tử”, thứ mà doanh nghiệp hay sử dụng để đính kèm vào tài liệu để chứng minh họ người soạn thảo tài liệu khác giả mạo “Chữ kí” tạo dựa phương pháp bảo mật nói Thời sơ khai người ta xài RSA, sau có thứ tiên tiến hơn, an toàn phát triển thêm nhanh chóng phổ biến tồn giới Tất nhiên, khơng có an tồn tuyệt đối 100% Mã hóa RSA đơi bị phá mã sử dụng máy tính đủ mạnh chạy thời gian đủ lâu Mã hóa HTTPS có cách để khai thác lỗ hổng chế ăn cắp liệu Chính mà có nhiều vụ công xảy giới công nghệ ngày Một số người bày tỏ lo ngại mã hóa khiến quan phủ gặp khó khăn việc chống khủng bố theo dõi thơng tin tình báo Hiện cịn nhiều luồng ý kiến trái chiều điều này, theo CEO Tim Cook Apple bạn cố tình để lại “lỗ hổng” cho quan phủ khơng có đảm bảo “lỗ hổng” khơng bị khai thác người xấu Do đó, cách tốt cố gắng hoàn thiện hệ thống không để lại “lỗ hổng” cách cố ý cho Việc mở “lỗ hổng” khơng phải cách đắn để giải vấn đề khủng bố Chương Mã hóa liệu Python Đầu tiên, cần cài đặt thư viện mật mã: pip3 install cryptography Từ thư viện mật mã, cần nhập Fernet bắt đầu tạo khóa - khóa cần thiết để mã hóa / giải mã đối xứng Tạo khóa Để tạo khóa, gọi generate_key() phương pháp: from cryptography.fernet import Fernet def generate_key(): ''' Generates a key and save it into a file ''' key = Fernet.generate_key() with open('secret.key', 'wb') as key_file: key_file.write(key) Chúng ta cần thực phương thức lần để tạo khóa Nạp chìa khóa Khi chúng tơi tạo khóa, chúng tơi cần tải khóa phương thức để mã hóa liệu: Def ''' Loads the key named `secret.key` ''' return open('secret.key', 'rb').read() load_key(): from the current directory Mã hóa tin nhắn Bây giờ, sẵn sàng để mã hóa tin nhắn Đây quy trình ba bước: • - mã hóa tin nhắn • - khởi tạo lớp Fernet • - chuyển thơng điệp mã hóa tới encrypt()phương pháp mã hóa tin nhắn: message = 'message I want to encrypt'.encode() khởi tạo lớp Fernet: f = Fernet(key) mã hóa tin nhắn: encrypted_message = f.encrypt(message) Ví dụ mã đầy đủ Dưới ví dụ hoạt động đầy đủ mã hóa thư python: From cryptography.fernet import Fernet def generate_key(): ''' Generates a key and save it into a file ''' key = Fernet.generate_key() with open('secret.key', 'wb') as key_file: key_file.write(key) def load_key(): ''' Load the previously generated key ''' return open('secret.key', 'rb').read() def encrypt_message(message): ''' Encrypts a message ''' key = load_key() encoded_message = message.encode() f = Fernet(key) encrypted_message = f.encrypt(encoded_message) print(encrypted_message) if name == ' main ': encrypt_message('encrypt this message') Đầu ra: b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfztcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4=' Giải mã liệu Python Để giải mã tin nhắn, cần gọi decrypt() phương thức từ Fernet thư viện Hãy nhớ rằng, cần phải tải khóa, khóa cần thiết để giải mã thơng điệp from cryptography.fernet import Fernet def load_key(): ''' Load the previously generated key ''' return open('secret.key', 'rb').read() def decrypt_message(encrypted_message): ''' Decrypts an encrypted message ''' key = load_key() f = Fernet(key) decrypted_message = f.decrypt(encrypted_message) print(decrypted_message.decode()) if name == ' main ': decrypt_message(b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfztcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4=') Đầu ra: encrypt this message KẾT LUẬN: Do khả trình độ cịn hạn chế, thời gian thực tập hạn hẹp, kinh nghiệm thực tế thân cịn có hạn nên báo cáo chúng em khơng thể tránh khỏi sai sót định Vì em mong góp ý kịp thời thầy GS Lê Đắc Nhường, để báo cáo nhóm chúng em hoàn thiện đầy đủ Một lần nhóm chúng em xin cảm ơn Thầy GS Lê Đắc Nhường mơn Lập Trình PyThon giúp nhóm chúng em hồn thành báo cáo thực tập Chúng em chân thành cảm ơn! ... phương pháp mã hóa đối xứng, chìa khóa để mã hóa giải mã nên người ta gọi đối xứng, tiếng Anh symmetric Theo số tài liệu mã hóa đối xứng giải pháp sử dụng phổ biến Giả sử cần mã hóa tập tin để... trước sau mã hóa tập tin Khi bạn nhận tập tin, bạn dùng khóa để giải mã tập tin gốc đọc Vấn đề đây, phải để chuyển khóa cho bạn cách an tồn Nếu khóa bị lộ xài thuật tốn nói để giải mã tập tin,... 2.4 Mã hóa bất đối xứng (public key encryption) Nếu trên, khóa mã hóa khóa giải mã giống với phương pháp bất đối xứng, hai khóa hồn tồn khác Để phân biệt hai khóa người ta gọi khóa mã hóa public

Ngày đăng: 08/12/2022, 22:44

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan