idnits 2.17.1 draft-hallambaker-mesh-security-09.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 (20 April 2022) is 736 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 20 April 2022 5 Expires: 22 October 2022 7 Mathematical Mesh 3.0 Part IX Security Considerations 8 draft-hallambaker-mesh-security-09 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 22 October 2022. 44 Copyright Notice 46 Copyright (c) 2022 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 . . . . . . . . . . . . . . . . . . . . . . . . 5 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: CompositePrivate . . . . . . . . . . . . . 7 67 2.6. Assertion classes . . . . . . . . . . . . . . . . . . . . 7 68 2.6.1. Structure: Assertion . . . . . . . . . . . . . . . . 7 69 2.6.2. Structure: Condition . . . . . . . . . . . . . . . . 7 70 2.6.3. Base Classes . . . . . . . . . . . . . . . . . . . . 7 71 2.6.4. Structure: Connection . . . . . . . . . . . . . . . . 7 72 2.6.5. Structure: Activation . . . . . . . . . . . . . . . . 8 73 2.6.6. Structure: ActivationEntry . . . . . . . . . . . . . 8 74 2.6.7. Mesh Profile Classes . . . . . . . . . . . . . . . . 8 75 2.6.8. Structure: Profile . . . . . . . . . . . . . . . . . 8 76 2.6.9. Structure: ProfileDevice . . . . . . . . . . . . . . 8 77 2.6.10. Structure: ProfileAccount . . . . . . . . . . . . . . 9 78 2.6.11. Structure: ProfileUser . . . . . . . . . . . . . . . 9 79 2.6.12. Structure: ProfileGroup . . . . . . . . . . . . . . . 10 80 2.6.13. Structure: ProfileService . . . . . . . . . . . . . . 10 81 2.6.14. Structure: ProfileHost . . . . . . . . . . . . . . . 10 82 2.6.15. Connection Assertions . . . . . . . . . . . . . . . . 10 83 2.6.16. Structure: ConnectionDevice . . . . . . . . . . . . . 10 84 2.6.17. Structure: ConnectionApplication . . . . . . . . . . 11 85 2.6.18. Structure: ConnectionGroup . . . . . . . . . . . . . 11 86 2.6.19. Structure: ConnectionService . . . . . . . . . . . . 11 87 2.6.20. Structure: ConnectionHost . . . . . . . . . . . . . . 11 88 2.6.21. Activation Assertions . . . . . . . . . . . . . . . . 11 89 2.6.22. Structure: ActivationDevice . . . . . . . . . . . . . 11 90 2.6.23. Structure: ActivationAccount . . . . . . . . . . . . 12 91 2.6.24. Structure: ActivationApplication . . . . . . . . . . 12 92 2.7. Data Structures . . . . . . . . . . . . . . . . . . . . . 12 93 2.7.1. Structure: Contact . . . . . . . . . . . . . . . . . 12 94 2.7.2. Structure: Anchor . . . . . . . . . . . . . . . . . . 13 95 2.7.3. Structure: TaggedSource . . . . . . . . . . . . . . . 13 96 2.7.4. Structure: ContactGroup . . . . . . . . . . . . . . . 13 97 2.7.5. Structure: ContactPerson . . . . . . . . . . . . . . 13 98 2.7.6. Structure: ContactOrganization . . . . . . . . . . . 13 99 2.7.7. Structure: OrganizationName . . . . . . . . . . . . . 14 100 2.7.8. Structure: PersonName . . . . . . . . . . . . . . . . 14 101 2.7.9. Structure: NetworkAddress . . . . . . . . . . . . . . 14 102 2.7.10. Structure: NetworkProtocol . . . . . . . . . . . . . 15 103 2.7.11. Structure: Role . . . . . . . . . . . . . . . . . . . 15 104 2.7.12. Structure: Location . . . . . . . . . . . . . . . . . 15 105 2.7.13. Structure: Bookmark . . . . . . . . . . . . . . . . . 15 106 2.7.14. Structure: Reference . . . . . . . . . . . . . . . . 16 107 2.7.15. Structure: Task . . . . . . . . . . . . . . . . . . . 16 108 2.8. Catalog Entries . . . . . . . . . . . . . . . . . . . . . 16 109 2.8.1. Structure: CatalogedEntry . . . . . . . . . . . . . . 16 110 2.8.2. Structure: CatalogedDevice . . . . . . . . . . . . . 17 111 2.8.3. Structure: CatalogedPublication . . . . . . . . . . . 17 112 2.8.4. Structure: CatalogedCredential . . . . . . . . . . . 18 113 2.8.5. Structure: CatalogedNetwork . . . . . . . . . . . . . 18 114 2.8.6. Structure: CatalogedContact . . . . . . . . . . . . . 18 115 2.8.7. Structure: CatalogedAccess . . . . . . . . . . . . . 18 116 2.8.8. Structure: CryptographicCapability . . . . . . . . . 18 117 2.8.9. Structure: CapabilityDecrypt . . . . . . . . . . . . 19 118 2.8.10. Structure: CapabilityDecryptPartial . . . . . . . . . 19 119 2.8.11. Structure: CapabilityDecryptServiced . . . . . . . . 19 120 2.8.12. Structure: CapabilitySign . . . . . . . . . . . . . . 19 121 2.8.13. Structure: CapabilityKeyGenerate . . . . . . . . . . 20 122 2.8.14. Structure: CapabilityFairExchange . . . . . . . . . . 20 123 2.8.15. Structure: CatalogedBookmark . . . . . . . . . . . . 20 124 2.8.16. Structure: CatalogedTask . . . . . . . . . . . . . . 20 125 2.8.17. Structure: CatalogedApplication . . . . . . . . . . . 20 126 2.8.18. Structure: CatalogedMember . . . . . . . . . . . . . 21 127 2.8.19. Structure: CatalogedGroup . . . . . . . . . . . . . . 21 128 2.8.20. Structure: CatalogedApplicationSSH . . . . . . . . . 21 129 2.8.21. Structure: CatalogedApplicationMail . . . . . . . . . 21 130 2.8.22. Structure: CatalogedApplicationNetwork . . . . . . . 21 131 2.9. Publications . . . . . . . . . . . . . . . . . . . . . . 21 132 2.9.1. Structure: DevicePreconfiguration . . . . . . . . . . 21 133 2.10. Messages . . . . . . . . . . . . . . . . . . . . . . . . 22 134 2.10.1. Structure: Message . . . . . . . . . . . . . . . . . 22 135 2.10.2. Structure: MessageError . . . . . . . . . . . . . . 22 136 2.10.3. Structure: MessageComplete . . . . . . . . . . . . . 22 137 2.10.4. Structure: MessagePinValidated . . . . . . . . . . . 22 138 2.10.5. Structure: MessagePin . . . . . . . . . . . . . . . 22 139 2.10.6. Structure: RequestConnection . . . . . . . . . . . . 23 140 2.10.7. Structure: AcknowledgeConnection . . . . . . . . . . 23 141 2.10.8. Structure: RespondConnection . . . . . . . . . . . . 23 142 2.10.9. Structure: MessageContact . . . . . . . . . . . . . 24 143 2.10.10. Structure: GroupInvitation . . . . . . . . . . . . . 24 144 2.10.11. Structure: RequestConfirmation . . . . . . . . . . . 24 145 2.10.12. Structure: ResponseConfirmation . . . . . . . . . . 24 146 2.10.13. Structure: RequestTask . . . . . . . . . . . . . . . 24 147 2.10.14. Structure: MessageClaim . . . . . . . . . . . . . . 24 148 2.10.15. Structure: ProcessResult . . . . . . . . . . . . . . 25 149 3. Mesh Portal Service Reference . . . . . . . . . . . . . . . . 25 150 3.1. Request Messages . . . . . . . . . . . . . . . . . . . . 25 151 3.1.1. Message: MeshRequest . . . . . . . . . . . . . . . . 25 152 3.2. Response Messages . . . . . . . . . . . . . . . . . . . . 25 153 3.2.1. Message: MeshResponse . . . . . . . . . . . . . . . . 26 154 3.3. Imported Objects . . . . . . . . . . . . . . . . . . . . 26 155 3.4. Common Structures . . . . . . . . . . . . . . . . . . . . 26 156 3.4.1. Structure: KeyValue . . . . . . . . . . . . . . . . . 26 157 3.4.2. Structure: SearchConstraints . . . . . . . . . . . . 26 158 3.5. Transaction: Hello . . . . . . . . . . . . . . . . . . . 27 159 3.6. Transaction: ValidateAccount . . . . . . . . . . . . . . 27 160 3.6.1. Message: ValidateRequest . . . . . . . . . . . . . . 27 161 3.6.2. Message: ValidateResponse . . . . . . . . . . . . . . 27 162 3.7. Transaction: CreateAccount . . . . . . . . . . . . . . . 28 163 3.7.1. Message: CreateRequest . . . . . . . . . . . . . . . 28 164 3.7.2. Message: CreateResponse . . . . . . . . . . . . . . . 29 165 3.8. Transaction: DeleteAccount . . . . . . . . . . . . . . . 29 166 3.8.1. Message: DeleteRequest . . . . . . . . . . . . . . . 29 167 3.8.2. Message: DeleteResponse . . . . . . . . . . . . . . . 29 168 3.9. Transaction: Get . . . . . . . . . . . . . . . . . . . . 29 169 3.9.1. Message: GetRequest . . . . . . . . . . . . . . . . . 30 170 3.9.2. Message: GetResponse . . . . . . . . . . . . . . . . 30 171 3.10. Transaction: Publish . . . . . . . . . . . . . . . . . . 30 172 3.10.1. Message: PublishRequest . . . . . . . . . . . . . . 31 173 3.10.2. Message: PublishResponse . . . . . . . . . . . . . . 31 174 3.11. Transaction: Status . . . . . . . . . . . . . . . . . . . 31 175 3.11.1. Message: StatusRequest . . . . . . . . . . . . . . . 31 176 3.11.2. Message: StatusResponse . . . . . . . . . . . . . . 31 177 3.12. Transaction: ConnectStart . . . . . . . . . . . . . . . . 32 178 3.12.1. Message: ConnectStartRequest . . . . . . . . . . . . 32 179 3.12.2. Message: ConnectStartResponse . . . . . . . . . . . 32 180 3.13. Transaction: ConnectStatus . . . . . . . . . . . . . . . 32 181 3.13.1. Message: ConnectStatusRequest . . . . . . . . . . . 33 182 3.13.2. Message: ConnectStatusResponse . . . . . . . . . . . 33 183 3.14. Transaction: ConnectPending . . . . . . . . . . . . . . . 33 184 3.14.1. Message: ConnectPendingRequest . . . . . . . . . . . 33 185 3.14.2. Message: ConnectPendingResponse . . . . . . . . . . 33 186 3.15. Transaction: ConnectComplete . . . . . . . . . . . . . . 34 187 3.15.1. Message: ConnectCompleteRequest . . . . . . . . . . 34 188 3.15.2. Message: ConnectCompleteResponse . . . . . . . . . . 34 189 3.16. Transaction: Transfer . . . . . . . . . . . . . . . . . . 34 190 3.16.1. Message: TransferRequest . . . . . . . . . . . . . . 35 191 3.16.2. Message: TransferResponse . . . . . . . . . . . . . 35 192 4. Assets . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 193 4.1. Data . . . . . . . . . . . . . . . . . . . . . . . . . . 35 194 4.2. Credentials . . . . . . . . . . . . . . . . . . . . . . . 35 195 4.3. Reputation . . . . . . . . . . . . . . . . . . . . . . . 35 196 4.3.1. Outbound Messaging Abuse () . . . . . . . . . . . . . 35 197 5. Risks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 198 5.1. Confidentiality . . . . . . . . . . . . . . . . . . . . . 35 199 5.1.1. Privacy . . . . . . . . . . . . . . . . . . . . . . . 35 200 5.2. Integrity . . . . . . . . . . . . . . . . . . . . . . . . 36 201 5.3. Availability . . . . . . . . . . . . . . . . . . . . . . 36 202 5.3.1. Data loss . . . . . . . . . . . . . . . . . . . . . . 36 203 5.3.2. Partial data survivability . . . . . . . . . . . . . 36 204 5.4. Inbound Messaging Abuse (Spam) . . . . . . . . . . . . . 36 205 6. Threats . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 206 6.1. End point Compromise . . . . . . . . . . . . . . . . . . 36 207 7. Controls . . . . . . . . . . . . . . . . . . . . . . . . . . 36 208 7.1. Cryptographic . . . . . . . . . . . . . . . . . . . . . . 36 209 7.1.1. Triple lock . . . . . . . . . . . . . . . . . . . . . 36 210 7.1.2. Key Protection . . . . . . . . . . . . . . . . . . . 37 211 7.1.3. Key and Nonce Generation . . . . . . . . . . . . . . 37 212 7.1.4. Key Escrow and Recovery . . . . . . . . . . . . . . . 37 213 7.1.5. Profile Verification . . . . . . . . . . . . . . . . 37 214 7.1.6. Identity Validation . . . . . . . . . . . . . . . . . 38 215 7.1.7. Trust Broker Accountability . . . . . . . . . . . . . 38 216 7.2. Mesh Messaging . . . . . . . . . . . . . . . . . . . . . 38 217 7.2.1. Ingress Control . . . . . . . . . . . . . . . . . . . 38 218 7.2.2. Egress Control . . . . . . . . . . . . . . . . . . . 38 219 7.2.3. Security Signal . . . . . . . . . . . . . . . . . . . 38 220 7.2.4. Accountability . . . . . . . . . . . . . . . . . . . 39 221 8. Security Considerations . . . . . . . . . . . . . . . . . . . 39 222 8.1. Integrity . . . . . . . . . . . . . . . . . . . . . . . . 39 223 8.1.1. DNS Spoofing . . . . . . . . . . . . . . . . . . . . 39 224 8.1.2. TLS Downgrade . . . . . . . . . . . . . . . . . . . . 39 225 8.1.3. TLS Service Impersonation . . . . . . . . . . . . . . 39 226 8.1.4. Request Replay Attack . . . . . . . . . . . . . . . . 39 227 8.1.5. Response Replay Attack . . . . . . . . . . . . . . . 39 228 8.2. Confidentiality . . . . . . . . . . . . . . . . . . . . . 39 229 8.2.1. Side Channel Attack . . . . . . . . . . . . . . . . . 39 230 8.2.2. Session Key Leakage . . . . . . . . . . . . . . . . . 39 231 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 232 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 39 233 11. Normative References . . . . . . . . . . . . . . . . . . . . 39 234 12. Informative References . . . . . . . . . . . . . . . . . . . 40 236 1. Introduction 237 2. Definitions 239 This section presents the related specifications and standard, the 240 terms that are used as terms of art within the documents and the 241 terms used as requirements language. 243 2.1. Requirements Language 245 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 246 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 247 document are to be interpreted as described in [RFC2119]. 249 2.2. Defined Terms 251 The terms of art used in this document are described in the _Mesh 252 Architecture Guide_ [draft-hallambaker-mesh-architecture]. 254 2.3. Related Specifications 256 The architecture of the Mathematical Mesh is described in the _Mesh 257 Architecture Guide_ [draft-hallambaker-mesh-architecture]. The Mesh 258 documentation set and related specifications are described in this 259 document. 261 2.4. Implementation Status 263 The implementation status of the reference code base is described in 264 the companion document [draft-hallambaker-mesh-developer]. 266 2.5. Shared Classes 268 The following classes are used as common elements in Mesh profile 269 specifications. 271 2.5.1. Classes describing keys 273 2.5.2. Structure: KeyData 275 The KeyData class is used to describe public key pairs and trust 276 assertions associated with a public key. 278 Udf: String (Optional) UDF fingerprint of the public key parameters 280 X509Certificate: Binary (Optional) List of X.509 Certificates 282 X509Chain: Binary [0..Many] X.509 Certificate chain. 284 X509CSR: Binary (Optional) X.509 Certificate Signing Request. 286 NotBefore: DateTime (Optional) If present specifies a time instant 287 that use of the private key is not valid before. 289 NotOnOrAfter: DateTime (Optional) If present specifies a time 290 instant that use of the private key is not valid on or after. 292 2.5.3. Structure: CompositePrivate 294 Inherits: Key 296 DeviceKeyUdf: String (Optional) UDF fingerprint of the bound device 297 key (if used). 299 2.6. Assertion classes 301 Classes that are derived from an assertion. 303 2.6.1. Structure: Assertion 305 Parent class from which all assertion classes are derived 307 Names: String [0..Many] Fingerprints of index terms for profile 308 retrieval. The use of the fingerprint of the name rather than the 309 name itself is a precaution against enumeration attacks and other 310 forms of abuse. 312 Updated: DateTime (Optional) The time instant the profile was last 313 modified. 315 NotaryToken: String (Optional) A Uniform Notary Token providing 316 evidence that a signature was performed after the notary token was 317 created. 319 2.6.2. Structure: Condition 321 Parent class from which all condition classes are derived. 323 [No fields] 325 2.6.3. Base Classes 327 Abstract classes from which the Profile, Activation and Connection 328 classes are derrived. 330 2.6.4. Structure: Connection 332 Inherits: Assertion 333 SubjectUdf: String (Optional) UDF of the connection target. 335 AuthorityUdf: String (Optional) UDF of the connection source. 337 2.6.5. Structure: Activation 339 Inherits: Assertion 341 Contains the private activation information for a Mesh application 342 running on a specific device 344 ActivationKey: String (Optional) Secret seed used to derive keys 345 that are not explicitly specified. 347 Entries: ActivationEntry [0..Many] Activation of named resources. 349 2.6.6. Structure: ActivationEntry 351 Resource: String (Optional) Name of the activated resource 353 Key: KeyData (Optional) The activation key or key share 355 2.6.7. Mesh Profile Classes 357 Classes describing Mesh Profiles. All Profiles are Assertions 358 derrived from Assertion. 360 2.6.8. Structure: Profile 362 Inherits: Assertion 364 Parent class from which all profile classes are derived 366 ProfileSignature: KeyData (Optional) The permanent signature key 367 used to sign the profile itself. The UDF of the key is used as 368 the permanent object identifier of the profile. Thus, by 369 definition, the KeySignature value of a Profile does not change 370 under any circumstance. 372 2.6.9. Structure: ProfileDevice 374 Inherits: Profile 376 Describes a mesh device. 378 Description: String (Optional) Description of the device 380 BaseEncryption: KeyData (Optional) Base key contribution for 381 encryption keys. Also used to decrypt activation data sent to the 382 device during connection to an account. 384 BaseAuthentication: KeyData (Optional) Base key contribution for 385 authentication keys. Also used to authenticate the device during 386 connection to an account. 388 BaseSignature: KeyData (Optional) Base key contribution for 389 signature keys. 391 2.6.10. Structure: ProfileAccount 393 Base class for the account profiles ProfileUser and ProfileGroup. 394 These subclasses may be merged at some future date. 396 Inherits: Profile 398 AccountAddress: String (Optional) The account address. This is 399 either a DNS service address (e.g. alice@example.com) or a Mesh 400 Name (@alice). 402 ServiceUdf: String (Optional) The fingerprint of the service profile 403 to which the account is currently bound. 405 EscrowEncryption: KeyData (Optional) Escrow key associated with the 406 account. 408 AccountEncryption: KeyData (Optional) Key currently used to encrypt 409 data under this profile 411 AdministratorSignature: KeyData (Optional) Key used to sign 412 connection assertions to the account. 414 2.6.11. Structure: ProfileUser 416 Inherits: ProfileAccount 418 Account assertion. This is signed by the service hosting the 419 account. 421 AccountAuthentication: KeyData (Optional) Key used to authenticate 422 requests made under this user account. 424 AccountSignature: KeyData (Optional) Key used to sign data under the 425 account. 427 2.6.12. Structure: ProfileGroup 429 Inherits: ProfileAccount 431 Describes a group. Note that while a group is created by one person 432 who becomes its first administrator, control of the group may pass to 433 other administrators over time. 435 [No fields] 437 2.6.13. Structure: ProfileService 439 Inherits: Profile 441 Profile of a Mesh Service 443 ServiceAuthentication: KeyData (Optional) Key used to authenticate 444 service connections. 446 ServiceEncryption: KeyData (Optional) Key used to encrypt data under 447 this profile 449 ServiceSignature: KeyData (Optional) Key used to sign data under the 450 account. 452 2.6.14. Structure: ProfileHost 454 Inherits: Profile 456 KeyAuthentication: KeyData (Optional) Key used to authenticate 457 service connections. 459 KeyEncryption: KeyData (Optional) Key used to pass encrypted data to 460 the device such as a 462 2.6.15. Connection Assertions 464 Connection assertions are used to authenticate and authorize 465 interactions between devices and the service currently servicing the 466 account. They SHOULD NOT be visible to external parties. 468 2.6.16. Structure: ConnectionDevice 470 Inherits: Connection 472 Connection assertion used to authenticate service requests made by a 473 device. 475 AccountAddress: String (Optional) The account address 477 DeviceSignature: KeyData (Optional) The signature key for use of the 478 device under the profile 480 DeviceEncryption: KeyData (Optional) The encryption key for use of 481 the device under the profile 483 DeviceAuthentication: KeyData (Optional) The authentication key for 484 use of the device under the profile 486 2.6.17. Structure: ConnectionApplication 488 Inherits: Connection 490 Connection assertion stating that a particular device is 492 [No fields] 494 2.6.18. Structure: ConnectionGroup 496 Describes the connection of a member to a group. 498 Inherits: Connection 500 [No fields] 502 2.6.19. Structure: ConnectionService 504 Inherits: Connection 506 [No fields] 508 2.6.20. Structure: ConnectionHost 510 Inherits: Connection 512 [No fields] 514 2.6.21. Activation Assertions 516 2.6.22. Structure: ActivationDevice 518 Contains activation data for device specific keys used in the context 519 of a Mesh account. 521 Inherits: Activation 522 AccountUdf: String (Optional) The UDF of the account 524 2.6.23. Structure: ActivationAccount 526 Inherits: Activation 528 ProfileSignature: KeyData (Optional) Grant access to profile online 529 signing key used to sign updates to the profile. 531 AdministratorSignature: KeyData (Optional) Grant access to Profile 532 administration key used to make changes to administrator catalogs. 534 AccountEncryption: KeyData (Optional) Grant access to ProfileUser 535 account encryption key 537 AccountAuthentication: KeyData (Optional) Grant access to 538 ProfileUser account authentication key 540 AccountSignature: KeyData (Optional) Grant access to ProfileUser 541 account signature key 543 2.6.24. Structure: ActivationApplication 545 Inherits: Activation 547 [No fields] 549 2.7. Data Structures 551 Classes describing data used in cataloged data. 553 2.7.1. Structure: Contact 555 Inherits: Assertion 557 Base class for contact entries. 559 Id: String (Optional) The globally unique contact identifier. 561 Anchors: Anchor [0..Many] Mesh fingerprints associated with the 562 contact. 564 NetworkAddresses: NetworkAddress [0..Many] Network address entries 566 Locations: Location [0..Many] The physical locations the contact is 567 associated with. 569 Roles: Role [0..Many] The roles of the contact 570 Bookmark: Bookmark [0..Many] The Web sites and other online 571 presences of the contact 573 Sources: TaggedSource [0..Many] Source(s) from which this contact 574 was constructed. 576 2.7.2. Structure: Anchor 578 Trust anchor 580 Udf: String (Optional) The trust anchor. 582 Validation: String (Optional) The means of validation. 584 2.7.3. Structure: TaggedSource 586 Source from which contact information was obtained. 588 LocalName: String (Optional) Short name for the contact information. 590 Validation: String (Optional) The means of validation. 592 BinarySource: Binary (Optional) The contact data in binary form. 594 EnvelopedSource: Enveloped (Optional) The contact data in enveloped 595 form. If present, the BinarySource property is ignored. 597 2.7.4. Structure: ContactGroup 599 Inherits: Contact 601 Contact for a group, including encryption groups. 603 [No fields] 605 2.7.5. Structure: ContactPerson 607 Inherits: Contact 609 CommonNames: PersonName [0..Many] List of person names in order of 610 preference 612 2.7.6. Structure: ContactOrganization 614 Inherits: Contact 616 CommonNames: OrganizationName [0..Many] List of person names in 617 order of preference 619 2.7.7. Structure: OrganizationName 621 The name of an organization 623 Inactive: Boolean (Optional) If true, the name is not in current 624 use. 626 RegisteredName: String (Optional) The registered name. 628 DBA: String (Optional) Names that the organization uses including 629 trading names and doing business as names. 631 2.7.8. Structure: PersonName 633 The name of a natural person 635 Inactive: Boolean (Optional) If true, the name is not in current 636 use. 638 FullName: String (Optional) The preferred presentation of the full 639 name. 641 Prefix: String (Optional) Honorific or title, E.g. Sir, Lord, Dr., 642 Mr. 644 First: String (Optional) First name. 646 Middle: String [0..Many] Middle names or initials. 648 Last: String (Optional) Last name. 650 Suffix: String (Optional) Nominal suffix, e.g. Jr., III, etc. 652 PostNominal: String (Optional) Post nominal letters (if used). 654 2.7.9. Structure: NetworkAddress 656 Provides all means of contacting the individual according to a 657 particular network address 659 Inactive: Boolean (Optional) If true, the name is not in current 660 use. 662 Address: String (Optional) The network address, e.g. 663 alice@example.com 665 NetworkCapability: String [0..Many] The capabilities bound to this 666 address. 668 EnvelopedProfileAccount: Enveloped (Optional) The account profile 670 Protocols: NetworkProtocol [0..Many] Public keys associated with the 671 network address 673 2.7.10. Structure: NetworkProtocol 675 Protocol: String (Optional) The IANA protocol|identifier of the 676 network protocols by which the contact may be reached using the 677 specified Address. 679 2.7.11. Structure: Role 681 OrganizationName: String (Optional) The organization at which the 682 role is held 684 Titles: String [0..Many] The titles held with respect to that 685 organization. 687 Locations: Location [0..Many] Postal or physical addresses 688 associated with the role. 690 2.7.12. Structure: Location 692 Appartment: String (Optional) 694 Street: String (Optional) 696 District: String (Optional) 698 Locality: String (Optional) 700 County: String (Optional) 702 Postcode: String (Optional) 704 Country: String (Optional) 706 2.7.13. Structure: Bookmark 708 Uri: String (Optional) 710 Title: String (Optional) 712 Role: String [0..Many] 714 2.7.14. Structure: Reference 716 MessageId: String (Optional) The received message to which this is a 717 response 719 ResponseId: String (Optional) Message that was generated in response 720 to the original (optional). 722 Relationship: String (Optional) The relationship type. This can be 723 Read, Unread, Accept, Reject. 725 2.7.15. Structure: Task 727 Key: String (Optional) Unique key. 729 Start: DateTime (Optional) 731 Finish: DateTime (Optional) 733 StartTravel: String (Optional) 735 FinishTravel: String (Optional) 737 TimeZone: String (Optional) 739 Title: String (Optional) 741 Description: String (Optional) 743 Location: String (Optional) 745 Trigger: String [0..Many] 747 Conference: String [0..Many] 749 Repeat: String (Optional) 751 Busy: Boolean (Optional) 753 2.8. Catalog Entries 755 2.8.1. Structure: CatalogedEntry 757 Base class for cataloged Mesh data. 759 Labels: String [0..Many] The set of labels describing the entry 761 2.8.2. Structure: CatalogedDevice 763 Inherits: CatalogedEntry 765 Public device entry, indexed under the device ID Hello 767 Udf: String (Optional) UDF of the signature key of the device in the 768 Mesh 770 DeviceUdf: String (Optional) UDF of the offline signature key of the 771 device 773 SignatureUdf: String (Optional) UDF of the account online signature 774 key 776 EnvelopedProfileUser: Enveloped (Optional) The Mesh profile 778 EnvelopedProfileDevice: Enveloped (Optional) The device profile 780 EnvelopedConnectionUser: Enveloped (Optional) The public assertion 781 demonstrating connection of the Device to the Mesh 783 EnvelopedActivationDevice: Enveloped (Optional) The activation of 784 the device within the Mesh account 786 EnvelopedActivationAccount: Enveloped (Optional) The activation of 787 the device within the Mesh account 789 EnvelopedActivationApplication: Enveloped [0..Many] Application 790 activations granted to the device. 792 2.8.3. Structure: CatalogedPublication 794 Inherits: CatalogedEntry 796 A publication. 798 Id: String (Optional) Unique identifier code 800 Authenticator: String (Optional) The witness key value to use to 801 request access to the record. 803 EnvelopedData: DareEnvelope (Optional) Dare Envelope containing the 804 entry data. The data type is specified by the envelope metadata. 806 NotOnOrAfter: DateTime (Optional) Epiration time (inclusive) 808 2.8.4. Structure: CatalogedCredential 810 Inherits: CatalogedEntry 812 Protocol: String (Optional) 814 Service: String (Optional) 816 Username: String (Optional) 818 Password: String (Optional) 820 2.8.5. Structure: CatalogedNetwork 822 Inherits: CatalogedEntry 824 Protocol: String (Optional) 826 Service: String (Optional) 828 Username: String (Optional) 830 Password: String (Optional) 832 2.8.6. Structure: CatalogedContact 834 Inherits: CatalogedEntry 836 Key: String (Optional) Unique key. 838 Self: Boolean (Optional) If true, this catalog entry is for the user 839 who created the catalog. 841 2.8.7. Structure: CatalogedAccess 843 Inherits: CatalogedEntry 845 [No fields] 847 2.8.8. Structure: CryptographicCapability 849 Id: String (Optional) The identifier of the capability. If this is 850 a user capability, MUST match the KeyData identifier. If this is 851 a serviced capability, MUST match the value of ServiceId on the 852 corresponding service capability. 854 KeyData: KeyData (Optional) The key that enables the capability 855 EnvelopedKeyShares: Enveloped [0..Many] One or more enveloped key 856 shares. 858 SubjectId: String (Optional) The identifier of the resource that is 859 controlled using the key. 861 SubjectAddress: String (Optional) The address of the resource that 862 is controlled using the key. 864 2.8.9. Structure: CapabilityDecrypt 866 Inherits: CryptographicCapability 868 The corresponding key is a decryption key 870 [No fields] 872 2.8.10. Structure: CapabilityDecryptPartial 874 Inherits: CapabilityDecrypt 876 The corresponding key is an encryption key 878 ServiceId: String (Optional) The identifier used to claim the 879 capability from the service.[Only present for a partial 880 capability.] 882 ServiceAddress: String (Optional) The service account that supports 883 a serviced capability. [Only present for a partial capability.] 885 2.8.11. Structure: CapabilityDecryptServiced 887 Inherits: CapabilityDecrypt 889 The corresponding key is an encryption key 891 AuthenticationId: String (Optional) UDF of trust root under which 892 request to use a serviced capability must be authorized. [Only 893 present for a serviced capability] 895 2.8.12. Structure: CapabilitySign 897 Inherits: CryptographicCapability 899 The corresponding key is an administration key 901 [No fields] 903 2.8.13. Structure: CapabilityKeyGenerate 905 Inherits: CryptographicCapability 907 The corresponding key is a key that may be used to generate key 908 shares. 910 [No fields] 912 2.8.14. Structure: CapabilityFairExchange 914 Inherits: CryptographicCapability 916 The corresponding key is a decryption key to be used in accordance 917 with the Micali Fair Electronic Exchange with Invisible Trusted 918 Parties protocol. 920 [No fields] 922 2.8.15. Structure: CatalogedBookmark 924 Inherits: CatalogedEntry 926 Uri: String (Optional) 928 Title: String (Optional) 930 Path: String (Optional) 932 2.8.16. Structure: CatalogedTask 934 Inherits: CatalogedEntry 936 EnvelopedTask: Enveloped (Optional) 938 Title: String (Optional) 940 Key: String (Optional) Unique key. 942 2.8.17. Structure: CatalogedApplication 944 Inherits: CatalogedEntry 946 Key: String (Optional) 948 EnvelopedCapabilities: DareEnvelope [0..Many] Enveloped keys for use 949 with Application 951 2.8.18. Structure: CatalogedMember 953 ContactAddress: String (Optional) 955 MemberCapabilityId: String (Optional) 957 ServiceCapabilityId: String (Optional) 959 Inherits: CatalogedEntry 961 2.8.19. Structure: CatalogedGroup 963 Inherits: CatalogedApplication 965 EnvelopedProfileGroup: Enveloped (Optional) The Mesh profile 967 EnvelopedActivationAccount: Enveloped (Optional) The activation of 968 the device within the Mesh account 970 2.8.20. Structure: CatalogedApplicationSSH 972 Inherits: CatalogedApplication 974 [No fields] 976 2.8.21. Structure: CatalogedApplicationMail 978 Inherits: CatalogedApplication 980 [No fields] 982 2.8.22. Structure: CatalogedApplicationNetwork 984 Inherits: CatalogedApplication 986 [No fields] 988 2.9. Publications 990 2.9.1. Structure: DevicePreconfiguration 992 A data structure that is passed 994 EnvelopedProfileDevice: Enveloped (Optional) The device profile 996 EnvelopedConnectionDevice: Enveloped (Optional) The device 997 connection 999 ConnectUri: String (Optional) The connection URI. This would 1000 normally be printed on the device as a QR code. 1002 2.10. Messages 1004 2.10.1. Structure: Message 1006 MessageId: String (Optional) Unique per-message ID. When 1007 encapsulating a Mesh Message in a DARE envelope, the envelope 1008 EnvelopeID field MUST be a UDF fingerprint of the MessageId value. 1010 Sender: String (Optional) 1012 Recipient: String (Optional) 1014 2.10.2. Structure: MessageError 1016 Inherits: Message 1018 ErrorCode: String (Optional) 1020 2.10.3. Structure: MessageComplete 1022 Inherits: Message 1024 References: Reference [0..Many] 1026 2.10.4. Structure: MessagePinValidated 1028 Inherits: Message 1030 AuthenticatedData: DareEnvelope (Optional) Enveloped data that is 1031 authenticated by means of the PIN 1033 ClientNonce: Binary (Optional) Nonce provided by the client to 1034 validate the PIN 1036 PinId: String (Optional) Pin identifier value calculated from the 1037 PIN code, action and account address. 1039 PinWitness: Binary (Optional) Witness value calculated as KDF 1040 (Device.Udf + AccountAddress, ClientNonce) 1042 2.10.5. Structure: MessagePin 1044 Account: String (Optional) 1046 Inherits: Message 1047 Expires: DateTime (Optional) 1049 Automatic: Boolean (Optional) If true, authentication against the 1050 PIN code is sufficient to complete the associated action without 1051 further authorization. 1053 SaltedPin: String (Optional) PIN code bound to the specified action. 1055 Action: String (Optional) The action to which this PIN code is 1056 bound. 1058 2.10.6. Structure: RequestConnection 1060 Connection request message. This message contains the information 1062 Inherits: MessagePinValidated 1064 AccountAddress: String (Optional) 1066 2.10.7. Structure: AcknowledgeConnection 1068 Connection request message generated by a service on receipt of a 1069 valid MessageConnectionRequestClient 1071 Inherits: Message 1073 EnvelopedRequestConnection: Enveloped (Optional) The client 1074 connection request. 1076 ServerNonce: Binary (Optional) 1078 Witness: String (Optional) 1080 2.10.8. Structure: RespondConnection 1082 Respond to RequestConnection message to grant or refuse the 1083 connection request. 1085 Inherits: Message 1087 Result: String (Optional) The response to the request. One of 1088 "Accept", "Reject" or "Pending". 1090 CatalogedDevice: CatalogedDevice (Optional) The device information. 1091 MUST be present if the value of Result is "Accept". MUST be 1092 absent or null otherwise. 1094 2.10.9. Structure: MessageContact 1096 Inherits: MessagePinValidated 1098 Reply: Boolean (Optional) If true, requests that the recipient 1099 return their own contact information in reply. 1101 Subject: String (Optional) Optional explanation of the reason for 1102 the request. 1104 PIN: String (Optional) One time authentication code supplied to a 1105 recipient to allow authentication of the response. 1107 2.10.10. Structure: GroupInvitation 1109 Inherits: Message 1111 Text: String (Optional) 1113 2.10.11. Structure: RequestConfirmation 1115 Inherits: Message 1117 Text: String (Optional) 1119 2.10.12. Structure: ResponseConfirmation 1121 Inherits: Message 1123 Request: Enveloped (Optional) 1125 Accept: Boolean (Optional) 1127 2.10.13. Structure: RequestTask 1129 Inherits: Message 1131 [No fields] 1133 2.10.14. Structure: MessageClaim 1135 Inherits: Message 1137 PublicationId: String (Optional) 1139 ServiceAuthenticate: String (Optional) 1141 DeviceAuthenticate: String (Optional) 1142 Expires: DateTime (Optional) 1144 2.10.15. Structure: ProcessResult 1146 For future use, allows logging of operations and results 1148 Inherits: Message 1150 Success: Boolean (Optional) 1152 ErrorReport: String (Optional) The error report code. 1154 3. Mesh Portal Service Reference 1156 HTTP Well Known Service Prefix: /.well-known/mmm 1158 Every Mesh Portal Service transaction consists of exactly one request 1159 followed by exactly one response. Mesh Service transactions MAY 1160 cause modification of the data stored in the Mesh Portal or the Mesh 1161 itself but do not cause changes to the connection state. The 1162 protocol itself is thus idempotent. There is no set sequence in 1163 which operations are required to be performed. It is not necessary 1164 to perform a Hello transaction prior to a ValidateAccount, Publish or 1165 any other transaction. 1167 3.1. Request Messages 1169 A Mesh Portal Service request consists of a payload object that 1170 inherits from the MeshRequest class. When using the HTTP binding, 1171 the request MUST specify the portal DNS address in the HTTP Host 1172 field. 1174 3.1.1. Message: MeshRequest 1176 Base class for all request messages. 1178 Portal: String (Optional) Name of the Mesh Portal Service to which 1179 the request is directed. 1181 3.2. Response Messages 1183 A Mesh Portal Service response consists of a payload object that 1184 inherits from the MeshResponse class. When using the HTTP binding, 1185 the response SHOULD report the Status response code in the HTTP 1186 response message. However the response code returned in the payload 1187 object MUST always be considered authoritative. 1189 3.2.1. Message: MeshResponse 1191 Base class for all response messages. Contains only the status code 1192 and status description fields. 1194 [No fields] 1196 3.3. Imported Objects 1198 The Mesh Service protocol makes use of JSON objects defined in the 1199 JOSE Signatgure and Encryption specifications. 1201 3.4. Common Structures 1203 The following common structures are used in the protocol messages: 1205 3.4.1. Structure: KeyValue 1207 Describes a Key/Value structure used to make queries for records 1208 matching one or more selection criteria. 1210 Key: String (Optional) The data retrieval key. 1212 Value: String (Optional) The data value to match. 1214 3.4.2. Structure: SearchConstraints 1216 Specifies constraints to be applied to a search result. These allow 1217 a client to limit the number of records returned, the quantity of 1218 data returned, the earliest and latest data returned, etc. 1220 NotBefore: DateTime (Optional) Only data published on or after the 1221 specified time instant is requested. 1223 Before: DateTime (Optional) Only data published before the specified 1224 time instant is requested. This excludes data published at the 1225 specified time instant. 1227 MaxEntries: Integer (Optional) Maximum number of data entries to 1228 return. 1230 MaxBytes: Integer (Optional) Maximum number of data bytes to return. 1232 PageKey: String (Optional) Specifies a page key returned in a 1233 previous search operation in which the number of responses 1234 exceeded the specified bounds. 1236 When a page key is specified, all the other search parameters 1237 except for MaxEntries and MaxBytes are ignored and the service 1238 returns the next set of data responding to the earlier query. 1240 3.5. Transaction: Hello 1242 Request: HelloRequest 1244 Response: HelloResponse 1246 Report service and version information. 1248 The Hello transaction provides a means of determining which protocol 1249 versions, message encodings and transport protocols are supported by 1250 the service. 1252 3.6. Transaction: ValidateAccount 1254 Request: ValidateRequest 1256 Response: ValidateResponse 1258 Request validation of a proposed name for a new account. 1260 For validation of a user's account name during profile creation. 1262 3.6.1. Message: ValidateRequest 1264 Inherits: MeshRequest 1266 Describes the proposed account properties. Currently, these are 1267 limited to the account name but could be extended in future versions 1268 of the protocol. 1270 Account: String (Optional) Account name requested 1272 Reserve: Boolean (Optional) If true, request a reservation for the 1273 specified account name. Note that the service is not obliged to 1274 honor reservation requests. 1276 Language: String [0..Many] List of ISO language codes in order of 1277 preference. For creating explanatory text. 1279 3.6.2. Message: ValidateResponse 1281 Inherits: MeshResponse 1282 States whether the proposed account properties are acceptable and 1283 (optional) returns an indication of what properties are valid. 1285 Note that receiving a 'Valid' responseto a Validate Request does not 1286 guarantee creation of the account. In addition to the possibility 1287 that the account namecould be requested by another user between the 1288 Validate and Create transactions, a portal service MAY perform more 1289 stringent validation criteria when an account is actually being 1290 created. For example, checking with the authoritative list of 1291 current accounts rather than a cached copy. 1293 Valid: Boolean (Optional) If true, the specified account identifier 1294 is acceptable. If false, the account identifier is rejected. 1296 Minimum: Integer (Optional) Specifies the minimum length of an 1297 account name. 1299 Maximum: Integer (Optional) Specifies the maximum length of an 1300 account name. 1302 InvalidCharacters: String (Optional) A list of characters that the 1303 service does not accept in account names. The list of characters 1304 MAY not be exhaustive but SHOULD include any illegal characters in 1305 the proposed account name. 1307 Reason: String (Optional) Text explaining the reason an account name 1308 was rejected. 1310 3.7. Transaction: CreateAccount 1312 Request: CreateRequest 1314 Response: CreateResponse 1316 Request creation of a new portal account. 1318 Unlike a profile, a mesh account is specific to a particular Mesh 1319 portal. A mesh account must be created and accepted before a profile 1320 can be published. 1322 3.7.1. Message: CreateRequest 1324 Request creation of a new portal account. The request specifies the 1325 requested account identifier and the Mesh profile to be associated 1326 with the account. 1328 Inherits: MeshRequest 1329 Account: String (Optional) Account identifier requested. 1331 3.7.2. Message: CreateResponse 1333 Inherits: MeshResponse 1335 Reports the success or failure of a Create transaction. 1337 [No fields] 1339 3.8. Transaction: DeleteAccount 1341 Request: DeleteRequest 1343 Response: DeleteResponse 1345 Request deletion of a portal account. 1347 Deletes a portal account but not the underlying profile. Once 1348 registered, profiles are permanent. 1350 3.8.1. Message: DeleteRequest 1352 Request deletion of a new portal account. The request specifies the 1353 requested account identifier. 1355 Inherits: MeshRequest 1357 Account: String (Optional) Account identifier to be deleted. 1359 3.8.2. Message: DeleteResponse 1361 Inherits: MeshResponse 1363 Reports the success or failure of a Delete transaction. 1365 [No fields] 1367 3.9. Transaction: Get 1369 Request: GetRequest 1371 Response: GetResponse 1373 Search for data in the mesh that matches a set of properties 1374 described by a sequence of key/value pairs. 1376 3.9.1. Message: GetRequest 1378 Describes the Portal or Mesh data to be retreived. 1380 Inherits: MeshRequest 1382 Identifier: String (Optional) Lookup by profile ID 1384 Account: String (Optional) Lookup by Account ID 1386 KeyValues: KeyValue [0..Many] List of KeyValue pairs specifying the 1387 conditions to be met 1389 SearchConstraints: SearchConstraints (Optional) Constrain the search 1390 to a specific time interval and/or limit the number and/or total 1391 size of data records returned. 1393 Multiple: Boolean (Optional) If true return multiple responses if 1394 available 1396 Full: Boolean (Optional) If true, the client requests that the full 1397 Mesh data record be returned containing both the Mesh entry itself 1398 and the Mesh metadata that allows the date and time of the 1399 publication of the Mesh entry to be verified. 1401 3.9.2. Message: GetResponse 1403 Reports the success or failure of a Get transaction. If a Mesh entry 1404 matching the specified profile is found, containsthe list of entries 1405 matching the request. 1407 Inherits: MeshResponse 1409 DataItems: DataItem [0..Many] List of mesh data records matching the 1410 request. 1412 PageKey: String (Optional) If non-null, indicates that the number 1413 and/or size of the data records returned exceeds either the 1414 SearchConstraints specified in the request or internal server 1415 limits. 1417 3.10. Transaction: Publish 1419 Request: PublishRequest 1421 Response: PublishResponse 1423 Publish a profile or key escrow entry to the mesh. 1425 3.10.1. Message: PublishRequest 1427 Requests publication of the specified Mesh entry. 1429 Inherits: MeshRequest 1431 [No fields] 1433 3.10.2. Message: PublishResponse 1435 Reports the success or failure of a Publish transaction. 1437 Inherits: MeshResponse 1439 [No fields] 1441 3.11. Transaction: Status 1443 Request: StatusRequest 1445 Response: StatusResponse 1447 Request the current status of the mesh as seen by the portal to which 1448 it is directed. 1450 The response to the status request contains the last signed 1451 checkpoint and proof chains for each of the peer portals that have 1452 been checkpointed. 1454 [Not currently implemented] 1456 3.11.1. Message: StatusRequest 1458 Inherits: MeshRequest 1460 Initiates a status transaction. 1462 [No fields] 1464 3.11.2. Message: StatusResponse 1466 Reports the success or failure of a Status transaction. 1468 Inherits: MeshResponse 1470 LastWriteTime: DateTime (Optional) Time that the last write update 1471 was made to the Mesh 1473 LastCheckpointTime: DateTime (Optional) Time that the last Mesh 1474 checkpoint was calculated. 1476 NextCheckpointTime: DateTime (Optional) Time at which the next Mesh 1477 checkpoint should be calculated. 1479 CheckpointValue: String (Optional) Last checkpoint value. 1481 3.12. Transaction: ConnectStart 1483 Request: ConnectStartRequest 1485 Response: ConnectStartResponse 1487 Request connection of a new device to a mesh profile 1489 3.12.1. Message: ConnectStartRequest 1491 Inherits: MeshRequest 1493 Initial device connection request. 1495 SignedRequest: SignedConnectionRequest (Optional) Device connection 1496 request signed by thesignature key of the device requesting 1497 connection. 1499 AccountID: String (Optional) Account identifier of account to which 1500 the device is requesting connection. 1502 3.12.2. Message: ConnectStartResponse 1504 Reports the success or failure of a ConnectStart transaction. 1506 Inherits: MeshRequest 1508 [No fields] 1510 3.13. Transaction: ConnectStatus 1512 Request: ConnectStatusRequest 1514 Response: ConnectStatusResponse 1516 Request status of pending connection request of a new device to a 1517 mesh profile 1519 3.13.1. Message: ConnectStatusRequest 1521 Inherits: MeshRequest 1523 Request status information for a pending request posted previously. 1525 AccountID: String (Optional) Account identifier for which pending 1526 connection information is requested. 1528 DeviceID: String (Optional) Device identifier of device requesting 1529 status information. 1531 3.13.2. Message: ConnectStatusResponse 1533 Reports the success or failure of a ConnectStatus transaction. 1535 Inherits: MeshRequest 1537 Result: SignedConnectionResult (Optional) The signed 1538 ConnectionResult object. 1540 3.14. Transaction: ConnectPending 1542 Request: ConnectPendingRequest 1544 Response: ConnectPendingResponse 1546 Request a list of pending requests for an administration profile. 1548 3.14.1. Message: ConnectPendingRequest 1550 Inherits: MeshRequest 1552 Specify the criteria for pending requests. 1554 AccountID: String (Optional) The account identifier of the account 1555 for which pending connection requests are requested. 1557 SearchConstraints: SearchConstraints (Optional) Constrain the search 1558 to a specific time interval and/or limit the number and/or total 1559 size of data records returned. 1561 3.14.2. Message: ConnectPendingResponse 1563 Reports the success or failure of a ConnectPending transaction. 1565 Inherits: MeshRequest 1566 Pending: SignedConnectionRequest [0..Many] A list of pending 1567 requests satisfying the criteria set out in the request. 1569 PageKey: String (Optional) If non-null, indicates that the number 1570 and/or size of the data records returned exceeds either the 1571 SearchConstraints specified in the request or internal server 1572 limits. 1574 3.15. Transaction: ConnectComplete 1576 Request: ConnectCompleteRequest 1578 Response: ConnectCompleteResponse 1580 Post response to a pending connection request. 1582 3.15.1. Message: ConnectCompleteRequest 1584 Reports the success or failure of a ConnectComplete transaction. 1586 Inherits: MeshRequest 1588 Result: SignedConnectionResult (Optional) The connection result to 1589 be posted to the portal. The result MUST be signed by a valid 1590 administration key for the Mesh profile. 1592 AccountID: String (Optional) The account identifier to which the 1593 connection result is posted. 1595 3.15.2. Message: ConnectCompleteResponse 1597 Inherits: MeshRequest 1599 Reports the success or failure of a ConnectComplete transaction. 1601 [No fields] 1603 3.16. Transaction: Transfer 1605 Request: TransferRequest 1607 Response: TransferResponse 1609 Perform a bulk transfer of the log between the specified transaction 1610 identifiers. Requires appropriate authorization 1612 [Not currently implemented] 1614 3.16.1. Message: TransferRequest 1616 Request a bulk transfer of the log between the specified transaction 1617 identifiers. Requires appropriate authorization 1619 Inherits: MeshRequest 1621 SearchConstraints: SearchConstraints (Optional) Constrain the search 1622 to a specific time interval and/or limit the number and/or total 1623 size of data records returned. 1625 3.16.2. Message: TransferResponse 1627 Inherits: MeshResponse 1629 Reports the success or failure of a Transfer transaction. If 1630 successful, contains the list of Mesh records to be transferred. 1632 DataItems: DataItem [0..Many] List of mesh data records matching the 1633 request. 1635 PageKey: String (Optional) If non-null, indicates that the number 1636 and/or size of the data records returned exceeds either the 1637 SearchConstraints specified in the request or internal server 1638 limits. 1640 4. Assets 1642 4.1. Data 1644 4.2. Credentials 1646 4.3. Reputation 1648 4.3.1. Outbound Messaging Abuse () 1650 5. Risks 1652 5.1. Confidentiality 1654 Is a regulatory requirement GDPR/HIPPA 1656 5.1.1. Privacy 1658 Stronger requirement, given data but with restrictions on use 1660 Unintended use within an organization may put it in default 1661 GDPR 1663 HIPPA 1665 5.2. Integrity 1667 Modification of data enables control breaches 1669 5.3. Availability 1671 5.3.1. Data loss 1673 Loss of the pictures of the kids at 5 1675 5.3.2. Partial data survivability 1677 Where they buried Aunt Agatha's jewelry but not where they buried 1678 Aunt Agatha. 1680 5.4. Inbound Messaging Abuse (Spam) 1682 6. Threats 1684 6.1. End point Compromise 1686 7. Controls 1688 7.1. Cryptographic 1690 7.1.1. Triple lock 1692 7.1.1.1. Transport Security 1694 Traffic analysis protection 1696 7.1.1.2. Message Security 1698 Access control 1700 Authentication / Integrity 1702 7.1.1.3. Data Level Security 1704 Data Confidentiality 1706 Non-Repudiation 1708 7.1.2. Key Protection 1710 Use of platform provided facilities to bind private keys in the 1711 Device profile to the device is highly desirable. Ideally, private 1712 keys should be protected against extraction by hardware techniques 1713 presenting a high degree of resistance. 1715 7.1.2.1. Windows 1717 Use encrypted key store 1719 Preferably use BitLocker 1721 7.1.2.2. OSX 1723 Use Key Ring 1725 7.1.2.3. iOS 1727 Use ??? 1729 7.1.2.4. Linux 1731 Use the DBUS mechanism 1733 7.1.2.5. Android 1735 Hope and prayers. 1737 7.1.3. Key and Nonce Generation 1739 Use strong mechanisms as described in RFC??? 1741 Use of key co-generation as described in part 8 is advised 1743 7.1.4. Key Escrow and Recovery 1745 Master profile keys should be escrowed 1747 Escrow strategies for DARE should take account of the fact that users 1748 may want some but not all their data assets to survive them. 1750 7.1.5. Profile Verification 1752 Check that the device credential has been signed by an administration 1753 device and that the administration device was properly authorized by 1754 the master profile. 1756 Device catalog MUST be signed by the admin device. 1758 Future ? provide protection against rollback attacks. 1760 7.1.6. Identity Validation 1762 See the separate document on the trust model 1764 7.1.7. Trust Broker Accountability 1766 Cert transparency type techniques 1768 7.2. Mesh Messaging 1770 7.2.1. Ingress Control 1772 Every message is subject to access control 1774 Mesh Services should perform abuse filtering on inbound mail 1776 Mesh Services MUST apply user specified ingress control as specified 1777 in their contacts catalog. 1779 7.2.2. Egress Control 1781 Some applications may require egress control 1783 For example, classified environments 1785 Mail too stupid to send 1787 7.2.3. Security Signal 1789 Confirmation messages requiring payments 1791 Need Accountability 1793 Need to know the source of the accountability assertions 1795 Should be distinguished from sender controlled part of a message 1797 7.2.3.1. Brand 1799 If messages are being sent on behalf of a corporate entity, this 1800 should be signaled to both sender and receiver 1802 Sender ? remind them that they are speaking on behalf of another 1803 party 1804 Receiver ? establish who is speaking by the familiar technique. 1806 7.2.4. Accountability 1808 Authentication and consequences 1810 8. Security Considerations 1812 This document comprises the security considerations for the use and 1813 implementation of the Mathematical Mesh. 1815 8.1. Integrity 1817 8.1.1. DNS Spoofing 1819 8.1.2. TLS Downgrade 1821 8.1.3. TLS Service Impersonation 1823 8.1.4. Request Replay Attack 1825 8.1.5. Response Replay Attack 1827 8.2. Confidentiality 1829 8.2.1. Side Channel Attack 1831 8.2.2. Session Key Leakage 1833 9. IANA Considerations 1835 All the IANA considerations for the Mesh documents are specified in 1836 this document 1838 10. Acknowledgements 1840 A list of people who have contributed to the design of the Mesh is 1841 presented in [draft-hallambaker-mesh-architecture]. 1843 11. Normative References 1845 [draft-hallambaker-mesh-architecture] 1846 Hallam-Baker, P., "Mathematical Mesh 3.0 Part I: 1847 Architecture Guide", Work in Progress, Internet-Draft, 1848 draft-hallambaker-mesh-architecture-19, 25 October 2021, 1849 . 1852 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1853 Requirement Levels", BCP 14, RFC 2119, 1854 DOI 10.17487/RFC2119, March 1997, 1855 . 1857 12. Informative References 1859 [draft-hallambaker-mesh-developer] 1860 Hallam-Baker, P., "Mathematical Mesh: Reference 1861 Implementation", Work in Progress, Internet-Draft, draft- 1862 hallambaker-mesh-developer-10, 27 July 2020, 1863 .