Skip to content
Back to skills

Content Addressable Storage Immutability

ASecurity

CRITICAL: Never modify files in content-addressable storage systems where the filename IS the content hash (SHA256, IPFS CID, etc.). Use when: (1) Working with Blossom protocol, IPFS, or any CAS system, (2) Considering "optimizing" stored files (faststart, compression), (3) Implementing transcoding or processing pipelines for hash-identified content, (4) Building on top of ProofMode or any cryptographic verification system. Modifying files in place breaks hash verification and content integrity.

  • 265 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
developmentrustgodockergit

Works with

  • claude code
  • cli

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add divinevideo/divine-mobile --skill content-addressable-storage-immutability --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Content Addressable Storage Immutability?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Content Addressable Storage Immutability
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/divinevideo-content-addressable-storage-immutability/badge)](https://www.skillsdirectory.com/skills/divinevideo-content-addressable-storage-immutability)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: content-addressable-storage-immutability
description: |
  CRITICAL: Never modify files in content-addressable storage systems where the filename
  IS the content hash (SHA256, IPFS CID, etc.). Use when: (1) Working with Blossom protocol,
  IPFS, or any CAS system, (2) Considering "optimizing" stored files (faststart, compression),
  (3) Implementing transcoding or processing pipelines for hash-identified content,
  (4) Building on top of ProofMode or any cryptographic verification system. Modifying
  files in place breaks hash verification and content integrity.
author: Claude Code
version: 1.0.0
date: 2026-01-31
---

# Content-Addressable Storage Immutability

## Problem
In content-addressable storage (CAS) systems, files are identified by their content hash.
If you modify a file in place (even "harmless" optimizations), the content no longer
matches its identifier, breaking the entire system's integrity guarantees.

## Context / Trigger Conditions
- Working with Blossom protocol (files at `/{sha256}`)
- Working with IPFS (files at `/ipfs/{CID}`)
- Any system where filename = hash of content
- Considering file optimizations like:
  - MP4 faststart (moving moov atom)
  - Image optimization/compression
  - Metadata stripping
  - Format conversion
- Systems using ProofMode or cryptographic verification

## The Fundamental Rule

**NEVER modify a file stored at its content hash.**

The hash IS the identity. Change the content → change the hash → file is now at wrong address.

## What Goes Wrong

```
Original file: abc123... (hash) → contains bytes X
After "optimization": abc123... (hash) → contains bytes Y

Result:
- Hash abc123 no longer verifies
- ProofMode signatures invalid
- Content-addressable lookups return wrong data
- Cryptographic proofs broken
- Data integrity compromised
```

## Solution: Store Derivatives Separately

If you need optimized/processed versions, store them at separate paths:

```
/{hash}                    ← Original file (NEVER MODIFY)
/{hash}/hls/master.m3u8    ← HLS transcoded version
/{hash}/faststart.mp4      ← Faststart optimized version
/{hash}/thumb.jpg          ← Thumbnail
/{hash}/720p.mp4           ← Resolution variant
```

The original stays byte-for-byte identical. Derivatives live in subdirectories.

## Implementation Pattern

```rust
// WRONG - modifies original
async fn process_video(hash: &str) {
    let path = format!("/{}", hash);
    let video = download(&path);
    let optimized = apply_faststart(video);
    upload(&path, optimized);  // ❌ BREAKS HASH!
}

// RIGHT - creates derivative
async fn process_video(hash: &str) {
    let original_path = format!("/{}", hash);
    let derivative_path = format!("/{}/faststart.mp4", hash);

    let video = download(&original_path);
    let optimized = apply_faststart(video);
    upload(&derivative_path, optimized);  // ✓ Original untouched
}
```

## Verification
- Original file hash still verifies: `sha256sum file == filename`
- ProofMode signatures still valid
- Content lookups return expected data

## Common Mistakes

1. **"It's just moving metadata"** - Still changes bytes, still breaks hash
2. **"We'll update the hash reference"** - Now you have dangling references everywhere
3. **"No one will notice"** - Verification systems WILL notice
4. **"It's an optimization"** - Optimize derivatives, not originals

## Notes
- This applies to ANY content-addressable system, not just Blossom
- IPFS, Git objects, Docker layers all follow this principle
- If you need the optimized version as primary, the client should upload it that way
- Transcoding to new formats (HLS, DASH) is fine because they're clearly separate files

## References
- [Content-addressable storage (Wikipedia)](https://en.wikipedia.org/wiki/Content-addressable_storage)
- [Blossom Protocol (BUD-01)](https://github.com/hzrd149/blossom)
- [IPFS Content Addressing](https://docs.ipfs.tech/concepts/content-addressing/)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.