SHA-2

MySprtlty·2022년 11월 14일
0

Applied Cryptography

목록 보기
3/11

🏷️SHA-2

  • SHA-1의 공식 후속 표준이다.
    • cf. SHA-1과 MD5는 collision resistance가 깨졌다.
  • SHA-2에는 4가지 버전 (SHA-224, SHA-256, SHA-384, SHA-512)가 있다.
  • 각각 이름대로 지정된 길이의 다이제스트를 반환한다.
  • SHA-512/224, SHA-512/256같이 SHA-512를 truncate해서 사용하는 버전도 있다.
openssl version
OpenSSL 1.1.1f  31 Mar 2020
echo -n "Hello World!" | openssl dgst -sha256
(stdin)= 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069

📌SHA-256

  • SHA-2중 가장 많이 쓰인다.
  • 해시 함수의 세가지 보안 속성 (Pre-image resistance, Second pre-image resistance, Collision resistance)에 128 Bits 보안을 제공한다.

Compression Function

  • A compression function mixes two fixed length inputs and produces a single fixed length output of the same size as one of the inputs.
  • SHA-2는 block cipher에 의존하는 Davies–Meyer 방법을 사용한다.

Merkle–Damgård construction

  • SHA-2는 compression function을 반복적으로 호출하여 message를 해시하는 알고리즘인 Merkle–Damgård construction이다.

Nothing-up-my-sleeve

  • 백도어 생성 목적으로 해시 함수를 일부러 약하게 만드는 값을 선택하지 않았음을 확실히 한다는 의미로 암호학계에서 사용되는 값이다.
  • compression function의 두 번째 인수를 Nothing-up-my-sleeve값으로 고정한다.
  • FIPS PUB 180-4, Secure Hash Standard (SHS) 문서에 정의되어 있다.

    For SHA-256, the initial hash value, H(0), shall consist of the following eight 32-bit words, in hex:
    H0(0)H_{0}^{(0)} = 6a09e667
    H1(0)H_{1}^{(0)} = bb67ae85
    H2(0)H_{2}^{(0)} = 3c6ef372
    H3(0)H_{3}^{(0)} = a54ff53a
    H4(0)H_{4}^{(0)} = 510e527f
    H5(0)H_{5}^{(0)} = 9b05688c
    H6(0)H_{6}^{(0)} = 1f83d9ab
    H7(0)H_{7}^{(0)} = 5be0cd19
    These words were obtained by taking the first thirty-two bits of the fractional parts of the square roots of the first eight prime numbers.

📌SHA-2와 보안

  • SHA-2는 length extension attack에 취약하기에, SHA-2로 비밀을 해시해서는 안된다.

  • 이는 compression function을 반복적으로 호출하는 Merkle–Damgård construction의 단점 때문이다.

  • SHA-2는 입력과 digest 쌍으로부터 다른 입력과 digest를 계산할 수 있다.

  • 즉, 공격자는 padding 부분이 입력의 일부인 것처럼 가장해서 Merkle–Damgård 계산한다면, 이전 해시를 이용하여 올바른 해시를 계산해낼 수 있게 된다.

  • SHA-256(secret || message || secret)같은 방식의 대안이 있다.

  • 🖇️cf. ||는 문자열 연결 연산자이다.

  • 이러한 이유로 SHA-2를 사용하려면 HMAC을 쓰고, SHA-3를 쓰려면 KMAC을 사용하자.

profile
2Co 4:7

0개의 댓글