[otp_ctrl] Add full list of countermeasures in prep for D2S Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/otp_ctrl/data/otp_ctrl.hjson b/hw/ip/otp_ctrl/data/otp_ctrl.hjson index 6dbe3e7..698105c 100644 --- a/hw/ip/otp_ctrl/data/otp_ctrl.hjson +++ b/hw/ip/otp_ctrl/data/otp_ctrl.hjson
@@ -883,6 +883,102 @@ { name: "BUS.INTEGRITY", desc: "End-to-end bus integrity scheme." } + { name: "SECRET.MEM.SCRAMBLE", + desc: "Secret partitions are scrambled with a full-round PRESENT cipher." + } + { name: "PART.MEM.DIGEST", + desc: "Integrity of buffered partitions is ensured via a 64bit digest." + } + { name: "DAI.FSM.SPARSE", + desc: "The direct access interface FSM is sparsely encoded." + } + { name: "KDI.FSM.SPARSE", + desc: "The key derivation interface FSM is sparsely encoded." + } + { name: "LCI.FSM.SPARSE", + desc: "The life cycle interface FSM is sparsely encoded." + } + { name: "PART.FSM.SPARSE", + desc: "The partition FSMs are sparsely encoded." + } + { name: "SCRMBL.FSM.SPARSE", + desc: "The scramble datapath FSM is sparsely encoded." + } + { name: "TIMER.FSM.SPARSE", + desc: "The background check timer FSM is sparsely encoded." + } + { name: "DAI.CTR.REDUN", + desc: "The direct access interface address counter is duplicated." + } + { name: "KDI_SEED.CTR.REDUN", + desc: "The key derivation interface counter is duplicated." + } + { name: "KDI_ENTROPY.CTR.REDUN", + desc: "The key derivation entropy counter is duplicated." + } + { name: "LCI.CTR.REDUN", + desc: "The life cycle interface address counter is duplicated." + } + { name: "PART.CTR.REDUN", + desc: "The address counter of buffered partitions is duplicated." + } + { name: "SCRMBL.CTR.REDUN", + desc: "The srambling datapath counter is duplicated." + } + { name: "TIMER_INTEG.CTR.REDUN", + desc: "The background integrity check timer is duplicated." + } + { name: "TIMER_CNSTY.CTR.REDUN", + desc: "The background consistency check timer is duplicated." + } + { name: "TIMER.LFSR.REDUN", + desc: "The background check LFSR is duplicated." + } + { name: "DAI.FSM.LOCAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon local escalation." + } + { name: "LCI.FSM.LOCAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon local escalation." + } + { name: "KDI.FSM.LOCAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon local escalation." + } + { name: "PART.FSM.LOCAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon local escalation." + } + { name: "SCRMBL.FSM.LOCAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon local escalation." + } + { name: "TIMER.FSM.LOCAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon local escalation." + } + { name: "DAI.FSM.GLOBAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "LCI.FSM.GLOBAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "KDI.FSM.GLOBAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.FSM.GLOBAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon global escalation via life cycle." + } + { name: "SCRMBL.FSM.GLOBAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "TIMER.FSM.GLOBAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.DATA_REG.INTEGRITY", + desc: "All partition buffer registers are protected with ECC on 64bit blocks." + } + { name: "MACRO.MEM.INTEGRITY", + desc: "All OTP macro words are protected with ECC on 16bit words." + } + { name: "PART.DATA_REG.BKGN_CHK", + desc: "The digest of buffered partitions is recomputed and checked at pseudorandom intervals in the background." + } ] ///////////////
diff --git a/hw/ip/otp_ctrl/data/otp_ctrl.hjson.tpl b/hw/ip/otp_ctrl/data/otp_ctrl.hjson.tpl index cd5300f..a4cd311 100644 --- a/hw/ip/otp_ctrl/data/otp_ctrl.hjson.tpl +++ b/hw/ip/otp_ctrl/data/otp_ctrl.hjson.tpl
@@ -336,6 +336,102 @@ { name: "BUS.INTEGRITY", desc: "End-to-end bus integrity scheme." } + { name: "SECRET.MEM.SCRAMBLE", + desc: "Secret partitions are scrambled with a full-round PRESENT cipher." + } + { name: "PART.MEM.DIGEST", + desc: "Integrity of buffered partitions is ensured via a 64bit digest." + } + { name: "DAI.FSM.SPARSE", + desc: "The direct access interface FSM is sparsely encoded." + } + { name: "KDI.FSM.SPARSE", + desc: "The key derivation interface FSM is sparsely encoded." + } + { name: "LCI.FSM.SPARSE", + desc: "The life cycle interface FSM is sparsely encoded." + } + { name: "PART.FSM.SPARSE", + desc: "The partition FSMs are sparsely encoded." + } + { name: "SCRMBL.FSM.SPARSE", + desc: "The scramble datapath FSM is sparsely encoded." + } + { name: "TIMER.FSM.SPARSE", + desc: "The background check timer FSM is sparsely encoded." + } + { name: "DAI.CTR.REDUN", + desc: "The direct access interface address counter is duplicated." + } + { name: "KDI_SEED.CTR.REDUN", + desc: "The key derivation interface counter is duplicated." + } + { name: "KDI_ENTROPY.CTR.REDUN", + desc: "The key derivation entropy counter is duplicated." + } + { name: "LCI.CTR.REDUN", + desc: "The life cycle interface address counter is duplicated." + } + { name: "PART.CTR.REDUN", + desc: "The address counter of buffered partitions is duplicated." + } + { name: "SCRMBL.CTR.REDUN", + desc: "The srambling datapath counter is duplicated." + } + { name: "TIMER_INTEG.CTR.REDUN", + desc: "The background integrity check timer is duplicated." + } + { name: "TIMER_CNSTY.CTR.REDUN", + desc: "The background consistency check timer is duplicated." + } + { name: "TIMER.LFSR.REDUN", + desc: "The background check LFSR is duplicated." + } + { name: "DAI.FSM.LOCAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon local escalation." + } + { name: "LCI.FSM.LOCAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon local escalation." + } + { name: "KDI.FSM.LOCAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon local escalation." + } + { name: "PART.FSM.LOCAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon local escalation." + } + { name: "SCRMBL.FSM.LOCAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon local escalation." + } + { name: "TIMER.FSM.LOCAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon local escalation." + } + { name: "DAI.FSM.GLOBAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "LCI.FSM.GLOBAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "KDI.FSM.GLOBAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.FSM.GLOBAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon global escalation via life cycle." + } + { name: "SCRMBL.FSM.GLOBAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "TIMER.FSM.GLOBAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.DATA_REG.INTEGRITY", + desc: "All partition buffer registers are protected with ECC on 64bit blocks." + } + { name: "MACRO.MEM.INTEGRITY", + desc: "All OTP macro words are protected with ECC on 16bit words." + } + { name: "PART.DATA_REG.BKGN_CHK", + desc: "The digest of buffered partitions is recomputed and checked at pseudorandom intervals in the background." + } ] ///////////////