임의의 바이트 열에 대하여 해시를 계산할 수 있는 알고리즘
미국 국가 안보국 NSA 에서 설계 하였으며, SHA-1, SHA-2 가 차례로 개발됌.
SHA-2 그룹 중 SHA-256/512 해시 알고리즘을 많이 사용하며 뒤에 붙은 숫자는 다이제스트 (결과 바이트 수)를 만들어내는 해시 함수를 의미한다.
ex) SHA-256은 4바이트 * 8 (32 * 8), SHA-512의 경우 8바이트 * 8 (64 * 8)

데이비스 - 마이어 Davies-Meyer의 단 방향 압축 함수 PlainText (H_i-1) + Key(m_i) -> CipherText (Hi) 를 만들어내는 구조가 기본 바탕이며 Merkle-Damgard 구성 을 더해 충돌 방지 암호화 해시 함수를 설계되었다.
성능
원본 바이트를 추적하기 어렵게 하는 역상 저항성 (preimage resistance)과 두 plaintext의 해시 충돌이 적도록 하는 충돌 저항성 (collision resistance)에 대해 실용적인 보안 수준을 제공
[by gpt]
1. Preimage Resistance (역상 저항성)
• 정의: 주어진 해시 값 H에 대해, 원래 입력값 M을 찾는 것이 계산적으로 어려운 성질입니다. 즉, H = Hash(M)인 M을 찾는 것이 매우 어렵다는 것을 의미합니다.
• 문장에서의 의미:
• SHA-256의 경우, 64라운드 중 52라운드에 대해 역상 저항성을 깨는 공격이 존재합니다.
• SHA-512의 경우, 80라운드 중 57라운드에 대해 역상 저항성을 깨는 공격이 존재합니다.
• 이는 전체 라운드 수보다 적은 라운드에서만 공격이 가능하다는 것을 의미하며, 전체 라운드에서는 여전히 안전하다는 것을 암시합니다.
---
2. Collision Resistance (충돌 저항성)
• 정의: 서로 다른 두 입력값 M1과 M2에 대해, 동일한 해시 값 H를 생성하는 것이 계산적으로 어려운 성질입니다. 즉, Hash(M1) = Hash(M2)인 M1과 M2를 찾는 것이 매우 어렵다는 것을 의미합니다.
• 문장에서의 의미:
• SHA-256의 경우, 64라운드 중 46라운드에 대해 충돌 저항성을 깨는 공격이 존재합니다.
• 이는 전체 라운드 수보다 적은 라운드에서만 충돌 저항성을 깨는 것이 가능하며, 전체 라운드에서는 여전히 안전하다는 것을 암시합니다.
---
3. 공격의 의미
• "공격이 가능하다"는 의미:
• 특정 라운드 수에서 공격이 가능하다는 것은, 이 라운드 수에서 해시 알고리즘의 보안 강도가 약화된다는 것을 의미합니다.
• 그러나 전체 라운드 수에서 공격이 불가능하다면, 해당 해시 알고리즘은 여전히 안전하다고 간주됩니다.
• 공격의 실제 영향:
• 이 공격들은 이론적인 연구 결과에 기반하며, 실제로는 매우 높은 계산 비용이 필요합니다.
• 따라서, SHA-256과 SHA-512는 여전히 실용적인 보안 수준을 제공합니다.
CryptoPP 간단한 예제
#include <cryptopp/sha.h>
#include <cryptopp/hex.h>
#include <cryptopp/filters.h>
std::string SHA512::Compute(const std::string_view& source) {
std::string digest;
CryptoPP::SHA512 hash;
CryptoPP::StringSource(source.data(), true,
new CryptoPP::HashFilter(hash,
new CryptoPP::HexEncoder(
new CryptoPP::StringSink(digest))));
return digest;
}'C++ > 암호학' 카테고리의 다른 글
| [CryptoPP] SRP 프로토콜 (Secure Remote Password Protocol) (1) | 2025.08.30 |
|---|