GOST(해시 함수)

GOST (hash function)
GOST R 34.11-94
일반
디자이너FAPSI 및 VNII 스탠다트(USR)
초판1994-05-23 (비밀 해제)
유래GOST 블록 암호
후계자스트리보그
인정.GOST 표준
세부 사항
다이제스트 사이즈256 비트
라운드32
최고의 퍼블릭 암호 분석
2008년 공격이 발생하면 풀라운드 해시 함수가 파손됩니다.이 문서에서는 충돌 공격은 2회105,[1] 프리이미지 공격은192 2회입니다.

표준 GOST R 34.11-94 및 GOST 34.311-95에 정의되어 있는 GOST 해시 함수는 256비트 암호화 해시 함수입니다.러시아 국가 표준 GOST R 34.11-94 정보 기술암호 정보 보안 – 해시 함수에 처음 정의되었습니다.CIS의 다른 회원국이 사용하는 동등한 표준은 GOST 34.311-95입니다.

이 함수는 표준 GOST R 34.11-2012[2]새로운 리비전에 정의되어 있는 다른 Streebog 해시 함수와 혼동해서는 안 됩니다.

GOST 해시 함수는 GOST 블록 암호에 기반합니다.

알고리즘.

GOST는 가변 길이 메시지를 256비트의 고정 길이 출력으로 처리합니다.입력 메시지는 256비트블록의 청크(8개의 32비트의 작은 엔디안 정수)로 분할됩니다.메시지는 메시지의 길이를 최대 256비트로 하는 데 필요한 수만큼 0을 추가하여 패딩됩니다.나머지 비트는 이전에 해시된 모든 블록의 256비트 정수 산술합과 원본 메시지의 길이를 나타내는 256비트 정수(비트)로 채워집니다.

기본 표기법

알고리즘 설명에는 다음 표기가 사용됩니다.

  • 0 j \ \ {} { g } j } :0 으로 채워진j비트 블록.
  • Mjmathcal { 비트 모듈로256 2의 M 블록 길이.
  • 두 블록의 결합.
  • +}): 2개의 블록256 모듈로의 산술 합계2
  • \oplus : 2개의 블록의 논리 xor

또한 소차 비트는 블록 왼쪽에 있고 상위 비트는 오른쪽에 있는 것으로 간주합니다.

묘사

입력 M({ M , -2. . , { m _ { n } , m_{n-1} , 로 분할됩니다.마지막 m})이 256비트보다 작은 값으로 선두에 추가됩니다.

각 블록은 스텝 t ( n, ){ H \ f ( { , 에 의해 처리됩니다. t \ H _ {} , n \ M 은 입니다

첫 번째 메시지 블록을 시작하는 각 메시지 블록은 스텝 해시 f f에 의해 처리되어 중간 해시 값을 계산합니다.

1 값은 임의로 선택할 수 있으며, 보통 0 0입니다.

+ 계산한 후 과 같이 최종 해시값을 구한다.

  • n + ( + , =\ 。여기서 L은 비트모듈로 2 2의 메시지 길이입니다.
  • ( n+ ,) { h \ = \ ( { + 2 ,\ K )} 。여기서 K는 M의 256비트 입니다: m + + +.+ { m _ { } + _ { 2 + m _ { 2 } + _ { 3 } + m _ { 3 } + m _ 3 } + { 3} ...

h h 메시지 M의 해시함수 값입니다.

GOST-hash-calculation.svg

이 알고리즘은 다음과 같이 동작합니다.

  1. 초기화:
    1. : n i l \ h \ : =} : 해시함수의 초기 256비트 값으로 사용자에 의해 결정됩니다.
    2. : { \\ : \ 0 } —
    3. : { L \ : = \ } :메시지 길이
  2. 내부 반복 압축 함수: i = 1 … n - 1의 경우 다음을 수행합니다(> { M >
    1. : ( , i) { h \ : = \ ( , \ _ { } } : 스텝 해시 함수 적용
    2. : + { \ : = \ \ + } – 메시지 길이 재계산
    3. : + m \ \ Sigma \ : = \ \ + \ _ { i} – 제어합계
  3. 최종 반복 압축 함수:
    1. : + m { L \ : = \ \ \ \ { } \ _ { \ \ \ \ { j –메시지 전체 길이를 비트 단위로 계산합니다.
    2. n: 256- k { _ { } \ : \ { - \ { \ { { \ {} m _ { } } { \ mathcal { k } m _ { n} - 마지막 메시지를 0으로 채웁니다.
    3. : + m n \ \ \ Sigma \ : \ + \ _ { n } -
    4. : ( , ) { h \ : = \ ( , \ m { } } : 마지막 메시지블록을 처리합니다.
    5. : ( ,) { \ : = \ ( , \ ) }– MD – 해싱 메시지 길이로 강화
    6. ( , )) { h \ : \ f ( , \ ) } – 해시 제어의 합계
  4. 출력값은 hh입니다.

스텝 해시 함수

스텝 해시 ff는 2개의 256비트 블록을 1개로 매핑합니다. f ( n,) { } \ = \ ( _ { , \ )다음 세 부분으로 구성되어 있습니다.

GOST-step-hash-function.svg
  • 생성 중
  • 사용하여 암호화하고 있습니다.
  • 셔플 변환

키 생성

키 생성 알고리즘은 다음을 사용합니다.

  • 256비트 블록의 2가지 변환:
    • A ( ) ( 4 3 y k ) ( 2 ) y k 2( \ A ( Y ) ( y{ \ \ \ { k } \ { {l 여기서 ,, Y의 64비트 서브블록입니다.
    • P ( ) ( y k k ... ) ) k ( ) … k ( { } { \ } _ } { \ { } \ { k { k } { k ( 1 + + ( -) 8 + , 0 , , , k , , \ \ + 1 ( k - 1 ) = , \ i=, \,3,\ =1 , ,
  • 세 가지 상수:
    • C2 =0
    • C3 = 0xff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00
    • C4 = 0

알고리즘:

  1. j = 2,3,4의 경우 다음을 수행합니다.

변환 암호화

생성 후 하여,K2, K3, }, K_3}, K_{ 키 생성 후 암호화가 .암호화를 나타냅니다.256비트 키)암호화의 경우 4개의 64비트 블록으로 분할됩니다. n k h 1{ H _ { } =_ { } { \ { } h { } { \ { k_ { } { \ { k } h _ { { k }}、 각 블록은 다음과 같이 암호화됩니다.

그 후 결과 블록은 S s s {\ S {\ {{k}의 256비트 블록으로

셔플 변환

마지막 단계에서 셔플 변환은 선형 피드백 시프트 레지스터를 하여 S 및 m에 됩니다.그 결과 중간 t { 얻을 수 있다.

먼저 256비트 블록에서 을 실행함으로써( Y ) ( yk. . . y 1) ( y 3 4 y y ) .k .( \ 2 ) 。{{}}. y16 ., y2, ({y_},15 ..., Y의 16비트 서브블록입니다

GOST-psi-function.svg

셔플 t 61 m ) { out } \ }^{) 。

GOST-R-34.11-94-shuffle-transformation.svg

초기값

GOST R 34.1114에는 일반적으로 사용되는2개의 초기 파라미터 세트가 있습니다.두 세트의 시작 벡터는

 1({  0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000. 

GOST R 34.1194 표준 자체에서는 변환E의 알고리즘 H1(\1S-box는 지정되어 있지 않지만 샘플섹션에서는 [3]다음 '테스트 파라미터'를 사용합니다.

"테스트 파라미터" S박스

RFC 5831에서는 이들 파라미터만 규정되어 있지만 RFC 4357에서는 이들 파라미터는 '테스트 파라미터'로 지정되어 있어 실제 가동 어플리케이션에서의 사용을 권장하지 않습니다.

S박스 번호 가치
1 4 10 9 2 13 8 0 14 6 11 1 12 7 15 5 3
2 14 11 4 12 6 13 15 10 2 3 8 1 0 7 5 9
3 5 8 1 13 10 3 4 2 14 15 12 7 6 0 9 11
4 7 13 10 1 0 8 9 15 14 4 6 12 11 2 5 3
5 6 12 7 1 5 15 13 8 4 10 9 14 0 3 11 2
6 4 11 10 0 7 2 1 13 3 6 8 5 9 12 15 14
7 13 11 4 1 3 15 5 9 0 10 14 7 6 8 2 12
8 1 15 13 0 5 7 10 4 9 2 3 14 6 11 8 12

CryptoPro S박스

CryptoPro S-box는 CryptoPro 회사가 개발한 "production ready" 파라미터 세트에 포함되어 있으며 RFC 4357, 섹션 11.2의 일부로 지정되어 있습니다.

S박스 번호 가치
1 10 4 5 6 8 1 3 7 13 12 14 0 9 2 11 15
2 5 15 4 0 2 13 11 9 1 7 6 3 12 14 10 8
3 7 15 12 14 9 4 1 0 3 11 5 2 6 10 8 13
4 4 10 7 12 0 15 2 8 14 1 6 5 13 11 9 3
5 7 6 4 11 9 12 2 10 1 8 0 14 15 13 3 5
6 7 6 2 4 13 9 15 0 10 1 5 11 8 14 12 3
7 13 14 4 1 7 0 5 10 3 12 8 15 6 2 9 11
8 1 3 10 9 5 11 4 15 8 6 7 14 13 0 2 12

암호 분석

2008년에는 GOST 해시 함수를 완전히 파괴하는 공격이 발행되었습니다.n 문서에서는 2회의 충돌105 공격과 2회의 두 번째 프리이미지 공격을 제시하고 있습니다192(2회는 [1]공격에서 알고리즘이 계산된 대략적인 횟수를 나타냅니다).

GOST 해시 테스트 벡터

"테스트 매개변수"에 대한 해시

256 비트(32 바이트)의 GOST 해시는, 통상은 64 자리수의 16 진수로 표시됩니다.다음은 "test parameters"를 사용하는 GOST 해시에 대한 테스트 벡터입니다.

GOST("빠른 갈색 여우는 게으른 개를 뛰어넘는다") = 77b7fa(c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294)

메시지를 조금만 변경해도 눈사태의 영향으로 인해 완전히 다른 해시가 발생할 가능성이 매우 높습니다.예를 들어 d를 c로 변경하는 경우:

GOST("빠른 갈색 여우는 게으른 톱니바퀴를 뛰어넘는다") = a3ebc4daab78be (5737a7f67e602670d5435213352e14eeec445)

GOST R 34.11-94 [3]규격에서 가져온 두 가지 샘플:

GOST("This is message, length=32 bytes") = b1c466d37b82e8319ff32595e047a28cb6f8311c6916a815a637ffa GOST("원래 메시지의 길이가 50바이트임을 전제로 합니다") = 471ab57a606a1303a

기타 테스트 벡터:

GOST(")" = ce85b99cc46752ffee35cab9a7b0278c2d2055cff685af4912c49490f8d GOST("a") = d42c539e367e981f6a801f6649c218718714f4c4aST('a'의 1000000 문자) = 5c00cc2734cd3332d3d4749576e3c1a7dbaf0e7ea74e9fa6024c90a fa

CryptoPro 파라미터 해시

CryptoPro S-box를 사용하는 GOST 알고리즘은 다른 해시 값 세트를 생성합니다.

GOST("a") = 981e5f3ca30c841487830fb433e13ac1101569b9c13584ac483234cd656c0 GOST("a") = e74cdd282183b370079c78055f17ffff17ffffff1401a여우는 게으른 개를 뛰어넘는다." = 9004294a361a508c586fe53d1f0274657655e71b765472786e4770d565830a76 GOST("ABCDEFGHIJKLMNOPQRSTUVWXYZABCUVCJUVCMST")3ae8842bf9d752905910a61e5gs0782de43e610c90 GOST("This is message, length=32 bytes")= 2cefc2f7b7bdc514ea57fa57f357e7fa7fa7fa17d652f69cbe7be789348(GoSTeb)7cd1027514c1008f649c4e8 GOST ("a"의 1000000) = 8693287aa62f9478f7cb312ec0866b6c4e4a0f11160441e8fcd554f

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Mendel, Florian; Pramstaller, Norbert; Rechberger, Christian; Kontak, Marcin; Szmidt, Janusz (2008). "Cryptanalysis of the GOST Hash Function". In Wagner, David (ed.). Advances in Cryptology – CRYPTO 2008. Lecture Notes in Computer Science. Vol. 5157. Germany: Springer Berlin Heidelberg. pp. 162–178. doi:10.1007/978-3-540-85174-5_10. ISBN 978-3-540-85173-8.
  2. ^ GOST R 34.11-2012: Streebog 해시 함수
  3. ^ a b "GOST R 34.11-94 standard. Information technology. Cryptographic data security. Hashing function. Addition A." 1994. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)

추가 정보

외부 링크