section‹ICING› text‹We abstract and simplify from the protocol ICING in several ways. First, we only consider
of Consent (PoC), not Proofs of Provenance (PoP). Our framework does not support proving the
validation properties that PoPs provide, and it also currently does not support XOR, and
changing hop fields.
, instead of embedding $A_i \oplus PoP_{0,1}$, we embed $A_i$ directly.
also remove the payload from the Hash that is included in each packet.
offer three versions of this protocol:
begin{itemize}
item @{text "ICING"}, which contains our best effort at modeling the protocol as accurately as
.
item @{text "ICING_variant"}, in which we strip down the protocol to what is required to obtain the
guarantees and remove unnecessary fields.
item @{text "ICING_variant2"}, in which we furthermore simplify the protocol. The key of the MAC in
protocol is only the key of the AS, as opposed to a key derived specifically for this hop field.
order to prove that this scheme is secure, we have to assume that ASes only occur once on an
path, since otherwise the MAC for two different hop fields (by the same AS) would be the
, and the AS could not distinguish the hop fields based on the MAC.
end{itemize}› theory ICING imports "../Parametrized_Dataplane_3_undirected" begin
locale icing_defs = network_assums_undirect _ _ _ auth_seg0 for auth_seg0 :: "(msgterm × nat ahi_scheme list) set" begin
text‹The term @{term "sntag"} is a key that is derived from the key of an AS and a specific
field. We use it in the computation of @{term "hf_valid"}.
"tag" field is a opaque numeric value which is used to encode further routing information of a
.›
(*redefined these functions in terms of a @{text "nat ahi_scheme"}*) fun hf2term :: "nat ahi_scheme ==> msgterm"where "hf2term (UpIF = upif, DownIF = downif, ASID = asid, … = tag) = L [if2term upif, if2term downif, Num asid, Num tag]"
fun term2hf :: "msgterm ==> nat ahi_scheme"where "term2hf (L [upif, downif, Num asid, Num tag]) = (UpIF = term2if upif, DownIF = term2if downif, ASID = asid, … = tag)"
lemma term2hf_hf2term[simp]: "term2hf (hf2term hf) = hf"apply(cases hf) by auto
text‹We make some useful definitions that will be used to define the predicate @{term "hf_valid"}.
them as separate definitions is useful to prevent unfolding in proofs that don't require it.› definition fullpath :: "ICING_HF list ==> msgterm"where "fullpath hfs = L (map (hf2term o AHI) hfs)"
definition maccontents where "maccontents ahi hfs PoC_i_expire = ⟨Mac[sntag ahi] ⟨fullpath hfs, Num PoC_i_expire⟩, ⟨Num 0, Hash (fullpath hfs)⟩⟩"
text‹The predicate @{term "hf_valid"} is given to the concrete parametrized model as a parameter.
ensures the authenticity of the hop authenticator in the hop field. The predicate takes an
timestamp (in this model always a numeric value, hence the matching on
{term "Num PoC_i_expire"}), the entire segment and the hop field to be validated.› fun hf_valid :: "msgterm ==> msgterm ==> ICING_HF list ==> ICING_HF ==> bool"where "hf_valid (Num PoC_i_expire) uinfo hfs (AHI = ahi, UHI = uhi, HVF = A_i)⟷ uhi = () ∧ uinfo = ε ∧ A_i = Hash (maccontents ahi hfs PoC_i_expire)"
| "hf_valid _ _ _ _ = False"
text‹We can extract the entire path (past and future) from the hvf field.› fun extr :: "msgterm ==> nat ahi_scheme list"where "extr (Mac[Mac[_] ⟨L fullpathhfs, Num PoC_i_expire⟩] _) = map term2hf fullpathhfs"
| "extr _ = []"
text‹Extract the authenticated info field from a hop validation field.› fun extr_ainfo :: "msgterm ==> msgterm"where "extr_ainfo (Mac[_] (L (Num ts # xs))) = Num ts"
| "extr_ainfo _ = ε"
text‹An authenticated info field is always a number (corresponding to a timestamp). The
unauthenticated info field is set to the empty term @{term "ε"}.› definition auth_restrict where "auth_restrict ainfo uinfo l ≡ (∃ts. ainfo = Num ts) ∧ (uinfo = ε)"
text‹When observing a hop field, an attacker learns the HVF. UHI is empty and the AHI only contains
information that are not terms.› fun terms_hf :: "ICING_HF ==> msgterm set"where "terms_hf hf = {HVF hf}"
(******************************************************************************) subsection‹Definitions and properties of the added intruder knowledge› (******************************************************************************) text‹Here we define a @{text "ik_add"} and @{text "ik_oracle"} as being empty, as these features are
used in this instance model.›
(******************************************************************************) subsection‹Properties of the intruder knowledge, including @{text "ik_add"} and @{text "ik_oracle"}› (******************************************************************************) text‹We now instantiate the parametrized model's definition of the intruder knowledge, using the
of @{text "ik_add"} and @{text "ik_oracle"} from above. We then prove the properties
we need to instantiate the @{text "dataplane_3_undirected"} locale.› print_locale dataplane_3_undirected_ik_defs sublocale
dataplane_3_undirected_ik_defs _ _ _ auth_seg0 terms_uinfo no_oracle hf_valid auth_restrict extr
extr_ainfo term_ainfo terms_hf ik_add ik_oracle by unfold_locales
lemma ik_hfs_form: "t ∈ parts ik_hfs ==>∃ t' . t = Hash t'" apply auto apply(drule parts_singleton) by(auto simp add: auth_seg2_def hf_valid_invert)
(******************************************************************************) subsection‹Direct proof goals for interpretation of @{text "dataplane_3_undirected"}› (******************************************************************************)
lemma COND_honest_hf_analz: assumes"ASID (AHI hf) ∉ bad""hf_valid ainfo uinfo hfs hf""terms_hf hf ⊆ synth (analz ik)" "no_oracle ainfo uinfo""hf ∈ set hfs" shows"terms_hf hf ⊆ analz ik" proof- from assms(3) have hf_synth_ik: "HVF hf ∈ synth ik"by auto thenhave"∃hfs uinfo. hf ∈ set hfs ∧ (ainfo, hfs) ∈ auth_seg2 uinfo" using assms(1,2,4,5) apply(auto simp add: ik_def hf_valid_invert ik_hfs_simp)
subgoal for PoC_i_expire hf' hfs' PoC_i_expire' by(auto intro!: exI[of _ hfs'] elim!: back_subst[where ?a=hf', where ?b=hf]
simp add: maccontents_def sntag_eq)
subgoal by(auto simp add: ik_hfs_simp ik_def hf_valid_invert simp del: ik_uinfo_def)
subgoal by(auto simp add: ik_hfs_simp ik_def hf_valid_invert maccontents_def
intro: sntag_synth_bad dest: ik_add_form)
subgoal apply(auto simp add: ik_hfs_simp ik_def hf_valid_invert maccontents_def auth_restrict_def auth_seg2_def
intro: sntag_synth_bad dest: ik_add_form simp del: ik_uinfo_def) (*takes ~ 10 sec*)
subgoal by (simp add: fullpath_def)
subgoal using fullpath_def ik_add_form by auto apply (auto simp add: ik_add_def)
subgoal for ainfoa l uinfoa hf' pkthash apply(frule valid_hf_eq[where ?hf'="hf'"]) by(auto dest: valid_hf_eq simp add: hf_valid_invert maccontents_def auth_seg2_def auth_restrict_def) done done thenhave"HVF hf ∈ ik" using assms(2) by(auto simp add: ik_hfs_def intro!: ik_ik_hfs intro!: exI) thenshow ?thesis by auto qed
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.