{
  "schemaVersion": 1,
  "kind": "worked-calculation",
  "formula": "1 - choose(N - M, C) / choose(N, C)",
  "parameters": {
    "N": "total blocks",
    "M": "fixed missing blocks",
    "C": "distinct sampled blocks"
  },
  "assumptions": [
    "Uniform sampling without replacement within one challenge.",
    "Missing positions are fixed before unpredictable sample selection.",
    "A sampled missing block is always recognized as missing.",
    "No cryptographic forgery, adaptive response or implementation behavior is modeled."
  ],
  "limitations": [
    "Hit probability conditional on M, not the probability a file is intact after a passing audit.",
    "No observed failure rates, confidence intervals, reconstruction guarantee or timing measurements."
  ],
  "source": "https://people.eecs.berkeley.edu/~dawnsong/papers/p598-ateniese",
  "sourceSection": "5.1",
  "repeatedAudit": {
    "formula": "1 - (choose(N - M, C) / choose(N, C)) ** R",
    "method": "Hesela derivation: multiply independent per-round miss probabilities.",
    "assumptions": [
      "Fresh independent uniform samples each round; positions can recur across rounds.",
      "The same object version and fixed missing set persist throughout all rounds.",
      "Reusing the same positions does not provide the independent-round gain.",
      "Total sampled positions count repeats, not distinct coverage or physical device reads."
    ],
    "cases": [
      {
        "blocks": 10000,
        "missing": 1,
        "sampled": 460,
        "rounds": 1,
        "totalSampledPositions": 460,
        "hitProbability": 0.046
      },
      {
        "blocks": 10000,
        "missing": 1,
        "sampled": 460,
        "rounds": 10,
        "totalSampledPositions": 4600,
        "hitProbability": 0.37557001871275963
      },
      {
        "blocks": 10000,
        "missing": 1,
        "sampled": 460,
        "rounds": 22,
        "totalSampledPositions": 10120,
        "hitProbability": 0.6451341207223736
      },
      {
        "blocks": 10000,
        "missing": 1,
        "sampled": 460,
        "rounds": 97,
        "totalSampledPositions": 44620,
        "hitProbability": 0.989620119675926
      },
      {
        "blocks": 10000,
        "missing": 1,
        "sampled": 460,
        "rounds": 98,
        "totalSampledPositions": 45080,
        "hitProbability": 0.9900975941708334
      }
    ]
  },
  "cases": [
    {
      "blocks": 10000,
      "missing": 0,
      "sampled": 460,
      "hitProbability": 0
    },
    {
      "blocks": 10000,
      "missing": 1,
      "sampled": 460,
      "hitProbability": 0.046
    },
    {
      "blocks": 10000,
      "missing": 10,
      "sampled": 460,
      "hitProbability": 0.37570558146247746
    },
    {
      "blocks": 10000,
      "missing": 100,
      "sampled": 460,
      "hitProbability": 0.9912016587394527
    }
  ],
  "generatedAt": "2026-10-18T07:38:05.363Z",
  "runtime": "v24.21.0",
  "sourceSha256": "f3146644a7d312af36082afa3aa8f029f585aebd8c249f600714bfaa9cf8d8ca"
}
