| [[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. 개요
암호학적 알고리즘 구현을 제공하는 웹 표준 API 스펙이다. 일반적으로 웹 브라우저 등 환경에서 지원될 것을 가정하고 만들어졌다.W3C 표준으로, 현재 working draft는 Level 2에 도달했다. 요즘은 웬만한 브라우저에서 지원되고 있다.
2. 구성 인터페이스
2.1. CryptoKey
후술할 subtle API에서 주고받는 가장 기본적인 opaque 타입이다. 꼭 대칭키나 비대칭키뿐 아니라 derived hash등도 리턴값으로 CryptoKey 타입을 준다.ArrayBuffer나 TypedArray같은 바이너리 버퍼를 통채로 키로 사용하려면 포맷을
raw로 지정하고 importKey에 던지면 된다. 반대로 CryptoKey를 버퍼를 뽑으려면 똑같이 raw 포맷으로 exportKey를 호출하면 된다. 이 때 CryptoKey 생성 시 extractable을 false로 해놨으면 export가 불가능하니 주의.[1]2.2. SubtleCrypto
getRandomValues() 메서드를 제외하면 사실상 이쪽이 본체로, 대부분의 알고리즘 API가 달려 있는 객체이다.SubtleCrypto의 모든 메서드는 전부 Promise를 반환한다.
encryptdecryptsignverifydigestgenerateKeyderiveKeyderiveBits-deriveKey랑 비슷한데 CryptoKey를 만들지 않고 ArrayBuffer를 바로 던진다. 때문에 PBKDF2같은 해싱 할 때 유용하다.importKeyexportKeywrapKeyunwrapKey
3. 지원 알고리즘
서포트 테이블브라우저나 런타임에 따라 미지원/미구현된 경우가 있을 수 있다.
표준에는 없지만 런타임에 따라 지원을 추가하는 경우도 있다. 가령 workerd의 경우 digest 알고리즘으로 MD5를 지원한다.#@