Чому не виходить алгоритм MacTripleDes в PowerShell стабільним?


14

Я перевіряю хеші файлів за допомогою декількох різних алгоритмів у програмі. Коли я використовую 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-FileHashКомандлет не виникає , щоб підтримати ключовий параметр.
jscott

Це звучить як помилка. Тож цей коментар виявляється найкращою відповіддю. Але я не бачу, як це позначити як таке.
користувач6722022

Відповіді:


18

MACTripleDES відрізняється від інших алгоритмів, які пропонує Get-FileHashкомандлет. Я не впевнений, чому це було включено в командлет, якщо чесно. Це не відповідає іншим, 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...
Боб

1
Якщо Get-FileHashне дозволяє вказувати ключ, який потрібно використовувати, а натомість генерує випадковий ключ, який він ніколи не виставляє користувачеві, це виявляється помилкою (відповідно до оригінальної назви питання), оскільки ви фактично не можете використовувати це ні за що. (Не те, що я розумію, чому ви б обрали MACTripleDES в першу чергу, якщо хочете MAC.)
Håkan Lindqvist

@ HåkanLindqvist Я бачу вашу думку, але це залежить від вашого визначення помилки. Якщо код робить те, що мав робити, навіть якщо він робить щось зовсім марне , це все ще не помилка в моїй книзі. Це запит на зміну дизайну, тобто "Будь ласка, змініть командлет так, щоб він насправді робив щось корисне." :)
Ryan Ries

@RyanRies Вже тоді, чи дійсно розумно вважати, що це призначено? Чи є щось, окрім самого коду та його поведінки, що підтримує думку про те, що параметр алгоритму MACTripleDES Get-FileHashмає бути деякою формою перекрученого RNG?
Хокан Ліндквіст
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.