문제
SHA-1에 대해 배우려고 노력하고 있습니다. 사양 (RFC 31741)에 포함 된 C 구현을보고 있었고이 부분은 나를 혼란스럽게합니다.
context->Intermediate_Hash[0] = 0x67452301; context->Intermediate_Hash[1] = 0xEFCDAB89; context->Intermediate_Hash[2] = 0x98BADCFE; context->Intermediate_Hash[3] = 0x10325476; context->Intermediate_Hash[4] = 0xC3D2E1F0;
하드 코딩 된 16 진수 값의 중요성은 무엇입니까? 알고리즘을 작동시키는 특별한 소스입니까, 아니면 수학 상수를 나타내는가?
여기에서 전체 코드를 볼 수 있습니다. http://www.faqs.org/rfcs/rfc3174.html
해결책
그것들입니다 "내 소매 번호는 아무것도 없다".
선택된 값에는 특별한 속성이 없습니다. 이 숫자는 무작위로 선택된 값과 동일한 속성을 가지지 만 알고리즘 디자이너가 선택할 수는 없습니다. 상수를 선택하는 알고리즘 디자이너를 사용하면 어떤 종류의 백도어를 포함시킬 수 있으므로, 가능한 한 자유도를 줄이는 방식으로 선택되어 있습니다.
일반적인 선택에는 PI의 첫 번째 자리 또는 작은 소수의 SHA-1 제곱근의 경우 다음이 포함됩니다.
사용 된 상수 값은 내 소매 번호로 아무것도 선택되지 않습니다. 4 개의 원형 상수 k는 2, 3, 5 및 10의 제곱근의 2^30 배입니다. 알고리즘, 다섯 번째 (H4의 경우)는 비슷합니다.
다른 팁
지나치게 장황한 대답을 구하기 위해 알고리즘에 특정한 상수 만 있습니다. 유사한 사용법의 예로 Carmack Square 루트. 그것은 초기 순진한 추측을 제공함으로써 전통적인 제곱 루팅 방법의 속도를 높이는 방법으로 특별한 가치를 사용합니다.
그것들은 코드에서 암시하는 것처럼 중간 해시 요소로 제공하는 데 도움이되는 숫자 일뿐입니다. 그들은 반드시 아무것도 가지고 있지는 않습니다 의미 수학 상수를 암시 할 수 있지만 알고리즘에는 중요합니다.
그것은 당신의 질문에 답하지 않지만 SHA-1에 대한 실제 참조 (RFC에 설명 된 바와 같이)는 다음과 같습니다. FIPS 180. 더 이상 설명은 없지만 적어도 그것은 원래 출처입니다 :-(
또한 SHA-1은 오늘이라는 것을 기억하십시오 심각하게 멸종 위기에 처해 있습니다.