AES เทียบกับ Blowfish สำหรับการเข้ารหัสไฟล์


107

ฉันต้องการเข้ารหัสไฟล์ไบนารี เป้าหมายของฉันคือเพื่อป้องกันไม่ให้ใครก็ตามอ่านไฟล์ที่ไม่มีรหัสผ่าน

วิธีไหนดีกว่ากัน AES หรือปักเป้าที่มีความยาวคีย์เท่ากัน? เราสามารถสันนิษฐานได้ว่าผู้โจมตีมีทรัพยากรที่ยอดเยี่ยม (ซอฟต์แวร์ความรู้เงิน) สำหรับการแคร็กไฟล์


4
ปักเป้าอายุมากกว่าหนึ่งทศวรรษฉันคิดว่าคุณหมายถึง aes vs twofish ...
rook

คุณพูดถูกฉันสามารถถามได้ Fortunatly Jerry สรุปหัวข้อที่ดีสำหรับฉัน
mimrock

@Rook ยิ่งเก่ายิ่งดีคือกฎทั่วไปสำหรับอัลกอริธึมการรักษาความปลอดภัย อัลกอริทึมใหม่มีไว้สำหรับผู้คนที่กังวลเกี่ยวกับประสิทธิภาพมากกว่าความปลอดภัย
สิ้นสุด

คำตอบ:


188

น่าจะเป็น AES ปักเป้าเป็นบรรพบุรุษโดยตรงของ Twofish Twofish เป็นรายการของ Bruce Schneier ในการแข่งขันที่ผลิต AES มันถูกตัดสินว่าด้อยกว่ารายการชื่อ Rijndael ซึ่งเป็นสิ่งที่กลายมาเป็น AES

สิ่งที่น่าสนใจ: ณ จุดหนึ่งของการแข่งขันผู้เข้าแข่งขันทุกคนถูกขอให้แสดงความคิดเห็นเกี่ยวกับวิธีการจัดอันดับการเข้ารหัส คงไม่แปลกใจเลยที่แต่ละทีมเลือกรายการของตัวเองว่าดีที่สุด - แต่ทุกทีมเลือก Rijndael เป็นทีมที่ดีที่สุดเป็นอันดับสอง

ที่กล่าวว่ามีความแตกต่างพื้นฐานบางประการในเป้าหมายพื้นฐานของ Blowfish เทียบกับ AES ที่สามารถ (เนื้อหา) ให้ Blowfish ในแง่ของความปลอดภัยอย่างแท้จริง โดยเฉพาะอย่างยิ่งปักเป้าพยายามที่จะทำให้การโจมตีแบบเดรัจฉานบังคับ (คีย์ - หมดแรง) ทำได้ยากโดยการตั้งค่าคีย์เริ่มต้นนั้นค่อนข้างช้า สำหรับผู้ใช้ทั่วไปสิ่งนี้เป็นผลเพียงเล็กน้อย (ยังน้อยกว่าหนึ่งมิลลิวินาที) แต่ถ้าคุณพยายามใช้ปุ่มนับล้านต่อวินาทีเพื่อทำลายมันความแตกต่างนั้นค่อนข้างมาก

อย่างไรก็ตามในท้ายที่สุดฉันไม่เห็นว่าเป็นข้อได้เปรียบที่สำคัญ โดยทั่วไปฉันจะแนะนำ AES ตัวเลือกต่อไปของฉันน่าจะเป็น Serpent, MARS และ Twofish ตามลำดับนั้น ปักเป้าจะมาที่ไหนสักแห่งหลังจากนั้น (แม้ว่าจะมีอีกสองสามตัวที่ฉันอาจจะแนะนำก่อนปักเป้า)


11
ฉันคิดว่าอัลกอริทึมอื่นถือว่าปลอดภัยกว่า Rijndael แต่มันให้ประสิทธิภาพที่ดีมากในขณะที่ความปลอดภัยได้รับการพิจารณาว่าดีพอ การออกแบบอัลกอริทึมแบบไซเฟอร์นั้นเป็นการแลกเปลี่ยนระหว่างความปลอดภัยและประสิทธิภาพเสมอ
CodesInChaos

10
@CodeInChaos: อย่างน้อยก็ขึ้นอยู่กับมุมมองของคุณนั่นคือความจริง - งูน่าจะเป็นการออกแบบที่อนุรักษ์นิยมที่สุด โดยเฉพาะอย่างยิ่งพวกเขาคิดว่ารุ่น 16 รอบน่าจะเพียงพอ - ดังนั้นพวกเขาจึงเพิ่มเป็นสองเท่าเป็น 32 รอบ การโจมตีที่ดีที่สุดที่รู้จักกันในปัจจุบันมีผลเพียง 11 รอบ หากคำถามเดิมไม่ได้ จำกัด เฉพาะตัวเลือกสำหรับ AES และปักเป้าและเพียงแค่ขอรหัสที่ปลอดภัยและเป็นที่รู้จักกันดีพอสมควรฉันอาจจะพูดว่า Serpent ...
Jerry Coffin

นอกจากนี้ "ที่น่าสนใจกัน" ยังมีคำถามและแหล่งที่มามากมายเมื่อศึกษาสำหรับการสอบ CompTIA Security + ของฉัน สิ่งเล็ก ๆ น้อย ๆ อาจไม่ไร้ประโยชน์หลังจากนี้!
Everlight

Blowfishเร็วที่สุด
user924

23

เป็นความจริงที่ไม่ได้รับการยอมรับบ่อยนักว่าขนาดบล็อกของการเข้ารหัสบล็อกยังเป็นข้อพิจารณาด้านความปลอดภัยที่สำคัญ (แม้ว่าจะไม่มีความสำคัญเท่ากับขนาดของคีย์ก็ตาม)

ปักเป้า (และบล็อกไซเฟอร์อื่น ๆ ส่วนใหญ่ในยุคเดียวกันเช่น 3DES และ IDEA) มีขนาดบล็อก 64 บิตซึ่งถือว่าไม่เพียงพอสำหรับขนาดไฟล์ที่ใหญ่ซึ่งเป็นเรื่องปกติในปัจจุบัน (ยิ่งไฟล์มีขนาดใหญ่และขนาดบล็อกก็จะยิ่งเล็กลง ความน่าจะเป็นของการบล็อกซ้ำในไซเฟอร์เท็กซ์ก็จะยิ่งสูงขึ้นเท่านั้นและบล็อกที่ซ้ำ ๆ กันดังกล่าวจะมีประโยชน์อย่างมากในการเข้ารหัสลับ)

ในทางกลับกัน AES มีขนาดบล็อก 128 บิต การพิจารณาเพียงอย่างเดียวนี้เป็นเหตุผลที่จะใช้ AES แทนปักเป้า


2
ข้อดีของบล็อกขนาด 64 บิตคือทำให้ง่ายต่อการวางอัลกอริทึมใหม่ลงในแอปพลิเคชันเก่าแทน (3-) DES
dajames

ขนาดบล็อกเป็นข้อโต้แย้งที่น่าสนใจ ฉันเขียนเมื่อหลายเดือนก่อนบทความที่ตั้งทฤษฎีว่าขนาดบล็อกของการเข้ารหัสสมมาตรใด ๆ สามารถขยายได้ทุกความยาว: cubicspot.blogspot.com/2013/02/…
CubicleSoft

16

ในแง่ของอัลกอริทึมนั้นฉันจะใช้กับ AES ด้วยเหตุผลง่ายๆก็คือ NIST ได้รับการยอมรับและจะได้รับการตรวจสอบและวิเคราะห์ข้อมูลแบบลับๆเป็นเวลาหลายปี อย่างไรก็ตามฉันขอแนะนำว่าในการใช้งานจริงเว้นแต่คุณจะจัดเก็บไฟล์บางไฟล์ที่รัฐบาลต้องการเก็บเป็นความลับ (ซึ่งในกรณีนี้ NSA อาจจัดหาอัลกอริทึมที่ดีกว่าทั้ง AES และ Blowfish) โดยใช้อัลกอริทึมอย่างใดอย่างหนึ่งต่อไปนี้ ไม่สร้างความแตกต่างมากเกินไป ความปลอดภัยทั้งหมดควรอยู่ในกุญแจสำคัญและอัลกอริทึมทั้งสองนี้ทนทานต่อการโจมตีด้วยกำลังดุร้าย ปักเป้าแสดงให้เห็นแล้วว่าอ่อนแอในการใช้งานที่ไม่ได้ใช้ประโยชน์จากรอบ 16 เต็ม และในขณะที่ AES ใหม่กว่าข้อเท็จจริงนั้นควรทำให้คุณเอนเอียงไปที่ BlowFish มากขึ้น (หากคุณคำนึงถึงอายุเท่านั้น) คิดแบบนี้

นี่คือสิ่งที่ฉันจะบอกคุณ ... แทนที่จะดูอัลกอริทึมทั้งสองนี้และพยายามเลือกระหว่างอัลกอริทึมทำไมคุณไม่ดูรูปแบบการสร้างคีย์ของคุณ ผู้โจมตีที่อาจต้องการถอดรหัสไฟล์ของคุณจะไม่ไปนั่งที่นั่นและคิดชุดคีย์ตามทฤษฎีที่สามารถใช้งานได้จากนั้นทำการโจมตีด้วยกำลังดุร้ายซึ่งอาจใช้เวลาหลายเดือน แต่เขาจะใช้ประโยชน์จากสิ่งอื่นเช่นโจมตีฮาร์ดแวร์เซิร์ฟเวอร์ของคุณทำวิศวกรรมย้อนกลับแอสเซมบลีของคุณเพื่อดูคีย์พยายามค้นหาไฟล์กำหนดค่าบางไฟล์ที่มีคีย์อยู่หรืออาจแบล็กเมล์เพื่อนของคุณเพื่อคัดลอกไฟล์จากคอมพิวเตอร์ของคุณ . สิ่งเหล่านี้จะเป็นจุดที่คุณเสี่ยงที่สุดไม่ใช่อัลกอริทึม


4
เมื่อไม่นานมานี้มีการเพิ่ม AES ลงในรายการ "รหัสหัก" ในวิกิพีเดีย แต่การโจมตีปักเป้าที่เลวร้ายที่สุดคือการแข่งขันสี่รอบที่น่ากลัวและขาดหายไปอย่างชัดเจนจากรายชื่อรหัสที่เสียหาย ความคิดเห็นของ Bruce เกี่ยวกับความรู้สึกประหลาดใจที่ผู้คนยังคงใช้ Blowfish เป็นสิ่งที่ผลักดันให้ผู้ปฏิบัติงานออกไป อย่างไรก็ตามไม่เสียมีการรองรับขนาดคีย์ตัวแปรรองรับขนาดคีย์ที่ใหญ่กว่า AES และจากมุมมองของการเขียนโปรแกรมนั้นง่ายต่อการใช้งานเมื่อเทียบกับการเข้ารหัสบล็อกสมมาตรอื่น ๆ ส่วนใหญ่ ปักเป้ารอดชีวิตจากการทดสอบของกาลเวลาซึ่งเป็นภัยคุกคามที่ยิ่งใหญ่ที่สุดสำหรับการเข้ารหัสสมมาตรใด ๆ
CubicleSoft

ฉันยอมรับว่า AES ไม่มีที่ไหนใกล้พัง อย่างไรก็ตามในอีก 10 ปีข้างหน้าเราจะต้องมีมาตรฐานใหม่ นอกจากนี้ผู้เข้ารอบ AES คนใดก็เป็นผู้เข้ารหัสที่ยอดเยี่ยม งูเป็นสัตว์ที่ทำลายยากที่สุด แต่ AES นั้นสง่างามที่สุด (และใช่ถ้าคุณดูว่าคุณทำการเข้ารหัสและถอดรหัสอย่างไรมันก็ดูดีมาก)
nerdybeardo

8

AES.

(ฉันยังสมมติว่าคุณหมายถึงสองคนไม่ใช่ปักเป้าที่แก่กว่าและอ่อนแอกว่ามาก)

ทั้งสอง (AES & twofish) เป็นอัลกอริทึมที่ดี อย่างไรก็ตามแม้ว่าพวกเขาจะเท่ากันหรือสองครั้งก็ล้ำหน้าเล็กน้อยในด้านเทคนิคฉันก็ยังคงเลือก AES

ทำไม? การเผยแพร่. AES เป็นมาตรฐานสำหรับการเข้ารหัสของรัฐบาลดังนั้นหน่วยงานอื่น ๆ อีกหลายล้านก็ใช้เช่นกัน นักเข้ารหัสที่มีความสามารถเพียงแค่ได้รับ "ผลตอบแทนที่คุ้มค่า" มากขึ้นในการค้นหาข้อบกพร่องใน AES จากนั้นก็ทำเพื่อคนที่รู้จักและใช้สองอย่างน้อยลง

การปิดบังไม่ให้การป้องกันในการเข้ารหัส การค้นหาร่างกายการศึกษาการตรวจสอบการโจมตีอัลกอริทึมจะดีกว่าเสมอ คุณต้องการอัลกอริทึมที่ "ตรวจสอบแล้ว" มากที่สุดเท่าที่จะเป็นไปได้และตอนนี้ก็คือ AES หากอัลกอริทึมไม่อยู่ภายใต้การตรวจสอบอย่างเข้มข้นและต่อเนื่องคุณควรมั่นใจในความแข็งแกร่งของมันให้น้อยลง แน่นอนว่าสองสิ่งไม่ได้ถูกบุกรุก นั่นเป็นเพราะความแข็งแกร่งของการเข้ารหัสหรือเพียงเพราะมีคนมองใกล้ ๆ ไม่มากพอ ..... กระนั้น


5

ตัวเลือกอัลกอริทึมอาจไม่สำคัญมากนัก ฉันใช้ AES เนื่องจากมีการวิจัยที่ดีขึ้น มีอะไรอื่น ๆ อีกมากมายที่สำคัญคือการเลือกโหมดการทำงานที่เหมาะสมและฟังก์ชั่นที่มาที่สำคัญ

คุณอาจต้องการดูข้อกำหนดรูปแบบ TrueCrypt เพื่อเป็นแรงบันดาลใจหากคุณต้องการเข้าถึงแบบสุ่มอย่างรวดเร็ว หากคุณไม่ต้องการการเข้าถึงแบบสุ่มมากกว่า XTS ไม่ใช่โหมดที่ดีที่สุดเนื่องจากมีจุดอ่อนที่โหมดอื่นไม่ทำ และคุณอาจต้องการเพิ่มการตรวจสอบความสมบูรณ์ (หรือรหัสการตรวจสอบความถูกต้องของข้อความ) ด้วย


1
อย่างยิ่ง - สิ่งสำคัญอย่างยิ่งที่จะต้องใช้ฟังก์ชันการหาคีย์ที่ดีเช่น PBKDF2
คาเฟ่

3

ฉันรู้ว่าคำตอบนี้ละเมิดข้อกำหนดของคำถามของคุณ แต่ฉันคิดว่าคำตอบที่ถูกต้องสำหรับจุดประสงค์ของคุณมีเพียงแค่นี้: ใช้อัลกอริทึมใดก็ตามที่อนุญาตให้คุณมีความยาวคีย์ที่ยาวที่สุดจากนั้นตรวจสอบให้แน่ใจว่าคุณเลือกคีย์ที่ดีจริงๆ ความแตกต่างเล็กน้อยในประสิทธิภาพของอัลกอริทึมที่ได้รับการยอมรับส่วนใหญ่ (แบบเข้ารหัสและตามลำดับเวลา) จะถูกครอบงำด้วยคีย์พิเศษสองสามบิต


7
ฉันไม่สามารถตกลงกันได้ การเข้ารหัสลูซิเฟอร์ของ IBM (รุ่นก่อนถึง DES) ใช้เป็นคีย์ 128 บิต แต่ DES (ที่มีคีย์ 56 บิตเท่านั้น) จะมีความปลอดภัยมากขึ้นเมื่อมีการค้นพบการเข้ารหัสแบบแยกส่วน (re-)
Jerry Coffin

3
เพียงแค่ดูที่ความยาวของคีย์เป็นเมตริกที่แย่มาก
เจอรัลด์เดวิส

2
นั่นคือเหตุผลที่ฉันพูดว่า "อัลกอริทึมที่ได้รับการยอมรับมากที่สุด" หากคุณคิดว่า Blowfish 128 บิตด้อยกว่า AES 128 บิตคุณจะต้องยอมรับว่า Blowfish 256bit เป่า AES 128 บิตออกจากน้ำ การสร้างและการจัดการที่สำคัญก็สำคัญพอ ๆ กัน หากคีย์ของคุณคือ "รหัสผ่าน" มันไม่สำคัญเลยว่าคุณจะใช้อัลกอริทึมอะไร สิ่งที่ผมบอกคือ OP อาจจะมองผิด
Mike Jones

2
มีระบุไว้ในคำถามว่าคีย์จะได้มาจากรหัสผ่าน การทำลายระบบโดยการบังคับใช้รหัสผ่านแบบเดรัจฉานนั้นน่าจะง่ายกว่าการโจมตีอัลกอริทึมใด ๆ ที่กล่าวถึงในที่นี้ Keylength เกือบทั้งหมดไม่สามารถป้องกันได้เมื่อคีย์ได้มาจากรหัสผ่าน
dajames

คุณทำเครื่องหมายคำตอบของฉันทั้งๆที่คุณพูดเหมือนกับที่ฉันทำทุกประการ? ฉันพูดความยาวของคีย์และเลือกคีย์ที่ดีจริงๆ คำจำกัดความของคำว่า "ดี" จะเป็นอย่างไรหากคีย์นั้นไม่ได้เติมเต็มทุกส่วนของคีย์
Mike Jones

3

อัลกอริทึมทั้งสอง (AES และ twofish) ถือว่าปลอดภัยมาก คำตอบนี้ครอบคลุมคำตอบอื่น ๆ อย่างกว้างขวาง

อย่างไรก็ตามเนื่องจาก AES ใช้กันอย่างแพร่หลายในปี 2559 จึงได้รับการเร่งฮาร์ดแวร์โดยเฉพาะในหลายแพลตฟอร์มเช่น ARM และ x86 แม้ว่าจะไม่เร็วกว่าสองเท่าก่อนการเร่งด้วยฮาร์ดแวร์ แต่ตอนนี้ AES เร็วขึ้นมากด้วยคำแนะนำของ CPU โดยเฉพาะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.