Skip to content

Adding a new integrity key (2/2) #1426

@Coethium

Description

@Coethium

My English may be imperfect ;)

I post the request in SEB for Windows, but it concerns all OS.

Context

The context is the same as in the previous request : #1425

The BK suggested has a drawback : at least 3 keys needs do be precalculated (win, mac, ios).

This request is mainly for BYOD context, not for exams but for frequent quizzes.

The idea

This Feature Request suggests a new key : the CBK, Common Browser Key.

This is one key to check the integrity, common to the 3 OS. For that we can relie on the properties of the Elliptic Curve Diffie-Hellmann key exchange : the forward operations are easy, but backward operations are really hard.

The key is common to the 3 last OS version, but change on each release.

Teachers/schools can precalculate this key, and set it into the LMS.

Explanations

  • lowcase means private/secret
  • upcase means public
  • w/W for windows, m/M for macos, i/I for ios
  • G is a point on an ellipic curve (Curve25519 ?)
  • . (dot) is the scalar multiplication in the context of Elliptic Curve Diffie-Hellman algorithm

w, m, i are integrity keys calculated by each last version of SEB (the algorithm could be different than the one used for BEK and ASK); these are secrets and only known by you, the devs of SEB.

cbk = G.w.m.i

Let's say we are on a windows computer, in the integrity module we can only calculate w ; m and i can't be given in the binary (too unsecure).

But we can have public precalculated keys :

  • W = G.m.i
  • M = G.w.i
  • I = G.w.m

cbk = w.W = m.M = i.I

And before leaving the integrity module, we can calculate the CBK :

CKB = hash(cbk + seed) // seed given as arg by the call of the function, and chosen by the examinator/teacher/school (in config.seb)

And of course CBK could be hashed with the full URL by the client, before be provided by the API :

security.commonBrowserKey = hash(CBK + URL)

Howto publish precalculated keys

I guess it's better outside the code source, as a table downloaded by SEB :

Exemple with current last versions :

Client SEB version Others OS SEB Version Public key
Win 3.10.1 Mac 3.6.1 & iOS 3.6.1 WXXX1...
Mac 3.6.1 Win 3.10.1 & iOS 3.6.1 MXXX1...
iOS 3.6.1 Win 3.10.1 & Mac 3.6.1 IXXX1...

When you release a new version of SEB, you update the table for the last OS versions, by append (only the last OS versions which exist at the time of a release, IMHO no need to generate crossed possibilities for older triplets) :

Exemple with a future macOS 3.6.2 :

Client SEB version Others OS SEB Version Public key
Win 3.10.1 Mac 3.6.1 & iOS 3.6.1 WXXX1...
Mac 3.6.1 Win 3.10.1 & iOS 3.6.1 MXXX1...
iOS 3.6.1 Win 3.10.1 & Mac 3.6.1 IXXX1...
Win 3.10.1 Mac 3.6.2 & iOS 3.6.1 WXXX2...
Mac 3.6.2 Win 3.10.1 & iOS 3.6.1 MXXX1... (yes, it's the same)
iOS 3.6.1 Win 3.10.1 & Mac 3.6.2 IXXX2...

In production, we can omit the first column, as the config tool utility knows it's own version : we can deduplicate some lines

On the user/config side

The user chooses the triplet win/mac/ios from the possibilities given by the table AND for his current version of SEB.
He also chooses a seed.

He obtains a CBK to copy/paste into the LMS, unique for the selected triplet and the chosen seed.

Limits

As the BK, it can be less secure than the BEK or the ASK. But in BOYD env and for frequent quizzes that's more secure than the only CK used by default, and easier to use than the BEK or the BK.

LMS dev have to implement this key.

Later

This can work if you release new OS version of SEB, let's say a/A for Android :

cbk = G.w.m.i.a

Public keys will be calculated from 3 others OS, for exemple :

W = G.m.i.a

and so on ...

Metadata

Metadata

Assignees

Labels

feature requestThis issue describes a request for a new feature of the software.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions