Node.js crypto에서 Web Crypto API로 이동: 지도된 경험
crypto에서 Web Crypto API로의 전환 경험에 대해 깊이 파고들어, 3가지 일반적인 시나리오에 중점을 둔 종합적인 가이드를 제공합니다.
소개
Web Crypto API는 새로운 자바스크립트 도구로 암호화를 위한 것입니다. 현대적인 브라우저와 주요 플랫폼을 포함하여 Cloudflare Workers와 Vercel 그리고 Node.js와 호환됩니다. 이러한 상호 운용성은 개발자의 꿈을 의미합니다 - 암호화 코드를 한 번 작성하고 Web Crypto API를 사용하여 수많은 플랫폼에서 실행합니다.
그러나 Node.js에는 이미 오랜 역사를 가진 "crypto" 모듈이 있어, 이전이 필요한 상당한 양의 레거시 코드가 남아 있습니다. 이 글에서는 우리는 전환 경험에 파고들어, 3가지 일반적인 시나리오에 중점을 둔 종합적인 가이드를 제공합니다. 우리는 이전을 성공적으로 이루어내는 길을 밝혀줄 것입니다.
Web Crypto API란 무엇인가
Web Crypto API는 W3C의 자바스크립트를 위한 오픈 표준이며, Web Cryptography API specification에 정의된 표준화된 암호화 원시어를 수집했습니다. 이것은 여러 브라우저와 플랫폼이 자신의 비호환 암호화 함수들을 추가하기 시작한 후에 생성되었습니다.
API는 키 생성, 암호화 및 복호화, 디지털 서명, 키 및 비트 파생, 그리고 암호화 다이제스트를 위한 원시체를 제공합니다. 이것은 SubtleCrypto라는 인터페이스를 기반으로 하며, 더 많은 세부 정보와 튜토리얼은 Mozilla MDN 문서를 참고하십시오.
하지만 Node.js는 이미 crypto 모듈이 있습니다.
Node.js 개발자들은 일반적으로 crypto module이 친숙하며, 이것은 포괄적인 암호화 원시어 세트를 제공합니다. 이 모듈은 Web Crypto API에서 정의한 같은 암호화 연산에 대한 메커니즘을 제공하는데 더 나아가 자주 더 넓은 범위의 암호화 알고리즘을 포함합니다.
그렇다면 왜 우리는 여전히 Web Crypto API가 필요한 것일까요? 자바스크립트가 클라이언트 측에서 서버, 특히 가장자리까지 많은 플랫폼과 환경에서 인기를 얻고 있기 때문에, 프로세스를 단순화하는 데 있어 걸처럼 플랫폼 암호화 도구가 중요하게 됩니다.
또한, Web Crypto API 표준에서 기능들은 모두 프라미스를 반환하고 async/await 구문을 지원합니다. 이것은 일련의 루프를 차단할 수 있는 crypto 모듈에 비해 눈에 띄는 장점입니다.
그리고 흥미로운 점은 Node.js가 웹 크립토 API용 지원을 추가하는 것으로, 대부분의 경우, Web Crypto API가 대부분의 알려진 플랫폼에서 완벽하다는 것입니다.
Web Crypto API 사용법
대부분의 플랫폼에서, Web Crypto API의 모음은 getRandomValues
, randomUUID
그리고 subtle
을 포함하는 전역 crypto
오브젝트를 통해 접근할 수 있습니다.
전통적인 crypto 모듈에 비해 많은 차이점이 있습니다. 그들은 3가지 가장 일반적인 부분으로 요약될 수 있습니다. 이들을 살펴볼 최대한 어떻게 기존 코드를 이전하는지 봅시다.
#1 무작위 값 생성
crypto 모듈에서 randomBytes
를 호출하여 무작위 값을 생성할 수 있습니다.
Web Crypto에서는 getRandomValues
라는 유사한 함수가 있지만, 반환 값은 ArrayBuffer
라서 이것을 문자열로 변환하는 또 다른 과정이 필요합니다.
#2 해싱 (또는 다이제스트)
createHash
는 crypto 모듈에서 사용하기 쉽습니다.
Web Crypto에서는 subtle.createHash
를 사용할 수 있습니다.
보시다시피, ArrayBuffer
에서 16진수 문자열로의 변환도 필요합니다.
#3 암호화 및 복호화
crypto 모듈에서 AES 암호화 및 복호화를 구현할 수 있습니다.
Web Crypto에서는 importKey
로 먼저 키를 생성해야 합니다.
결론
보다시피, 이전은 어렵지 않으며, 주요 작업은 새 API에 맞게 문법을 변경하고 ArrayBuffer
를 TextEncoder
로 해결하는 것입니다.
Logto는 많은 곳에서 암호화를 사용하는 신원 제품으로, 우리는 crypto 모듈에서 Web Crypto API로 이전했습니다. 이 전환은 우리가 가장자리 환경에 더 잘 적응하도록 해주며, 브라우저에서 SDK 코드를 안전하게 실행하는 데 가능성을 제공합니다.