เหตุใดอัลกอริทึมของ MacTripleDes จึงไม่เสถียรใน PowerShell


14

ฉันกำลังตรวจสอบไฟล์แฮชโดยใช้อัลกอริทึมที่แตกต่างกันหลายใน PowerShell เมื่อฉันใช้ MacTripleDes ฉันจะได้รับแฮชที่แตกต่างกันเสมอ คนอื่น ๆ ทั้งหมดเช่น SHA256 หรือ MD5 ให้คำตอบที่เชื่อถือได้เสมอ คุณอาจสามารถทำซ้ำปัญหาบนคอมพิวเตอร์ของคุณเอง:

"this is a test" | out-file test.txt
get-filehash test.txt -algorithm sha256
get-filehash test.txt -algorithm sha256
get-filehash test.txt -algorithm mactripledes
get-filehash test.txt -algorithm mactripledes

ฉันได้รับค่าแฮชเดียวกันสำหรับสองแฮชแรก แต่ต่างกันสำหรับแฮชสองอัน MacTripleDes ควรถูกใช้แตกต่างกันหรือไม่?

Algorithm       Hash                                                                   Path                                                                                                                      
---------       ----                                                                   ----                                                                                                                      
SHA256          3F8CB2CDF03347329CAB0C80A6CE3B01EF3B17AF02E0F6E101FA67CE63729F51       C:\temp\test.txt                                                                                                          
SHA256          3F8CB2CDF03347329CAB0C80A6CE3B01EF3B17AF02E0F6E101FA67CE63729F51       C:\temp\test.txt                                                                                                          
MACTRIPLEDES    904D74A529C7A739                                                       C:\temp\test.txt                                                                                                          
MACTRIPLEDES    AF720778A2C878A2                                                       C:\temp\test.txt   

3
MACTripleDESเป็นคีย์อัลกอริทึมคร่ำเครียด Get-FileHashcmdlet ไม่สนับสนุนพารามิเตอร์ที่สำคัญ
jscott

นั่นฟังดูเหมือนแมลง ดังนั้นความคิดเห็นนี้จึงเป็นคำตอบที่ดีที่สุด แต่ฉันไม่เห็นวิธีการทำเครื่องหมายเช่นนี้
user6722022

คำตอบ:


18

MACTripleDES นั้นแตกต่างจากอัลกอริธึมอื่น ๆ ที่นำเสนอโดยGet-FileHashcmdlet ฉันไม่แน่ใจว่าทำไมมันรวมอยู่ใน cmdlet จะซื่อสัตย์ มันไม่เหมาะกับคนอื่น IMO

SHA1, SHA256, MD5, RIPEMD ฯลฯ เป็นฟังก์ชันแฮชปกติทั้งหมด พวกเขาใช้ข้อมูลบางส่วนของความยาวโดยพลการและสร้างการแยกความยาวคงที่ที่แสดงถึงข้อมูลนั้น MACTripleDES นั้นแตกต่างกันซึ่งในนั้นมันไม่ใช่แค่อัลกอริธึมแฮช มี TripleDES ในชื่อและ 3DES เป็นอัลกอริธึมการเข้ารหัสไม่ใช่อัลกอริทึมการแปลงแป้นพิมพ์ ความแตกต่างที่ใหญ่ที่สุดระหว่างฟังก์ชั่นแฮชและฟังก์ชั่นการเข้ารหัสคือการเข้ารหัสสามารถย้อนกลับได้ด้วยกุญแจ แฮชเป็นฟังก์ชั่นทางเดียว

และ MAC ย่อมาจากรหัสตรวจสอบข้อความ มันเป็นรหัสที่ใช้ในการตรวจสอบข้อความ เพื่อตรวจสอบว่ามันไม่ได้ถูกดัดแปลง MAC ได้รับการออกแบบให้ไม่สำคัญหรือไม่ซ้ำใครจากข้อความหนึ่งไปยังอีกข้อความหนึ่ง

ตรวจสอบตัวสร้าง :

 public MACTripleDES() {
        KeyValue = new byte[24]; 
        Utils.StaticRandomNumberGenerator.GetBytes(KeyValue);

        // Create a TripleDES encryptor 
        des = TripleDES.Create();
        HashSizeValue = des.BlockSize; 

        m_bytesPerBlock = des.BlockSize/m_bitsPerByte;
        // By definition, MAC-CBC-3DES takes an IV=0.  C# zero-inits arrays,
        // so all we have to do here is define it. 
        des.IV = new byte[m_bytesPerBlock];
        des.Padding = PaddingMode.Zeros; 
        ...

StaticRandomNumberGenerator สร้างตัวเลขสุ่ม ... ตัวเลขสุ่มหมายความว่าผลลัพธ์จะแตกต่างกันในการรันแต่ละครั้ง


ใช่มันค่อนข้างไร้ประโยชน์ที่นี่ ในการใช้งานที่เหมาะสมคุณจะต้องส่งคีย์ที่รู้จักไปยังตัวสร้างหรือดึงคีย์สุ่มจากKeyedHashAlgorithmวัตถุ แต่ไม่มีทางที่จะทำอย่างใดอย่างหนึ่งกับGet-FileHash...
Bob

1
หากGet-FileHashไม่อนุญาตให้คุณระบุรหัสที่จะใช้และสร้างรหัสแบบสุ่มซึ่งไม่เคยเปิดเผยต่อผู้ใช้ แต่จะปรากฏว่าเป็นข้อบกพร่อง (ตามชื่อดั้งเดิมของคำถาม) เนื่องจากคุณไม่สามารถใช้งานได้จริง มันเพื่ออะไร (ไม่ใช่ว่าฉันเข้าใจว่าทำไมคุณถึงเลือก MACTripleDES ตั้งแต่แรกถ้าคุณต้องการ MAC)
Håkan Lindqvist

@ HåkanLindqvistฉันเห็นประเด็นของคุณแล้ว แต่ก็ขึ้นอยู่กับนิยามของข้อบกพร่องของคุณ หากรหัสทำในสิ่งที่ตั้งใจทำแม้ว่ามันจะทำสิ่งที่ไร้ประโยชน์อย่างที่สุดแต่ก็ยังไม่ใช่ข้อบกพร่องในหนังสือของฉัน มันเป็นคำขอเปลี่ยนแปลงการออกแบบนั่นคือ "โปรดเปลี่ยน cmdlet เพื่อให้มันมีประโยชน์จริง ๆ " :)
Ryan Ries

@RyanRies ถึงอย่างนั้นมันเป็นเหตุผลที่จะคิดว่าสิ่งนี้มีวัตถุประสงค์? มีอะไรนอกจากรหัสตัวเองและพฤติกรรมที่สนับสนุนแนวคิดที่ว่าตัวเลือกอัลกอริทึม MACTripleDES ในGet-FileHashควรเป็นรูปแบบของ RNG ที่ซับซ้อน?
Håkan Lindqvist
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.