add flowchart
All checks were successful
Build Typst document / build_typst_documents (push) Successful in 32s

This commit is contained in:
lukas-heilgenbrunner 2024-10-22 15:11:53 +02:00
parent 6529bf97b3
commit 5684bfaa23

View File

@ -1,6 +1,18 @@
#import "@preview/ichigo:0.1.0": config, prob #import "@preview/ichigo:0.1.0": config, prob
#import "@preview/algorithmic:0.1.0" #import "@preview/algorithmic:0.1.0"
#import algorithmic: algorithm #import algorithmic: algorithm
#import "@preview/fletcher:0.5.1" as fletcher: diagram, node, edge
#import fletcher.shapes: house, hexagon
#let blob(pos, label, tint: white, ..args) = node(
pos, align(center, label),
width: 26mm,
fill: tint.lighten(60%),
stroke: 1pt + tint.darken(20%),
corner-radius: 5pt,
..args,
)
#show: config.with( #show: config.with(
course-name: "SMART CARDS & NFC", course-name: "SMART CARDS & NFC",
@ -20,7 +32,7 @@
) )
][ ][
- The PiN_TRY_COUNTER is prone to turn off attacks. - The PIN_TRY_COUNTER is prone to turn off attacks.
Each time the chip resets the ram value of the counter is cleared and one gets basically infinite retries. Each time the chip resets the ram value of the counter is cleared and one gets basically infinite retries.
Solution: Solution:
@ -32,6 +44,43 @@
Solution: Solution:
- Implement a constant time comparison operation. - Implement a constant time comparison operation.
- PIN_TRY_COUNTER is incremented after the comparison operation.
If the operation is interrupted due to a non atomic operation, the counter not incremented.
Solution:
- Do counter++ before comparison. This way the attacker can't determine if the counter is incremented or not.
#sym.arrow.r See flowchart
- Implement a atomic operation for the counter incrementation.
#align(center)[
#diagram(
spacing: 8pt,
cell-size: (8mm, 10mm),
edge-stroke: 1pt,
edge-corner-radius: 5pt,
mark-scale: 70%,
debug: false,
blob((2,0), [PIN Verification], tint: yellow, shape: fletcher.shapes.pill),
edge("-|>"),
blob((2,1), [PIN_Try_Counter < LIMIT], tint: green, shape: fletcher.shapes.hexagon, width: 35mm),
edge("ll,dddd", "-|>", label: "No"),
edge("-|>", "d"),
blob((0,5), [Result: Card/Pin blocked], tint: yellow, shape: fletcher.shapes.pill),
blob((2,2), [Pin_try_counter++], tint: blue, shape: fletcher.shapes.rect, width: auto),
edge("-|>"),
blob((2,3), [PIN == Ref_PIN?], tint: green, shape: fletcher.shapes.hexagon, width: auto),
edge("l,d", "-|>", label: "Yes"),
edge( "r,dd", "-|>", label: "No"),
blob((1,4), [Pin_try_counter = 0], tint: blue, shape: fletcher.shapes.rect, width: auto),
edge("-|>"),
blob((1,5), [PIN Verification], tint: yellow, shape: fletcher.shapes.pill),
blob((3,5), [PIN Verification], tint: yellow, shape: fletcher.shapes.pill),
)
]
] ]
#prob[ #prob[