idnits 2.17.1 draft-hallambaker-mesh-security-05.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an Authors' Addresses Section. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (27 July 2020) is 1368 days in the past. Is this intentional? Checking references for intended status: Informational ---------------------------------------------------------------------------- No issues found here. Summary: 1 error (**), 0 flaws (~~), 1 warning (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group P. M. Hallam-Baker 3 Internet-Draft ThresholdSecrets.com 4 Intended status: Informational 27 July 2020 5 Expires: 28 January 2021 7 Mathematical Mesh 3.0 Part VII: Security Considerations 8 draft-hallambaker-mesh-security-05 10 Abstract 12 The Mathematical Mesh 'The Mesh' is an end-to-end secure 13 infrastructure that facilitates the exchange of configuration and 14 credential data between multiple user devices. The core protocols of 15 the Mesh are described with examples of common use cases and 16 reference data. 18 [Note to Readers] 20 Discussion of this draft takes place on the MATHMESH mailing list 21 (mathmesh@ietf.org), which is archived at 22 https://mailarchive.ietf.org/arch/search/?email_list=mathmesh. 24 This document is also available online at 25 http://mathmesh.com/Documents/draft-hallambaker-mesh-security.html. 27 Status of This Memo 29 This Internet-Draft is submitted in full conformance with the 30 provisions of BCP 78 and BCP 79. 32 Internet-Drafts are working documents of the Internet Engineering 33 Task Force (IETF). Note that other groups may also distribute 34 working documents as Internet-Drafts. The list of current Internet- 35 Drafts is at https://datatracker.ietf.org/drafts/current/. 37 Internet-Drafts are draft documents valid for a maximum of six months 38 and may be updated, replaced, or obsoleted by other documents at any 39 time. It is inappropriate to use Internet-Drafts as reference 40 material or to cite them other than as "work in progress." 42 This Internet-Draft will expire on 28 January 2021. 44 Copyright Notice 46 Copyright (c) 2020 IETF Trust and the persons identified as the 47 document authors. All rights reserved. 49 This document is subject to BCP 78 and the IETF Trust's Legal 50 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 51 license-info) in effect on the date of publication of this document. 52 Please review these documents carefully, as they describe your rights 53 and restrictions with respect to this document. 55 Table of Contents 57 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6 58 2. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 6 59 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 6 60 2.2. Defined Terms . . . . . . . . . . . . . . . . . . . . . . 6 61 2.3. Related Specifications . . . . . . . . . . . . . . . . . 6 62 2.4. Implementation Status . . . . . . . . . . . . . . . . . . 6 63 2.5. Shared Classes . . . . . . . . . . . . . . . . . . . . . 6 64 2.5.1. Classes describing keys . . . . . . . . . . . . . . . 6 65 2.5.2. Structure: KeyData . . . . . . . . . . . . . . . . . 6 66 2.5.3. Structure: KeyComposite . . . . . . . . . . . . . . . 7 67 2.5.4. Structure: DeviceRecryptionKey . . . . . . . . . . . 7 68 2.5.5. Structure: EscrowedKeySet . . . . . . . . . . . . . . 7 69 2.6. Assertion classes . . . . . . . . . . . . . . . . . . . . 7 70 2.6.1. Structure: Assertion . . . . . . . . . . . . . . . . 7 71 2.6.2. Structure: Condition . . . . . . . . . . . . . . . . 8 72 2.6.3. Base Classes . . . . . . . . . . . . . . . . . . . . 8 73 2.6.4. Structure: Profile . . . . . . . . . . . . . . . . . 8 74 2.6.5. Structure: Connection . . . . . . . . . . . . . . . . 8 75 2.6.6. Structure: Activation . . . . . . . . . . . . . . . . 8 76 2.6.7. Structure: Permission . . . . . . . . . . . . . . . . 9 77 2.6.8. Mesh Profile Classes . . . . . . . . . . . . . . . . 9 78 2.6.9. Structure: ProfileMesh . . . . . . . . . . . . . . . 9 79 2.6.10. Mesh Device Classes . . . . . . . . . . . . . . . . . 9 80 2.6.11. Structure: ProfileDevice . . . . . . . . . . . . . . 9 81 2.6.12. Structure: ActivationDevice . . . . . . . . . . . . . 10 82 2.6.13. Structure: ConnectionDevice . . . . . . . . . . . . . 10 83 2.6.14. Structure: CatalogedDevice . . . . . . . . . . . . . 10 84 2.6.15. Structure: CatalogedPublication . . . . . . . . . . . 11 85 2.6.16. Mesh Account Classes . . . . . . . . . . . . . . . . 11 86 2.6.17. Structure: ProfileAccount . . . . . . . . . . . . . . 11 87 2.6.18. Structure: ActivationAccount . . . . . . . . . . . . 11 88 2.6.19. Structure: ConnectionAccount . . . . . . . . . . . . 12 89 2.6.20. Structure: AccountEntry . . . . . . . . . . . . . . . 12 90 2.6.21. Structure: ConnectionApplication . . . . . . . . . . 12 91 2.6.22. Mesh Group Classes . . . . . . . . . . . . . . . . . 12 92 2.6.23. Structure: ProfileGroup . . . . . . . . . . . . . . . 12 93 2.6.24. Structure: ActivationGroup . . . . . . . . . . . . . 13 94 2.6.25. Structure: ConnectionGroup . . . . . . . . . . . . . 13 95 2.6.26. Mesh Service Classes . . . . . . . . . . . . . . . . 13 96 2.6.27. Structure: ProfileService . . . . . . . . . . . . . . 13 97 2.6.28. Structure: ConnectionService . . . . . . . . . . . . 13 98 2.6.29. Mesh Host Classes . . . . . . . . . . . . . . . . . . 13 99 2.6.30. Structure: ProfileHost . . . . . . . . . . . . . . . 14 100 2.6.31. Structure: ConnectionHost . . . . . . . . . . . . . . 14 101 2.7. Cataloged items . . . . . . . . . . . . . . . . . . . . . 14 102 2.7.1. Data Structures . . . . . . . . . . . . . . . . . . . 14 103 2.7.2. Structure: Contact . . . . . . . . . . . . . . . . . 14 104 2.7.3. Structure: Anchor . . . . . . . . . . . . . . . . . . 14 105 2.7.4. Structure: TaggedSource . . . . . . . . . . . . . . . 15 106 2.7.5. Structure: ContactGroup . . . . . . . . . . . . . . . 15 107 2.7.6. Structure: ContactPerson . . . . . . . . . . . . . . 15 108 2.7.7. Structure: ContactOrganization . . . . . . . . . . . 15 109 2.7.8. Structure: OrganizationName . . . . . . . . . . . . . 15 110 2.7.9. Structure: PersonName . . . . . . . . . . . . . . . . 16 111 2.7.10. Structure: NetworkAddress . . . . . . . . . . . . . . 16 112 2.7.11. Structure: NetworkProtocol . . . . . . . . . . . . . 16 113 2.7.12. Structure: Role . . . . . . . . . . . . . . . . . . . 17 114 2.7.13. Structure: Location . . . . . . . . . . . . . . . . . 17 115 2.7.14. Structure: Bookmark . . . . . . . . . . . . . . . . . 17 116 2.7.15. Structure: Reference . . . . . . . . . . . . . . . . 17 117 2.7.16. Structure: Task . . . . . . . . . . . . . . . . . . . 18 118 2.8. Catalog Entries . . . . . . . . . . . . . . . . . . . . . 18 119 2.8.1. Structure: CatalogedEntry . . . . . . . . . . . . . . 18 120 2.8.2. Structure: CatalogedCredential . . . . . . . . . . . 18 121 2.8.3. Structure: CatalogedNetwork . . . . . . . . . . . . . 19 122 2.8.4. Structure: CatalogedContact . . . . . . . . . . . . . 19 123 2.8.5. Structure: CatalogedContactRecryption . . . . . . . . 19 124 2.8.6. Structure: CatalogedCapability . . . . . . . . . . . 19 125 2.8.7. Structure: CryptographicCapability . . . . . . . . . 19 126 2.8.8. Structure: CapabilityDecrypt . . . . . . . . . . . . 20 127 2.8.9. Structure: CapabilityDecryptPartial . . . . . . . . . 20 128 2.8.10. Structure: CapabilityDecryptServiced . . . . . . . . 20 129 2.8.11. Structure: CapabilitySign . . . . . . . . . . . . . . 20 130 2.8.12. Structure: CapabilityKeyGenerate . . . . . . . . . . 21 131 2.8.13. Structure: CapabilityFairExchange . . . . . . . . . . 21 132 2.8.14. Structure: CatalogedBookmark . . . . . . . . . . . . 21 133 2.8.15. Structure: CatalogedTask . . . . . . . . . . . . . . 21 134 2.8.16. Structure: CatalogedApplication . . . . . . . . . . . 21 135 2.8.17. Structure: CatalogedMember . . . . . . . . . . . . . 22 136 2.8.18. Structure: CatalogedGroup . . . . . . . . . . . . . . 22 137 2.8.19. Structure: CatalogedApplicationSSH . . . . . . . . . 22 138 2.8.20. Structure: CatalogedApplicationMail . . . . . . . . . 22 139 2.8.21. Structure: CatalogedApplicationNetwork . . . . . . . 22 140 2.9. Static Assertions . . . . . . . . . . . . . . . . . . . . 22 141 2.9.1. Structure: DevicePreconfiguration . . . . . . . . . . 22 142 2.10. Messages . . . . . . . . . . . . . . . . . . . . . . . . 23 143 2.10.1. Structure: Message . . . . . . . . . . . . . . . . . 23 144 2.10.2. Structure: MessageError . . . . . . . . . . . . . . 23 145 2.10.3. Structure: MessageComplete . . . . . . . . . . . . . 23 146 2.10.4. Structure: MessagePinValidated . . . . . . . . . . . 23 147 2.10.5. Structure: MessagePIN . . . . . . . . . . . . . . . 23 148 2.10.6. Structure: RequestConnection . . . . . . . . . . . . 24 149 2.10.7. Structure: AcknowledgeConnection . . . . . . . . . . 24 150 2.10.8. Structure: RespondConnection . . . . . . . . . . . . 24 151 2.10.9. Structure: RequestContact . . . . . . . . . . . . . 25 152 2.10.10. Structure: ReplyContact . . . . . . . . . . . . . . 25 153 2.10.11. Structure: GroupInvitation . . . . . . . . . . . . . 25 154 2.10.12. Structure: RequestConfirmation . . . . . . . . . . . 25 155 2.10.13. Structure: ResponseConfirmation . . . . . . . . . . 25 156 2.10.14. Structure: RequestTask . . . . . . . . . . . . . . . 25 157 2.10.15. Structure: MessageClaim . . . . . . . . . . . . . . 25 158 3. Mesh Portal Service Reference . . . . . . . . . . . . . . . . 26 159 3.1. Request Messages . . . . . . . . . . . . . . . . . . . . 26 160 3.1.1. Message: MeshRequest . . . . . . . . . . . . . . . . 26 161 3.2. Response Messages . . . . . . . . . . . . . . . . . . . . 26 162 3.2.1. Message: MeshResponse . . . . . . . . . . . . . . . . 26 163 3.3. Imported Objects . . . . . . . . . . . . . . . . . . . . 27 164 3.4. Common Structures . . . . . . . . . . . . . . . . . . . . 27 165 3.4.1. Structure: KeyValue . . . . . . . . . . . . . . . . . 27 166 3.4.2. Structure: SearchConstraints . . . . . . . . . . . . 27 167 3.5. Transaction: Hello . . . . . . . . . . . . . . . . . . . 28 168 3.6. Transaction: ValidateAccount . . . . . . . . . . . . . . 28 169 3.6.1. Message: ValidateRequest . . . . . . . . . . . . . . 28 170 3.6.2. Message: ValidateResponse . . . . . . . . . . . . . . 28 171 3.7. Transaction: CreateAccount . . . . . . . . . . . . . . . 29 172 3.7.1. Message: CreateRequest . . . . . . . . . . . . . . . 29 173 3.7.2. Message: CreateResponse . . . . . . . . . . . . . . . 30 174 3.8. Transaction: DeleteAccount . . . . . . . . . . . . . . . 30 175 3.8.1. Message: DeleteRequest . . . . . . . . . . . . . . . 30 176 3.8.2. Message: DeleteResponse . . . . . . . . . . . . . . . 30 177 3.9. Transaction: Get . . . . . . . . . . . . . . . . . . . . 30 178 3.9.1. Message: GetRequest . . . . . . . . . . . . . . . . . 31 179 3.9.2. Message: GetResponse . . . . . . . . . . . . . . . . 31 180 3.10. Transaction: Publish . . . . . . . . . . . . . . . . . . 31 181 3.10.1. Message: PublishRequest . . . . . . . . . . . . . . 32 182 3.10.2. Message: PublishResponse . . . . . . . . . . . . . . 32 183 3.11. Transaction: Status . . . . . . . . . . . . . . . . . . . 32 184 3.11.1. Message: StatusRequest . . . . . . . . . . . . . . . 32 185 3.11.2. Message: StatusResponse . . . . . . . . . . . . . . 32 186 3.12. Transaction: ConnectStart . . . . . . . . . . . . . . . . 33 187 3.12.1. Message: ConnectStartRequest . . . . . . . . . . . . 33 188 3.12.2. Message: ConnectStartResponse . . . . . . . . . . . 33 189 3.13. Transaction: ConnectStatus . . . . . . . . . . . . . . . 33 190 3.13.1. Message: ConnectStatusRequest . . . . . . . . . . . 34 191 3.13.2. Message: ConnectStatusResponse . . . . . . . . . . . 34 192 3.14. Transaction: ConnectPending . . . . . . . . . . . . . . . 34 193 3.14.1. Message: ConnectPendingRequest . . . . . . . . . . . 34 194 3.14.2. Message: ConnectPendingResponse . . . . . . . . . . 34 195 3.15. Transaction: ConnectComplete . . . . . . . . . . . . . . 35 196 3.15.1. Message: ConnectCompleteRequest . . . . . . . . . . 35 197 3.15.2. Message: ConnectCompleteResponse . . . . . . . . . . 35 198 3.16. Transaction: Transfer . . . . . . . . . . . . . . . . . . 35 199 3.16.1. Message: TransferRequest . . . . . . . . . . . . . . 36 200 3.16.2. Message: TransferResponse . . . . . . . . . . . . . 36 201 4. Assets . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 202 4.1. Data . . . . . . . . . . . . . . . . . . . . . . . . . . 36 203 4.2. Credentials . . . . . . . . . . . . . . . . . . . . . . . 36 204 4.3. Reputation . . . . . . . . . . . . . . . . . . . . . . . 36 205 4.3.1. Outbound Messaging Abuse () . . . . . . . . . . . . . 36 206 5. Risks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 207 5.1. Confidentiality . . . . . . . . . . . . . . . . . . . . . 36 208 5.1.1. Privacy . . . . . . . . . . . . . . . . . . . . . . . 36 209 5.2. Integrity . . . . . . . . . . . . . . . . . . . . . . . . 37 210 5.3. Availability . . . . . . . . . . . . . . . . . . . . . . 37 211 5.3.1. Data loss . . . . . . . . . . . . . . . . . . . . . . 37 212 5.3.2. Partial data survivability . . . . . . . . . . . . . 37 213 5.4. Inbound Messaging Abuse (Spam) . . . . . . . . . . . . . 37 214 6. Threats . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 215 6.1. End point Compromise . . . . . . . . . . . . . . . . . . 37 216 7. Controls . . . . . . . . . . . . . . . . . . . . . . . . . . 37 217 7.1. Cryptographic . . . . . . . . . . . . . . . . . . . . . . 37 218 7.1.1. Triple lock . . . . . . . . . . . . . . . . . . . . . 37 219 7.1.2. Key Protection . . . . . . . . . . . . . . . . . . . 38 220 7.1.3. Key and Nonce Generation . . . . . . . . . . . . . . 38 221 7.1.4. Key Escrow and Recovery . . . . . . . . . . . . . . . 38 222 7.1.5. Profile Verification . . . . . . . . . . . . . . . . 38 223 7.1.6. Identity Validation . . . . . . . . . . . . . . . . . 39 224 7.1.7. Trust Broker Accountability . . . . . . . . . . . . . 39 225 7.2. Mesh Messaging . . . . . . . . . . . . . . . . . . . . . 39 226 7.2.1. Ingress Control . . . . . . . . . . . . . . . . . . . 39 227 7.2.2. Egress Control . . . . . . . . . . . . . . . . . . . 39 228 7.2.3. Security Signal . . . . . . . . . . . . . . . . . . . 39 229 7.2.4. Accountability . . . . . . . . . . . . . . . . . . . 40 230 8. Security Considerations . . . . . . . . . . . . . . . . . . . 40 231 8.1. Integrity . . . . . . . . . . . . . . . . . . . . . . . . 40 232 8.1.1. DNS Spoofing . . . . . . . . . . . . . . . . . . . . 40 233 8.1.2. TLS Downgrade . . . . . . . . . . . . . . . . . . . . 40 234 8.1.3. TLS Service Impersonation . . . . . . . . . . . . . . 40 235 8.1.4. Request Replay Attack . . . . . . . . . . . . . . . . 40 236 8.1.5. Response Replay Attack . . . . . . . . . . . . . . . 40 237 8.2. Confidentiality . . . . . . . . . . . . . . . . . . . . . 40 238 8.2.1. Side Channel Attack . . . . . . . . . . . . . . . . . 40 239 8.2.2. Session Key Leakage . . . . . . . . . . . . . . . . . 40 240 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 241 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 40 242 11. Normative References . . . . . . . . . . . . . . . . . . . . 40 243 12. Informative References . . . . . . . . . . . . . . . . . . . 41 245 1. Introduction 247 2. Definitions 249 This section presents the related specifications and standard, the 250 terms that are used as terms of art within the documents and the 251 terms used as requirements language. 253 2.1. Requirements Language 255 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 256 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 257 document are to be interpreted as described in [RFC2119]. 259 2.2. Defined Terms 261 The terms of art used in this document are described in the _Mesh 262 Architecture Guide_ [draft-hallambaker-mesh-architecture]. 264 2.3. Related Specifications 266 The architecture of the Mathematical Mesh is described in the _Mesh 267 Architecture Guide_ [draft-hallambaker-mesh-architecture]. The Mesh 268 documentation set and related specifications are described in this 269 document. 271 2.4. Implementation Status 273 The implementation status of the reference code base is described in 274 the companion document [draft-hallambaker-mesh-developer]. 276 2.5. Shared Classes 278 The following classes are used as common elements in Mesh profile 279 specifications. 281 2.5.1. Classes describing keys 283 2.5.2. Structure: KeyData 285 The KeyData class is used to describe public key pairs and trust 286 assertions associated with a public key. 288 UDF: String (Optional) UDF fingerprint of the public key parameters/ 289 X509Certificate: Binary (Optional) List of X.509 Certificates 291 X509Chain: Binary [0..Many] X.509 Certificate chain. 293 X509CSR: Binary (Optional) X.509 Certificate Signing Request. 295 NotBefore: DateTime (Optional) If present specifies a time instant 296 that use of the private key is not valid before. 298 NotOnOrAfter: DateTime (Optional) If present specifies a time 299 instant that use of the private key is not valid on or after. 301 2.5.3. Structure: KeyComposite 303 Service: String (Optional) Service holding the additional 304 contribution 306 2.5.4. Structure: DeviceRecryptionKey 308 UDF: String (Optional) The fingerprint of the encryption key 310 RecryptionKey: KeyData (Optional) The recryption key 312 EnvelopedRecryptionKeyDevice: DareEnvelope (Optional) The decryption 313 key encrypted under the user's device key. 315 2.5.5. Structure: EscrowedKeySet 317 A set of escrowed keys. 319 [No fields] 321 2.6. Assertion classes 323 Classes that are derived from an assertion. 325 2.6.1. Structure: Assertion 327 Parent class from which all assertion classes are derived 329 Names: String [0..Many] Fingerprints of index terms for profile 330 retrieval. The use of the fingerprint of the name rather than the 331 name itself is a precaution against enumeration attacks and other 332 forms of abuse. 334 Updated: DateTime (Optional) The time instant the profile was last 335 modified. 337 NotaryToken: String (Optional) A Uniform Notary Token providing 338 evidence that a signature was performed after the notary token was 339 created. 341 2.6.2. Structure: Condition 343 Parent class from which all condition classes are derived. 345 [No fields] 347 2.6.3. Base Classes 349 Abstract classes from which the Profile, Activation and Connection 350 classes are derrived. 352 2.6.4. Structure: Profile 354 Inherits: Assertion 356 Parent class from which all profile classes are derived 358 KeyOfflineSignature: KeyData (Optional) The permanent signature key 359 used to sign the profile itself. The UDF of the key is used as 360 the permanent object identifier of the profile. Thus, by 361 definition, the KeySignature value of a Profile does not change 362 under any circumstance. The only case in which a 364 KeysOnlineSignature: KeyData [0..Many] A Personal profile contains 365 at least one OSK which is used to sign device administration 366 application profiles. 368 2.6.5. Structure: Connection 370 Inherits: Assertion 372 SubjectUDF: String (Optional) UDF of the connection target. 374 AuthorityUDF: String (Optional) UDF of the connection source. 376 2.6.6. Structure: Activation 378 Inherits: Assertion 380 Contains the private activation information for a Mesh application 381 running on a specific device 383 EnvelopedConnection: DareEnvelope (Optional) The signed AssertionDev 384 iceConnection. 386 ActivationKey: String (Optional) The master secret from which all 387 the key contributions are derrived. 389 2.6.7. Structure: Permission 391 Name: String (Optional) 393 Role: String (Optional) 395 Capabilities: DareEnvelope (Optional) Keys or key contributions 396 enabling the operation to be performed 398 2.6.8. Mesh Profile Classes 400 A Mesh profile does not have activation or connection classes 401 associated with it. 403 It might be more consistent to represent administation devices as 404 activations on the ProfileMesh class though. 406 2.6.9. Structure: ProfileMesh 408 Inherits: Profile 410 Describes the long term parameters associated with a personal 411 profile. 413 KeysMasterEscrow: KeyData [0..Many] A Personal Profile MAY contain 414 one or more PMEK keys to enable escrow of private keys used for 415 stored data. 417 KeyEncryption: KeyData (Optional) Key used to pass encrypted data to 418 the device such as a DeviceUseEntry 420 2.6.10. Mesh Device Classes 422 2.6.11. Structure: ProfileDevice 424 Inherits: Profile 426 Describes a mesh device. 428 Description: String (Optional) Description of the device 430 KeyEncryption: KeyData (Optional) Key used to pass encrypted data to 431 the device such as a DeviceUseEntry 433 KeyAuthentication: KeyData (Optional) Key used to authenticate 434 requests made by the device. 436 2.6.12. Structure: ActivationDevice 438 Inherits: Activation 440 [No fields] 442 2.6.13. Structure: ConnectionDevice 444 Inherits: Connection 446 Permissions: Permission [0..Many] List of the permissions that the 447 device has been granted. 449 KeySignature: KeyData (Optional) The signature key for use of the 450 device under the profile 452 KeyEncryption: KeyData (Optional) The encryption key for use of the 453 device under the profile 455 KeyAuthentication: KeyData (Optional) The authentication key for use 456 of the device under the profile 458 2.6.14. Structure: CatalogedDevice 460 Inherits: CatalogedEntry 462 Public device entry, indexed under the device ID 464 UDF: String (Optional) UDF of the signature key of the device in the 465 Mesh 467 EnvelopedProfileMesh: DareEnvelope (Optional) The Mesh profile 469 DeviceUDF: String (Optional) UDF of the signature key of the device 471 EnvelopedProfileDevice: DareEnvelope (Optional) The device profile 473 EnvelopedConnectionDevice: DareEnvelope (Optional) The public 474 assertion demonstrating connection of the Device to the Mesh 476 EnvelopedActivationDevice: DareEnvelope (Optional) The activations 477 of the device within the Mesh 479 Accounts: AccountEntry [0..Many] The accounts that this device is 480 connected to 482 2.6.15. Structure: CatalogedPublication 484 Inherits: CatalogedEntry 486 A publication. 488 ID: String (Optional) Unique identifier code 490 Authenticator: String (Optional) The witness key value to use to 491 request access to the record. 493 EnvelopedData: DareEnvelope (Optional) Dare Envelope containing the 494 entry data 496 NotOnOrAfter: DateTime (Optional) Epiration time (inclusive) 498 2.6.16. Mesh Account Classes 500 2.6.17. Structure: ProfileAccount 502 Inherits: Profile 504 Account assertion. This is signed by the service hosting the 505 account. 507 AccountAddresses: String [0..Many] Service address(es). 509 MeshProfileUDF: String (Optional) Master profile of the account 510 being registered. 512 KeyEncryption: KeyData (Optional) Key used to encrypt data under 513 this profile 515 KeyAuthentication: KeyData (Optional) Key used to authenticate 516 requests made by the device. 518 EnvelopedProfileService: DareEnvelope (Optional) The service profile 520 2.6.18. Structure: ActivationAccount 522 Inherits: Activation 524 AccountUDF: String (Optional) The UDF of the account 526 KeyAccountEncryption: KeyData (Optional) Key used to encrypt data 527 under this profile 529 KeyAccountSignature: KeyData (Optional) Key used to encrypt data 530 under this profile 532 2.6.19. Structure: ConnectionAccount 534 Inherits: Connection 536 AccountAddresses: String [0..Many] The list of service identifiers. 538 Permissions: Permission [0..Many] List of the permissions that the 539 device has been granted. 541 KeySignature: KeyData (Optional) The signature key for use of the 542 device under the profile 544 KeyEncryption: KeyData (Optional) The encryption key for use of the 545 device under the profile 547 KeyAuthentication: KeyData (Optional) The authentication key for use 548 of the device under the profile 550 2.6.20. Structure: AccountEntry 552 Contains the Account information for an account with a 553 CatalogedDevice. 555 AccountUDF: String (Optional) UDF of the account profile 557 EnvelopedProfileAccount: DareEnvelope (Optional) The account profile 559 EnvelopedConnectionAccount: DareEnvelope (Optional) The connection 560 of this device to the account 562 EnvelopedActivationAccount: DareEnvelope (Optional) The activation 563 data for this device to the account 565 2.6.21. Structure: ConnectionApplication 567 Inherits: Connection 569 [No fields] 571 2.6.22. Mesh Group Classes 573 2.6.23. Structure: ProfileGroup 575 Inherits: Profile 576 Describes a group. Note that while a group is created by one person 577 who becomes its first administrator, control of the group may pass to 578 other administrators over time. 580 AccountAddresses: String [0..Many] Service address(es). 582 KeyEncryption: KeyData (Optional) Key currently used to encrypt data 583 under this profile 585 2.6.24. Structure: ActivationGroup 587 Inherits: Activation 589 GroupUDF: String (Optional) The UDF of the group 591 2.6.25. Structure: ConnectionGroup 593 Describes the connection of a member to a group. 595 Inherits: Connection 597 KeyEncryption: KeyComposite (Optional) The decryption key for the 598 user within the group 600 2.6.26. Mesh Service Classes 602 2.6.27. Structure: ProfileService 604 Inherits: Profile 606 Profile of a Mesh Service 608 KeyAuthentication: KeyData (Optional) Key used to authenticate 609 service connections. 611 KeyEncryption: KeyData (Optional) Key used to encrypt data under 612 this profile 614 2.6.28. Structure: ConnectionService 616 Inherits: Connection 618 [No fields] 620 2.6.29. Mesh Host Classes 621 2.6.30. Structure: ProfileHost 623 Inherits: Profile 625 KeyAuthentication: KeyData (Optional) Key used to authenticate 626 service connections. 628 2.6.31. Structure: ConnectionHost 630 Inherits: Connection 632 [No fields] 634 2.7. Cataloged items 636 2.7.1. Data Structures 638 Classes describing data used in cataloged data. 640 2.7.2. Structure: Contact 642 Inherits: Assertion 644 Base class for contact entries. 646 Id: String (Optional) The globally unique contact identifier. 648 Anchors: Anchor [0..Many] Mesh fingerprints associated with the 649 contact. 651 NetworkAddresses: NetworkAddress [0..Many] Network address entries 653 Locations: Location [0..Many] The physical locations the contact is 654 associated with. 656 Roles: Role [0..Many] The roles of the contact 658 Bookmark: Bookmark [0..Many] The Web sites and other online 659 presences of the contact 661 Sources: TaggedSource [0..Many] Source(s) from which this contact 662 was constructed. 664 2.7.3. Structure: Anchor 666 Trust anchor 668 UDF: String (Optional) The trust anchor. 670 Validation: String (Optional) The means of validation. 672 2.7.4. Structure: TaggedSource 674 Source from which contact information was obtained. 676 LocalName: String (Optional) Short name for the contact information. 678 Validation: String (Optional) The means of validation. 680 BinarySource: Binary (Optional) The contact data in binary form. 682 EnvelopedSource: DareEnvelope (Optional) The contact data in 683 enveloped form. If present, the BinarySource property is ignored. 685 2.7.5. Structure: ContactGroup 687 Inherits: Contact 689 Contact for a group, including encryption groups. 691 [No fields] 693 2.7.6. Structure: ContactPerson 695 Inherits: Contact 697 CommonNames: PersonName [0..Many] List of person names in order of 698 preference 700 2.7.7. Structure: ContactOrganization 702 Inherits: Contact 704 CommonNames: OrganizationName [0..Many] List of person names in 705 order of preference 707 2.7.8. Structure: OrganizationName 709 The name of an organization 711 Inactive: Boolean (Optional) If true, the name is not in current 712 use. 714 RegisteredName: String (Optional) The registered name. 716 DBA: String (Optional) Names that the organization uses including 717 trading names and doing business as names. 719 2.7.9. Structure: PersonName 721 The name of a natural person 723 Inactive: Boolean (Optional) If true, the name is not in current 724 use. 726 FullName: String (Optional) The preferred presentation of the full 727 name. 729 Prefix: String (Optional) Honorific or title, E.g. Sir, Lord, Dr., 730 Mr. 732 First: String (Optional) First name. 734 Middle: String [0..Many] Middle names or initials. 736 Last: String (Optional) Last name. 738 Suffix: String (Optional) Nominal suffix, e.g. Jr., III, etc. 740 PostNominal: String (Optional) Post nominal letters (if used). 742 2.7.10. Structure: NetworkAddress 744 Provides all means of contacting the individual according to a 745 particular network address 747 Inactive: Boolean (Optional) If true, the name is not in current 748 use. 750 Address: String (Optional) The network address, e.g. 751 alice@example.com 753 NetworkCapability: String [0..Many] The capabilities bound to this 754 address. 756 EnvelopedProfileAccount: DareEnvelope (Optional) Optional enveloped 757 profile for the Address 759 Protocols: NetworkProtocol [0..Many] Public keys associated with the 760 network address 762 2.7.11. Structure: NetworkProtocol 764 Protocol: String (Optional) The IANA protocol|identifier of the 765 network protocols by which the contact may be reached using the 766 specified Address. 768 2.7.12. Structure: Role 770 OrganizationName: String (Optional) The organization at which the 771 role is held 773 Titles: String [0..Many] The titles held with respect to that 774 organization. 776 Locations: Location [0..Many] Postal or physical addresses 777 associated with the role. 779 2.7.13. Structure: Location 781 Appartment: String (Optional) 783 Street: String (Optional) 785 District: String (Optional) 787 Locality: String (Optional) 789 County: String (Optional) 791 Postcode: String (Optional) 793 Country: String (Optional) 795 2.7.14. Structure: Bookmark 797 Uri: String (Optional) 799 Title: String (Optional) 801 Role: String [0..Many] 803 2.7.15. Structure: Reference 805 MessageID: String (Optional) The received message to which this is a 806 response 808 ResponseID: String (Optional) Message that was generated in response 809 to the original (optional). 811 Relationship: String (Optional) The relationship type. This can be 812 Read, Unread, Accept, Reject. 814 2.7.16. Structure: Task 816 Key: String (Optional) Unique key. 818 Start: DateTime (Optional) 820 Finish: DateTime (Optional) 822 StartTravel: String (Optional) 824 FinishTravel: String (Optional) 826 TimeZone: String (Optional) 828 Title: String (Optional) 830 Description: String (Optional) 832 Location: String (Optional) 834 Trigger: String [0..Many] 836 Conference: String [0..Many] 838 Repeat: String (Optional) 840 Busy: Boolean (Optional) 842 2.8. Catalog Entries 844 2.8.1. Structure: CatalogedEntry 846 Base class for cataloged Mesh data. 848 Labels: String [0..Many] The set of labels describing the entry 850 2.8.2. Structure: CatalogedCredential 852 Inherits: CatalogedEntry 854 Protocol: String (Optional) 856 Service: String (Optional) 858 Username: String (Optional) 860 Password: String (Optional) 862 2.8.3. Structure: CatalogedNetwork 864 Inherits: CatalogedEntry 866 Protocol: String (Optional) 868 Service: String (Optional) 870 Username: String (Optional) 872 Password: String (Optional) 874 2.8.4. Structure: CatalogedContact 876 Inherits: CatalogedEntry 878 Key: String (Optional) Unique key. 880 Self: Boolean (Optional) If true, this catalog entry is for the user 881 who created the catalog. 883 Permissions: Permission [0..Many] List of the permissions that the 884 contact has been granted. 886 2.8.5. Structure: CatalogedContactRecryption 888 Inherits: CatalogedContact 890 [No fields] 892 2.8.6. Structure: CatalogedCapability 894 Inherits: CatalogedEntry 896 [No fields] 898 2.8.7. Structure: CryptographicCapability 900 Id: String (Optional) The identifier of the capability. If this is 901 a user capability, MUST match the KeyData identifier. If this is 902 a serviced capability, MUST match the value of ServiceId on the 903 corresponding service capability. 905 KeyData: KeyData (Optional) The key that enables the capability 907 EnvelopedKeyShares: DareEnvelope [0..Many] One or more enveloped key 908 shares. 910 SubjectId: String (Optional) The identifier of the resource that is 911 controlled using the key. 913 SubjectAddress: String (Optional) The address of the resource that 914 is controlled using the key. 916 2.8.8. Structure: CapabilityDecrypt 918 Inherits: CryptographicCapability 920 The corresponding key is a decryption key 922 [No fields] 924 2.8.9. Structure: CapabilityDecryptPartial 926 Inherits: CapabilityDecrypt 928 The corresponding key is an encryption key 930 ServiceId: String (Optional) The identifier used to claim the 931 capability from the service.[Only present for a partial 932 capability.] 934 ServiceAddress: String (Optional) The service account that supports 935 a serviced capability. [Only present for a partial capability.] 937 2.8.10. Structure: CapabilityDecryptServiced 939 Inherits: CapabilityDecrypt 941 The corresponding key is an encryption key 943 AuthenticationId: String (Optional) UDF of trust root under which 944 request to use a serviced capability must be authorized. [Only 945 present for a serviced capability] 947 2.8.11. Structure: CapabilitySign 949 Inherits: CryptographicCapability 951 The corresponding key is an administration key 953 [No fields] 955 2.8.12. Structure: CapabilityKeyGenerate 957 Inherits: CryptographicCapability 959 The corresponding key is a key that may be used to generate key 960 shares. 962 [No fields] 964 2.8.13. Structure: CapabilityFairExchange 966 Inherits: CryptographicCapability 968 The corresponding key is a decryption key to be used in accordance 969 with the Micali Fair Electronic Exchange with Invisible Trusted 970 Parties protocol. 972 [No fields] 974 2.8.14. Structure: CatalogedBookmark 976 Inherits: CatalogedEntry 978 Uri: String (Optional) 980 Title: String (Optional) 982 Path: String (Optional) 984 2.8.15. Structure: CatalogedTask 986 Inherits: CatalogedEntry 988 EnvelopedTask: DareEnvelope (Optional) 990 Title: String (Optional) 992 Key: String (Optional) Unique key. 994 2.8.16. Structure: CatalogedApplication 996 Inherits: CatalogedEntry 998 Key: String (Optional) 1000 EnvelopedCapabilities: DareEnvelope [0..Many] Enveloped keys for use 1001 with Application 1003 2.8.17. Structure: CatalogedMember 1005 ContactAddress: String (Optional) 1007 MemberCapabilityId: String (Optional) 1009 ServiceCapabilityId: String (Optional) 1011 Inherits: CatalogedEntry 1013 2.8.18. Structure: CatalogedGroup 1015 Inherits: CatalogedApplication 1017 Profile: ProfileGroup (Optional) 1019 2.8.19. Structure: CatalogedApplicationSSH 1021 Inherits: CatalogedApplication 1023 [No fields] 1025 2.8.20. Structure: CatalogedApplicationMail 1027 Inherits: CatalogedApplication 1029 [No fields] 1031 2.8.21. Structure: CatalogedApplicationNetwork 1033 Inherits: CatalogedApplication 1035 [No fields] 1037 2.9. Static Assertions 1039 2.9.1. Structure: DevicePreconfiguration 1041 A data structure that is passed 1043 EnvelopedProfileDevice: DareEnvelope (Optional) The device profile 1045 ConnectUri: String (Optional) The connection URI. This would 1046 normally be printed on the device as a QR code. 1048 2.10. Messages 1050 2.10.1. Structure: Message 1052 MessageID: String (Optional) Unique per-message ID. When 1053 encapsulating a Mesh Message in a DARE envelope, the envelope 1054 EnvelopeID field MUST be a UDF fingerprint of the MessageID value. 1056 Sender: String (Optional) 1058 Recipient: String (Optional) 1060 References: Reference [0..Many] 1062 2.10.2. Structure: MessageError 1064 Inherits: Message 1066 ErrorCode: String (Optional) 1068 2.10.3. Structure: MessageComplete 1070 Inherits: Message 1072 [No fields] 1074 2.10.4. Structure: MessagePinValidated 1076 Inherits: Message 1078 AuthenticatedData: DareEnvelope (Optional) Enveloped data that is 1079 authenticated by means of the PIN 1081 ClientNonce: Binary (Optional) 1083 PinUDF: String (Optional) Fingerprint of the PIN value used to 1084 authenticate the request. 1086 PinWitness: Binary (Optional) Witness value calculated as KDF 1087 (Device.UDF + AccountAddress, ClientNonce) 1089 2.10.5. Structure: MessagePIN 1091 Account: String (Optional) 1093 Inherits: Message 1095 Expires: DateTime (Optional) 1096 Automatic: Boolean (Optional) If true, authentication against the 1097 PIN code is sufficient to complete the associated action without 1098 further authorization. 1100 SaltedPIN: String (Optional) PIN code bound to the specified action. 1102 Action: String (Optional) The action to which this PIN code is 1103 bound. 1105 2.10.6. Structure: RequestConnection 1107 Connection request message. This message contains the information 1109 Inherits: MessagePinValidated 1111 AccountAddress: String (Optional) 1113 2.10.7. Structure: AcknowledgeConnection 1115 Connection request message generated by a service on receipt of a 1116 valid MessageConnectionRequestClient 1118 Inherits: Message 1120 EnvelopedRequestConnection: DareEnvelope (Optional) The client 1121 connection request. 1123 ServerNonce: Binary (Optional) 1125 Witness: String (Optional) 1127 2.10.8. Structure: RespondConnection 1129 Respond to RequestConnection message to grant or refuse the 1130 connection request. 1132 Inherits: Message 1134 Result: String (Optional) The response to the request. One of 1135 "Accept", "Reject" or "Pending". 1137 CatalogedDevice: CatalogedDevice (Optional) The device information. 1138 MUST be present if the value of Result is "Accept". MUST be 1139 absent or null otherwise. 1141 2.10.9. Structure: RequestContact 1143 Inherits: Message 1145 Reply: Boolean (Optional) 1147 Subject: String (Optional) 1149 PIN: String (Optional) One time authentication code. 1151 Self: DareEnvelope (Optional) The contact data. 1153 2.10.10. Structure: ReplyContact 1155 Inherits: MessagePinValidated 1157 Subject: String (Optional) 1159 2.10.11. Structure: GroupInvitation 1161 Inherits: Message 1163 Text: String (Optional) 1165 2.10.12. Structure: RequestConfirmation 1167 Inherits: Message 1169 Text: String (Optional) 1171 2.10.13. Structure: ResponseConfirmation 1173 Inherits: Message 1175 Request: DareEnvelope (Optional) 1177 Accept: Boolean (Optional) 1179 2.10.14. Structure: RequestTask 1181 Inherits: Message 1183 [No fields] 1185 2.10.15. Structure: MessageClaim 1187 Inherits: Message 1188 PublicationId: String (Optional) 1190 ServiceAuthenticate: String (Optional) 1192 DeviceAuthenticate: String (Optional) 1194 Expires: DateTime (Optional) 1196 3. Mesh Portal Service Reference 1198 HTTP Well Known Service Prefix: /.well-known/mmm 1200 Every Mesh Portal Service transaction consists of exactly one request 1201 followed by exactly one response. Mesh Service transactions MAY 1202 cause modification of the data stored in the Mesh Portal or the Mesh 1203 itself but do not cause changes to the connection state. The 1204 protocol itself is thus idempotent. There is no set sequence in 1205 which operations are required to be performed. It is not necessary 1206 to perform a Hello transaction prior to a ValidateAccount, Publish or 1207 any other transaction. 1209 3.1. Request Messages 1211 A Mesh Portal Service request consists of a payload object that 1212 inherits from the MeshRequest class. When using the HTTP binding, 1213 the request MUST specify the portal DNS address in the HTTP Host 1214 field. 1216 3.1.1. Message: MeshRequest 1218 Base class for all request messages. 1220 Portal: String (Optional) Name of the Mesh Portal Service to which 1221 the request is directed. 1223 3.2. Response Messages 1225 A Mesh Portal Service response consists of a payload object that 1226 inherits from the MeshResponse class. When using the HTTP binding, 1227 the response SHOULD report the Status response code in the HTTP 1228 response message. However the response code returned in the payload 1229 object MUST always be considered authoritative. 1231 3.2.1. Message: MeshResponse 1233 Base class for all response messages. Contains only the status code 1234 and status description fields. 1236 [No fields] 1238 3.3. Imported Objects 1240 The Mesh Service protocol makes use of JSON objects defined in the 1241 JOSE Signatgure and Encryption specifications. 1243 3.4. Common Structures 1245 The following common structures are used in the protocol messages: 1247 3.4.1. Structure: KeyValue 1249 Describes a Key/Value structure used to make queries for records 1250 matching one or more selection criteria. 1252 Key: String (Optional) The data retrieval key. 1254 Value: String (Optional) The data value to match. 1256 3.4.2. Structure: SearchConstraints 1258 Specifies constraints to be applied to a search result. These allow 1259 a client to limit the number of records returned, the quantity of 1260 data returned, the earliest and latest data returned, etc. 1262 NotBefore: DateTime (Optional) Only data published on or after the 1263 specified time instant is requested. 1265 Before: DateTime (Optional) Only data published before the specified 1266 time instant is requested. This excludes data published at the 1267 specified time instant. 1269 MaxEntries: Integer (Optional) Maximum number of data entries to 1270 return. 1272 MaxBytes: Integer (Optional) Maximum number of data bytes to return. 1274 PageKey: String (Optional) Specifies a page key returned in a 1275 previous search operation in which the number of responses 1276 exceeded the specified bounds. 1278 When a page key is specified, all the other search parameters 1279 except for MaxEntries and MaxBytes are ignored and the service 1280 returns the next set of data responding to the earlier query. 1282 3.5. Transaction: Hello 1284 Request: HelloRequest 1286 Response: HelloResponse 1288 Report service and version information. 1290 The Hello transaction provides a means of determining which protocol 1291 versions, message encodings and transport protocols are supported by 1292 the service. 1294 3.6. Transaction: ValidateAccount 1296 Request: ValidateRequest 1298 Response: ValidateResponse 1300 Request validation of a proposed name for a new account. 1302 For validation of a user's account name during profile creation. 1304 3.6.1. Message: ValidateRequest 1306 Inherits: MeshRequest 1308 Describes the proposed account properties. Currently, these are 1309 limited to the account name but could be extended in future versions 1310 of the protocol. 1312 Account: String (Optional) Account name requested 1314 Reserve: Boolean (Optional) If true, request a reservation for the 1315 specified account name. Note that the service is not obliged to 1316 honor reservation requests. 1318 Language: String [0..Many] List of ISO language codes in order of 1319 preference. For creating explanatory text. 1321 3.6.2. Message: ValidateResponse 1323 Inherits: MeshResponse 1325 States whether the proposed account properties are acceptable and 1326 (optional) returns an indication of what properties are valid. 1328 Note that receiving a 'Valid' responseto a Validate Request does not 1329 guarantee creation of the account. In addition to the possibility 1330 that the account namecould be requested by another user between the 1331 Validate and Create transactions, a portal service MAY perform more 1332 stringent validation criteria when an account is actually being 1333 created. For example, checking with the authoritative list of 1334 current accounts rather than a cached copy. 1336 Valid: Boolean (Optional) If true, the specified account identifier 1337 is acceptable. If false, the account identifier is rejected. 1339 Minimum: Integer (Optional) Specifies the minimum length of an 1340 account name. 1342 Maximum: Integer (Optional) Specifies the maximum length of an 1343 account name. 1345 InvalidCharacters: String (Optional) A list of characters that the 1346 service does not accept in account names. The list of characters 1347 MAY not be exhaustive but SHOULD include any illegal characters in 1348 the proposed account name. 1350 Reason: String (Optional) Text explaining the reason an account name 1351 was rejected. 1353 3.7. Transaction: CreateAccount 1355 Request: CreateRequest 1357 Response: CreateResponse 1359 Request creation of a new portal account. 1361 Unlike a profile, a mesh account is specific to a particular Mesh 1362 portal. A mesh account must be created and accepted before a profile 1363 can be published. 1365 3.7.1. Message: CreateRequest 1367 Request creation of a new portal account. The request specifies the 1368 requested account identifier and the Mesh profile to be associated 1369 with the account. 1371 Inherits: MeshRequest 1373 Account: String (Optional) Account identifier requested. 1375 3.7.2. Message: CreateResponse 1377 Inherits: MeshResponse 1379 Reports the success or failure of a Create transaction. 1381 [No fields] 1383 3.8. Transaction: DeleteAccount 1385 Request: DeleteRequest 1387 Response: DeleteResponse 1389 Request deletion of a portal account. 1391 Deletes a portal account but not the underlying profile. Once 1392 registered, profiles are permanent. 1394 3.8.1. Message: DeleteRequest 1396 Request deletion of a new portal account. The request specifies the 1397 requested account identifier. 1399 Inherits: MeshRequest 1401 Account: String (Optional) Account identifier to be deleted. 1403 3.8.2. Message: DeleteResponse 1405 Inherits: MeshResponse 1407 Reports the success or failure of a Delete transaction. 1409 [No fields] 1411 3.9. Transaction: Get 1413 Request: GetRequest 1415 Response: GetResponse 1417 Search for data in the mesh that matches a set of properties 1418 described by a sequence of key/value pairs. 1420 3.9.1. Message: GetRequest 1422 Describes the Portal or Mesh data to be retreived. 1424 Inherits: MeshRequest 1426 Identifier: String (Optional) Lookup by profile ID 1428 Account: String (Optional) Lookup by Account ID 1430 KeyValues: KeyValue [0..Many] List of KeyValue pairs specifying the 1431 conditions to be met 1433 SearchConstraints: SearchConstraints (Optional) Constrain the search 1434 to a specific time interval and/or limit the number and/or total 1435 size of data records returned. 1437 Multiple: Boolean (Optional) If true return multiple responses if 1438 available 1440 Full: Boolean (Optional) If true, the client requests that the full 1441 Mesh data record be returned containing both the Mesh entry itself 1442 and the Mesh metadata that allows the date and time of the 1443 publication of the Mesh entry to be verified. 1445 3.9.2. Message: GetResponse 1447 Reports the success or failure of a Get transaction. If a Mesh entry 1448 matching the specified profile is found, containsthe list of entries 1449 matching the request. 1451 Inherits: MeshResponse 1453 DataItems: DataItem [0..Many] List of mesh data records matching the 1454 request. 1456 PageKey: String (Optional) If non-null, indicates that the number 1457 and/or size of the data records returned exceeds either the 1458 SearchConstraints specified in the request or internal server 1459 limits. 1461 3.10. Transaction: Publish 1463 Request: PublishRequest 1465 Response: PublishResponse 1467 Publish a profile or key escrow entry to the mesh. 1469 3.10.1. Message: PublishRequest 1471 Requests publication of the specified Mesh entry. 1473 Inherits: MeshRequest 1475 [No fields] 1477 3.10.2. Message: PublishResponse 1479 Reports the success or failure of a Publish transaction. 1481 Inherits: MeshResponse 1483 [No fields] 1485 3.11. Transaction: Status 1487 Request: StatusRequest 1489 Response: StatusResponse 1491 Request the current status of the mesh as seen by the portal to which 1492 it is directed. 1494 The response to the status request contains the last signed 1495 checkpoint and proof chains for each of the peer portals that have 1496 been checkpointed. 1498 [Not currently implemented] 1500 3.11.1. Message: StatusRequest 1502 Inherits: MeshRequest 1504 Initiates a status transaction. 1506 [No fields] 1508 3.11.2. Message: StatusResponse 1510 Reports the success or failure of a Status transaction. 1512 Inherits: MeshResponse 1514 LastWriteTime: DateTime (Optional) Time that the last write update 1515 was made to the Mesh 1517 LastCheckpointTime: DateTime (Optional) Time that the last Mesh 1518 checkpoint was calculated. 1520 NextCheckpointTime: DateTime (Optional) Time at which the next Mesh 1521 checkpoint should be calculated. 1523 CheckpointValue: String (Optional) Last checkpoint value. 1525 3.12. Transaction: ConnectStart 1527 Request: ConnectStartRequest 1529 Response: ConnectStartResponse 1531 Request connection of a new device to a mesh profile 1533 3.12.1. Message: ConnectStartRequest 1535 Inherits: MeshRequest 1537 Initial device connection request. 1539 SignedRequest: SignedConnectionRequest (Optional) Device connection 1540 request signed by thesignature key of the device requesting 1541 connection. 1543 AccountID: String (Optional) Account identifier of account to which 1544 the device is requesting connection. 1546 3.12.2. Message: ConnectStartResponse 1548 Reports the success or failure of a ConnectStart transaction. 1550 Inherits: MeshRequest 1552 [No fields] 1554 3.13. Transaction: ConnectStatus 1556 Request: ConnectStatusRequest 1558 Response: ConnectStatusResponse 1560 Request status of pending connection request of a new device to a 1561 mesh profile 1563 3.13.1. Message: ConnectStatusRequest 1565 Inherits: MeshRequest 1567 Request status information for a pending request posted previously. 1569 AccountID: String (Optional) Account identifier for which pending 1570 connection information is requested. 1572 DeviceID: String (Optional) Device identifier of device requesting 1573 status information. 1575 3.13.2. Message: ConnectStatusResponse 1577 Reports the success or failure of a ConnectStatus transaction. 1579 Inherits: MeshRequest 1581 Result: SignedConnectionResult (Optional) The signed 1582 ConnectionResult object. 1584 3.14. Transaction: ConnectPending 1586 Request: ConnectPendingRequest 1588 Response: ConnectPendingResponse 1590 Request a list of pending requests for an administration profile. 1592 3.14.1. Message: ConnectPendingRequest 1594 Inherits: MeshRequest 1596 Specify the criteria for pending requests. 1598 AccountID: String (Optional) The account identifier of the account 1599 for which pending connection requests are requested. 1601 SearchConstraints: SearchConstraints (Optional) Constrain the search 1602 to a specific time interval and/or limit the number and/or total 1603 size of data records returned. 1605 3.14.2. Message: ConnectPendingResponse 1607 Reports the success or failure of a ConnectPending transaction. 1609 Inherits: MeshRequest 1610 Pending: SignedConnectionRequest [0..Many] A list of pending 1611 requests satisfying the criteria set out in the request. 1613 PageKey: String (Optional) If non-null, indicates that the number 1614 and/or size of the data records returned exceeds either the 1615 SearchConstraints specified in the request or internal server 1616 limits. 1618 3.15. Transaction: ConnectComplete 1620 Request: ConnectCompleteRequest 1622 Response: ConnectCompleteResponse 1624 Post response to a pending connection request. 1626 3.15.1. Message: ConnectCompleteRequest 1628 Reports the success or failure of a ConnectComplete transaction. 1630 Inherits: MeshRequest 1632 Result: SignedConnectionResult (Optional) The connection result to 1633 be posted to the portal. The result MUST be signed by a valid 1634 administration key for the Mesh profile. 1636 AccountID: String (Optional) The account identifier to which the 1637 connection result is posted. 1639 3.15.2. Message: ConnectCompleteResponse 1641 Inherits: MeshRequest 1643 Reports the success or failure of a ConnectComplete transaction. 1645 [No fields] 1647 3.16. Transaction: Transfer 1649 Request: TransferRequest 1651 Response: TransferResponse 1653 Perform a bulk transfer of the log between the specified transaction 1654 identifiers. Requires appropriate authorization 1656 [Not currently implemented] 1658 3.16.1. Message: TransferRequest 1660 Request a bulk transfer of the log between the specified transaction 1661 identifiers. Requires appropriate authorization 1663 Inherits: MeshRequest 1665 SearchConstraints: SearchConstraints (Optional) Constrain the search 1666 to a specific time interval and/or limit the number and/or total 1667 size of data records returned. 1669 3.16.2. Message: TransferResponse 1671 Inherits: MeshResponse 1673 Reports the success or failure of a Transfer transaction. If 1674 successful, contains the list of Mesh records to be transferred. 1676 DataItems: DataItem [0..Many] List of mesh data records matching the 1677 request. 1679 PageKey: String (Optional) If non-null, indicates that the number 1680 and/or size of the data records returned exceeds either the 1681 SearchConstraints specified in the request or internal server 1682 limits. 1684 4. Assets 1686 4.1. Data 1688 4.2. Credentials 1690 4.3. Reputation 1692 4.3.1. Outbound Messaging Abuse () 1694 5. Risks 1696 5.1. Confidentiality 1698 Is a regulatory requirement GDPR/HIPPA 1700 5.1.1. Privacy 1702 Stronger requirement, given data but with restrictions on use 1704 Unintended use within an organization may put it in default 1705 GDPR 1707 HIPPA 1709 5.2. Integrity 1711 Modification of data enables control breaches 1713 5.3. Availability 1715 5.3.1. Data loss 1717 Loss of the pictures of the kids at 5 1719 5.3.2. Partial data survivability 1721 Where they buried Aunt Agatha's jewelry but not where they buried 1722 Aunt Agatha. 1724 5.4. Inbound Messaging Abuse (Spam) 1726 6. Threats 1728 6.1. End point Compromise 1730 7. Controls 1732 7.1. Cryptographic 1734 7.1.1. Triple lock 1736 7.1.1.1. Transport Security 1738 Traffic analysis protection 1740 7.1.1.2. Message Security 1742 Access control 1744 Authentication / Integrity 1746 7.1.1.3. Data Level Security 1748 Data Confidentiality 1750 Non-Repudiation 1752 7.1.2. Key Protection 1754 Use of platform provided facilities to bind private keys in the 1755 Device profile to the device is highly desirable. Ideally, private 1756 keys should be protected against extraction by hardware techniques 1757 presenting a high degree of resistance. 1759 7.1.2.1. Windows 1761 Use encrypted key store 1763 Preferably use BitLocker 1765 7.1.2.2. OSX 1767 Use Key Ring 1769 7.1.2.3. iOS 1771 Use ??? 1773 7.1.2.4. Linux 1775 Use the DBUS mechanism 1777 7.1.2.5. Android 1779 Hope and prayers. 1781 7.1.3. Key and Nonce Generation 1783 Use strong mechanisms as described in RFC??? 1785 Use of key co-generation as described in part 8 is advised 1787 7.1.4. Key Escrow and Recovery 1789 Master profile keys should be escrowed 1791 Escrow strategies for DARE should take account of the fact that users 1792 may want some but not all their data assets to survive them. 1794 7.1.5. Profile Verification 1796 Check that the device credential has been signed by an administration 1797 device and that the administration device was properly authorized by 1798 the master profile. 1800 Device catalog MUST be signed by the admin device. 1802 Future ? provide protection against rollback attacks. 1804 7.1.6. Identity Validation 1806 See the separate document on the trust model 1808 7.1.7. Trust Broker Accountability 1810 Cert transparency type techniques 1812 7.2. Mesh Messaging 1814 7.2.1. Ingress Control 1816 Every message is subject to access control 1818 Mesh Services should perform abuse filtering on inbound mail 1820 Mesh Services MUST apply user specified ingress control as specified 1821 in their contacts catalog. 1823 7.2.2. Egress Control 1825 Some applications may require egress control 1827 For example, classified environments 1829 Mail too stupid to send 1831 7.2.3. Security Signal 1833 Confirmation messages requiring payments 1835 Need Accountability 1837 Need to know the source of the accountability assertions 1839 Should be distinguished from sender controlled part of a message 1841 7.2.3.1. Brand 1843 If messages are being sent on behalf of a corporate entity, this 1844 should be signaled to both sender and receiver 1846 Sender ? remind them that they are speaking on behalf of another 1847 party 1848 Receiver ? establish who is speaking by the familiar technique. 1850 7.2.4. Accountability 1852 Authentication and consequences 1854 8. Security Considerations 1856 This document comprises the security considerations for the use and 1857 implementation of the Mathematical Mesh. 1859 8.1. Integrity 1861 8.1.1. DNS Spoofing 1863 8.1.2. TLS Downgrade 1865 8.1.3. TLS Service Impersonation 1867 8.1.4. Request Replay Attack 1869 8.1.5. Response Replay Attack 1871 8.2. Confidentiality 1873 8.2.1. Side Channel Attack 1875 8.2.2. Session Key Leakage 1877 9. IANA Considerations 1879 All the IANA considerations for the Mesh documents are specified in 1880 this document 1882 10. Acknowledgements 1884 A list of people who have contributed to the design of the Mesh is 1885 presented in [draft-hallambaker-mesh-architecture]. 1887 11. Normative References 1889 [draft-hallambaker-mesh-architecture] 1890 Hallam-Baker, P., "Mathematical Mesh 3.0 Part I: 1891 Architecture Guide", Work in Progress, Internet-Draft, 1892 draft-hallambaker-mesh-architecture-13, 9 March 2020, 1893 . 1896 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1897 Requirement Levels", BCP 14, RFC 2119, 1898 DOI 10.17487/RFC2119, March 1997, 1899 . 1901 12. Informative References 1903 [draft-hallambaker-mesh-developer] 1904 Hallam-Baker, P., "Mathematical Mesh: Reference 1905 Implementation", Work in Progress, Internet-Draft, draft- 1906 hallambaker-mesh-developer-09, 23 October 2019, 1907 .