나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2026-03-27 07:51:50

Web Cryptography API


[[JavaScript|
파일:JavaScript 로고.svg
JavaScript
관련 문서
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#f7df1e,#f7df1e><colcolor=#000,#000> 관련 문서 표준(TC39 · 브라우저 전쟁) · Vanilla JS · AJAX · JSFuck · 상태관리 라이브러리 · JSON · CSS-in-JS
문법 this · undefined
표준 라이브러리 및 API 표준 내장 객체 · Fetch API · Web Cryptography API
구현체 <bgcolor=#f7df1e,#f7df1e> 엔진 V8 · SpiderMonkey · JavaScriptCore · 헤르메스 · Boa
<bgcolor=#f7df1e,#f7df1e> 런타임 Node.js · Deno · Bun · workerd
패키지 관리자 npm · Bun
파생 언어 TypeScript · CoffeeScript · ActionScript · AssemblyScript · elm · PureScript · ReasonML · ReScript
관련 인물 브랜든 아이크
기타 JavaScript npm 마비 사태 }}}}}}}}}

1. 개요2. 구성 인터페이스
2.1. CryptoKey2.2. SubtleCrypto
3. 지원 알고리즘4. 기타

1. 개요

암호학적 알고리즘 구현을 제공하는 웹 표준 API 스펙이다. 일반적으로 웹 브라우저 등 환경에서 지원될 것을 가정하고 만들어졌다.

W3C 표준으로, 현재 working draft는 Level 2에 도달했다. 요즘은 웬만한 브라우저에서 지원되고 있다.

2. 구성 인터페이스

2.1. CryptoKey

후술할 subtle API에서 주고받는 가장 기본적인 opaque 타입이다. 꼭 대칭키나 비대칭키뿐 아니라 derived hash등도 리턴값으로 CryptoKey 타입을 준다.

ArrayBuffer나 TypedArray같은 바이너리 버퍼를 통채로 키로 사용하려면 포맷을 raw로 지정하고 importKey에 던지면 된다. 반대로 CryptoKey를 버퍼를 뽑으려면 똑같이 raw 포맷으로 exportKey를 호출하면 된다. 이 때 CryptoKey 생성 시 extractablefalse로 해놨으면 export가 불가능하니 주의.[1]

2.2. SubtleCrypto

getRandomValues() 메서드를 제외하면 사실상 이쪽이 본체로, 대부분의 알고리즘 API가 달려 있는 객체이다.

SubtleCrypto의 모든 메서드는 전부 Promise를 반환한다.

3. 지원 알고리즘

서포트 테이블

브라우저나 런타임에 따라 미지원/미구현된 경우가 있을 수 있다.

표준에는 없지만 런타임에 따라 지원을 추가하는 경우도 있다. 가령 workerd의 경우 digest 알고리즘으로 MD5를 지원한다.#@

4. 기타

당연하지만(?) PHC 스펙은 지원하지 않는다. PHC나 MCF 등 기타 직렬화 포맷은 직접 구현해야 한다.
[1] If the extractable internal slot of key is false, then throw an InvalidAccessError. #