암호 기술의 기초와 응용

비밀 키 K와 메시지 m을 이은 값의 해시값 SHA-256(K ‖ m)을 변조 검출용 태그로 사용하는 것은 위험하다고 여겨진다. 그 이유로 올바른 것은?

  1. A태그와 입력의 길이를 알면, K를 모르더라도 m 뒤에 데이터를 덧붙인 메시지의 태그를 계산할 수 있기 때문에
  2. BSHA-256의 출력으로부터 입력의 앞에 둔 키 K 부분만을 역산하는 효율적인 방법이 발견되었기 때문에
  3. C키 K를 메시지 앞에 두면 입력이 길어져, SHA-256에서는 충돌이 발견되기 쉬워지기 때문에
정답과 해설 보기

정답: A. 태그와 입력의 길이를 알면, K를 모르더라도 m 뒤에 데이터를 덧붙인 메시지의 태그를 계산할 수 있기 때문에

SHA-256 같은 Merkle–Damgård 구조의 해시 함수에서는 출력되는 해시값이 마지막 블록을 처리한 후의 내부 상태 그 자체입니다. 그래서 공격자는 태그를 내부 상태로 삼아 계산을 이어 가, K ‖ m에 정해진 형태의 패딩과 임의의 데이터를 붙인 메시지의 해시값을 K를 모른 채 계산할 수 있습니다(길이 확장 공격). HMAC은 키로부터 만든 두 값을 사용하여, 안쪽 해시값을 한 번 더 키와 함께 해시하는 구조로 이 공격을 막습니다. SHA-3은 구조상 이 공격을 받지 않으므로, 키를 앞에 붙이기만 하는 KMAC이라는 방식도 표준화되어 있습니다.

이 분야 연습하기 분야로 돌아가기

암호 기술의 기초와 응용의 다른 문제

  1. 1 GiB = 2³⁰바이트, 1 EiB = 2⁶⁰바이트로 한다. 블록 길이가 64비트인 블록 암호(3DES 등)를 CBC 모드로 사용하여, 하나의 키로 대량의 데이터를 암호화한다. 암호문 블록을 무작위 64비트 값으로 간주할 때, 생일 역설에 의해 같은 암호문 블록 쌍이 나타날 확률을 무시할 수 없게 되는 데이터양의 기준은?
  2. TLS 1.3 등의 프로토콜에서 ECDHE 키 교환으로 얻은 공유 비밀을 그대로 암호 키로 사용하지 않고, HKDF 같은 키 유도 함수(KDF)를 거쳐 키를 만드는 이유로 적절한 것은?
  3. RSA 암호의 구조를 작은 수로 확인한다. 소수 p = 5, q = 11로부터 n = pq를 만들고, 공개 지수를 e = 3으로 한다. φ(n) = (p − 1)(q − 1)이라 할 때, e × d ≡ 1 (mod φ(n))을 만족하는 비밀 지수 d(0 < d < φ(n))는?
  4. RSA 암호에서 공개 키를 n = 55, e = 3으로 한다. 평문 m = 7을 c = m^e mod n으로 암호화했을 때의 암호문 c는?
  5. 교과서 그대로의 RSA 암호(평문 m을 그대로 c = m^e mod n으로 하는 방식)를 패딩을 붙이지 않고 실제 통신에 사용하는 것의 문제점으로 올바른 것은?