Skip to content
academia.sh

Lesson 01 / 15

Confidentiality, Integrity and Availability

The three axes overlapping on the same asset: in a model with eight assets and six decisions, 27 (item, axis) pairs rise while 22 fall; the confidentiality total climbs from 34 to 41, integrity from 44 to 63, and availability from 47 to 51; a decision with zero net effect raises availability by nine points while lowering confidentiality by six; on key loss the availability total drops from 51 to 24 and four of eight assets are zeroed; and through all of it the average score falls only from 6.5 to 5.3.

Published Updated

In this lesson

  • Scores the three security axes on the same set of assets and counts which axis a decision gains on and which it costs
  • Breaks a decision with zero net effect into its axes: how many items rise, how many fall
  • Computes how a collapse condition zeroes one axis and shows how the average conceals that zero
Contents

The previous curriculum measured the same thing across five courses: when a layer was leased, which decision got handed off and which number improved in return. Leasing and buying alike carried the same silent assumption — that only the authorized reach that layer. This lesson removes that assumption and puts three separate questions in its place: who can see the data, who can change it, who can reach it when they need to.

These three questions are security’s three axes: confidentiality, integrity, and availability. Taken one at a time, all three look beyond dispute. Set on the same asset together, they push against each other: a decision that raises one axis usually lowers another. What this lesson measures is that push — how many items gain on which axis, and how many lose.

The Three Axes Sit on the Same Asset

The example is the fictional regional measurement network that runs through the whole curriculum: a service that collects water-meter readings, a service that validates them, billing and work-order services, field crews, and branch endpoints. Both the network and the assets are fictional; the scores below are a model, not a measurement taken on a real system.

SC1: the asset inventory is eight items. SC2: every asset carries a base score between 0 and 10 on each of three axes; the score shows how well that axis is provided for that item. SC3: every security decision touches specific items and writes a separate delta on each of the three axes; the score never drops below 0 or rises above 10. SC4: two of the decisions carry a collapse condition — if the condition fires, availability for the items that decision touches is zeroed. SC5: decisions are applied in list order; the clamp acts at every step.

// security/axis.mjs — fictional regional measurement network's asset inventory and three-axis model
// (model): there is no real network, real asset record, or real security measurement. No randomness.

export const AXIS = ["con", "int", "avl"];
export const CLAMP = (x) => Math.max(0, Math.min(10, x));

// SC2: every asset carries a 0..10 base score on three axes; scores are fictional.
export const ASSET = `
  reading-data         4 5 6
  billing-record       5 6 5
  work-order-queue     3 5 7
  identity-store       6 6 5
  configuration        4 6 6
  audit-log            5 4 5
  meter-firmware       3 7 6
  field-app            4 5 7`
  .trim().split("\n").map((r) => {
    const [name, ...p] = r.trim().split(/\s+/);
    return { name, base: Object.fromEntries(AXIS.map((a, i) => [a, +p[i]])) };
  });

// SC3: every decision touches a subset of items and writes a delta on three axes.
// SC4: if a collapse condition fires, availability for those items is zeroed.
export const DECISION = [
  { name: "encryption-at-rest", d: { con: 4, int: 0, avl: -1 }, collapse: "key-loss",
    item: ["reading-data", "billing-record", "identity-store", "audit-log"] },
  { name: "nightly-backup", d: { con: -2, int: 1, avl: 3 }, collapse: null,
    item: ["reading-data", "billing-record", "work-order-queue", "configuration", "audit-log"] },
  { name: "append-only-log", d: { con: 0, int: 4, avl: -1 }, collapse: null,
    item: ["audit-log", "billing-record"] },
  { name: "multi-factor-login", d: { con: 3, int: 1, avl: -2 }, collapse: "agent-loss",
    item: ["identity-store", "configuration", "field-app"] },
  { name: "signed-firmware", d: { con: 0, int: 4, avl: -2 }, collapse: null,
    item: ["meter-firmware", "field-app"] },
  { name: "second-copy", d: { con: -2, int: -1, avl: 3 }, collapse: null,
    item: ["reading-data", "billing-record", "work-order-queue"] },
];

export function apply(collapsed = []) {
  const s = Object.fromEntries(ASSET.map((v) => [v.name, { ...v.base }]));
  for (const k of DECISION)
    for (const name of k.item)
      for (const a of AXIS) s[name][a] = CLAMP(s[name][a] + k.d[a]);
  for (const k of DECISION)
    if (k.collapse && collapsed.includes(k.collapse))
      for (const name of k.item) s[name].avl = 0;
  return s;
}

// How many (item, axis) pairs a single decision raises and lowers on its own.
export function impact(k) {
  const up = k.item.length * AXIS.filter((a) => k.d[a] > 0).length;
  const down = k.item.length * AXIS.filter((a) => k.d[a] < 0).length;
  return { up, down, net: k.item.length * AXIS.reduce((a, ax) => a + k.d[ax], 0),
    worst: Math.min(...AXIS.map((a) => k.d[a])) };
}

export const total = (s, a) => ASSET.reduce((acc, v) => acc + s[v.name][a], 0);
// security/measure.mjs — three axes on the same asset: who rises, who falls, what collapses.
import { AXIS, ASSET, DECISION, apply, impact, total } from "./axis.mjs";

const write = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const base = Object.fromEntries(ASSET.map((v) => [v.name, { ...v.base }]));
const after = apply();

console.log(`${ASSET.length} assets x ${AXIS.length} axes, ${DECISION.length} decisions; ` +
  `score range 0..10 (con confidentiality, int integrity, avl availability)`);

const A = [-21, 6, 6, 6, 4, 7, 6, 6];
console.log("\n1. base score and score after all six decisions");
write(A, "asset", "con", "int", "avl", "", "con'", "int'", "avl'");
for (const v of ASSET)
  write(A, v.name, ...AXIS.map((a) => base[v.name][a]), "", ...AXIS.map((a) => after[v.name][a]));
write(A, "total", ...AXIS.map((a) => total(base, a)), "", ...AXIS.map((a) => total(after, a)));

const B = [-22, 7, 10, 8, 7, 15];
console.log("\n2. how many (item, axis) pairs a decision raises and lowers");
write(B, "decision", "items", "up", "down", "net", "worst axis");
for (const k of DECISION) {
  const e = impact(k);
  write(B, k.name, k.item.length, e.up, e.down, (e.net > 0 ? "+" : "") + e.net,
    AXIS.find((x) => k.d[x] === e.worst) + " " + e.worst);
}
const T = DECISION.map(impact);
write(B, "TOTAL", DECISION.reduce((a, k) => a + k.item.length, 0),
  T.reduce((a, e) => a + e.up, 0), T.reduce((a, e) => a + e.down, 0),
  "+" + T.reduce((a, e) => a + e.net, 0), "-");

const C = [-16, 12, 12, 12, 16];
console.log("\n3. when a collapse condition fires (availability is zeroed)");
write(C, "condition", "con total", "int total", "avl total", "avl = 0 items");
for (const [name, cs] of [["no collapse", []], ["key-loss", ["key-loss"]],
  ["agent-loss", ["agent-loss"]], ["both", ["key-loss", "agent-loss"]]]) {
  const s = apply(cs);
  write(C, name, ...AXIS.map((a) => total(s, a)),
    ASSET.filter((v) => s[v.name].avl === 0).length + "/" + ASSET.length);
}

const D = [-21, 10, 11, 8];
console.log("\n4. lowest axis per asset (no collapse, then key loss)");
write(D, "asset", "lowest", "collapsed", "axis");
const broken = apply(["key-loss"]);
for (const v of ASSET) {
  const a = Math.min(...AXIS.map((x) => after[v.name][x]));
  const b = Math.min(...AXIS.map((x) => broken[v.name][x]));
  write(D, v.name, a, b, AXIS.find((x) => broken[v.name][x] === b));
}
const avg = (s) => (AXIS.reduce((a, x) => a + total(s, x), 0) / (ASSET.length * 3)).toFixed(1);
write(D, "average score", avg(after), avg(broken), "-");
8 assets x 3 axes, 6 decisions; score range 0..10 (con confidentiality, int integrity, avl availability)

1. base score and score after all six decisions
asset                   con   int   avl       con'  int'  avl'
reading-data              4     5     6          4     5    10
billing-record            5     6     5          5     9     9
work-order-queue          3     5     7          0     5    10
identity-store            6     6     5         10     7     2
configuration             4     6     6          5     8     7
audit-log                 5     4     5          7     9     6
meter-firmware            3     7     6          3    10     4
field-app                 4     5     7          7    10     3
total                    34    44    47         41    63    51

2. how many (item, axis) pairs a decision raises and lowers
decision                items        up    down    net     worst axis
encryption-at-rest          4         4       4    +12         avl -1
nightly-backup              5        10       5    +10         con -2
append-only-log             2         2       2     +6         avl -1
multi-factor-login          3         6       3     +6         avl -2
signed-firmware             2         2       2     +4         avl -2
second-copy                 3         3       6      0         con -2
TOTAL                      19        27      22    +38              -

3. when a collapse condition fires (availability is zeroed)
condition          con total   int total   avl total   avl = 0 items
no collapse               41          63          51             0/8
key-loss                  41          63          24             4/8
agent-loss                41          63          39             3/8
both                      41          63          14             6/8

4. lowest axis per asset (no collapse, then key loss)
asset                    lowest  collapsed    axis
reading-data                  4          0     avl
billing-record                5          0     avl
work-order-queue              0          0     con
identity-store                2          0     avl
configuration                 5          5     con
audit-log                     6          0     avl
meter-firmware                3          3     con
field-app                     3          3     avl
average score               6.5        5.3       -

Numbers belong to the measurement class; their inputs are SC1–SC5.

A Decision Works in Two Directions at Once

The second table reduces the six decisions to a single measure: how many (item, axis) pairs each decision raises, and how many it lowers. In total, 27 pairs rise, 22 fall. None of the six decisions raises only — even encryption-at-rest, which has the highest net value, lowers availability by one point on each of the four items it touches.

The reading-data row in the first table is the clearest form of that push. Its confidentiality score starts at 4, encryption raises it to 8, the nightly backup drops it to 6, the second copy drops it to 4. The item is encrypted and its confidentiality score is exactly where it started. The reason is plain: encryption protects the data in one place, while the backup and the copy multiply that same data in two more places. The same row’s availability climbs from 6 to 10 — the gain is real, but it is paid for on the confidentiality axis.

The work-order-queue row is where the clamp does its work: confidentiality starts at 3, two decisions each take two points, and the score stops at 0. Once an axis has hit the floor, there is nothing left to pay on that axis; the next decision starts drawing the same cost from a different item. The opposite end is identity-store: confidentiality climbs from 6 to 10, the ceiling, while availability in return falls from 5 to 2. An axis pinned to the ceiling means that taking any further confidentiality decision on that item produces only an availability cost.

A Decision with Zero Net Effect

The second-copy row is the most instructive item in the second table: its net value is exactly zero. It touches three items, raises three pairs, lowers six. It gains three points of availability per item (+9 total), while costing two points of confidentiality (−6) and one point of integrity (−3) per item. A reading that reduces the total to a single number counts this decision as “no effect” and drops it from the agenda.

But the decision’s meaning is in its distribution, not its total. The same row carries three separate questions: the copy keeps readings reachable during an outage; that same copy makes the data visible in one more place; and temporary inconsistency between the copies weakens integrity. These three do not cancel each other out, because they are paid on different events. A net of zero does not mean three separate risks canceled one another; it means three separate ledgers were summed into one row.

The same measure works for comparison too. nightly-backup raises ten pairs and lowers five, for a net of +10; encryption-at-rest raises four and lowers four, for a net of +12. Counting by pairs, the backup is broader; counting by net value, encryption is deeper. The two are not comparable; no defense can be called “better” without saying on which axis it was measured.

Every Asset’s Dominant Axis Is Its Own

The last columns of the first table give a third reading: once the same decisions have been applied, the eight assets do not land in the same place on all three axes. meter-firmware sits at 10 on integrity and 4 on availability; work-order-queue sits at 10 on availability and 0 on confidentiality. Both items belong to the same network and passed through the same set of decisions, yet one accumulated toward integrity and the other toward availability.

The difference is not chance; it comes from what the item does. Meter firmware runs on a field device: running the wrong version corrupts every reading, while going unpatched for a few hours corrupts nothing. The work-order queue runs the opposite way: who sees a record inside it is a low cost, while the queue going down leaves field crews waiting. The same three axes fall into two different rankings across two items.

The practical consequence is that a single security goal cannot hold across the whole inventory. The rule “confidentiality comes first” has already hit the floor for work-order-queue, leaving nothing left to apply there; the same rule has pinned identity-store to the ceiling and started producing nothing but an availability cost. Axis priority is set per asset, not per organization — and the scores counted through this lesson are the one record of where that priority lands on each item.

A Collapse Zeroes One Axis

The third table runs the decisions’ collapse conditions. When the encryption key is lost, the confidentiality total stays at 41 — arguably still protected, since no one can read the data. At the same time, the availability total drops from 51 to 24 and four of eight assets are zeroed. When the multi-factor login’s authenticator device is lost, availability drops to 39 and three items are zeroed. When both conditions fire together, the total is 14 and six of the eight items are unreachable.

What these rows share is that the confidentiality and integrity columns never move. The defense that collapses does not break on its own axis; it keeps its promise more than fully. The whole cost is written to the third axis. A reading that does not count availability as a security axis sees no problem at all in this table — because the two columns it is watching stay fixed.

What the Average Conceals

The fourth table reads the same situation per asset and shows how a single number misleads. On key loss, four of the eight assets drop to zero on their lowest axis. At the same time, the average score falls only from 6.5 to 5.3. Four of twenty-four cells have been zeroed, and a dashboard watching a single number records that as a one-point decline.

The reason is in the distribution: the other two axes of the zeroed items stay high, which keeps the average up. reading-data sits at 4 on confidentiality, 5 on integrity, and 0 on availability; its average is 3 and looks “moderate.” But if that item cannot be reached, its confidentiality score has no practical payoff. The three axes do not add up; the lowest axis determines the item’s real condition.

Two rows in the table also show this limit: configuration and meter-firmware are not affected by key loss at all, because they are not among the items the encryption decision touches. The scope of a collapse is the set of items the collapsing defense touches — nothing wider. Everything counted through this lesson stands on those sets, and the lessons that follow will give the same sets other names.

Summary

  • The three axes overlap on the same asset: in a model with eight assets and six decisions, 27 (item, axis) pairs rise while 22 fall; none of the six decisions runs in only one direction.
  • The encrypted reading-data item’s confidentiality score rises from 4 and returns to 4, because the backup and the second copy multiply the same data; its availability, meanwhile, climbs from 6 to 10.
  • The zero-net second-copy decision writes +9 on availability, −6 on confidentiality, and −3 on integrity; when the total is reduced to one row, the three separate ledgers disappear.
  • On key loss the confidentiality and integrity totals never move, availability drops from 51 to 24, and four of eight assets are zeroed; the two collapse conditions together write 14 and six items.
  • The same zeroing shows up in the average as only a drop from 6.5 to 5.3; an item’s condition is set by its lowest axis, not the average.
  • The scope of a collapse is the set of items the collapsing decision touches; two assets are entirely unaffected by key loss.

Next Step

This lesson scored eight items and counted which direction six decisions moved those scores. But the whole computation ran on a single list, and that list’s parts were left unnamed: what exactly was the thing called “asset,” what was the name of the thing decisions counter, what was the thing that lowers a score actually called. The next lesson splits the same inventory into three separate lists — asset, threat, and vulnerability — and shows why multiplying the three does not give the number of reachable paths.

To keep your progress and take notes, Log in

My notes

Log in to take notes.

Start typing to search.

↑↓ ↵ Esc navigate · open · close