Web Crypto API이란 무엇인가요?
Web Crypto API는 암호화, 복호화, 키 생성, 해싱, 서명 등 브라우저에 네이티브로 구현된 암호화 프리미티브 모음에 JavaScript 인터페이스를 제공하는 W3C 표준이다.
Web Crypto API 이전에는 암호화가 필요한 웹 애플리케이션이 알고리즘을 처음부터 구현한 JavaScript 라이브러리에 의존해야 했다. 이 라이브러리들은 JavaScript 인터프리터에서 실행되어 느리고, 타이밍 공격에 잠재적으로 취약하며, 현대 CPU의 하드웨어 암호화 가속기를 활용할 수 없었다.
Web Crypto API는 브라우저 엔진의 네이티브 암호화를 JavaScript에 노출함으로써 이 문제들을 해결한다. AES 암호화, 키 생성, PBKDF2 키 파생 같은 연산이 컴파일된 네이티브 코드로 실행되어 정시간 구현(타이밍 사이드채널 방어)과 현대 프로세서의 AES-NI 명령어를 통한 하드웨어 가속의 이점을 누린다.
API는 비동기 설계로, 모든 연산이 메인 스레드를 차단하지 않고 Promise를 반환한다. API가 생성한 CryptoKey 객체는 기본적으로 불투명하며, 명시적으로 내보내기 가능으로 표시되지 않는 한 메모리에서 추출할 수 없어 우발적인 키 유출에 대한 추가 보호 계층을 제공한다.
Vaulted가 Web Crypto API을 사용하는 방법
Vaulted는 모든 암호화 연산에 Web Crypto API만 사용한다. AES-256-GCM 키 생성에는 crypto.subtle.generateKey를, 실제 암호화에는 crypto.subtle.encrypt와 decrypt를, 패스프레이즈 사용 시 키 파생에는 PBKDF2와 함께 crypto.subtle.deriveKey를 사용한다. 브라우저 내장 암호화에만 의존함으로써 Vaulted는 서드파티 암호화 라이브러리 의존성을 피하고 하드웨어 가속된 정시간 구현의 이점을 누린다.