2010-08-04 3 views
2

MessageDigest 클래스는 SHA-1 알고리즘을 구현합니다 (그 중에서도). SHA-1 알고리즘은 다른 "시드"또는 초기 다이제스트를 사용할 수있게합니다. Online Java Manual에 설명 된대로 MessageDigest 등 클래스는, 이러한 초기 변수 설정에 대한 API를 제공하지 않습니다 그러나MessageDigest 시드를 설정하는 방법은 무엇입니까?

Initialize variables: 
h0 = 0x67452301 
h1 = 0xEFCDAB89 
h2 = 0x98BADCFE 
h3 = 0x10325476 
h4 = 0xC3D2E1F0 

: 알고리즘은 변수를 초기화하거나 종자 SHA-1 Psuedocode

를 참조하십시오. 사실, 초기 변수의 값은 명시하지 않습니다.

어떻게 SHA-1 알고리즘의 초기 시드를 설정할 수 있습니까?

Java에서 SHA-1의 예는 다음과 같습니다. 초기 종을 사용?
(예 대안 초기 씨앗을 MessageDigest를 사용하지 않는 나는 SHA-1 구현을 찾고 있어요.)

+0

비바 SHA1 확장! – SDReyes

답변

1

자바 기능을 초기 시드와 함께 제공 할 수 없습니다.

SHA-1 알고리즘의 C 구현을 복사하여 초기 시드 값을 변경할 수 있도록 수정했습니다.

1

어디 당신은 SHA-1 다이제스트에 씨앗의 필요성을 볼 수 있습니까? 일반적으로 난수 소스를 필요로하는 암호화 알고리즘에서는 시드가 "필요"합니다. 그러나 SHA-1에서는 무작위 수를 전혀 사용하지 않으므로 설정할 시드 나 초기 벡터가 없습니다. 당신이 언급 한 변수는 '하드'(상수)이며 알고리즘의 일부이므로 h0-4의 값을 변경할 필요가 없습니다.

+0

내 응용 프로그램은 실행 파일에서 SHA-1을 수행합니다. 이 응용 프로그램의 요구 사항 중 하나는 사용자가 SHA-1 알고리즘의 초기 시드를 설정할 수 있도록하는 것입니다. 이를 통해 사용자는 실행 파일을 확인할 수 있습니다. –

+1

초기 시드를 변경하지 않고 해시를 확인할 수 있습니다. 씨앗을 바꾸는 동기는 무엇입니까? 이러한 상수는 SHA-1 알고리즘의 일부입니다. http://www.itl.nist.gov/fipspubs/fip180-1.htm 암호 해시 알고리즘을 절대로 시도해서는 안됩니다. 알고리즘이 제공하는 보안상의 이점을 효과적으로 무효화 할 수 있으므로 자신이하는 일을 알고 있어야합니다. –

1

MessageDigest 패밀리 해시 기능을 위해 시드 대신 소금을 사용하는 것이 좋습니다. 소금은 예를 들어 소금 바이트를 입력 앞에 붙임으로써 적용됩니다.

해시의 내부 상태를 변경하는 것 외에도 소금이 다이제스트 블록 크기의 배수가 아니므로 시드 값을 직접 설정하는 것보다 소금을 미리 넣는 것이 더 강력합니다. 이 입력은 해시 함수에 입력됩니다.

+0

불행히도 소금은 요구 사항의 일부가 아닙니다. 요구 사항은 구체적으로 시드 값을 변경할 수 있어야했습니다. 어쨌든 기술에 감사드립니다. –