id: 1e56c2d6818c40e9a668fa2ab838828f
parent_id: 8ddc057d3b9d4b00914e808f8a533a5e
item_type: 1
item_id: 3806c04b10e24dad817835acb66e1480
item_updated_time: 1782812372908
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"** (\"],[-1,\"KDF3 + session + cryptograms + A003 encrypt\"],[1,\"single-block AES-ECB\"],[0,\") |\\\n\"]],\"start1\":1180,\"start2\":1180,\"length1\":51,\"length2\":28},{\"diffs\":[[0,\"P03 \"],[1,\"and\\\n> cannot compute CMAC/CBC \"],[0,\"— the\"],[-1,\"\\\n>\"],[0,\" **K\"]],\"start1\":1363,\"start2\":1363,\"length1\":15,\"length2\":43},{\"diffs\":[[0,\"es**\"],[-1,\", building each derivation-data block and\"],[1,\" the entire KDF by\"],[0,\" cal\"]],\"start1\":1420,\"start2\":1420,\"length1\":49,\"length2\":26},{\"diffs\":[[0,\" the\"],[1,\"\\\n>\"],[0,\" HSM\"],[-1,\"\\\n>\"],[0,\" for \"],[-1,\"the AES-CMAC/AES-CBC\"],[1,\"single-block AES-ECB, assembling each CMAC/CBC itself. Full detail in\\\n> **\\\"Keyfob Flow 2b — KLMS ↔ NetHSM AES Orchestration\\\"** (RFC 4493-over-ECB, exact\\\n> call counts, handle lifecycle)\"],[0,\".\\\n\\\n-\"]],\"start1\":1450,\"start2\":1450,\"length1\":39,\"length2\":204},{\"diffs\":[[0,\"y **\"],[-1,\"AES primitives\"],[1,\"single-block AES\"],[0,\"** cross\"],[1,\"es\"],[0,\" the\"]],\"start1\":1785,\"start2\":1785,\"length1\":30,\"length2\":34},{\"diffs\":[[0,\"tion\"],[-1,\", calling the NetHSM for every AES op\"],[1,\". The NetHSM exposes **only single-block AES-ECB**;\\\nthe KLMS assembles each CMAC/CBC from it (see **Flow 2b** for the full RFC-4493-over-ECB\\\nsequence, byte layouts, and ~23 ECB calls per transaction)\"],[0,\":\\\n\\\n|\"]],\"start1\":4660,\"start2\":4660,\"length1\":45,\"length2\":207},{\"diffs\":[[0,\"AES-\"],[-1,\"CMAC\"],[1,\"ECB\"],[0,\"(master\"],[-1,\"_key, deriv-data)` ×3 (purpose 0x40/0x60/0x70, raw 10-byte UID) | S-ENC / S-MAC / S-DEK |\\\n| verify card | `AES-CMAC(S-MAC, card-cg-deriv-data)`\"],[1,\")` ×7 (CMAC assembled on host) | S-ENC / S-MAC / S-DEK (purpose 0x40/0x60/0x70, raw 10-byte UID) |\\\n| verify card | `AES-ECB(SES-MAC)`-assembled CMAC\"],[0,\" → c\"]],\"start1\":4938,\"start2\":4938,\"length1\":162,\"length2\":166},{\"diffs\":[[0,\"AES-\"],[-1,\"CMAC\"],[1,\"ECB\"],[0,\"(S-ENC\"],[-1,\", …)`; `AES-CMAC(S-MAC, …)` (constants 0x04/0x06/0x07)\"],[1,\"/S-MAC)`-assembled CMAC\"],[0,\" | S\"]],\"start1\":5176,\"start2\":5176,\"length1\":72,\"length2\":40},{\"diffs\":[[0,\"SES-RMAC\"],[1,\" (const 0x04/0x06/0x07)\"],[0,\" |\\\n| hos\"]],\"start1\":5235,\"start2\":5235,\"length1\":16,\"length2\":39},{\"diffs\":[[0,\"AES-\"],[-1,\"CMAC(S-MAC, host-cg-data)`\"],[1,\"ECB(SES-MAC)`-assembled CMAC\"],[0,\" | f\"]],\"start1\":5290,\"start2\":5290,\"length1\":34,\"length2\":36},{\"diffs\":[[0,\"AES-\"],[1,\"E\"],[0,\"CB\"],[-1,\"C\"],[0,\"(S-DEK\"],[-1,\", private_key, \"],[1,\")`-assembled CBC (\"],[0,\"IV=0\"]],\"start1\":5371,\"start2\":5371,\"length1\":32,\"length2\":35},{\"diffs\":[[0,\" pad=M2)\"],[-1,\"`\"],[0,\" | pre-e\"]],\"start1\":5407,\"start2\":5407,\"length1\":17,\"length2\":16},{\"diffs\":[[0,\"Static keys \"],[1,\"(S-ENC/MAC/DEK) and SES-MAC \"],[0,\"are held tra\"]],\"start1\":5454,\"start2\":5454,\"length1\":24,\"length2\":52},{\"diffs\":[[0,\"key \"],[-1,\"the Phase-2/A003 CMAC/\"],[1,\"later\\\n> AES-E\"],[0,\"CB\"],[-1,\"C\"],[0,\" calls\"],[-1,\". The HSM\\\n> returns only results (session keys, cryptograms, A003 ciphertext)\"],[1,\"; they are imported as ephemeral HSM handles and destroyed + zeroized\\\n> after the transaction. The master key is never returned\"],[0,\".\\\n\\\n-\"]],\"start1\":5518,\"start2\":5518,\"length1\":116,\"length2\":156},{\"diffs\":[[0,\"AES-\"],[-1,\"CMAC ×3\"],[1,\"ECB ×7\"],[0,\" (KDF3\"],[-1,\") | `master_key, deriv-data(uid)\"],[1,\", see Flow 2b §A) | `master handle, derivation blocks\"],[0,\"` → \"]],\"start1\":6271,\"start2\":6271,\"length1\":53,\"length2\":73},{\"diffs\":[[0,\"etHSM | AES-\"],[1,\"ECB-assembled \"],[0,\"CMAC (card-c\"]],\"start1\":6377,\"start2\":6377,\"length1\":24,\"length2\":38},{\"diffs\":[[0,\"verify) | `S\"],[1,\"ES\"],[0,\"-MAC\"],[1,\" handle\"],[0,\", deriv\"],[-1,\"-\"],[1,\"ation \"],[0,\"data` |\\\n| 7 \"]],\"start1\":6417,\"start2\":6417,\"length1\":36,\"length2\":50},{\"diffs\":[[0,\"AES-\"],[1,\"ECB-assembled \"],[0,\"CMAC\"],[-1,\" ×3\"],[1,\"s\"],[0,\" (se\"]],\"start1\":6565,\"start2\":6565,\"length1\":15,\"length2\":27},{\"diffs\":[[0,\"`S-ENC/S-MAC\"],[1,\" handles\"],[0,\", deriv\"],[-1,\"-\"],[1,\"ation \"],[0,\"data` → SES-\"]],\"start1\":6605,\"start2\":6605,\"length1\":32,\"length2\":45},{\"diffs\":[[0,\"etHSM | AES-\"],[1,\"ECB-assembled \"],[0,\"CMAC (host c\"]],\"start1\":6671,\"start2\":6671,\"length1\":24,\"length2\":38},{\"diffs\":[[0,\"| `S\"],[1,\"ES\"],[0,\"-MAC\"],[1,\" handle\"],[0,\", deriv\"],[-1,\"-\"],[1,\"ation \"],[0,\"data\"]],\"start1\":6720,\"start2\":6720,\"length1\":20,\"length2\":34},{\"diffs\":[[0,\"M | AES-\"],[1,\"ECB-assembled \"],[0,\"CBC (A00\"]],\"start1\":6780,\"start2\":6780,\"length1\":16,\"length2\":30},{\"diffs\":[[0,\"| `S-DEK\"],[1,\" handle\"],[0,\", privat\"]],\"start1\":6821,\"start2\":6821,\"length1\":16,\"length2\":23},{\"diffs\":[[0,\"ster key\"],[1,\", AES-ECB only\"],[0,\")\\\n │ INI\"]],\"start1\":8171,\"start2\":8171,\"length1\":16,\"length2\":30},{\"diffs\":[[0,\"  │ AES-\"],[-1,\"CMAC\"],[1,\"ECB×7 \"],[0,\"(KDF3 ma\"]],\"start1\":8628,\"start2\":8628,\"length1\":20,\"length2\":22},{\"diffs\":[[0,\"ter+UID)\"],[-1,\"×3\"],[0,\" ──►│\"],[1,\"  (CMAC assembled on host)\"],[0,\"\\\n │     \"]],\"start1\":8651,\"start2\":8651,\"length1\":23,\"length2\":47},{\"diffs\":[[0,\"  │ AES-\"],[1,\"ECB \"],[0,\"CMAC(ver\"]],\"start1\":8790,\"start2\":8790,\"length1\":16,\"length2\":20},{\"diffs\":[[0,\"ify)\"],[-1,\" \"],[0,\"+session\"],[-1,\"×3 ─\"],[1,\" \"],[0,\"─►│\\\n\"]],\"start1\":8810,\"start2\":8810,\"length1\":21,\"length2\":17},{\"diffs\":[[0,\"   +\"],[-1,\"MAC(\"],[0,\"host\"],[-1,\")\"],[1,\"_cg\"],[0,\" +CB\"]],\"start1\":8861,\"start2\":8861,\"length1\":17,\"length2\":15},{\"diffs\":[[0,\"BC(A003)\"],[1,\"  \"],[0,\"       │\"]],\"start1\":8875,\"start2\":8875,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\" NetHSM \"],[1,\"AES \"],[0,\"orchestr\"]],\"start1\":9714,\"start2\":9714,\"length1\":16,\"length2\":20},{\"diffs\":[[0,\"ter-key \"],[-1,\"AES\"],[1,\"ECB\"],[0,\") are Cl\"]],\"start1\":9744,\"start2\":9744,\"length1\":19,\"length2\":19},{\"diffs\":[[0,\"`kf-\"],[-1,\"hsm` (`MasterKeyBackend`) | models the **dev** SW-KDF; the production master-key NetHSM primitive backend is Clypeum-side\"],[1,\"crypto` (`aes_cmac_with_subkeys`/`aes_cmac_via_ecb`/`CmacSubkeys`) | the exact RFC-4493-over-ECB assembly the KLMS↔NetHSM path uses (Flow 2b §2) |\\\n| `kf-hsm` Nitrokey `CKM_AES_ECB` backend | dev model of the same AES-ECB primitive (Flow 2b §1)\"],[0,\" |\\\n\\\n\"]],\"start1\":10305,\"start2\":10305,\"length1\":129,\"length2\":251},{\"diffs\":[[0,\"face\"],[-1,\" (native `CKM_AES_CMAC` vs AES-ECB-assembled\"],[1,\": **AES-ECB-only** (Flow 2b) vs **native CMAC**\\\n      (Flow 2b §6 alt — keeps static keys HSM-resident\"],[0,\").\\\n-\"]],\"start1\":10976,\"start2\":10976,\"length1\":52,\"length2\":110}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-06-30T09:47:46.233Z
created_time: 2026-06-30T09:47:46.233Z
type_: 13