CHƯƠNG 1: GIỚI THIỆU VỀ ĐỀ TÀI1.Khái niệmBlowfish là một thuật toán mã hóa khối đối xứng được Bruce Schneier thiết kếvào năm 1993 như một giải pháp thay thế cho Data Encryption Standard
Trang 1BỘ GIAO THÔNG VẬN TẢITRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM VIỆN ĐÀO TẠO CHẤT LƯỢNG CAO KHOA CÔNG NGHỆ THÔNG TIN
Hải Phòng, tháng 11/2024
Trang 2MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU VỀ ĐỀ TÀI 3
1.Khái niệm 3
2.Mục tiêu nghiên cứu của đề tài 3
3.Ưu điểm và nhược điểm 4
3.1 Ưu điểm của chế độ ECB: 4
3.2 Nhược điểm của chế độ ECB: 5
3.3 Khi nào nên (và không nên) sử dụng ECB: 6
4.Ứng dụng của Blowfish 6
CHƯƠNG 2: CHI TIẾT VỀ THUẬT TOÁN 8
1 Nguyên tắc hoạt động của Blowfish 8
2 Cơ chế khóa và cách xử lý trong Blowfish 9
CHƯƠNG 3: CÀI ĐẶT VÀ THỬ NGHIỆM 11
1.Giới thiệu ngôn ngữ và phần mềm sử dụng 11
1.1.Ngôn ngữ Python 11
1.2.Phần mềm sử dụng 11
1.3.Các thư viện cần thiết 12
2 Cài đặt chương trình 14
3 Kết quả 26
Trang 3CHƯƠNG 1: GIỚI THIỆU VỀ ĐỀ TÀI1.Khái niệm
Blowfish là một thuật toán mã hóa khối đối xứng được Bruce Schneier thiết kếvào năm 1993 như một giải pháp thay thế cho Data Encryption Standard (DES).Thuộc nhóm các thuật toán mã hóa khóa bí mật, Blowfish sử dụng cùng một khóacho quá trình mã hóa và giải mã dữ liệu, đảm bảo tính bí mật và tính toàn vẹn củathông tin
Thuật toán Blowfish hoạt động dựa trên cấu trúc Feistel Network, bao gồm 16vòng lặp liên tục Trong cấu trúc này, dữ liệu được chia thành hai phần bằng nhau, vàcác phép toán như XOR, thay thế, hoán vị được thực hiện qua tổ hợp các hộp thay thế(S-boxes) và mảng P-array Sự kết hợp giữa mảng thay thế và hoán vị giúp đảm bảotính bất định và khả năng chống lại nhiều loại tấn công
Blowfish được đánh giá cao nhờ khả năng linh hoạt trong việc chọn độ dàikhóa từ 32-bit đến 448-bit, giúp đáp ứng nhiều nhu cầu bảo mật khác nhau Mỗi khối
dữ liệu được mã hóa theo kích thước 64-bit, phù hợp cho các hệ thống có tài nguyêngiới hạn
Một trong những điểm yếu của Blowfish là quá trình thiết lập khóa ban đầumất nhiều thời gian, khiến nó không thích hợp cho các ứng dụng cần thay đổi khóaliên tục Tuy nhiên, với các ứng dụng cố định, Blowfish cung cấp hiệu quả xử lý cao
và đồng thời đảm bảo tính bí mật an toàn
Blowfish có thể kết hợp với các chế độ mã hóa để để tăng cường bảo mật :
- Electronic Codebook (ECB)
- Cipher Block Chaining (CBC)
Trang 42.Mục tiêu nghiên cứu của đề tài
Ứng dụng thực tiễn:
Tìm hiểu các tình huống thực tế mà Blowfish được sử dụng, chẳng hạn trong
hệ thống nhúng, thiết bị IoT, bảo mật giao tiếp, và mã hóa cơ sở dữ liệu
Nghiên cứu tính ứng dụng của chế độ ECB trong các ngữ cảnh cụ thể, đồngthời so sánh với các chế độ mã hóa khác như CBC, CTR
Đánh giá hiệu năng:
Đánh giá tốc độ thực thi và mức độ hiệu quả của Blowfish khi mã hóa dữ liệulớn hoặc nhiều khối dữ liệu song song
So sánh hiệu năng của Blowfish với các thuật toán khác trong điều kiện xử lýthực tế
Nghiên cứu bảo mật:
Tìm hiểu về các lỗ hổng bảo mật tiềm ẩn của Blowfish, đặc biệt khi sử dụngchế độ ECB, và đề xuất cách khắc phục
Đánh giá khả năng chống lại các cuộc tấn công như phân tích mẫu (patternanalysis) hoặc brute force
Mục tiêu chung của bài tập lớn này là tìm hiểu về hệ mã Blowfish và các ứngdụng, hiểu rõ về cơ chế hoạt động, cách thức thực hiện mã hóa và giải mã với xâu ký
tự và file dữ liệu , cũng như ứng dụng thực tế của nó trong bảo mật thông tin
3.Ưu điểm và nhược điểm của ECB
Chế độ Electronic Codebook (ECB) là một trong những chế độ vận hành cơ bản của các thuật toán mã hóa khối như Blowfish Dưới đây là thông tin về ưu
điểm và nhược điểm của chế độ này:
Trang 53.1 Ưu điểm của chế độ ECB:
Đơn giản trong triển khai:
ECB là chế độ mã hóa dễ hiểu và dễ thực hiện nhất trong các chế độ mã hóakhối Mỗi khối dữ liệu được mã hóa độc lập mà không cần quan tâm đến các khốikhác
Hiệu suất cao:
Do không cần phụ thuộc vào các khối dữ liệu trước hoặc sau, ECB cho phép
mã hóa các khối song song, tăng hiệu suất trong các hệ thống có khả năng xử lý đaluồng
Phù hợp cho các dữ liệu tĩnh:
ECB hiệu quả khi sử dụng cho dữ liệu có kích thước cố định và không nhạycảm, chẳng hạn như mã hóa khóa bí mật hoặc các dữ liệu không chứa tính trùng lặp
Không yêu cầu lưu trữ trạng thái:
ECB không cần sử dụng các tham số bổ sung như IV (Initialization Vector), do
đó giảm yêu cầu lưu trữ thông tin thêm
3.2 Nhược điểm của chế độ ECB:
Dễ bị phân tích mô hình dữ liệu:
Do ECB mã hóa mỗi khối dữ liệu riêng lẻ và độc lập, các khối giống nhautrong văn bản gốc sẽ được mã hóa thành các khối giống nhau trong văn bản mã hóa.Điều này tạo điều kiện cho việc phân tích và nhận diện mô hình dữ liệu
Không đảm bảo tính bảo mật cho dữ liệu lặp:
Nếu dữ liệu đầu vào có các khối giống nhau (ví dụ: hình ảnh với các vùng màuđồng nhất), cấu trúc của dữ liệu ban đầu có thể bị lộ khi xem văn bản mã hóa, dẫn đến
rò rỉ thông tin
Không phù hợp cho dữ liệu dài:
Với các dữ liệu lớn hoặc chứa tính lặp lại, ECB không cung cấp mức độ bảomật cao, vì kẻ tấn công có thể lợi dụng sự trùng lặp trong mã hóa để tái tạo thông tin
Không có tính liên kết giữa các khối:
Trang 6ECB không tạo mối quan hệ giữa các khối dữ liệu, khiến nó dễ bị tấn cônghoán vị (replay attack) nếu dữ liệu bị sao chép hoặc tráo đổi.
3.3 Khi nào nên (và không nên) sử dụng ECB:
Bảo mật cao hơn ECB:
CBC khắc phục nhược điểm của ECB bằng cách sử dụng một vector khởi tạo (IV) Mỗi khối dữ liệu được mã hóa phụ thuộc vào khối
trước đó và IV, giúp giảm nguy cơ bị phân tích mẫu
Thích hợp cho dữ liệu lớn và nhạy cảm:
Chế độ này bảo mật hơn đối với dữ liệu có tính lặp lại, như văn bản, hình ảnh hoặc video, vì nó phá vỡ cấu trúc trực quan của dữ liệu
Khả năng chống lại tấn công hoán vị (replay attack):
Do tính liên kết giữa các khối, việc thay đổi hoặc tráo đổi một khối dữliệu sẽ phá vỡ toàn bộ quá trình giải mã, giúp ngăn chặn các cuộc tấn công dạng này
Nhược điểm của chế độ CBC
Phụ thuộc vào IV:
Trang 7IV phải là giá trị ngẫu nhiên và không được tái sử dụng để đảm bảo antoàn Nếu IV bị lộ hoặc không đủ ngẫu nhiên, bảo mật của hệ thống sẽ
bị suy giảm
Không hỗ trợ mã hóa song song:
Vì mỗi khối mã hóa phụ thuộc vào khối trước đó, CBC không thể xử
lý các khối dữ liệu song song, làm giảm hiệu suất so với ECB trong các hệ thống yêu cầu tốc độ cao
Nhạy cảm với lỗi:
Nếu một khối bị lỗi trong quá trình truyền tải, lỗi này sẽ lan sang các khối tiếp theo khi giải mã, gây mất dữ liệu lớn hơn
Trang 8CHƯƠNG 2: CHI TIẾT VỀ BLOWFISH1.Giới thiệu hệ mã blowfish
Blowfish là một thuật toán mã hóa khối (block cipher) được thiết kế bởi BruceSchneier vào năm 1993 với mục đích thay thế các thuật toán mã hóa cũ như DES(Data Encryption Standard), vốn đã không còn đủ mạnh mẽ để đối phó với các yêucầu bảo mật hiện đại Mặc dù DES đã được sử dụng rộng rãi trong các hệ thống bảomật trong suốt những năm 1970 và 1980, nhưng với sự phát triển của công nghệ máytính và sự xuất hiện của các phương pháp tấn công mới, DES đã trở nên lạc hậu, đặcbiệt là do khóa mã hóa của nó chỉ có độ dài 56 bit, dễ dàng bị tấn công bằng cácphương pháp như brute-force
Với sự phát triển nhanh chóng của công nghệ và yêu cầu bảo mật ngày càng cao,Schneier nhận thấy cần có một thuật toán mã hóa có thể đáp ứng được các nhu cầunày Blowfish được phát triển để mang lại một giải pháp thay thế an toàn, nhanhchóng và có khả năng điều chỉnh độ dài khóa, với mục đích cải thiện độ bảo mật vàhiệu suất so với các thuật toán mã hóa trước đó
Blowfish là một thuật toán mã hóa đối xứng, nghĩa là cùng một khóa được sử dụng để
mã hóa và giải mã dữ liệu Điều này giúp nó dễ triển khai và nhanh chóng trong các
hệ thống bảo mật Một trong những điểm đặc biệt của Blowfish là khả năng thay đổi
độ dài khóa, từ 32 bit đến 448 bit, cho phép người dùng tùy chỉnh mức độ bảo mậttheo nhu cầu Việc thay đổi độ dài khóa này giúp Blowfish linh hoạt trong nhiều ứngdụng khác nhau và có thể cung cấp mức độ bảo mật cao hơn khi cần thiết
Từ khi được công bố, Blowfish đã nhanh chóng nhận được sự chào đón của cộngđồng bảo mật nhờ vào thiết kế đơn giản, hiệu quả và khả năng hoạt động tốt trên các
hệ thống phần cứng và phần mềm Thuật toán này đã được sử dụng rộng rãi trong cácứng dụng bảo mật, từ mã hóa dữ liệu trên đĩa cứng đến các giao thức truyền thông antoàn như VPN (Virtual Private Network) và SSL/TLS, bảo vệ thông tin khỏi các mối
Trang 9đe dọa từ bên ngoài Thêm vào đó, Blowfish được phát hành dưới dạng mã nguồn
mở, không yêu cầu giấy phép, giúp nó trở thành lựa chọn phổ biến cho các nhà pháttriển và các tổ chức bảo mật
2.Cấu trúc thuật toán Blowfish
Blowfish là một thuật toán mã hóa khối (block cipher) sử dụng cấu trúc Feistel Nó
mã hóa dữ liệu theo từng khối 64 bit và có khả năng sử dụng khóa với độ dài linh hoạt từ 32 bit đến 448 bit Thuật toán này được thiết kế để có thể xử lý nhanh chóng và bảo mật cao, phù hợp với các hệ thống có tài nguyên hạn chế
Trong phần này, chúng ta sẽ đi sâu vào cấu trúc và cách thức hoạt động của thuật toán Blowfish, bao gồm quá trình tạo ra các bảng tra cứu (P-Box và S-Box), cách Blowfish xử lý dữ liệu trong các vòng mã hóa, và các bước trong quy trình mã hóa
và giải mã
3.Phân tích thuật toán Blowfish
Blowfish là thuật toán mã hóa đối xứng, có nghĩa là cùng một khóa được sử dụng
để mã hóa và giải mã dữ liệu Thuật toán này chia dữ liệu cần mã hóa thành các khối 64 bit, và thực hiện mã hóa theo cấu trúc Feistel Cấu trúc Feistel là một kiểu cấu trúc mạng trong đó mỗi vòng mã hóa chỉ thay đổi một nửa của dữ liệu đầu vào,trong khi nửa còn lại giữ nguyên và được kết hợp lại với nửa đã thay đổi
Blowfish có tổng cộng 16 vòng mã hóa, mỗi vòng được thiết kế để làm xáo trộn vàthay đổi dữ liệu đầu vào theo một cách phức tạp, giúp đảm bảo tính bảo mật của thuật toán Sau 16 vòng, thuật toán hoàn tất quá trình mã hóa hoặc giải mã và trả
về kết quả cuối cùng
Trang 103.1 Cách thức hoạt động và vòng lặp của Blowfish
Quá trình mã hóa và giải mã trong Blowfish đều tuân theo một quy trình chung, bao gồm các bước chia dữ liệu, sử dụng bảng tra cứu và thực hiện các phép toán biến đổi qua nhiều vòng lặp
Quá trình mã hóa Blowfish:
1 Chia dữ liệu :
Dữ liệu cần mã hóa có kích thước 64 bit sẽ được chia thành hai phần 32 bit: phần trái (L) và phần phải (R) Mỗi phần này sẽ được xử lý độc lập trong các vòng mã hóa
L0: Nửa trái (32 bit) của dữ liệu
R0: Nửa phải (32 bit) của dữ liệu
2 Vòng mã hóa:
Blowfish sử dụng 16 vòng mã hóa Trong mỗi vòng, các phép biến đổi phức tạp được thực hiện trên nửa phải (R) của dữ liệu, sau đó kết hợp với nửa trái (L) của
dữ liệu qua phép toán XOR Quy trình mã hóa trong mỗi vòng có các bước sau:
Bước 1: Áp dụng một hàm f vào nửa phải của dữ liệu Hàm f này kết hợp các bảng S-Box và giá trị từ P-Box để tạo ra một giá trị mới
Bước 2: Kết quả của hàm f được XOR với nửa trái (L)
Bước 3: Hoán đổi nửa trái và nửa phải cho vòng tiếp theo
Sau mỗi vòng, nửa trái và nửa phải của dữ liệu sẽ được thay đổi và hoán đổi, và các giá trị từ bảng P-Box và S-Box sẽ được áp dụng vào từng vòng để thay đổi dữ liệu
3 Kết thúc mã hóa:
Trang 11Sau 16 vòng mã hóa, nửa trái và nửa phải của dữ liệu được kết hợp lại để tạo thànhkhối dữ liệu mã hóa cuối cùng Đặc biệt, trong vòng cuối cùng, không cần hoán đổinửa trái và nửa phải nữa, kết quả là dữ liệu mã hóa hoàn chỉnh.
Quá trình giải mã Blowfish:
Quá trình giải mã trong Blowfish tương tự như mã hóa, nhưng các bảng P-Box và S-Box được sử dụng theo thứ tự ngược lại Vì Blowfish sử dụng cấu trúc Feistel, quá trình giải mã chỉ cần đảo ngược thứ tự các bước trong các vòng mã hóa mà không cần thay đổi các phép toán hay cấu trúc của thuật toán Đây là một ưu điểm lớn của cấu trúc Feistel, vì giúp giảm bớt việc phải thiết kế lại thuật toán cho quá trình giải mã
3 Kết thúc giải mã:
Sau khi hoàn thành 16 vòng giải mã, nửa trái và nửa phải của dữ liệu được kết hợp lại để tạo ra dữ liệu giải mã cuối cùng
3.2.Khóa và bảng tra cứu trong hệ mã Blowfish
Một trong những yếu tố quan trọng làm nên tính bảo mật của Blowfish là cách thức
sử dụng khóa và bảng tra cứu Thuật toán Blowfish sử dụng hai loại bảng tra cứu chính: P-Box và S-Box, được tạo ra từ khóa đầu vào
1 P-Box (bảng P):
Trang 12 P-Box là một bảng gồm 18 giá trị 32 bit Bảng này được khởi tạo từ khóa người dùng và tham gia trực tiếp vào các phép toán trong mỗi vòng mã hóa Các giá trị trong P-Box được sử dụng trong mỗi vòng để thực hiện phép biếnđổi và thay thế dữ liệu.
Khóa được chia thành nhiều đoạn nhỏ và sử dụng để khởi tạo P-Box Sau
đó, các giá trị trong P-Box được cập nhật qua các vòng mã hóa để tạo ra các thay đổi trong dữ liệu
Mỗi giá trị P trong P-Box tham gia vào các phép toán trong mỗi vòng, giúp thay đổi nửa phải của dữ liệu trong quá trình mã hóa và giải mã
2 S-Box (bảng S):
Blowfish sử dụng 4 bảng S-Box, mỗi bảng chứa 256 giá trị 32 bit Các bảng S-Box này được sử dụng trong quá trình tính toán hàm f, thay thế các phần dữ liệu trong nửa phải (R) của khối dữ liệu
o Mỗi bảng S-Box tham gia vào các phép thay thế và hoán đổi trong các vòng mã hóa Các giá trị trong S-Box được tạo ra từ khóa và cóvai trò quan trọng trong việc tăng cường độ phức tạp của phép biếnđổi
3 Khóa
Khóa đầu vào có thể có độ dài từ 32 bit đến 448 bit Khóa này được sử dụng để khởi tạo các bảng P-Box và S-Box Blowfish yêu cầu quá trình khởi tạo khóa diễn ra trước khi thực hiện mã hóa hoặc giải mã
o Quá trình khởi tạo khóa sẽ tạo ra các bảng P-Box và S-Box từ khóaban đầu Sau khi các bảng tra cứu này được tạo ra, chúng sẽ được
sử dụng trong các vòng mã hóa để thực hiện phép thay thế và biến đổi dữ liệu
Trang 13o Việc thay đổi khóa sẽ thay đổi các bảng tra cứu, từ đó làm thay đổikết quả mã hóa hoặc giải mã.
3.3 Ưu và nhược điểm của Blowfish
Blowfish là một thuật toán mã hóa khối nổi bật với các đặc điểm thiết kế đơn giản
và hiệu quả, được sử dụng rộng rãi trong nhiều ứng dụng bảo mật Tuy nhiên, như bất kỳ thuật toán mã hóa nào, Blowfish cũng có những ưu điểm và nhược điểm riêng, làm cho nó phù hợp với một số ứng dụng nhất định nhưng không phù hợp với những ứng dụng khác Phần này sẽ phân tích chi tiết về các ưu và nhược điểm của Blowfish, từ đó giúp hiểu rõ hơn về khả năng và giới hạn của thuật toán này
Ưu điểm của Blowfish
Blowfish được thiết kế để hoạt động nhanh chóng và hiệu quả, đặc biệt là trong các
hệ thống phần cứng và phần mềm có tài nguyên hạn chế Thuật toán này có cấu trúc Feistel đơn giản, với các phép toán thay thế và biến đổi ít phức tạp, giúp giảm tải tính toán và nâng cao hiệu suất mã hóa, đặc biệt trong các ứng dụng yêu cầu tốc
độ cao
1 Tính linh hoạt với độ dài khóa:
Một trong những ưu điểm lớn của Blowfish là khả năng sử dụng khóa với độdài linh hoạt, từ 32 bit đến 448 bit Điều này cho phép người dùng tùy chỉnh mức độ bảo mật của thuật toán theo nhu cầu của ứng dụng cụ thể Khóa dài hơn sẽ cung cấp mức độ bảo mật cao hơn, giúp Blowfish có thể sử dụng cho các yêu cầu bảo mật khác nhau
2 Khả năng tương thích cao:
Blowfish có thể được triển khai trên nhiều hệ thống khác nhau, từ các thiết
bị phần cứng hạn chế đến các ứng dụng phần mềm phức tạp Các tính toán trong Blowfish chủ yếu dựa vào các phép toán bit-level đơn giản và không
Trang 14đòi hỏi quá nhiều tài nguyên, giúp nó có thể hoạt động tốt trên hầu hết các nền tảng.
3 Mã nguồn mở và miễn phí bản quyền:
Blowfish được phát hành dưới dạng mã nguồn mở và miễn phí bản quyền, không yêu cầu giấy phép, điều này đã giúp nó trở thành một lựa chọn phổ biến trong các ứng dụng bảo mật Người sử dụng có thể tự do sử dụng, chỉnhsửa và triển khai Blowfish mà không gặp phải các rào cản về bản quyền hay chi phí
4 Bảo mật cao:
Với cấu trúc Feistel và các bảng tra cứu (P-Box và S-Box), Blowfish có khả năng chống lại các cuộc tấn công phổ biến như tấn công brute-force và tấn công dựa trên phân tích tần suất Sự kết hợp giữa các vòng lặp và việc sử dụng khóa dài giúp đảm bảo tính bảo mật cao, miễn là khóa không bị lộ
Nhược điểm của Blowfish
1 Kích thước khối mã hóa cố định (64 bit):
Blowfish mã hóa dữ liệu theo các khối 64 bit Mặc dù đây là một kích thước khối hợp lý vào thời điểm Blowfish được phát hành, nhưng hiện nay, nhiều thuật toán mã hóa mới như AES đã sử dụng khối 128 bit Việc
sử dụng khối 64 bit khiến Blowfish kém hiệu quả hơn khi xử lý các khối
dữ liệu lớn hoặc trong các hệ thống yêu cầu mã hóa khối dài hơn để tăng cường độ bảo mật và hiệu suất
2 Khả năng không đáp ứng với các chuẩn bảo mật hiện đại:
Mặc dù Blowfish được đánh giá là an toàn trong những năm 1990, hiện nay, nó đã có những hạn chế khi đối mặt với các chuẩn bảo mật hiện đại Với sự phát triển của công nghệ tính toán và các phương pháp tấn công mới, Blowfish có thể không đủ mạnh để bảo vệ dữ liệu trước các cuộc
Trang 15tấn công mạnh mẽ như tấn công dựa trên phân tích thời gian hay tấn côngside-channel.
3 Hiệu suất giảm khi sử dụng khóa dài:
Một nhược điểm khác của Blowfish là hiệu suất của nó có thể giảm khi
sử dụng các khóa dài hơn (tối đa 448 bit) Mặc dù Blowfish hỗ trợ khóa
có độ dài linh hoạt, nhưng việc sử dụng khóa dài sẽ yêu cầu nhiều vòng lặp hơn trong quá trình khởi tạo bảng tra cứu (P-Box và S-Box) và có thể làm giảm hiệu suất mã hóa và giải mã
5 Khó khăn trong việc quản lý khóa:
Mặc dù Blowfish hỗ trợ khóa dài và có tính linh hoạt trong việc thay đổi
độ dài khóa, việc quản lý khóa trong các ứng dụng phức tạp có thể trở thành một vấn đề Với số lượng vòng lặp và bảng tra cứu lớn, việc bảo vệ
và lưu trữ khóa một cách an toàn là rất quan trọng, vì nếu khóa bị lộ, bảo mật của thuật toán sẽ bị phá vỡ
6 Không còn được ưa chuộng trong các ứng dụng mới:
Với sự xuất hiện của các thuật toán mã hóa mạnh mẽ hơn như AES, Blowfish không còn được ưa chuộng trong các ứng dụng mã hóa mới AES với kích thước khối 128 bit và khả năng hỗ trợ các độ dài khóa từ
Trang 16128 bit đến 256 bit hiện nay đã trở thành chuẩn mã hóa chính, do tính bảomật cao và hiệu suất tốt.
4 So sánh hệ mã Blowfish với các hệ mã khác
Blowfish là một thuật toán mã hóa khối phổ biến và được sử dụng rộng rãi trong nhiều ứng dụng bảo mật Tuy nhiên, trong lĩnh vực mã hóa, còn có nhiều thuật toán khác như AES, DES và các hệ mã hiện đại khác, mỗi thuật toán có đặc điểm riêng, với các ưu và nhược điểm khác nhau Dưới đây là sự so sánh giữa Blowfish
và một số hệ mã phổ biến hiện nay
4.1 Blowfish và AES
AES (Advanced Encryption Standard) là thuật toán mã hóa khối tiêu chuẩn hiện
nay được sử dụng rộng rãi trong các ứng dụng bảo mật Sự so sánh giữa Blowfish
và AES có thể thấy rõ ở các khía cạnh sau:
1 Kích thước khóa và bảo mật:
Blowfish hỗ trợ khóa dài từ 32 bit đến 448 bit, cho phép linh hoạt trong
việc điều chỉnh độ bảo mật Tuy nhiên, khi sử dụng khóa ngắn, Blowfish
có thể dễ bị tấn công, đặc biệt là các khóa dưới 128 bit
AES sử dụng các khóa cố định với ba độ dài: 128 bit, 192 bit và 256 bit
AES đã được kiểm tra và chứng minh là có độ bảo mật cực kỳ cao, đặc biệt khi sử dụng khóa 256 bit, và hiện nay là thuật toán được sử dụng rộng rãi trong các ứng dụng bảo mật quan trọng
2 Kích thước khối mã hóa:
Blowfish mã hóa theo các khối 64 bit.
AES mã hóa theo các khối 128 bit, gấp đôi kích thước của Blowfish
Điều này giúp AES xử lý dữ liệu lớn hiệu quả hơn và cũng có thể cung cấp mức độ bảo mật cao hơn nhờ vào kích thước khối lớn hơn
Trang 173 Hiệu suất:
Blowfish có hiệu suất khá tốt trong các hệ thống phần cứng và phần mềm
với tài nguyên hạn chế Thuật toán này nhanh hơn AES trong các hệ thống có bộ nhớ hoặc tài nguyên tính toán thấp, đặc biệt khi xử lý các khối dữ liệu nhỏ
AES được tối ưu hóa rất tốt cho cả phần cứng và phần mềm Trong các
hệ thống hiện đại, AES có hiệu suất cao hơn và thường được hỗ trợ phần cứng, điều này giúp tăng tốc độ mã hóa và giải mã
4 Khả năng chống tấn công:
Blowfish có khả năng chống lại nhiều dạng tấn công, nhưng khi khóa quá
ngắn hoặc hệ thống sử dụng lâu dài, tính bảo mật của nó có thể giảm đi
AES được đánh giá là một trong những thuật toán mã hóa an toàn nhất
hiện nay Nó đã được kiểm tra kỹ lưỡng và chứng minh là chống lại các cuộc tấn công hiện đại như tấn công phân tích thời gian hay brute-force
5 Ứng dụng:
Blowfish thường được sử dụng trong các ứng dụng cần tốc độ mã hóa
nhanh và bảo mật ở mức vừa phải, như trong các giao thức VPN hoặc lưutrữ an toàn
AES được sử dụng trong các ứng dụng bảo mật yêu cầu mức độ bảo mật
rất cao, như trong các tiêu chuẩn quốc gia (FIPS 140-2), mã hóa
SSL/TLS, giao dịch tài chính trực tuyến và bảo vệ thông tin trong các thiết bị di động
Kết luận: AES vượt trội hơn Blowfish về bảo mật và hiệu suất trong các ứng dụng
hiện đại, đặc biệt là khi yêu cầu bảo mật cao và xử lý dữ liệu khối lớn Tuy nhiên, Blowfish vẫn là một lựa chọn hợp lý trong những ứng dụng yêu cầu mã hóa nhanh
và tài nguyên phần cứng hạn chế
Trang 184.2 Blowfish và DES
DES (Data Encryption Standard) là một thuật toán mã hóa khối cổ điển được sử
dụng rộng rãi từ những năm 1970, trước khi bị thay thế bởi các thuật toán mạnh mẽhơn như AES Sự so sánh giữa Blowfish và DES có thể nhìn thấy ở các điểm sau:
1 Kích thước khóa và bảo mật:
Blowfish sử dụng khóa có độ dài từ 32 bit đến 448 bit, giúp cung cấp mức
độ bảo mật linh hoạt, và có thể chống lại các tấn công brute-force nếu khóa
đủ dài
DES sử dụng khóa cố định dài 56 bit, một kích thước khóa đã được chứng
minh là không đủ mạnh trong môi trường hiện đại Với công nghệ tính toán ngày nay, DES dễ dàng bị phá vỡ bởi các cuộc tấn công brute-force
2 Kích thước khối mã hóa:
Blowfish mã hóa theo khối 64 bit.
DES cũng mã hóa theo khối 64 bit Mặc dù kích thước khối mã hóa giống
nhau, nhưng Blowfish có khả năng bảo mật tốt hơn nhiều nhờ vào khóa dài hơn và cấu trúc mã hóa phức tạp hơn
3 Cấu trúc và vòng lặp:
Blowfish sử dụng cấu trúc Feistel với 16 vòng lặp, giúp tăng độ phức tạp và
bảo mật của thuật toán
DES cũng sử dụng cấu trúc Feistel với 16 vòng lặp, nhưng với khóa ngắn và
các phép toán đơn giản hơn, DES dễ bị tấn công hơn so với Blowfish
4 Hiệu suất:
Blowfish có hiệu suất tốt hơn DES, đặc biệt trong các ứng dụng phần cứng
và phần mềm với tài nguyên hạn chế
DES có thể chậm hơn Blowfish trong nhiều tình huống, và đã bị loại bỏ khỏi
nhiều ứng dụng bảo mật hiện đại do khả năng bị tấn công dễ dàng
Trang 195 Ứng dụng:
Blowfish được sử dụng trong các ứng dụng cần mã hóa nhanh và bảo mật ở
mức độ vừa phải, như trong lưu trữ dữ liệu và một số giao thức bảo mật
DES hiện đã lỗi thời và không còn được sử dụng trong các ứng dụng bảo
mật hiện đại, do yếu tố bảo mật thấp và dễ bị tấn công
Kết luận: Blowfish vượt trội hơn DES về mặt bảo mật và hiệu suất, đặc biệt là khi
hỗ trợ khóa dài hơn và khả năng chống tấn công tốt hơn
4.3 Blowfish và các hệ mã hiện đại khác
Ngoài AES và DES, Blowfish cũng có thể so sánh với các hệ mã hiện đại khác như
Twofish, Serpent, và ChaCha20, giúp hiểu rõ hơn về sự khác biệt và tính ưu việt
của nó
1 Blowfish và Twofish:
Twofish là thuật toán kế thừa của Blowfish, được phát triển bởi Bruce
Schneier và nhóm của ông Mặc dù Twofish có cấu trúc tương tự Blowfish, nhưng nó hỗ trợ khóa dài hơn (lên đến 256 bit), và sử dụng các kỹ thuật tối
ưu hóa phức tạp hơn, giúp cải thiện bảo mật và hiệu suất Tuy nhiên,
Twofish phức tạp hơn Blowfish và có thể không hiệu quả trong các hệ thống
có tài nguyên hạn chế
2 Blowfish và Serpent:
Serpent là một thuật toán mã hóa mạnh mẽ được thiết kế để thay thế DES,
với 32 vòng mã hóa và khóa dài 256 bit Serpent cung cấp bảo mật rất cao, nhưng lại kém hiệu quả hơn Blowfish về mặt hiệu suất, do số vòng lặp và phép toán phức tạp hơn
3 Blowfish và ChaCha20:
ChaCha20 là một thuật toán mã hóa dòng, được thiết kế để thay thế RC4
ChaCha20 cung cấp tốc độ mã hóa nhanh và được sử dụng phổ biến trong
Trang 20các ứng dụng di động và môi trường có tài nguyên hạn chế Tuy nhiên, ChaCha20 là thuật toán mã hóa dòng, không giống như Blowfish là thuật toán mã hóa khối, vì vậy không thể sử dụng cho các ứng dụng yêu cầu mã hóa khối.
Kết luận:Blowfish có thể cạnh tranh với các thuật toán hiện đại trong một số ứng
dụng, đặc biệt trong môi trường có tài nguyên hạn chế Tuy nhiên, các thuật toán như AES, Twofish và Serpent cung cấp bảo mật và hiệu suất tốt hơn trong các ứng dụng yêu cầu bảo mật cao và tối ưu hóa cho hệ thống hiện đại
Trang 21CHƯƠNG 3: CÀI ĐẶT VÀ THỬ NGHIỆM1.Giới thiệu ngôn ngữ và phần mềm sử dụng
1.1.Ngôn ngữ Python
Sơ lược về Python:
Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng,
do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991 Python được thiết kếvới ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ Python là ngôn ngữ có hình thức rấtsáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình Cấu trúc củaPython còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu
Python là một ngôn ngữ phân biệt kiểu chữ HOA, chữ thường
Như C/C++, các từ khóa của Python đều ở dạng chữ thường
1.2.Phần mềm sử dụng
Visual Studio Code:
Trang 22Visual Studio là một IDE mạnh mẽ được thiết kế để hỗ trợ quá trình phát triểnứng dụng trên nền tảng Microsoft.
Ngôn ngữ lập trình đa dạng: Hỗ trợ nhiều ngôn ngữ như C#, C++, VisualBasic, F#, Python, JavaScript, và nhiều ngôn ngữ khác
Nền tảng: Chủ yếu được sử dụng để phát triển ứng dụng Windows, ứng dụng
di động, và ứng dụng web trên nền tảng Microsoft
1.3.Các thư viện cần thiết
Thư viện tkinter :
Trang 23Tkinter là một thư viện được sử dụng trong ngôn ngữ lập trình Python để xâydựng giao diện đồ họa (GUI - Graphical User Interface) Nó cung cấp các thành phần
và công cụ giúp lập trình viên tạo ra các ứng dụng có giao diện trực quan và tương tácvới người dùng
Tkinter là một phần của bộ công cụ Tk (Tkinter = Tk + interface) Tk là mộttoolkit đa nền tảng, được phát triển ban đầu cho ngôn ngữ Tcl, và sau đó đã được liênkết và phát triển cho nhiều ngôn ngữ lập trình khác nhau, trong đó bao gồm Python
Crypto.Cipher :
Crypto.Cipher là một thư viện mã hóa và giải mã trong ngôn ngữ lập trìnhPython Thư viện này cung cấp các thuật toán mã hóa và giải mã mạnh mẽ như AES(Advanced Encryption Standard), DES (Data Encryption Standard), Blowfish vànhiều thuật toán mã hóa khác
Với sử dụng Crypto.Cipher, bạn có thể mã hóa các dữ liệu nhạy cảm như mậtkhẩu, thông tin cá nhân hoặc các tệp tin quan trọng Thư viện này cung cấp cácphương thức đơn giản để thực hiện các phép mã hóa và giải mã với các khóa bí mật
Để sử dụng thư viện Crypto.Cipher, bạn phải cài đặt gói pycrypto trên Python.Sau đó, bạn có thể import thư viện bằng cách sử dụng câu lệnh "from Crypto.Cipherimport"
Với sự hỗ trợ mạnh mẽ từ Crypto.Cipher, bạn có thể bảo vệ dữ liệu của mìnhbằng cách sử dụng các thuật toán mã hóa mạnh và phổ biến Thư viện này rất hữu íchkhi làm việc với bảo mật dữ liệu trong các ứng dụng và hệ thống
Trang 24Thư viện Crypto.Util.Padding trong module Crypto của Python cung cấp cácchức năng hỗ trợ thêm và loại bỏ các dữ liệu đệm (padding) cho chuỗi dữ liệu trướckhi mã hóa và sau khi giải mã
Thư viện base64:
Thư viện base64 là một công cụ mã hóa và giải mã dữ liệu dưới dạng chuỗi cóthể đọc được Nó được sử dụng rộng rãi trong các ứng dụng web và hệ thống đểtruyền và lưu trữ các dữ liệu nhị phân (binary data) một cách an toàn
Thư viện base64 được sử dụng để chuyển đổi dữ liệu từ dạng nhị phân sangdạng văn bản (text) và ngược lại Quá trình mã hóa base64 sẽ chia dữ liệu thành cácnhóm 3 byte và mã hóa chúng thành các ký tự ASCII tương ứng Mỗi 3 byte dữ liệu
sẽ được mã hóa thành 4 ký tự base64 Khi cần giải mã, quá trình ngược lại sẽ diễn ra
Thư viện base64 cung cấp các hàm và phương thức để thực hiện các thao tác
mã hóa và giải mã base64 trong ngôn ngữ lập trình Việc sử dụng base64 giúp đảmbảo tính bất biến của dữ liệu, thuận tiện trong việc truyền tải và lưu trữ dữ liệu
2 Cài đặt chương trình
2.1 Chương trình mã hóa giải mã bằng Blowfish bằng chế độ ECB:
from Crypto.Cipher import Blowfish
from Crypto.Util.Padding import pad, unpad
from tkinter import Tk, Label, Entry, Button, Text, messagebox, filedialog, font, Frame
Trang 25def set_key(self, key):
self.key = key.encode('utf-8')
self.block_size = Blowfish.block_size
self.cipher = Blowfish.new(self.key, Blowfish.MODE_ECB)
def encrypt(self, data):
data = pad(data.encode('utf-8'), self.block_size)
Trang 26self.generate_key_button = Button(self.key_frame, text="Tạo Key Ngẫu Nhiên", command=self.generate_random_key, bg='#4CAF50', fg='white',
font=("Arial", 9))
self.generate_key_button.pack(side='left', padx=5)
# Input/Output frame
self.io_frame = Frame(root, bg='#f0f0f0')
self.io_frame.pack(pady=10, fill='both', expand=True)
self.input_label = Label(self.io_frame, text="Input:", bg='#f0f0f0',
font=("Arial", 10, "bold"))
self.input_label.pack(anchor='w', padx=10)