본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

패스워드 기반 암호(Password Based Encryption, PBE)는 사람이 기억하는 패스워드와 솔트로부터 키 유도 함수로 암호 키를 만들어, 그 키로 데이터나 다른 키를 암호화하는 방식이다.

패스워드는 길이가 짧고 사람이 고른 것이라 그대로 암호 키로 쓰기에는 엔트로피가 부족하다. 그래서 패스워드를 직접 키로 쓰지 않고, 패스워드와 솔트(salt), 반복 횟수(iteration count)를 키 유도 함수(KDF)에 넣어 키를 만든다. RSA 연구소의 PKCS #5 를 IETF 가 옮긴 RFC 8018 은 패스워드 기반 키 유도를 패스워드·솔트·반복 횟수의 함수로 정의하고, 이렇게 얻은 키를 일반 대칭 암호에 넘기는 2단 구조로 패스워드 기반 암호화와 메시지 인증을 정의한다. 솔트와 반복 횟수는 비밀로 지킬 필요가 없다.[1]

대표 키 유도 함수는 RFC 8018 의 PBKDF2 이고, 자바 암호 확장(JCE)의 PBEWith... 알고리즘, 압축·문서 프로그램의 암호 설정, PGP 계열 프로그램이 개인키 파일을 보호할 때 이런 방식을 쓴다.

패스워드 기반 암호에는 키가 두 단계로 나온다.

  • KEK(Key Encryption Key, 키 암호화 키) - 패스워드와 솔트를 키 유도 함수에 넣어 만든 키이다. 메시지를 직접 암호화하지 않고 아래 CEK 를 암호화하는 데 쓴다
  • CEK(Content Encryption Key, 내용 암호화 키) - 의사 난수 생성기로 만든 무작위 키로, 실제 메시지(내용)를 암호화한다
  • 솔트 - 의사 난수 생성기로 만든 무작위 값으로, 패스워드와 함께 KEK 를 만드는 입력이 된다. 복호화할 때 같은 KEK 를 다시 만들어야 하므로 암호문과 함께 보관한다

NIST SP 800-132 도 패스워드에서 유도한 마스터 키(MK)를 데이터에 바로 쓰는 방법과, 마스터 키로 별도의 데이터 보호 키(DPK)를 감싸 보호하는 방법을 함께 제시한다. 뒤의 방법을 쓰면 패스워드를 바꿀 때 데이터 전체를 다시 암호화하지 않고 감싼 키만 다시 암호화하면 된다.[2]

암호화
  1. 의사 난수 생성기로 솔트를 만든다
  2. 패스워드와 솔트를 키 유도 함수(일방향 해시를 여러 번 반복)에 넣어 KEK 를 만든다
  3. 의사 난수 생성기로 CEK 를 만들고, 메시지를 CEK 로 암호화한다
  4. CEK 를 KEK 로 암호화하고, 솔트·암호화된 CEK·암호문을 함께 저장한다. KEK 자체는 저장하지 않는다
복호화
  1. 저장된 솔트와 사용자가 입력한 패스워드로 KEK 를 다시 만든다
  2. KEK 로 CEK 를 복호화하고, CEK 로 메시지를 복호화한다

솔트와 반복 횟수의 역할

편집 원본 편집

RFC 8018 은 솔트의 효과를 두 가지로 설명한다.[1]

  • 사전 공격 무력화 - 같은 패스워드라도 솔트에 따라 서로 다른 키가 나온다. 솔트가 64비트면 패스워드 하나에 264 개의 키가 대응하므로, 공격자가 패스워드 사전에서 키를 미리 계산해 둘 수 없다. 공격자는 솔트를 안 뒤에야 패스워드를 하나씩 대입해 볼 수 있다 → 사전 공격, 레인보우 테이블
  • 같은 키가 두 번 나오지 않게 함 - 무작위 솔트 덕분에 같은 패스워드로 여러 번 암호화해도 키가 겹칠 가능성이 낮다

반복 횟수는 키 유도를 일부러 느리게 만들어 대입 한 번의 비용을 높인다. 정상 사용자는 한 번만 계산하면 되지만 공격자는 후보마다 그 비용을 치른다.[1]

솔트는 저장된 값에 대한 오프라인 대입 공격을 어렵게 하는 장치이다. 통신 중간에 끼어들어 메시지를 가로채고 바꾸는 중간자 공격은 솔트와 상관이 없으며, 상대 인증과 키 교환 보호(인증서, 전자서명)로 막는다. 또 솔트는 약한 패스워드 자체를 강하게 만들지 못하므로, 짧은 패스워드는 솔트가 있어도 하나씩 대입하는 공격에 결국 뚫린다.

비슷한 개념과 구별하기

편집 원본 편집
개념 무엇을 막는가 무엇을 못 막는가
솔트 미리 계산한 사전·레인보우 테이블, 같은 패스워드의 같은 결과 중간자 공격, 약한 패스워드에 대한 개별 대입
반복 횟수(키 스트레칭) 대입 속도 패스워드가 이미 유출된 경우
전자서명·인증서 위장·중간자 공격 저장된 패스워드 해시의 대입
일방향 암호화(패스워드 저장) 저장값에서 원래 패스워드 복원 사전 공격(솔트 없을 때)
  1. ↑ 1.0 1.1 1.2 「RFC 8018: PKCS #5: Password-Based Cryptography Specification Version 2.1」, IETF, 2017, https://www.rfc-editor.org/rfc/rfc8018, 확인일: 2026-11-05.
  2. ↑ 「NIST SP 800-132: Recommendation for Password-Based Key Derivation, Part 1: Storage Applications」, NIST, 2010, https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf, 확인일: 2026-11-05.