용어집

키 파생이란 무엇인가요?

키 파생은 패스워드, 패스프레이즈, 공유 비밀 같은 소스 값을 결정론적 알고리즘을 사용해 높은 엔트로피의 암호화 키로 변환하는 과정이다.

사람이 선택한 패스워드는 암호화 키로서 본질적으로 취약하다. 짧고 문자 집합이 제한적이며 예측 가능한 패턴을 따른다. 키 파생 함수(KDF)는 패스워드를 암호화에 적합한 고정 길이 키를 출력하는 계산 집약적 알고리즘으로 처리하여 이 격차를 해소한다.

키 파생 함수는 의도적으로 느리고 자원 집약적으로 설계된다. 속도가 중요한 대부분의 소프트웨어 영역에서는 반직관적이지만, KDF에서 느림은 보안 특성이다. 패스워드를 무차별 대입하려는 공격자는 각 시도마다 KDF를 실행해야 한다. KDF가 시도당 100밀리초가 걸린다면 10억 개의 패스워드를 시도하는 데 3년 이상이 걸릴 것이다. 빠른 해시 함수로는 수초면 될 것을.

일반적인 KDF에는 PBKDF2, bcrypt, scrypt, Argon2가 있다. 각각은 서로 다른 공격 전략에 저항하기 위해 다양한 자원(CPU 시간, 메모리, 병렬성)을 균형 있게 활용한다. KDF 선택은 환경에 따라 다르다. 브라우저 기반 애플리케이션은 Web Crypto API를 통해 사용 가능한 PBKDF2를 주로 사용하고, 서버 측 애플리케이션은 메모리 하드니스 때문에 Argon2를 선호할 수 있다.

Vaulted가 키 파생을 사용하는 방법

비밀에 선택적 패스프레이즈를 설정하면 Vaulted는 키 파생을 사용해 패스프레이즈를 래핑 키로 변환한다. 구체적으로 Web Crypto API를 통해 100,000회 반복, SHA-256, 무작위 16바이트 솔트로 PBKDF2를 실행한다. 파생된 키는 AES-KW와 함께 원래 AES-256-GCM 암호화 키를 래핑(키 래핑)하는 데 사용된다. 수신자는 동일한 래핑 키를 파생하고 암호화 키를 언래핑해 비밀을 복호화하기 위해 동일한 패스프레이즈를 입력해야 한다.