# Secure deletion, media sanitization and disposal evidence

Separate a delete command from verified sanitization. Review media, method, custody and the scope of disposal certificates.

Original AI-assisted SecNet educational content. Fictional local examples; not a standards provider publication, endorsement or compliance evidence. Page exercises do not create account progress.

Sources checked: 2026-10-21

## Deletion, sanitization and destruction

Removing a file from a trash folder does not establish that access to media data is infeasible at the intended level. Choose sanitization through sensitivity, media technology, reuse plans and appropriate validation. NIST SP 800-88 Rev.2 became final in September 2025 and superseded Rev.1. This lesson does not present the older revision as current or provide executable erasure commands for real equipment. Learners assess evidence of suitability for the medium and purpose rather than treating a method name as proof of successful sanitization.

## Media and key dependencies

HDDs, SSDs, removable media and cloud storage do not share identical physical behavior. Do not assume overwriting a file always suffices on an SSD. Cryptographic erasure also requires review of encryption coverage, key copies and suitable method/evidence. Physical destruction fails its purpose if the wrong device is processed. Harbor matches asset identity, media type, authority, method and validation references. It performs no actual key deletion, formatting or device destruction. Method suitability and verified completion remain separate questions for authorized owners.

## Validate the disposal certificate

A vendor certificate should cover the actual surrendered assets and intended scope. Record asset/serial identity, custody, date, method, operator and verification role. Receiving a certificate alone does not prove successful execution. State limits of sampling or validation. Harbor’s certificate example is an educational workpaper and issues no official sanitization certificate. Missing assets, mismatched identities and out-of-scope copies remain open work. An invoice or broad vendor assurance should not replace evidence linking the required method to the specific media and outcome.

## Copy scope at service exit

Service exit separates responsibility for primary records, backups, derivatives and exports. Do not automatically initiate disposal before preservation requirements and authorized decisions are resolved. Document which layer the provider evidence covers and what remains unverified. Harbor produces only review-due after its retainUntil threshold, never disposal authority or commands. Closure includes asset/copy mapping, validation outcomes and residual-risk ownership. The control objective is a traceable result within defined scope, not simply collecting a document that may leave copies or identity mismatches unexplained.

## Working sequence

1. Define asset, media and data scope.
2. Review holds and execution authority.
3. Request method-suitability evidence.
4. Match identity, custody and validation.
5. Record remaining copies and risk owners.

## 1. Deletion requested

A request establishes neither a suitable media method nor authority. Match asset, sensitivity, method and authorized decision before claiming validated disposal.

This code is a local policy model; it does not replace actual content discovery, DLP or sanitization validation.

### Weak implementation
```js
s => s.deleteRequested === true
```

### Corrected implementation
```js
s => s.deleteRequested === true &&
  s.mediaMatched === true &&
  s.methodSuitable === true &&
  s.authorityVerified === true
```

### Synthetic input and actual model output
```json
{
  "before": [
    {
      "name": "documented-case",
      "input": {
        "deleteRequested": true,
        "mediaMatched": true,
        "methodSuitable": true,
        "authorityVerified": true
      },
      "expected": true,
      "observed": true,
      "matched": true
    },
    {
      "name": "missing-mediaMatched",
      "input": {
        "deleteRequested": true,
        "mediaMatched": false,
        "methodSuitable": true,
        "authorityVerified": true
      },
      "expected": false,
      "observed": true,
      "matched": false
    },
    {
      "name": "missing-authorityVerified",
      "input": {
        "deleteRequested": true,
        "mediaMatched": true,
        "methodSuitable": true,
        "authorityVerified": false
      },
      "expected": false,
      "observed": true,
      "matched": false
    }
  ],
  "after": [
    {
      "name": "documented-case",
      "input": {
        "deleteRequested": true,
        "mediaMatched": true,
        "methodSuitable": true,
        "authorityVerified": true
      },
      "expected": true,
      "observed": true,
      "matched": true
    },
    {
      "name": "missing-mediaMatched",
      "input": {
        "deleteRequested": true,
        "mediaMatched": false,
        "methodSuitable": true,
        "authorityVerified": true
      },
      "expected": false,
      "observed": false,
      "matched": true
    },
    {
      "name": "missing-authorityVerified",
      "input": {
        "deleteRequested": true,
        "mediaMatched": true,
        "methodSuitable": true,
        "authorityVerified": false
      },
      "expected": false,
      "observed": false,
      "matched": true
    }
  ]
}
```

## 2. Certificate received

A certificate does not establish that the correct asset was processed. Without asset IDs, custody and validation evidence, a bulk certificate has uncertain scope.

This code is a local policy model; it does not replace actual content discovery, DLP or sanitization validation.

### Weak implementation
```js
s => s.certificateReceived === true
```

### Corrected implementation
```js
s => s.certificateReceived === true &&
  s.assetIdsMatched === true &&
  s.verificationEvidence === true &&
  s.custodyRecorded === true
```

### Synthetic input and actual model output
```json
{
  "before": [
    {
      "name": "documented-case",
      "input": {
        "certificateReceived": true,
        "assetIdsMatched": true,
        "verificationEvidence": true,
        "custodyRecorded": true
      },
      "expected": true,
      "observed": true,
      "matched": true
    },
    {
      "name": "missing-assetIdsMatched",
      "input": {
        "certificateReceived": true,
        "assetIdsMatched": false,
        "verificationEvidence": true,
        "custodyRecorded": true
      },
      "expected": false,
      "observed": true,
      "matched": false
    },
    {
      "name": "missing-verificationEvidence",
      "input": {
        "certificateReceived": true,
        "assetIdsMatched": true,
        "verificationEvidence": false,
        "custodyRecorded": true
      },
      "expected": false,
      "observed": true,
      "matched": false
    }
  ],
  "after": [
    {
      "name": "documented-case",
      "input": {
        "certificateReceived": true,
        "assetIdsMatched": true,
        "verificationEvidence": true,
        "custodyRecorded": true
      },
      "expected": true,
      "observed": true,
      "matched": true
    },
    {
      "name": "missing-assetIdsMatched",
      "input": {
        "certificateReceived": true,
        "assetIdsMatched": false,
        "verificationEvidence": true,
        "custodyRecorded": true
      },
      "expected": false,
      "observed": false,
      "matched": true
    },
    {
      "name": "missing-verificationEvidence",
      "input": {
        "certificateReceived": true,
        "assetIdsMatched": true,
        "verificationEvidence": false,
        "custodyRecorded": true
      },
      "expected": false,
      "observed": false,
      "matched": true
    }
  ]
}
```

## 3. Vendor says it is finished

Vendor closure does not automatically settle copies and preservation scope. Record residual risks, copy ownership and authorized validation separately.

This code is a local policy model; it does not replace actual content discovery, DLP or sanitization validation.

### Weak implementation
```js
s => s.vendorFinished === true
```

### Corrected implementation
```js
s => s.vendorFinished === true &&
  s.copiesCovered === true &&
  s.legalHoldChecked === true &&
  s.residualsOwned === true
```

### Synthetic input and actual model output
```json
{
  "before": [
    {
      "name": "documented-case",
      "input": {
        "vendorFinished": true,
        "copiesCovered": true,
        "legalHoldChecked": true,
        "residualsOwned": true
      },
      "expected": true,
      "observed": true,
      "matched": true
    },
    {
      "name": "missing-copiesCovered",
      "input": {
        "vendorFinished": true,
        "copiesCovered": false,
        "legalHoldChecked": true,
        "residualsOwned": true
      },
      "expected": false,
      "observed": true,
      "matched": false
    },
    {
      "name": "missing-legalHoldChecked",
      "input": {
        "vendorFinished": true,
        "copiesCovered": true,
        "legalHoldChecked": false,
        "residualsOwned": true
      },
      "expected": false,
      "observed": true,
      "matched": false
    }
  ],
  "after": [
    {
      "name": "documented-case",
      "input": {
        "vendorFinished": true,
        "copiesCovered": true,
        "legalHoldChecked": true,
        "residualsOwned": true
      },
      "expected": true,
      "observed": true,
      "matched": true
    },
    {
      "name": "missing-copiesCovered",
      "input": {
        "vendorFinished": true,
        "copiesCovered": false,
        "legalHoldChecked": true,
        "residualsOwned": true
      },
      "expected": false,
      "observed": false,
      "matched": true
    },
    {
      "name": "missing-legalHoldChecked",
      "input": {
        "vendorFinished": true,
        "copiesCovered": true,
        "legalHoldChecked": false,
        "residualsOwned": true
      },
      "expected": false,
      "observed": false,
      "matched": true
    }
  ]
}
```

## Exit evidence

- Asset/media/method/authority assessment matrix.
- Custody, validation, copy and closure-evidence record.

## References

- [NIST SP 800-88 Rev.2 · Media sanitization · Final September 2025](https://csrc.nist.gov/pubs/sp/800/88/r2/final)
- [NIST SP 800-209 · Storage infrastructure security · October 2020](https://csrc.nist.gov/pubs/sp/800/209/final)
