Mengapa output algoritma MacTripleDes di PowerShell tidak stabil?

14

Saya memeriksa hash file menggunakan beberapa algoritma yang berbeda di PowerShell. Ketika saya menggunakan MacTripleDes, saya selalu mendapatkan hash yang berbeda. Semua yang lain, seperti SHA256 atau MD5 selalu memberikan jawaban yang andal. Anda mungkin dapat mereplikasi masalah di komputer Anda sendiri:

"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

Saya mendapatkan nilai hash yang sama untuk dua hash pertama, tetapi nilai yang berbeda untuk dua hash kedua. Apakah MacTripleDes seharusnya digunakan secara berbeda?

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   
pengguna6722022
sumber
3
MACTripleDES adalah algoritma hashing kunci . The Get-FileHashcmdlet tidak muncul untuk mendukung parameter kunci.
jscott
Itu terdengar seperti bug. Jadi komentar ini tampaknya menjadi jawaban terbaik. Tapi saya tidak melihat bagaimana menandainya seperti itu.
user6722022

Jawaban:

18

MACTripleDES berbeda dari algoritma lain yang ditawarkan oleh Get-FileHashcmdlet. Saya tidak yakin mengapa itu dimasukkan dalam cmdlet, jujur ​​saja. Itu tidak cocok dengan yang lain, IMO.

SHA1, SHA256, MD5, RIPEMD, dll., Semuanya adalah fungsi hash biasa. Mereka mengambil beberapa data dengan panjang sewenang-wenang dan membuat intisari dari panjang tetap yang mewakili data itu. MACTripleDES berbeda, karena bukan hanya algoritma hash. Ini memiliki TripleDES dalam namanya, dan 3DES adalah algoritma enkripsi, bukan algoritma hashing. Perbedaan terbesar antara fungsi hash dan fungsi enkripsi adalah enkripsi dapat dibalik dengan kunci. Hash adalah fungsi satu arah.

Dan MAC adalah kode otentikasi pesan. Ini adalah kode yang digunakan untuk mengotentikasi pesan. Untuk memverifikasi bahwa itu tidak dirusak. MAC dirancang untuk bersifat sementara atau unik dari satu pesan ke pesan berikutnya.

Lihat konstruktor :

 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 menghasilkan angka acak ... angka acak berarti hasilnya akan berbeda setiap kali dijalankan.

Ryan Ries
sumber
Ya, ini sangat tidak berguna di sini. Dalam penggunaan yang tepat, Anda akan meneruskan kunci yang dikenal ke konstruktor, atau mengambil kunci acak dari KeyedHashAlgorithmobjek. Tetapi tidak ada cara untuk melakukan keduanya dengan Get-FileHash...
Bob
1
Jika Get-FileHashtidak memungkinkan Anda menentukan kunci untuk digunakan dan sebagai gantinya menghasilkan kunci acak yang tidak pernah terpapar kepada pengguna, itu tampaknya bug (sesuai dengan judul asli pertanyaan) karena Anda tidak dapat benar-benar menggunakan itu untuk apa saja. (Bukannya saya mengerti mengapa Anda akan memilih MACTripleDES di tempat pertama jika Anda menginginkan MAC.)
Håkan Lindqvist
@ HåkanLindqvist Saya mengerti maksud Anda, tetapi itu tergantung pada definisi bug Anda. Jika kode melakukan apa yang seharusnya dilakukan, bahkan jika itu melakukan sesuatu yang sama sekali tidak berguna , itu masih bukan bug di buku saya. Ini permintaan perubahan desain, yaitu "Silakan ubah cmdlet agar benar-benar melakukan sesuatu yang bermanfaat." :)
Ryan Ries
@RyanRies Meskipun begitu, apakah benar-benar masuk akal untuk menganggap bahwa ini dimaksudkan? Apakah ada sesuatu selain kode itu sendiri dan perilakunya yang mendukung gagasan bahwa pilihan algoritma MACTripleDES Get-FileHashharus berupa RNG yang berbelit-belit?
Håkan Lindqvist