Skip to content

Conversation

@henriman
Copy link
Contributor

@henriman henriman commented Jan 30, 2025

PR for verifying secure information flow for the VerifiedSCION router; see #409 for more information.


TODOs (besides what is mentioned in the issue mentioned above)

  • At the moment, this branch still contains the assumption path.AbsMac == io.AbsMac in router/io-spec-atomic-events.gobra.
    • The way the project is set up at the moment, one cannot use path.AbsMac in io/io-spec.gobra since since importing pkg/slayers/path would lead to a cyclical import. Thus, at the moment, I define another AbsMac function in io/tmp_defs.gobra and assume that this performs the same computation.
    • However, we decided that it would likely make more sense to move the relevant definitions in pkg/slayers/path/io_msgterm_spec.gobra to io.

henriman and others added 30 commits November 26, 2024 15:56
What is missing is the `AtomicDecl` and `InternalDecl` event in
`io-spec-atomic-events.gobra` and `io-spec-abstract-transitions.gobra`.
Pre- and postconditions still need to be "lifted" to the atomic and
internal events. `WriteTo` may also need a spec
More data needs to be asserted low, of course.
`DeclEvent` needs to be verified once slayers problem is worked out
`DeclEvent` was removed as it just copied `AtomicDecl`. It seems that we
don't need to perform that much translation of the pre- and
postconditions as the other events.
In particular, add postconditions asserting that results are low
wherever it is applicable, in order to make the contracts more precise.
This is in anticipation of needing this information for further
verification.

Note that I still have some concerns regarding the pre- and
postconditions of `fmt.Sprintf` and `serrors.New` which are elaborated
in comments.
As for private/topology/underlay, I have added these to make the
contracts more precise, as I anticipate I will need this for further
verification

Note that at the moment, we still need a lot of `assume` statements due
to Gobra issues #831 and #832. Also, `LinkType.String` doesn't have an
appropriate postcondition yet, as I couldn't assert (nor assume) low(err.Error()) for
a low `err`.
I forgot to require all elements of `v` to be low. This also required
the addition of another assumption in `private/topology/underlay`, as
Gobra can't infer that all elements of a slice created from low values
must be low (cf. Gobra issue #835)
There still remain a lot of assumptions due to Gobra issues
Most notably sensitivity requirements in interfaces have been made
uniform
As `UDPConn` is "abstract" (i.e. only defined using `PrivateField`),
the issue here is not of not being able to implement `IsLow`, only that
we still need to add `hyper` to it. Update comment accordingly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants