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

처음 두 해시에는 동일한 해시 값이 있지만 두 번째 해시에는 다른 값이 있습니다. 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사용하는 키를 지정할 수 없습니다 않는 대신 (질문의 원래 제목에 따라) 버그가 될 것처럼 보인다는 사용자에게 노출하지 임의의 키를 생성, 당신은 실제로 사용할 수 없습니다 무엇이든. (MAC를 원한다면 왜 MACTripleDES를 먼저 선택해야하는지 이해하지 못합니다.)
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.