PowerShellでMacTripleDesアルゴリズムの出力が安定しないのはなぜですか?


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

最初の2つのハッシュでは同じハッシュ値を取得しますが、2番目の2つのハッシュでは異なる値を取得します。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 16

それはバグのように聞こえます。したがって、このコメントがベストアンサーのようです。しかし、そのようにマークする方法がわかりません。
user6722022 16

回答:


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、使用するキーを指定することはできませんし、代わりに(質問のオリジナルタイトルどおり)のバグであるように見えるん、それはユーザーに公開することはありませんランダム鍵を生成として、あなたは、実際に使用することはできません何でも。(あなたはMACを望んでいた場合は、最初の場所でMACTripleDESを選ぶだろう、なぜ私は理解していないこと。)
ホーカンLindqvist

@HåkanLindqvistあなたの意見はわかりますが、バグの定義に依存します。コードが意図したとおりに機能する場合たとえそれがまったく役に立たないものあっても、それは私の本のバグではありません。これは設計変更要求です。つまり、「実際に何か役立つようにコマンドレットを変更してください」。:)
ライアンリース

@RyanRiesそれでも、これが意図されていると仮定することは本当に合理的ですか?MACTripleDESアルゴリズムオプションGet-FileHashが複雑なRNGの形式であるべきであるという考えをサポートするコード自体とその動作以外はありますか?
ホーカンLindqvist
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.