단방향 암호화(해시 알고리즘)

2025. 7. 12. 14:14·보안
728x90
반응형

단방향은 왜 해싱을 사용할까? 해싱은 복호화가 불가능한 방식이 때문에 사용하는 것입니다.


단방향 해싱의 특징

입력값을 일정한 길이의 공전된 값으로 변환하여 DB컬럼 길이를 일정하게 유지가 가능합니다.
복호화가 불가능하므로 원본으로 돌릴 수 없기에 데이터 탈취해도 무의미 합니다.
항상 같은 입력값은 항상 같은 출력값을 나옵니다. 그래서 이러한 입력에 대한 출력 테이블 있으면 해킹이 될거 같은데라고 생각할 수 있습니다. 그래서 레인보우 테이블이란 데이터 집합으로 보안에 문제가 발생한 적이 있었죠… 이후에는 salt 라는 기법으로 이 방법을 해결합니다.


해시로 저장해야 할까?

비밀번호 등 복호화하지 않아야 할 데이터입니다. 즉, 누가 탈취해도 알 수 없기에 굉장히 안정적입니다. 예로 앱의 패스워드가 해싱을 적용한다면 앱의 관계자는 패스워드 복호화 할 수 없기 때문에 사용자 측면에서 안정성 & 신뢰성이 생깁니다.


사용 가능한 해시 알고리즘

알고리즘 복호화 가능 여부 비밀번호에 적합 여부 비고
MD5 ❌ 단방향 ❌ 위험 (빠름, 충돌 다발) X
SHA-256 ❌ 단방향 ⚠️ 보완 필요 (솔트 없음) 단독 사용 금지
bcrypt ❌ 단방향 ✅ 권장 솔트 + 느린 계산 = 안전
scrypt ❌ 단방향 ✅ 권장 메모리 의존성 ↑
Argon2 ❌ 단방향 ✅ 최신 권장 2015년 비밀번호 해시 대회 수상

(참고) Spring Security 에서는?

일반적으로 bcrypt를 사용합니다. 스프링에서는 bcrypt 암호화를 하게 되면 {bcrypt} 라는 접두어로 암호화된 값 앞에 알고리즘 식별용으로 접두어를 적용합니다.

  • DelegatingPasswordEncoder를 통해 암호흘 생성할 떄만 {암호화 알고리즘} 접두어 추가됩니다.
  • BCryptPasswordEncoder 직접 사용하면 {암호화 알고리즘}은 붙지 않습니다.
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
String encoded = encoder.encode("password");
System.out.println(encoded); // {bcrypt}로 시작하는 문자열 출력

정리

항목 내용
단방향 암호화 = 해싱? ✅ 맞음. 복호화 불가
해시만으로 충분한가? ❌ Salt 필수 (충돌, 무차별 대입 방지)
비밀번호 해싱 추천 알고리즘 ✅ bcrypt, ✅ Argon2, ✅ PBKDF2
{bcrypt} 의미 Spring Security의 알고리즘 식별자 prefix
직접 {bcrypt} 붙이나? ❌ 아님. PasswordEncoder가 자동으로 붙임
728x90
반응형
저작자표시 비영리 (새창열림)

'보안' 카테고리의 다른 글

[암호화] 웹 보안은 SSL!  (0) 2025.08.19
[암호화] 대칭키란?  (0) 2025.08.19
UUID(Universally Unique Identifier) 버전과 사용법  (6) 2025.08.10
암호화(Encryption)에 대해서  (1) 2025.07.12
JCE 암호화 트러블 슈팅  (1) 2025.04.29
'보안' 카테고리의 다른 글
  • [암호화] 대칭키란?
  • UUID(Universally Unique Identifier) 버전과 사용법
  • 암호화(Encryption)에 대해서
  • JCE 암호화 트러블 슈팅
크크크크
크크크크
공뷰를 합시다.
    반응형
  • 크크크크
    Tom's Note
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (130)
      • IT 지식 (6)
      • CS (66)
        • 알고리즘 & 자료구조 (19)
        • 운영체제 (41)
        • 네트워크 (1)
        • 데이터베이스 (5)
      • 보안 (6)
      • SW 공학 & 프로그래밍 언어 (5)
        • Java (28)
        • 디자인 패턴 (1)
        • 형상관리 (2)
        • 톰캣(WAS) (2)
        • SW 방법론 (3)
        • 스프링부트 (5)
      • 시스템 설계 (4)
        • Docker (2)
      • 자격증 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      /etc/passwd
      chmod
      2차
      ADsP
      알고리즘
      su
      1급
      cifs
      usermod
      man
      java
      REST API
      문제해결
      DTO
      분석기법
      암호설정
      docker
      비트연산
      whatis
      불변
      DI
      리눅스
      스프링부트
      Chage
      whereis
      단반향
      passwd
      apropos
      which
      자바
    • 최근 댓글

    • 최근 글

    • 250x250
    • hELLO· Designed By정상우.v4.10.3
    크크크크
    단방향 암호화(해시 알고리즘)
    상단으로

    티스토리툴바