GithubHelp home page GithubHelp logo

ssp21 / ssp21-spec Goto Github PK

View Code? Open in Web Editor NEW
10.0 12.0 4.0 540 KB

Secure SCADA Protocol 21 Specification

Makefile 21.82% CSS 50.08% HTML 25.71% Shell 2.38%
security-protocol scada ics-security industrial-automation

ssp21-spec's Introduction

SSP21

Secure SCADA Protocol for the 21st century (SSP21) is a cryptographic wrapper for ICS environments. It is inspired by the Noise Protocol.

Specification

The specification is built using pandoc. The included Makefile will generate PDF and HTML output.

Setup

> sudo apt-get install pandoc mscgen graphviz texlive texlive-latex-base texlive-latex-extra texlive-fonts-recommended lmodern python-dev python-pip inkscape
> pip install pandoc-fignos

Depending on your setup of Python, you may need to add ~/.local/bin to your path.

ssp21-spec's People

Contributors

blytkerchan avatar jadamcrain avatar sbromberger avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ssp21-spec's Issues

Session validation of TTL should use relative time

  • In section 5.5.3, the third point should be "Set valid_until_ms = NOW() - time_session_init + TTL".

  • In section 5.5.4, the second point should be "Check that valid_until_ms <= NOW() - time_session_init".

Otherwise, you would need two synchronized clocks and time_session_init would be useless.

The ref implementation does as I described. See https://github.com/aegis4ics/ssp21-cpp/blob/master/cpp/libs/src/ssp21/crypto/Session.cpp#L171 and https://github.com/aegis4ics/ssp21-cpp/blob/master/cpp/libs/src/ssp21/crypto/Session.cpp#L118

3.1 Alternative: Symmetric keys only

This is a not good, as this means a single symmetric key is used over an extended period of time. Using the same symmetric key will give attackers lots of data to attempt a crack, along with lots of time to attempt to attack the key.

A better method is to use an algorithm like PAKE to establish a new key each time, or derive a new key from the root key (using a KDF) that is used for the session.

make PDF broken?

from latest master:

$ make
pandoc ssp21.md -s --toc --toc-depth=5 --number-sections \
        -f markdown+yaml_metadata_block+startnum \
	--filter pandoc-fignos \
	--template template_pandoc.latex \
	-V colorlinks \
	-o ssp21.pdf
! Undefined control sequence.
l.161 \tightlist

pandoc: Error producing PDF
Makefile:33: recipe for target 'ssp21.pdf' failed
make: *** [ssp21.pdf] Error 43

Remove mentions of DNP3 SA to make document more neutral

Doesn't add to the argument to make protocol specific knocks.

From Tim:

"This technique is utilized to combat one-pass authentication techniques from being abused to carry out held-replay message attacks where an authenticated session is utilized to replay messages out of the authenticated context" or however you want to word itand drop reference to DNP3 SA

Add state transition diagrams for initiator and responder handshakes

From BMK.

We already have the "dot" package integrated and have played with diagram generation.

The transition diagrams will likely need to differ for session oriented (TCP) vs sessionless (serial/UDP). This may perhaps consist of optional transitions / actions in one but not the other.

For instance, in TCP we may want to specify that the connection should be closed for certain reasons, but would never do this for serial.

add definitions for specification terminology and/or a glossary

From BMK:

"Would it be useful to add some definitions of the “requirement” words used in the spec (i.e. “shall”, “may”, “should”), a la RFC style? Also consider adding definitions of key terms, used throughout the document, up front."

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.