패스워드 기반 암호
더 많은 작업
패스워드 기반 암호(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]
- 암호화
- 의사 난수 생성기로 솔트를 만든다
- 패스워드와 솔트를 키 유도 함수(일방향 해시를 여러 번 반복)에 넣어 KEK 를 만든다
- 의사 난수 생성기로 CEK 를 만들고, 메시지를 CEK 로 암호화한다
- CEK 를 KEK 로 암호화하고, 솔트·암호화된 CEK·암호문을 함께 저장한다. KEK 자체는 저장하지 않는다
- 복호화
- 저장된 솔트와 사용자가 입력한 패스워드로 KEK 를 다시 만든다
- KEK 로 CEK 를 복호화하고, CEK 로 메시지를 복호화한다
RFC 8018 은 솔트의 효과를 두 가지로 설명한다.[1]
- 사전 공격 무력화 - 같은 패스워드라도 솔트에 따라 서로 다른 키가 나온다. 솔트가 64비트면 패스워드 하나에 264 개의 키가 대응하므로, 공격자가 패스워드 사전에서 키를 미리 계산해 둘 수 없다. 공격자는 솔트를 안 뒤에야 패스워드를 하나씩 대입해 볼 수 있다 → 사전 공격, 레인보우 테이블
- 같은 키가 두 번 나오지 않게 함 - 무작위 솔트 덕분에 같은 패스워드로 여러 번 암호화해도 키가 겹칠 가능성이 낮다
반복 횟수는 키 유도를 일부러 느리게 만들어 대입 한 번의 비용을 높인다. 정상 사용자는 한 번만 계산하면 되지만 공격자는 후보마다 그 비용을 치른다.[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.
- ↑ 「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.