기여 목록 / 8471207
[WebCrypto] Fix supports() for exportKey and wrapKey
BlinkfixMerged
WebCrypto의 SubtleCrypto.supports()가 "exportKey" 연산에 대해 항상 false를 반환하고, "wrapKey"에서는 export를 지원하지 않는 알고리즘에도 true를 반환하던 문제를 고쳤습니다. 8312049의 후속 CL로, 같은 버그를 이 CL에서 최종적으로 닫았습니다. 2파일 +28/−5.
문제 설명
- issue url: https://crbug.com/41264071
- 스펙상
supports()는 연산 이름으로"exportKey"를 받아야 합니다. 또"wrapKey"는 additionalAlgorithm이 export key 연산을 지원하지 않으면 false를 반환해야 합니다. - Blink는
"exportKey"를 연산으로 인식하지 못해 모든 조회에 false를 반환했습니다. "wrapKey"에서 additionalAlgorithm이 HKDF나 PBKDF2이면 true를 반환했습니다. 그런데 실제wrapKey()는 8312049 이후 이런 키를 NotSupportedError로 거부하므로,supports()와 실제 동작이 어긋나 있었습니다.- 8312049 리뷰에서 davidben@이 이 부분을 지적했고, 그 CL은 범위를 유지하고 TODO를 남긴 뒤 이 CL에서 WPT와 함께 처리하기로 했습니다.
해결 내용
8312049에서 추가한 kWebCryptoOperationExportKey 연산 정보를 그대로 활용했습니다. 수정은 subtle_crypto.cc 한 파일입니다.
- 연산 이름 매핑에
"exportKey"→kWebCryptoOperationExportKey를 추가했습니다. supports()의"wrapKey"경로에서 additionalAlgorithm이 exportKey를 지원하는지 먼저 확인하도록 했습니다.- 두 곳에 남아 있던
TODO(crbug.com/41264071)주석을 지웠습니다.
if (operation == "wrapKey") {
if (!supportsInternal(script_state, kWebCryptoOperationExportKey,
additional_algorithm, length_bits)) {
return false;
}
}리뷰 과정
- davidben@, dcheng@ 모두 PS1에서 별도 코멘트 없이 Code-Review+1을 주었습니다.
- PS2는 CQ가 rebase해서 머지한 패치셋입니다.
테스트 방법
- 기존 WPT
WebCryptoAPI/supports.tentative.https.any.js에 테스트 두 개를 추가했습니다.exportKey tests: AES-GCM은 true, HKDF와 PBKDF2는 falsewrapKey tests: AES-KW로 AES-GCM을 감싸는 경우는 true, HKDF와 PBKDF2를 감싸는 경우는 false
- CQ 통과 후 머지. 추가한 WPT는 upstream으로 자동 export되어 web-platform-tests/wpt#63034로 머지되었습니다.
배운 점
- 이 패치를 통해서 webcrypto의 한 부분을 공부해볼 수 있었습니다. 생각보다 많이 복잡했지만 AI가 많이 도와줘서 수월하게 끝낼 수 있었습니다.