From f0e633ca0929ba70fe9c4e6ba3b6ad71a394b4a2 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 25 Sep 2020 17:07:38 +0530 Subject: incomplete alloy model --- contrib/alloy/taler-sync.als | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 contrib/alloy/taler-sync.als (limited to 'contrib') diff --git a/contrib/alloy/taler-sync.als b/contrib/alloy/taler-sync.als new file mode 100644 index 000000000..f5b361926 --- /dev/null +++ b/contrib/alloy/taler-sync.als @@ -0,0 +1,52 @@ +/* +Simple Alloy4 model for Taler backup&sync. +*/ + +sig AnastasisMasterSecret { } + +// Key pair that each wallet has. +sig WalletDeviceKey { } + +sig SyncProvider { } + +// Key pair to access the sync account. +sig SyncAccountKey { } + +// Abstraction of what's in a sync blob +sig SyncBlobHeader { + // Access matrix, abstracts the DH + // suggested by Christian (https://bugs.gnunet.org/view.php?id=6077#c16959) + // The DH will yield the symmetric blob encryption key for the "inner blob" + access: AnastasisMasterSecret -> WalletDeviceKey, +} + +sig SyncAccount { + account_key: SyncAccountKey, + prov: SyncProvider, + hd: SyncBlobHeader, +} + +sig WalletState { + device_key: WalletDeviceKey, + anastasis_key: AnastasisMasterSecret, + enrolled: set SyncAccount, +} + + +fact DifferentDeviceKeys { + all disj w1, w2: WalletState | w1.device_key != w2.device_key +} + +fact AnastasisKeyConsistent { + all disj w1, w2: WalletState, s: SyncAccount | + s in (w1.enrolled & w2.enrolled) implies + w1.anastasis_key = w2.anastasis_key +} + +fact NoBoringInstances { + #WalletState >= 2 + all w: WalletState | #w.enrolled >= 1 +} + +run {} for 5 + -- cgit v1.2.3