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

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
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (129)
      • IT 지식 (5)
      • CS (66)
        • 알고리즘 & 자료구조 (19)
        • 운영체제 (41)
        • 네트워크 (1)
        • 데이터베이스 (5)
      • 보안 (6)
      • SW 공학 & 프로그래밍 언어 (5)
        • Java (28)
        • 디자인 패턴 (1)
        • 형상관리 (2)
        • 톰캣(WAS) (2)
        • SW 방법론 (3)
        • 스프링부트 (5)
      • 시스템 설계 (4)
        • Docker (2)
      • 자격증 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

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

    티스토리툴바