Tại sao đầu ra thuật toán MacTripleDes không ổn định trong PowerShell?


14

Tôi đang kiểm tra băm tập tin bằng cách sử dụng một số thuật toán khác nhau trong powershell. Khi tôi sử dụng MacTripleDes, tôi luôn nhận được các giá trị băm khác nhau. Tất cả những người khác, chẳng hạn như SHA256 hoặc MD5 luôn đưa ra câu trả lời đáng tin cậy. Bạn có thể sao chép sự cố trên máy tính của mình:

"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

Tôi nhận được các giá trị băm giống nhau cho hai băm đầu tiên, nhưng các giá trị khác nhau cho hai băm thứ hai. MacTripleDes có được sử dụng khác nhau không?

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 là một thuật toán băm có khóa . Các Get-FileHashlệnh không xuất hiện để hỗ trợ một thông số quan trọng.
jscott

Nghe có vẻ như một lỗi. Vì vậy, bình luận này dường như là câu trả lời tốt nhất. Nhưng tôi không thấy làm thế nào để đánh dấu nó như vậy.
dùng6722022

Câu trả lời:


18

MACTripleDES khác với các thuật toán khác được cung cấp bởi Get-FileHashcmdlet. Thành thật mà nói, tôi không chắc tại sao nó lại được đưa vào cmdlet. Nó không phù hợp với những người khác, IMO.

SHA1, SHA256, MD5, RIPEMD, v.v., đó là tất cả các hàm băm thông thường. Họ lấy một số dữ liệu có độ dài tùy ý và tạo ra một bản tóm tắt có độ dài cố định đại diện cho dữ liệu đó. MACTripleDES thì khác, mặc dù nó không chỉ là thuật toán băm. Nó có TripleDES trong tên và 3DES là một thuật toán mã hóa, không phải là thuật toán băm. Sự khác biệt lớn nhất giữa hàm băm và chức năng mã hóa là mã hóa có thể được đảo ngược bằng khóa. Băm là các hàm một chiều.

Và MAC là viết tắt của mã xác thực tin nhắn. Đó là một mã được sử dụng để xác thực một tin nhắn. Để xác minh rằng nó không bị giả mạo. MAC được thiết kế phù hợp hoặc duy nhất từ ​​tin nhắn này sang tin nhắn tiếp theo.

Kiểm tra các nhà xây dựng :

 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 tạo số ngẫu nhiên ... số ngẫu nhiên có nghĩa là kết quả sẽ khác nhau mỗi lần chạy.


Phải, nó khá vô dụng ở đây. Trong một cách sử dụng phù hợp, bạn sẽ chuyển một khóa đã biết vào hàm tạo hoặc lấy khóa ngẫu nhiên từ KeyedHashAlgorithmđối tượng. Nhưng không có cách nào để làm cả với Get-FileHash...
Bob

1
Nếu Get-FileHashkhông cho phép bạn chỉ định khóa để sử dụng và thay vào đó tạo một khóa ngẫu nhiên mà nó không bao giờ lộ ra cho người dùng, thì đó dường như là một lỗi (theo tiêu đề ban đầu của câu hỏi) vì bạn thực sự không thể sử dụng nó cho bất cứ điều gì. (Không phải tôi hiểu lý do tại sao bạn chọn MACTripleDES ở vị trí đầu tiên nếu bạn muốn có MAC.)
Håkan Lindqvist

@ HåkanLindqvist Tôi thấy quan điểm của bạn, nhưng nó phụ thuộc vào định nghĩa của bạn về một lỗi. Nếu mã thực hiện những gì nó dự định làm, ngay cả khi nó làm điều gì đó hoàn toàn vô dụng , nó vẫn không phải là một lỗi trong cuốn sách của tôi. Đó là một yêu cầu thay đổi thiết kế, tức là "Vui lòng thay đổi lệnh ghép ngắn để nó thực sự có ích." :)
Ryan Ries

@RyanRies Thậm chí sau đó, có thực sự hợp lý khi cho rằng đây là dự định? Có bất cứ điều gì ngoại trừ chính mã và hành vi của nó hỗ trợ cho ý tưởng rằng tùy chọn thuật toán MACTripleDES Get-FileHashphải là một dạng RNG phức tạp nào đó không?
Håkan Lindqvist
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.