AES vs Blowfish để mã hóa tệp


106

Tôi muốn mã hóa một tệp nhị phân. Mục tiêu của tôi là ngăn bất kỳ ai đọc tệp không có mật khẩu.

Giải pháp nào tốt hơn, AES hoặc Blowfish với cùng độ dài phím? Chúng ta có thể cho rằng kẻ tấn công có nguồn lực lớn (phần mềm, kiến ​​thức, tiền bạc) để bẻ khóa tệp.


4
Blowfish là hơn một thập kỷ cũ, tôi nghĩ rằng bạn aes bình vs twofish ...
rook

Bạn đúng, tôi có thể đã hỏi điều đó. Jerry may mắn đã kết thúc chủ đề tuyệt vời đối với tôi.
mimrock

@Rook Càng cũ càng tốt là quy tắc chung cho các thuật toán bảo mật. Các thuật toán mới dành cho những người quan tâm nhiều hơn đến hiệu suất hơn là bảo mật.
ngừng

Câu trả lời:


187

Có lẽ là AES. Blowfish là tiền thân trực tiếp của Twofish. Twofish là sự gia nhập của Bruce Schneier trong cuộc thi sản xuất AES. Nó được đánh giá là kém hơn so với một mục có tên Rijndael, vốn đã trở thành AES.

Thú vị sang một bên: tại một thời điểm trong cuộc thi, tất cả những người tham gia được yêu cầu đưa ra ý kiến ​​của họ về cách xếp hạng của mật mã. Có lẽ không có gì ngạc nhiên khi mỗi đội chọn bài dự thi của mình là tốt nhất - nhưng mọi đội khác đều chọn Rijndael là bài tốt thứ hai.

Điều đó nói rằng, có một số khác biệt cơ bản trong các mục tiêu cơ bản của Blowfish so với AES có thể (được cho là) ​​ủng hộ Blowfish về mặt bảo mật tuyệt đối. Cụ thể, Blowfish cố gắng gây khó khăn cho một cuộc tấn công brute-force (hết phím) bằng cách làm cho thiết lập phím ban đầu hoạt động khá chậm. Đối với một người dùng bình thường, điều này ít gây hậu quả (nó vẫn chưa đến một phần nghìn giây) nhưng nếu bạn đang thử dùng hàng triệu phím mỗi giây để phá vỡ nó, thì sự khác biệt là khá đáng kể.

Tuy nhiên, cuối cùng, tôi không thấy đó là một lợi thế lớn. Tôi thường giới thiệu AES. Lựa chọn tiếp theo của tôi có lẽ sẽ là Serpent, MARS và Twofish theo thứ tự đó. Blowfish sẽ đến một nơi nào đó sau những thứ đó (mặc dù có một vài loại khác mà tôi có thể giới thiệu trước Blowfish).


11
Tôi nghĩ các thuật toán khác được coi là an toàn hơn Rijndael, nhưng nó cung cấp hiệu suất rất tốt trong khi bảo mật được đánh giá là đủ tốt. Thiết kế một thuật toán cypher luôn là sự cân bằng giữa bảo mật và hiệu suất.
CodesInChaos

10
@CodeInChaos: Tùy thuộc vào quan điểm của bạn, điều đó ít nhất là đúng - Serpent có lẽ là thiết kế bảo thủ nhất. Đặc biệt, họ cho rằng phiên bản 16 vòng là đủ - vì vậy họ đã nhân đôi con số đó lên 32 vòng. Hàng công tốt nhất hiện tại chỉ có hiệu quả chống chọi 11 vòng đấu. Nếu câu hỏi ban đầu không giới hạn cụ thể các lựa chọn cho AES và Blowfish, và chỉ đơn giản là yêu cầu mật mã an toàn nhất, nổi tiếng hợp lý, thì có lẽ tôi đã nói Serpent ...
Jerry Coffin

Ngoài ra, "Thú vị sang một bên" đã xuất hiện trong một số câu hỏi và nguồn khi ôn tập cho kỳ thi CompTIA Security + của tôi. Những điều nhỏ nhặt có thể không trở nên vô ích sau này!
Everlight

Blowfishlà nhanh nhất
924

22

Một thực tế không thường được thừa nhận rằng kích thước khối của mật mã khối cũng là một yếu tố quan trọng về bảo mật được xem xét (mặc dù không nơi nào quan trọng bằng kích thước khóa).

Blowfish (và hầu hết các mật mã khối khác cùng thời đại, như 3DES và IDEA) có kích thước khối 64 bit, được coi là không đủ cho kích thước tệp lớn phổ biến ngày nay (tệp càng lớn và kích thước khối càng nhỏ , xác suất khối lặp lại trong bản mã càng cao - và các khối lặp lại như vậy cực kỳ hữu ích trong phân tích mật mã).

Mặt khác, AES có kích thước khối 128 bit. Chỉ cân nhắc này là lý do để sử dụng AES thay vì Blowfish.


2
Ưu điểm của kích thước khối 64-bit là nó giúp dễ dàng đưa thuật toán mới vào ứng dụng cũ thay thế cho (3) DES.
dajames

Kích thước khối là một đối số thú vị. Tôi đã viết, một vài tháng trước đây, một bài viết mà đưa ra giả thuyết rằng kích thước khối của bất kỳ mật mã đối xứng có thể được mở rộng đến bất kỳ chiều dài: cubicspot.blogspot.com/2013/02/...
CubicleSoft

16

Về bản thân các thuật toán, tôi sẽ sử dụng AES, vì lý do đơn giản là nó đã được NIST chấp nhận và sẽ được xem xét ngang hàng và phân tích bằng mật mã trong nhiều năm. Tuy nhiên, tôi đề nghị rằng trong các ứng dụng thực tế, trừ khi bạn đang lưu trữ một số tệp mà chính phủ muốn giữ bí mật (trong trường hợp đó, NSA có thể sẽ cung cấp cho bạn một thuật toán tốt hơn cả AES và Blowfish), sử dụng một trong hai thuật toán này sẽ thắng không tạo ra quá nhiều khác biệt. Tất cả bảo mật phải nằm trong khóa và cả hai thuật toán này đều có khả năng chống lại các cuộc tấn công vũ phu. Blowfish chỉ tỏ ra yếu kém khi triển khai không tận dụng hết vòng 16 đội. Và trong khi AES mới hơn, thực tế đó sẽ khiến bạn nghiêng về BlowFish nhiều hơn (nếu bạn chỉ tính đến độ tuổi). Nghĩ theo cách này,

Đây là những gì tôi muốn đặt ra với bạn ... thay vì xem xét hai thuật toán này và cố gắng lựa chọn giữa thuật toán, tại sao bạn không nhìn vào sơ đồ tạo khóa của mình. Kẻ tấn công tiềm năng muốn giải mã tệp của bạn sẽ không ngồi đó và đưa ra một bộ khóa lý thuyết có thể được sử dụng và sau đó thực hiện một cuộc tấn công vũ phu có thể mất hàng tháng. Thay vào đó, anh ta sẽ khai thác thứ khác, chẳng hạn như tấn công phần cứng máy chủ của bạn, thiết kế ngược lắp ráp của bạn để xem khóa, cố gắng tìm một số tệp cấu hình có khóa trong đó hoặc có thể tống tiền bạn bè của bạn để sao chép tệp từ máy tính của bạn . Đó sẽ là nơi bạn dễ bị tấn công nhất, không phải thuật toán.


4
AES gần đây đã được thêm vào danh sách "mật mã bị hỏng" trên Wikipedia, nhưng cuộc tấn công tồi tệ nhất chống lại Blowfish là chống lại bốn hiệp đấu và hoàn toàn không có trong danh sách mật mã bị hỏng. Bình luận của Bruce về việc ngạc nhiên rằng mọi người vẫn sử dụng Blowfish là điều khiến những người thực hiện bỏ đi. Tuy nhiên, nó không bị hỏng, có hỗ trợ kích thước khóa thay đổi, hỗ trợ kích thước khóa lớn hơn AES và từ góc độ lập trình, dễ thực hiện so với hầu hết các mật mã khối đối xứng khác. Blowfish đã sống sót qua thử thách của thời gian, đây là mối đe dọa lớn nhất đối với bất kỳ mật mã đối xứng nào.
CubicleSoft

Tôi đồng ý AES gần như không bị phá vỡ. Tuy nhiên, trong 10 năm tới, chúng ta sẽ cần một tiêu chuẩn mới. Ngoài ra, bất kỳ ai trong số những người lọt vào vòng chung kết AES đều là những người giải mật mã tuyệt vời. Serpent thực sự được nhiều người coi là khó phá vỡ nhất, nhưng AES là thanh lịch nhất. (Và có nếu bạn nhìn vào cách bạn thực hiện mã hóa và giải mã, nó chắc chắn là rất thanh lịch.)
nerdybeardo

8

AES.

(Tôi cũng giả định rằng bạn muốn nói đến hai con cá không phải là những con cá lớn hơn và yếu hơn nhiều)

Cả hai (AES & twofish) đều là những thuật toán tốt. Tuy nhiên, ngay cả khi họ bằng nhau hoặc hai con cá có hơn một chút về kỹ thuật, tôi vẫn sẽ chọn AES.

Tại sao? Tính công khai. AES là tiêu chuẩn cho mã hóa của chính phủ và do đó hàng triệu thực thể khác cũng sử dụng nó. Một nhà phân tích mật mã tài năng chỉ đơn giản là nhận được nhiều "tiếng nổ hơn" khi tìm ra một lỗ hổng trong AES, sau đó nó làm cho những người ít biết và sử dụng nhiều hơn.

Sự che khuất không cung cấp sự bảo vệ trong mã hóa. Nhiều cơ thể tìm kiếm, nghiên cứu, thăm dò, tấn công một thuật toán luôn tốt hơn. Bạn muốn thuật toán "hiệu đính" nhất có thể và ngay bây giờ đó là AES. Nếu một thuật toán không phải chịu sự giám sát chặt chẽ và liên tục, bạn nên đặt niềm tin thấp hơn về sức mạnh của nó. Chắc chắn hai con cá không bị xâm hại. Đó có phải là vì sức mạnh của mật mã hoặc đơn giản chỉ vì không đủ người đã lấy một cái nhìn cận cảnh ..... CHƯA


5

Sự lựa chọn thuật toán có lẽ không quan trọng lắm. Tôi muốn sử dụng AES vì nó đã được nghiên cứu tốt hơn. Điều quan trọng hơn là chọn chế độ hoạt động phù hợp và chức năng dẫn xuất khóa .

Bạn có thể muốn xem đặc tả định dạng TrueCrypt để lấy cảm hứng nếu bạn muốn truy cập ngẫu nhiên nhanh. Nếu bạn không cần truy cập ngẫu nhiên thì XTS không phải là chế độ tối ưu, vì nó có những điểm yếu mà các chế độ khác không có. Và bạn cũng có thể muốn thêm một số loại kiểm tra tính toàn vẹn (hoặc mã xác thực tin nhắn).


1
Hoàn toàn có thể - điều tối quan trọng là sử dụng một chức năng dẫn xuất khóa tốt, chẳng hạn như PBKDF2.
caf,

3

Tôi biết câu trả lời này vi phạm các điều khoản trong câu hỏi của bạn, nhưng tôi nghĩ câu trả lời chính xác cho ý định của bạn chỉ đơn giản là: sử dụng thuật toán nào cho phép bạn có độ dài khóa dài nhất, sau đó đảm bảo bạn chọn một khóa thực sự tốt. Sự khác biệt nhỏ trong hiệu suất của hầu hết các thuật toán được đánh giá tốt (về mặt mã hóa và theo trình tự thời gian) bị lấn át bởi một vài bit bổ sung của một khóa.


7
Tôi không thể đồng ý. Mật mã Lucifer của IBM (tiền thân của DES) được sử dụng làm khóa 128-bit - nhưng DES (chỉ có khóa 56-bit) hóa ra lại an toàn hơn nhiều sau khi phân tích mật mã vi sai được phát hiện.
Jerry Coffin

3
Chỉ nhìn vào độ dài khóa là một số liệu rất kém.
Gerald Davis

2
Đó là lý do tại sao tôi nói "các thuật toán được coi là tốt nhất". Nếu bạn coi Blowfish 128bit kém hơn AES 128bit, bạn sẽ phải đồng ý rằng Blowfish 256bit thổi AES 128bit ra khỏi mặt nước. Tương tự, việc tạo và quản lý khóa cũng quan trọng như nhau. Nếu khóa của bạn là "mật khẩu" thì việc bạn sử dụng thuật toán nào thực sự không quan trọng. Những gì tôi đang nói là OP có lẽ đang nhìn sai.
Mike Jones

2
Nó được nêu trong câu hỏi rằng các khóa sẽ được lấy từ mật khẩu. Phá vỡ hệ thống bằng cách cưỡng bức mật khẩu có thể dễ dàng hơn nhiều so với tấn công bất kỳ thuật toán nào được đề cập ở đây. Keylength gần như hoàn toàn không thể bị hủy bỏ khi khóa được lấy từ mật khẩu.
dajames

Bạn đánh dấu câu trả lời của tôi xuống, mặc dù thực tế là bạn nói chính xác những điều tôi đã làm? Tôi đã nói độ dài khóa và chọn một khóa thực sự tốt. Theo định nghĩa nào về "tốt", bạn sẽ coi một khóa tốt nếu nó không lấp đầy tất cả các bit của khóa?
Mike Jones

3

Cả hai thuật toán (AES và twofish) đều được coi là rất an toàn. Điều này đã được đề cập rộng rãi trong các câu trả lời khác.

Tuy nhiên, kể từ khi AES được sử dụng rộng rãi vào năm 2016, nó đã được tăng tốc phần cứng cụ thể trên một số nền tảng như ARM và x86. Mặc dù không nhanh hơn đáng kể so với hai con cá trước khi tăng tốc phần cứng, AES hiện nhanh hơn nhiều nhờ các hướng dẫn dành riêng cho CPU.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.