← ALL ENTRIES

암복호화


단방향 암호화 (해시)

  • 복호화가 불가능 — 원문을 알아낼 수 있는 역함수가 존재하지 않음
  • 데이터가 유출되어도 원문 복구가 어려워 패스워드 등 원문 복원이 필요 없는 경우에 사용
  • 같은 입력은 항상 같은 출력을 생성 (결정적 함수)

대표 알고리즘

알고리즘출력 길이비고
MD5128bit충돌 취약점 발견, 보안 용도 비권장
SHA-1160bit충돌 취약점 발견, 보안 용도 비권장
SHA-256256bit현재 널리 사용되는 표준
SHA-512512bitSHA-256보다 긴 해시 필요 시 사용

취약점: 레인보우 테이블

  • 자주 쓰이는 평문(비밀번호 등)의 해시값을 미리 계산해 놓은 테이블
  • 해시값만 탈취하면 테이블에서 역으로 원문을 찾아낼 수 있음

대응: Salt

  • 해시 전에 랜덤 문자열(Salt) 을 평문에 덧붙여서 해시
  • 같은 비밀번호라도 Salt가 다르면 해시값이 달라지므로 레인보우 테이블 무력화
  • Salt는 해시값과 함께 저장 (비밀일 필요 없음, 유일하면 됨)

bcrypt

  • 패스워드 해싱에 특화된 알고리즘
  • 해시할 때마다 랜덤 Salt를 자동 생성하여 결과값에 포함시킴
  • 따라서 같은 비밀번호를 저장해도 매번 다른 해시값이 생성됨
  • Salt는 유저마다 달라야 의미가 있음 — 동일 Salt를 쓰면 레인보우 테이블을 다시 만들 수 있으므로 무의미
  • cost factor(반복 횟수)를 설정할 수 있어 하드웨어가 발전해도 연산 비용을 높여 brute force 방어 가능
  • 결과값 구조: $2b$[cost]$[22자리 Salt][31자리 해시]
    • 예: $2b$12$WApznUPhDubN0oeveSXHru.aTi0MUsMPmSADfMi6YNXBsLFLOP3u6
  • 비밀번호 검증 시: 저장된 해시에서 Salt를 꺼내고, 입력값에 같은 Salt를 적용해 해시 비교

💡 TIP 다른 패스워드 전용 해시 함수

  • scrypt: bcrypt + 메모리 비용 추가 (GPU 공격 방어)
  • Argon2: 현재 가장 권장되는 알고리즘, 시간/메모리/병렬도 모두 조절 가능

양방향 암호화

  • 복호화가 가능 — 키를 이용해 암호문을 원문으로 복원
  • 주민번호, 카드번호 등 비식별화 처리가 필요하지만 복원도 필요한 데이터에 사용

대칭키 암호화

  • 하나의 키로 암호화와 복호화를 모두 수행
  • 속도가 빠르고 대량 데이터 처리에 적합
  • 키를 안전하게 공유하는 것이 핵심 과제

대표 알고리즘

알고리즘키 길이비고
AES-128128bit현재 표준, 속도와 보안 균형
AES-256256bit더 높은 보안 강도
DES56bit취약, 현재 사용 비권장
3DES168bitDES 보완, AES로 대체 추세

블록 암호 운용 모드

  • ECB (Electronic Codebook): 블록 단위로 독립 암호화. 같은 평문 블록이 같은 암호문을 생성하므로 패턴이 노출되는 취약점이 있음
  • CBC (Cipher Block Chaining): 이전 암호문 블록을 다음 블록 암호화에 사용. 첫 블록은 IV(초기화 벡터) 를 사용
  • GCM (Galois/Counter Mode): 암호화 + 무결성 검증을 동시에 제공. 현재 가장 권장되는 모드

IV (Initialization Vector)

  • 같은 키 + 같은 평문이라도 매번 다른 암호문을 만들기 위한 랜덤 값
  • 암호화할 때마다 새로운 IV를 생성해야 함
  • IV는 암호문 앞에 붙여서 함께 저장하며, 복호화 시 이 IV를 읽어서 사용
  • IV 자체는 비밀이 아님 (공개되어도 키 없이는 복호화 불가)

비대칭키 암호화

  • 공개키(Public Key) 로 암호화, 개인키(Private Key) 로 복호화
  • 키 교환 문제를 해결하지만 대칭키보다 속도가 느림
  • 실무에서는 대칭키를 비대칭키로 암호화해서 전달하는 하이브리드 방식 사용 (ex. HTTPS/TLS)

대표 알고리즘

알고리즘비고
RSA가장 널리 사용, 키 길이 2048bit 이상 권장
ECCRSA보다 짧은 키로 동등한 보안 강도 제공

활용

  • HTTPS/TLS: 비대칭키로 대칭키를 교환한 뒤, 실제 통신은 대칭키로 수행
  • 전자서명: 개인키로 서명, 공개키로 검증 (암호화와 반대 방향)
  • SSH: 서버 인증 및 키 교환에 사용