[OpenTRV-dev] Very basic backhaul thoughts
Damon Hart-Davis
EMAIL ADDRESS HIDDEN
Thu Apr 9 18:42:32 BST 2015
Hi,
Thanks for that thought, and I was already trying to prune options, but maybe did not try hard enough!
ENC generally does NOT imply authentication and allows all sorts of unpleasant attacks in my understanding.
I agree that NONE and SEQ could probably be killed if need be, but currently seem useful to me.
If the underlying comms medium is secure though I think that NONE may be handy but maybe not enough to justify a separate option.
SEQ is intended to help notice lost messages.
Currently all the data I am flinging around with OpenTRV counts as ‘CHECK’.
I may go and kill off NONE and adjust CHECK appropriately.
Thanks again...
Rgds
Damon
> On 9 Apr 2015, at 16:17, Jeremy Poulter <EMAIL ADDRESS HIDDEN> wrote:
>
> Hi,
>
> Just one general comment; you are proposing a lot of options which while it allows for a lot of flexibility can really hurt interoperability, especially if you want to allow ports to other platforms or indeed implementation from scratch based on a specification. The other thing to consider is that if you want to run a certification program (and I believe this was one of your goals) each option will increase the complexity of that program. I would highly recommend that you keep the number of options to a minimum and each option should have a really good reason behind it not just 'it would be nice'.
>
> So for example your list of message types is;
> * NONE: none (sent with no checksum, etc, as clear text): may be OK for underlying reliable/secure medium and/or non-critical data.
> * CHECK: simple frame check value applied and verified, eg typically 7--16 bit check sum or CRC.
> * SEQ: above plus small frame sequence number.
> * AUTH: above plus crypto-based authentication.
> * ENC: above plus encryption (eg AES-GCM or EAX).
> * ENCHIGH: above with enhanced security (eg longer keys and/or IVs etc) at cost of frame size and CPU.
>
> I would ask the questions;
> - Does NONE really save you that much when compared to CHECK?
> - Does AUTH actually add any value, given that this is typically associated with public/private key encryption and certificate chains and these are fairly heavy in terms of CPU requirements. Does ENC actually give you an implied authentication due to the pre-shared key?
>
> Cheers,
>
> Jeremy
>
>
> On 3 April 2015 at 21:03, Damon Hart-Davis <EMAIL ADDRESS HIDDEN> wrote:
> Update…
>
>
> DHD20150403: messaging thoughts including integrity.
>
> The design aim is to allow tramission of (optionally secure) telemetry from low-power sensor nodes
> over a number of alternate backhaul media such as one-way packet-based ISM radios.
>
> Assume that the leaf end is a low-powered CPU and so the code interface and implementation has to be simple,
> and with minimal support from some hardware for features such as encryption.
>
> Assume that the messaging maximum possible frame size will generally be 64 bytes or less,
> and may vary significantly with the options chosen below, especially if encrytion is added.
> Assume that some of the data carried may be sensitive, eg privacy related or for driving actuators.
>
> Assume that some implementations can/will not run below a specific integrity level, eg with data checksums/CRCs.
>
> Assume that the raw messaging transport is by default:
> * one way
> * lossy
> * noisy
> * bandwidth limited (low bit rate and/or (say) frames/day capped) and/or expensive per bit or frame
> * real-time but possibly with significant latency
> * overhearable, eg over ISM radio or similar.
>
> (Some variants like TinyHAN allow two-way flows, and others may be radically different such as tunneled in HTTPS over a LAN.)
>
> Have one or more backhaul layers available at run-time leaf (with superset at concentrator)
> with some constant capabilities, ie that can be checked/selected at pref at compile time, such as:
>
> * Frame formats that can be carried on this channel (1 or more):
> * JSON object {...} (compact ASCII7 subset, only printable chars 32--126 ie with no linebreaks or other control).
> * Whitened binary (with no 0x00 or 0xff bytes), so limited-length runs of either bit, and both values possible as delimiters.
> * Structured binary (as interpretted by underlying channel eg with TinyHAN).
> * Pure binary.
>
> * Ability to mark some frames as 'important' (bool), eg containing critical or changed values, with extra delivery effort (eg double TX or FEC).
>
> * Maximum data integrity protection available from the channel (enum / small int):
> * NONE: none (sent with no checksum, etc, as clear text): may be OK for underlying reliable/secure medium and/or non-critical data.
> * CHECK: simple frame check value applied and verified, eg typically 7--16 bit check sum or CRC.
> * SEQ: above plus small frame sequence number.
> * AUTH: above plus crypto-based authentication.
> * ENC: above plus encryption (eg AES-GCM or EAX).
> * ENCHIGH: above with enhanced security (eg longer keys and/or IVs etc) at cost of frame size and CPU.
> (Data receiver should usually check data for semantic/syntactic integrity etc also, especially if a low level is used here.)
>
> All systems should support at least JSON object and whitened binary formats with a simple (CHECK) integrity check.
> (Note that JSON formats are assumed NOT optimal in bandwidth terms,
> and should generally not be used for prolonged production deployments (use a binary format),
> but the underlying medium may be able to make some optimisations such as simple compression on the wire.)
>
> All systems with privacy-related data must support encyption (ENC),
> and/or have the ability selectively not to send sensitive data,
> and/or the underlying backhaul must be able to guarantee ENC-level integrity itself (eg tunelling over HTTPS or VPN).
>
> At run time (and possibly at compile time) it must be possible to discover the maximum data frame size possible
> with the selected transmission parameters.
>
> Note that for higher integrity levels suitably-sized keys may have to have been pre-shared for example,
> and any modes not supported by the concentrator may have to be removed to the 'available' list.
>
> At run time it should be possible to specify above parameters with each frame to send from leaf,
> and those parameters plus some associated values (eg sequence numbers/range) should be recoverable.
> Data that fails integrity checks is in normal circumstances not available nor are crypto keys used,
> though parameters such as algorithm and strength may be).
>
> Note that key, IV, etc lengths that are acceptable in 2015 may prove inadequate to future;
> to some extent that is implicitly dealt with outside this definition by the key-sharing mechanism,
> but frame size limits may ultimately limit available security.
>
> See also:
> http://blog.cryptographyengineering.com/2011/11/how-not-to-use-symmetric-encryption.html
> http://crypto.stackexchange.com/questions/7951/aesctrhmac-encryption-and-authentication-on-an-arduino
> http://www.cs.berkeley.edu/~jaein/papers/cs294_9_paper_fec.pdf
> http://packetpushers.net/ipsec-bandwidth-overhead-using-aes/
> http://nordsecmob.aalto.fi/en/publications/theses_2008/thesis_gabrielalimon_tkk.pdf
> http://www.iacr.org/workshops/fse2010/content/slide/Fast%20Software%20AES%20Encryption.pdf
> http://tools.ietf.org/html/rfc4106
> Public domain uNaCl crypto for AtMega: http://munacl.cryptojedi.org/ and https://cryptojedi.org/papers/avrnacl-20130514.pdf
> https://github.com/kokke/tiny-AES128-C (public domain)
> http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
>
> _______________________________________________
> OpenTRV-dev mailing list
> EMAIL ADDRESS HIDDEN
> http://lists.opentrv.org.uk/listinfo/opentrv-dev
>
> _______________________________________________
> OpenTRV-dev mailing list
> EMAIL ADDRESS HIDDEN
> http://lists.opentrv.org.uk/listinfo/opentrv-dev
More information about the OpenTRV-dev
mailing list