docs: clarify layered SSE-C key authentication

Signed-off-by: Feng Ruohang <rh@vonng.com>
This commit is contained in:
Feng Ruohang
2026-08-29 18:21:13 +08:00
parent c4fd97d0bf
commit 8448512a1f
2 changed files with 6 additions and 7 deletions
+3 -3
View File
@@ -356,9 +356,9 @@ func rotateKey(ctx context.Context, oldKey []byte, newKeyID string, newKey []byt
} }
// checkSSECCopySourceKey authenticates the SSE-C copy source key against the // checkSSECCopySourceKey authenticates the SSE-C copy source key against the
// sealed object key held in metadata. GetObjectNInfo builds no decryptor for a // sealed object key held in metadata. This keeps the diverted rotation safe on
// zero byte object, so a copy whose data path never decrypts anything has to // its own and remains defense in depth when the read path also authenticates
// verify the source key explicitly. Mirrors the errors rotateKey reports. // zero-byte objects. Mirrors the errors rotateKey reports.
func checkSSECCopySourceKey(h http.Header, metadata map[string]string, bucket, object string, newKey []byte) error { func checkSSECCopySourceKey(h http.Header, metadata map[string]string, bucket, object string, newKey []byte) error {
oldKey, err := ParseSSECopyCustomerRequest(h, metadata) oldKey, err := ParseSSECopyCustomerRequest(h, metadata)
if err != nil { if err != nil {
+3 -4
View File
@@ -508,10 +508,9 @@ func testAPICopyObjectSSECKeyRotationNullVersionWithCompression(obj ObjectLayer,
} }
} }
// TestAPICopyObjectSSECKeyRotationNullVersionWrongKey pins the source key // TestAPICopyObjectSSECKeyRotationNullVersionWrongKey pins source-key
// authentication of the re-encrypting fallback. A zero byte source has no data // authentication in both the standalone rotation fix and the later zero-byte
// to decrypt, so the copy would otherwise reach the destination write without // read hardening.
// ever proving the caller holds the current key.
func TestAPICopyObjectSSECKeyRotationNullVersionWrongKey(t *testing.T) { func TestAPICopyObjectSSECKeyRotationNullVersionWrongKey(t *testing.T) {
defer DetectTestLeak(t)() defer DetectTestLeak(t)()
ExecObjectLayerAPITest(ExecObjectLayerAPITestArgs{ ExecObjectLayerAPITest(ExecObjectLayerAPITestArgs{