본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/Hello기술

[암호] aes, sha 알고리즘의 특징

by 미노드 2025. 11. 25.

업무를 진행하며 암호화 알고리즘으로 어떤 것을 선택해야 할지 판단 기준이 모호하고 어려운 부분이 있어 이부분에 대해 정리하고 넘어가려고 한다.

1. AES (Advanced Encryption Standard)

→ 대칭키 암호화 알고리즘

 

  • 암호화·복호화에 동일한 키를 사용한다.
  • 데이터를 숨기는 용도(기밀성).
  • 블록 단위로 데이터를 암호화한다. ( 128bit, 192bit, 256bit 키 지원 )
  • 키 길이가 길수록 안전하지만 연산량이 약간 증가
  • AES-256은 현재 전 세계적으로 가장 강력한 표준 대칭키 암호

1.1 동작 방식(운용 모드)

블록암호라 “어떻게 묶어서 암호화할지” 모드가 중요함.

  • ECB: 블록 반복 노출 → 보안 취약 (실무에서 금지)
  • CBC: 초기화 벡터(IV) 필요, 패딩 필요 (AES/CBC/PKCS5Padding)
  • GCM: 암호 + 무결성 검증까지 제공 → 최신 표준
  • CTR: 패딩 불필요, 병렬처리 빠름

1.2 장단점

✔ 장점

  • 매우 빠름
  • 대용량 데이터 처리 적합
  • 하드웨어 가속(AES-NI) 지원으로 성능 뛰어남

✔ 단점

  • 키 관리가 어렵다(같은 키를 양쪽 모두 안전하게 보관해야 함)
  • 키가 유출되면 복호화 가능 → 기밀성 완전히 붕괴

2. SHA (Secure Hash Algorithm)

→ 해시 함수 / 단방향 함수

 

  • 입력 데이터를 고정 길이의 해시값으로 변환
  • 절대 복호화 불가능(단방향)
    → 암호가 아니라 지문 만드는 방식, 역함수가 없어 복호화 불가능
    → 레인보우 테이블(Rainbow Table)
  • 데이터가 바뀌었는지 확인(무결성)
  • 비밀번호 저장(평문 대신 해시 저장)
  • 디지털 서명·토큰 생성(JWT 등)

2.1 해시 함수 종류

  • SHA-1 (취약) — 사용 금지
  • SHA-256 — 가장 널리 사용되는 표준
  • SHA-384, SHA-512 — 더 긴 해시값 제공

2.2 해시 함수 특성

  • 동일 입력 → 항상 동일 해시값 출력 (Deterministic)
  • 입력 조금만 바뀌어도 완전히 다른 값 출력 (Avalanche 효과)
  • 해시값으로 원래 데이터 복원 불가
  • 충돌이 발생하기 어려움

2.3 장단점

  • 빠르고 단순
  • 데이터 무결성 체크에 최적
  • 저장 공간 적게 사용(고정 길이)
  • 암호화가 아니므로 데이터 보호 불가능
  • 단독으로 비밀번호 보호에 쓰면 위험 → 단순 SHA-256(password) 금지
    → 반드시 salt + 반복 횟수 필요 (PBKDF2, bcrypt, scrypt)

2.4 Salt

?? **Salt(솔트)**는 해시(Hash) 과정에 섞어 넣는 임의의 랜덤 문자열.
SHA-256 같은 해시는 같은 입력 → 같은 출력이라는 특징 때문에, 보안에서 취약점이 생기는데, 이를 막기 위한 필수 요소가 바로 salt
- Salt가 추가되면 이렇게 바뀐다. (즉 기존의 hash값으로 찾는게 불가능해진다. 미리 계산된 값으로 추적 불가능)
SHA256("123456" + salt1) → 8fa1...
SHA256("123456" + salt2) → c21e...

1) 사용자별로 다른 salt를 사용, salt는 각 계정마다 랜덤 생성하는 게 원칙.
2) salt는 비밀키가 아니며, 평문으로 DB에 저장해도 괜찮다.
    salt의 목적은 비밀번호 패턴을 깨뜨리는 것이지 감추는 게 아님.
3) 길고 예측불가능해야 한다. (8~16바이트 이상 랜덤값 사용.)
4) 반복 연산(PBKDF2/bcrypt/argon2)과 함께 써야 더욱 안전
   SHA-256 단독 + salt → 여전히 빠르기 때문에 공격자도 빨리 계산 가능
   ➡ 그래서 bcrypt / PBKDF2 / Argon2 같은 “느린 해시 함수”를 사용해야 안전함.

비교 요약


구분 AES SHA
유형 대칭키 암호화 해시 함수
목적 데이터 기밀성 무결성, 비밀번호 해싱
키 존재 있음(암호화·복호화 동일 키) 없음
역변환 가능 불가능
출력 길이 입력 크기와 동일(암호문) 고정 크기(예: 256bit)
사용 예 파일 암호화, TLS, DB 암호화 JWT, 비밀번호 저장, 체크섬

3. 언제 AES, 언제 SHA?

🔸 AES 사용해야 할 상황

  • DB에 중요한 값을 암호화해야 함
  • 통신 데이터를 암호화해야 함
  • 파일을 저장하는데 외부 유출 위험이 있음
    복호화가 필요한 데이터

🔸 SHA 사용해야 할 상황

  • 비밀번호 저장
  • 데이터가 변경되었는지 검증
  • 토큰 서명(JWT의 Signature 부분)
    복호화가 필요 없는 데이터

참고, Spring Security 표준 암호화 방식인 BCrypt 도 단방향 암호화, 해시 방식.

🔸 Spring Security 기본 PasswordEncoder는 BCryptPasswordEncoder

장점

  • 자동 솔팅(salt 포함)
  • 비용(cost factor)로 연산 난이도 조절 가능
  • 무차별 대입 공격에 강함
  • Java/Spring 진영에서 가장 널리 사용됨

Spring Security 5+에서는 PasswordEncoderFactories.createDelegatingPasswordEncoder() 의 기본 알고리즘이 {bcrypt} 로 되어 있음 → 표준 채택이라는 의미.