WebRTC용 ECDSA - 보안 강화, 개인 정보 보호 강화, 성능 개선

Chrome 52부터 WebRTC는 인증서 (RTCCertificate) 생성에 훨씬 더 효율적이고 안전한 알고리즘인 ECDSA를 사용합니다. 또한 이제 RTCCertificates를 IndexedDB로 저장할 수 있습니다.

RTCCertificates는 WebRTC 피어 연결을 설정할 때 DTLS 핸드셰이크에 사용되는 자체 서명 인증서입니다. DTLS는 WebRTC에서 사용하는 UDP와 같은 데이터그램 프로토콜용 암호화 프로토콜 TLS의 구현입니다.

최근까지 WebRTC는 인증서에 RSA-1024 키를 사용했습니다. 이러한 키에는 몇 가지 단점이 있습니다.

  • RSA-1024 키를 생성하면 통화 설정 시간이 최대 1,000ms 정도 늘어날 수 있습니다.
  • 1024비트 RSA 키는 충분한 암호화 강도를 제공하지 않습니다.

RSA-1024로 인증서를 생성하는 속도가 느려 일부 모바일 앱에서는 인증서를 미리 준비하거나 재사용하는 방법을 사용했습니다.

2,048비트 RSA 키 이상으로 전환하면 키 강도 문제가 해결될 수 있지만, 그러면 통화 설정이 몇 초 더 지연됩니다. Chrome 52에서는 RSA 키 크기를 변경하는 대신 인증서에 사용할 ECDSA 키 (타원 곡선 디지털 서명 알고리즘)를 구현합니다. ECDSA 키는 3072비트 RSA 키만큼 강력하지만 수천 배 더 빠릅니다. ECDSA를 사용한 호출 설정 오버헤드는 단 몇 밀리초에 불과합니다.

전반적으로 ECDSA 키는 특히 모바일에서 보안, 개인 정보 보호, 성능을 개선합니다. 이러한 이유로 WebRTC 보안 아키텍처 초안에 ECDSA가 필수로 명시되었습니다.

Chrome 47부터 ECDSA를 선택할 수 있습니다.

// or webkitRTCPeerConnection
RTCPeerConnection.generateCertificate({
    name: "ECDSA",
    namedCurve: "P-256"
}).then(function(certificate) {
    var pc = new RTCPeerConnection({..., certificates: [certificate]});
});

Chrome 52부터 ECDSA가 기본적으로 사용 설정되지만 RSA 인증서를 생성하도록 선택할 수 있습니다.

pc.generateCertificate({
    name: "RSASSA-PKCS1-v1_5",
    modulusLength: 2048,
    publicExponent: new Uint8Array([1, 0, 1]),
    hash: "SHA-256"
})

generateCertificate()에 관한 자세한 내용은 W3C 초안을 참고하세요.

IndexedDB에 RTCCertificate 저장

Chrome 52의 또 다른 개선사항: WebRTC에서 사용하는 RTCCertificates를 IndexedDB 저장소에 저장하고 로드할 수 있으므로 세션 간에 새 인증서를 생성할 필요가 없습니다. 예를 들어 RSA를 계속 사용해야 하지만 RSA 생성 오버헤드를 피하려는 경우에 유용할 수 있습니다. ECDSA는 매번 새 인증서를 생성할 만큼 빠르므로 캐싱이 필요하지 않습니다.

RTCCertificate IndexedDB 저장소는 이미 Firefox에 제공되었으며 Opera 39에도 있습니다.

자세히 알아보기