<?xml version='1.0'?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'>
<rfc ipr="trust200902" docName="draft-hallambaker-mesh-confirm-00" category="info">
<?rfc toc="yes"?>  
<?rfc symrefs="yes"?>  
<?rfc sortrefs="yes"?>  
<?rfc compact="yes"?>  
<?rfc subcompact="no"?>  
<front>
<title abbrev="Mesh/Confirm">Mesh Confirmation Protocol (Mesh/Confirm)</title>
<author fullname="Phillip Hallam-Baker" initials="P. M." surname="Hallam-Baker">
<organization>Comodo Group Inc.</organization>
<address>
<email>philliph@comodo.com</email>
</address>
</author>
<date day="10" month="May" year="2017"/>
<area>General</area>
<workgroup/>
<keyword>Cryptography</keyword>
<keyword>PKI</keyword>
<keyword>PKIX</keyword>
<abstract>
<t>Mesh Confirmation Protocol (Mesh/Confirm) is a three-party Web Service that supports a transactional second factor confirmation mechanism that provides a superset of the capabilities of traditional second factor authentication schemes. The three parties in the protocol are Enquirer who posts a confirmation request, a Responder who may or may not respond to the request and the Broker where the requests and responses are posted.</t>
</abstract>
</front>
<middle>
<section title="Background" anchor="Section_1">
<t>Authentication of end users is one of the biggest challenges for Internet and Web security today. Despite an abundance of technology that offers authentication mechanisms that are more robust, more secure and easier to use, the default mechanism for user authentication is the use of usernames and passwords.</t>
<t>Unlike traditional schemes, Mesh/Confirm is designed for implementation on a device that has at least the capabilities of a modern 'smartphone'. In particular, a Mesh/Confirm client device must support a display, a means of accepting text input from the user and a connection to the Internet.</t>
<t>While mobile devices offering this degree of functionality were rare in 2007, they have since become ubiquitous. It is thus now a practical proposition for a site requiring second factor authentication to support at least a part of its users using a technology that requires this level of capability. Software applications that emulate traditional second factor authentication protocols on such devices have been available for some time.</t>
<section title="Second Factor Authentication" anchor="Section_1_1">
<t>Second factor authentication mechanisms offer greater security over the use of passwords alone by combining a first factor (typically a password) with a second factor, typically a biometric or proof of possession of a physical token.</t>
<t>Traditional second factor authentication techniques have suffered from the need to distribute physical tokens and the difficulty of ensuring that a biometric authentication is presented to a trustworthy terminal.</t>
<t>The usability of traditional second factor authentication techniques has been poor or worse. Even the simplest scheme in which the user is required to read in a 'one time use' numeric code from the authentication token device and enter it into a password field. While such operations are relatively simple they require the user to engage in a sequence of operations that bears no necessary or natural relationship to the underlying task for which the authentication is required.</t>
<t>Nor does the act of engaging in a traditional second factor scheme offer proof of anything other than that the user was authenticated. Any correspondence between the act of authentication and the purpose for which the authentication was provided must be maintained separately.</t>
</section>
<section title="Confirmation vs. Authentication" anchor="Section_1_2">
<t>A second factor confirmation service addresses the limitations of traditional second factor authentication schemes.</t>
<t>A confirmation service allows the user experience to be precisely matched to the action that the user is attempted. This is simpler and more secure. Instead of being asked to read a random number from one device and enter it into another, the user is asked if they really want to perform the action for which authentication is requested.</t>
<t>A confirmation service offers better accountability for end users than a traditional authentication service. An authentication service only provides an assertion that the user was present. A confirmation service provides an assertion that the user was present and that they confirmed a specific transaction.</t>
<t>For example, Alice has been granted access to a machine storing classified data. If an authentication service is used for access control, the authentication service log will only record the dates and times that Alice accessed the system. to find out if Alice accessed a particular file on a particular day it is necessary to consult and correlate both the authentication log of the system and the activity log for the application.</t>
<t>If instead a confirmation service is used the confirmation log contains an authenticated record of both the authentication events and the transactions for which the authentication was requested.</t>
</section>
<section title="Use Scenarios" anchor="Section_1_3">
<t>A confirmation service complements rather than replaces a traditional authentication scheme. Providing a highly secure and convenient means of authenticating requests that carry a high degree of risk mitigates the risk of using convenient but intrinsically low security techniques for other actions.</t>
</section>
<section title="Use in Financial Services" anchor="Section_1_4">
<t>If an attacker is to profit from breaching an account with a financial service such as a bank or a brokerage they must find a way to move money out of the account. Thus, adding bill payment recipients, initiating wire transfers and trading in low volume 'penny stocks' represent high risk activities.</t>
<t>For example: Bank of Ethel might permit customers to use a simple username and password scheme to gain access to their account for the purpose of checking their balance or paying bills to existing recipients but require use of the second factor confirmation device for a high-risk transaction such as paying a bill.</t>
</section>
<section title="Machine Binding" anchor="Section_1_5">
<t>A second factor confirmation service may be combined with a machine level authentication scheme to permit a transparent form of authentication for low risk transactions.</t>
<t>For example: Alice stores her low risk authentication credentials (e.g. usernames and passwords) using a 'cloud' service. When she wishes to use those credentials an agent on her personal machine fetches credentials from the cloud service as necessary. When Alice wishes to access a site from a different machine she receives a confirmation request on her mobile device to grant access from that machine.</t>
<t>Use of such a mechanism is clearly more satisfactory when suitable cryptographic protocols such as SAML or Kerberos are employed to limit the disclosure and hence possible compromise of the credentials. The specification of such protocols is outside the scope of this document.</t>
</section>
<section title="Tethered Use" anchor="Section_1_6">
<t>Although Mesh/Confirm is designed for use in a three-party scenario, there are situations in which a two party mode may be preferred.</t>
<t>For example: Bob is a roadwarrior who requires access to confidential documents stored on his laptop device from anywhere in the world, including locations where Internet access is not possible. To permit access in such circumstances, Bob's Mesh/Confirm client supports use of a tethered mode in which the mobile device is plugged into his laptop via a USB port.</t>
<t>For example: Carol is a network manager of a large computing facility that uses Mesh/Confirm to authenticate and track all changes to critical resources. Since Mesh/Confirm is itself a network resource a bootstrap consideration arises: How can Carol confirm her network configuration requests using Mesh/Confirm when the network itself is down? Support for a tethered mode in which the Mesh/Confirm device communicates via USB or similar wired protocol allows this use case to be supported.</t>
<t>While availability of a tethered mode is clearly essential if Mesh/Confirm is to be used in certain applications, support for this feature outside the scope of this version of the specification.</t>
</section>
<section title="Co-Browser" anchor="Section_1_7">
<t>While Mesh/Confirm is designed for deployment on a secondary device, deployment on the same device as the one for which confirmation is being requested is also possible and can provide security benefits.</t>
<t>Modern Web browsers are large and complex with many features such as support for mobile code that are incompatible with a high security environment. Separating the confirmation protocol from the Web Browsing protocol permits implementation in a minimal client designed to permit detailed security analysis. Such a client might be embedded in or support means of secure interaction with a trustworthy operating system component.</t>
<t>While this means of deployment does not provide a true second factor confirmation, it is likely to provide a sufficient degree of authentication for many transactions.</t>
</section>
</section>
<section title="Architecture" anchor="Section_2">
<t>Mesh/Confirm is a Web Service that permits a Enquirer to request that a User confirm or reject a specified action. If the user responds, the response is signed with a digital signature under a key that is unique to the user account, the client and the device.</t>
<section title="Parties" anchor="Section_2_1">
<t>Each Mesh/Confirm protocol interaction takes place between a connection pair of the following parties:</t>
<t>Enquirer</t>
<t>A party that initiates a confirmation request.</t>
<t>User</t>
<t>The User is the person being asked to grant or refuse confirmation. A User MAY have multiple accounts with multiple Broker Services.</t>
<t>User Device</t>
<t>A device that the user has bound to their broker account.</t>
<t>Broker</t>
<t>A clearing house that stores and forwards requests from Initiators to Users Device and responses from Users to Initiators. The Broker is only trusted to perform routing filtering and recording of requests and responses. The Broker is not trusted with respect to the responses returned.</t>
<t>The communication between the parties is shown in Figure 1.</t>
<figure>
<artwork>
<![CDATA[+-------------+         +------------+         +-------------+
|  Enquirer   | <-----> |   Broker   | <------ |   Device    |
+-------------+         +------------+         +-------------+
                                                      ^
                                                      |
                                                      V
                                               +-------------+
                                               |     User    |
                                               +-------------+]]></artwork>
</figure>
<t>Figure 1. Mesh/Confirm Parties</t>
</section>
<section title="Accounts" anchor="Section_2_2">
<t>Users are identified by means of an account identifier. The display presentation of an account identifier is the form of an RFC2822 email address identifier without the enclosing angle braces, for example:</t>
<t>alice@example.com</t>
<t>The account identifier is used by the User when registering the use of the confirmation service with a Broker.</t>
</section>
<section title="Open and Closed Services" anchor="Section_2_3">
<t>An Mesh/Confirm service MAY be Open or Closed. An Open service provider provides Mesh/Confirm service to the general public. A Closed service provider only provides service to a specific community.</t>
<t>For example: An Internet Service Provider or DNS Registrar might provide an open Mesh/Confirm service as a part of their standard service offering to customers. An employer might operate a closed Mesh/Confirm service to be used for company business.</t>
<t/>
</section>
<section title="Check service connection " anchor="Section_2_4">
<t>It is often useful to be able to verify that a service is ready and willing to perform transactions before attempting to perform one. Especially so when the transaction requires considerable amounts of data and may require the  use of specific server determined authentication options. </t>
<t>The request message is 'HelloRequest' and has no parameters: </t>
<figure>
<artwork>
<![CDATA[POST /.well-known/confirm/HTTP/1.1
Host: prismproof.org
Content-Length: 23

{
  "HelloRequest": {}}]]></artwork>
</figure>
<t>The response message specifies the protocol version(s) supported, the corresponding encodings and bindings: </t>
<figure>
<artwork>
<![CDATA[HTTP/1.1 200 OK
Date: Thu 11 May 2017 03:12:20
Content-Length: 157

{
  "HelloResponse": {
    "Status": 201,
    "StatusDescription": "Operation completed successfully",
    "Version": {
      "Major": 0,
      "Minor": 1}}}]]></artwork>
</figure>
</section>
<section title="Enquirer posts request. " anchor="Section_2_5">
<t>Alice attempts to log into her computer system as administrator. The site policy  requires that all administrative logins be confirmed via Mesh/Confirm. Alice's confirmation account is alice@example.com. In this exchange, the computer Alice  is trying to access is the Enquirer, the device she uses to respond to the query  (her watch) is the Responder and the Mesh/Confirm service at example.com is the  broker. </t>
<t>The computer acting as Enquirer (example.net) creates a confirmation request as  follows: </t>
<figure>
<artwork>
<![CDATA[<?xml version="1.0" encoding="utf-8" ?>
<srml xmlns="http://hallambaker.com/Schemas/srml.xsd">
  <h1>Grant Administrator</h1>
  <p>Host: example.net</p>
  <button value="Access">Access</button>
</srml>]]></artwork>
</figure>
<t>Note that it is not necessary to specify the reject option since this is  implicit. </t>
<t>The request message is 'EnquireRequest' which contains an object signed by the Enquirer that specifies the account the request is directed to and the  request text.  </t>
<figure>
<artwork>
<![CDATA[POST /.well-known/confirm/HTTP/1.1
Host: prismproof.org
Content-Length: 25

{
  "EnquireRequest": {}}]]></artwork>
</figure>
<t>The request is accepted and a success response returned specifying the transaction ID. </t>
<figure>
<artwork>
<![CDATA[HTTP/1.1 200 OK
Date: Thu 11 May 2017 03:12:20
Content-Length: 105

{
  "EnquireResponse": {
    "Status": 201,
    "StatusDescription": "Operation completed successfully"}}]]></artwork>
</figure>
<t>Note that while the requirement that request messages be authenticated by means of a digital signature is within the scope of Mesh/Recrypt, the specification of the filtering rules is not. </t>
</section>
<section title="Responder fetches pending requests. " anchor="Section_2_6">
<t>At present, the only mechanism for determining if there are pending requests is by polling. Provision of a push notification mechanism is an obvious priority for future improvement of the protocol. </t>
<t>Alice's watch regularly polls the broker to determine if there are pending confirmation requests. </t>
<figure>
<artwork>
<![CDATA[POST /.well-known/confirm/HTTP/1.1
Host: prismproof.org
Content-Length: 25

{
  "PendingRequest": {}}]]></artwork>
</figure>
<t>The response message contains the number of pending requests meeting the selection  criteria and the returned requests. </t>
<figure>
<artwork>
<![CDATA[HTTP/1.1 200 OK
Date: Thu 11 May 2017 03:12:20
Content-Length: 105

{
  "PendingResponse": {
    "Status": 201,
    "StatusDescription": "Operation completed successfully"}}]]></artwork>
</figure>
<t>Each request is signed by the Enquirer that originally generated it. </t>
</section>
<section title="Responder replies to request. " anchor="Section_2_7">
<t>Alice selects the pending access request and grants herself access to the machine she is attempting to log in to. Her watch creates a signed response message  containing the digest of the original request and her response "Accept". </t>
<figure>
<artwork>
<![CDATA[POST /.well-known/confirm/HTTP/1.1
Host: prismproof.org
Content-Length: 25

{
  "RespondRequest": {}}]]></artwork>
</figure>
<t>The response message tells Alice that the transaction completed successfully and the broker has her acceptance message. </t>
<figure>
<artwork>
<![CDATA[HTTP/1.1 200 OK
Date: Thu 11 May 2017 03:12:20
Content-Length: 105

{
  "RespondResponse": {
    "Status": 201,
    "StatusDescription": "Operation completed successfully"}}]]></artwork>
</figure>
<t>Note that in future versions of the protocol it may be desirable to make use of additional affordances of the device such as the ability to perform biometric  capture such as fingerprint or facial recognition. </t>
<t>Another possibility is that the user might be asked to enter a one time use PIN  generated by the Enquirer, thus verifying that the user is indeed responding  to the confirmation request they believe they are responding to. </t>
</section>
<section title="Enquirer fetches result " anchor="Section_2_8">
<t>The enquirer obtains the result of the confirmation request by polling using the  Status transaction. </t>
<figure>
<artwork>
<![CDATA[POST /.well-known/confirm/HTTP/1.1
Host: prismproof.org
Content-Length: 24

{
  "StatusRequest": {}}]]></artwork>
</figure>
<t>Since Alice has responded, the response message contains the signed result: </t>
<figure>
<artwork>
<![CDATA[HTTP/1.1 200 OK
Date: Thu 11 May 2017 03:12:20
Content-Length: 104

{
  "StatusResponse": {
    "Status": 201,
    "StatusDescription": "Operation completed successfully"}}]]></artwork>
</figure>
<t>As with the use of polling on the user side, it is obviously desirable to eliminate the need for polling by introducing a callback registration  mechanism.  </t>
<t/>
</section>
</section>
<section title="Mesh/Confirm Service " anchor="Section_3">
<t>The Mesh/Confirm confirmation service is a two party protocol. An  Enquirer requests a response from the  </t>
<t>SRV Prefix: </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="_Confirm._tcp "> </t>
</list></t>
</list></t>
<t>HTTP Well Known Service Prefix: </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="/.well-known/confirm "> </t>
</list></t>
</list></t>
<t>Every Confirm Service transaction consists of exactly one request followed by exactly one response. </t>
<t>There is no set sequence in which operations are required to be performed. It is not necessary to perform a Hello transaction prior to a CreateGroup, AddMember or any other transaction. </t>
<section title="Request Messages " anchor="Section_3_1">
<section title="Message: ConfirmRequest " anchor="Section_3_1_1">
<t>Base class for all request messages. </t>
<t>Portal: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Name of the Mesh/Recrypt administration Service to which the request  is directed. "> </t>
</list></t>
</list></t>
</section>
</section>
<section title="Response Messages " anchor="Section_3_2">
<section title="Message: ConfirmResponse " anchor="Section_3_2_1">
<t>Base class for all response messages. Contains only the status code and status description fields. </t>
<t>A service MAY return either the response message specified for that transaction or any parent of that message.  Thus the RecryptResponse message MAY be returned in response  to any request. </t>
<t>Status: Integer (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Status return code. The SMTP/HTTP scheme of 2xx = Success, 3xx = incomplete, 4xx = failure is followed. "> </t>
</list></t>
</list></t>
<t>StatusDescription: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Text description of the status return code for debugging  and log file use. "> </t>
</list></t>
</list></t>
</section>
<section title="Successful Response Codes " anchor="Section_3_2_2">
<t>The following response codes are returned when a transaction has completed successfully. </t>
<t>[201] SuccessOK </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Operation completed successfully "> </t>
</list></t>
</list></t>
<t>[201] SuccessCreated </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Operation completed successfully, new data item created "> </t>
</list></t>
</list></t>
<t>[202] SuccessUpdated </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Operation completed successfully, data item was updated "> </t>
</list></t>
</list></t>
</section>
<section title="Warning Response Codes " anchor="Section_3_2_3">
<t>The following response codes are returned when a transaction did not complete because the target service has been redirected. </t>
<t>In the case that a redirect code is returned, the  StatusDescription field contains the URI of the  new service. Note however that the redirect location  indicated in a status response might be incorrect or even malicious and cannot be considered  trustworthy without appropriate authentication. </t>
<t>[303] RedirectPermanent </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Service has been permanently moved "> </t>
</list></t>
</list></t>
<t>[307] RedirectTemporary </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Service has been temporarily moved "> </t>
</list></t>
</list></t>
</section>
<section title="Error Response Codes " anchor="Section_3_2_4">
<t>A response code in the range 400-499 is returned when the service was able to process the transaction but the transaction resulted in an error. </t>
<t>[401] ClientUnauthorized </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Client is not authorized to perform specified request "> </t>
</list></t>
</list></t>
<t>[404] NotFound </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The requested object could not be found. "> </t>
</list></t>
</list></t>
<t>[409] AlreadyExists </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The requested object already exists. "> </t>
</list></t>
</list></t>
</section>
<section title="Failure Response Codes " anchor="Section_3_2_5">
<t>A response code in the range 500-599 is returned when the service was unable to process the transaction but the transaction due to an internal failure. </t>
<t>[500] ServerInternal </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="An internal error occurred at the server "> </t>
</list></t>
</list></t>
<t>[503] ServerOverload </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The server cannot handle the request as it is overloaded "> </t>
</list></t>
</list></t>
</section>
</section>
<section title="Imported Objects " anchor="Section_3_3">
<t>The Recrypt Administration Sercice makes use of JSON objects defined in the JOSE Signatgure and Encryption specifications. </t>
</section>
<section title="Common classes " anchor="Section_3_4">
<t>The following classes are referenced at multiple points in the protocol. </t>
<section title="Structure: Version " anchor="Section_3_4_1">
<t>Describes a protocol version. </t>
<t>Major: Integer (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Major version number of the service protocol. A higher "> </t>
</list></t>
</list></t>
<t>Minor: Integer (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Minor version number of the service protocol. "> </t>
</list></t>
</list></t>
<t>Encodings: Encoding [0..Many] </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Enumerates alternative encodings (e.g. ASN.1, XML, JSON-B) supported by the service. If no encodings are specified, the JSON encoding is assumed. "> </t>
</list></t>
</list></t>
<t>URI: String [0..Many] </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The preferred URI for this service. This MAY be used to effect a redirect in the case that a service moves. "> </t>
</list></t>
</list></t>
</section>
<section title="Structure: Encoding " anchor="Section_3_4_2">
<t>Describes a message content encoding. </t>
<t>ID: String [0..Many] </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The IANA encoding name "> </t>
</list></t>
</list></t>
<t>Dictionary: String [0..Many] </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="For encodings that employ a named dictionary for tag or data compression, the name of the dictionary as defined by that  encoding scheme.  "> </t>
</list></t>
</list></t>
</section>
</section>
<section title="Utility Transactions " anchor="Section_3_5">
</section>
<section title="Transaction: Hello " anchor="Section_3_6">
<t>Request: HelloRequest </t>
<t>Response:HelloResponse </t>
<t>Report service and version information.  </t>
<t>The Hello transaction provides a means of determining which protocol versions, message encodings and transport protocols are supported by the service. </t>
<section title="Message: HelloRequest " anchor="Section_3_6_1">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmRequest </t>
</list></t>
</list></t>
<t>Request service description. </t>
<t>[None] </t>
</section>
<section title="Message: HelloResponse " anchor="Section_3_6_2">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmResponse </t>
</list></t>
</list></t>
<t>Always reports success. Describes the configuration of the service. </t>
<t>Version: Version (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Enumerates the protocol versions supported "> </t>
</list></t>
</list></t>
<t>Alternates: Version [0..Many] </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Enumerates alternate protocol version(s) supported "> </t>
</list></t>
</list></t>
</section>
</section>
<section title="Enquirer Transactions " anchor="Section_3_7">
</section>
<section title="Transaction: Enquire " anchor="Section_3_8">
<t>Request: EnquireRequest </t>
<t>Response:EnquireResponse </t>
<t>Post a confirmation request to the broker. </t>
<section title="Message: EnquireRequest " anchor="Section_3_8_1">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmRequest </t>
</list></t>
</list></t>
<t>Request: JoseWebEncryption (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Signed and optionally encrypted request message. "> </t>
</list></t>
</list></t>
<t>Responder: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The Responder account the request is directed to. "> </t>
</list></t>
</list></t>
<t>Expire: DateTime (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Date and time after which the Enquirer has no interest in the request value. Note that a Broker MAY cancel requests according to its own policy at any time. "> </t>
</list></t>
</list></t>
<t>EnquirerID: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="A unique identifier for the transaction generated by the enquirer. This identifier MAY be used to reject duplicate transactions by a broker or Requestor. "> </t>
</list></t>
</list></t>
</section>
<section title="Message: EnquireResponse " anchor="Section_3_8_2">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmResponse </t>
</list></t>
</list></t>
<t>Reports the success or failure of an Enquire transaction. </t>
<t>BrokerID: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="A unique identifier for the transaction generated by the broker. "> </t>
</list></t>
</list></t>
</section>
</section>
<section title="Transaction: Status " anchor="Section_3_9">
<t>Request: StatusRequest </t>
<t>Response:StatusResponse </t>
<t>Request status on a previously posted request </t>
<section title="Message: StatusRequest " anchor="Section_3_9_1">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmRequest </t>
</list></t>
</list></t>
<t>Reports the status or of an Enquire transaction. </t>
<t>Cancel: Boolean (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="If true, the broker is abandoning the request and it should no longer be returned to the user as an active pending request. This flag would typically be set true on the last polling attempt made  before the Enquirer abandonds the request. It is therefore entirely valid for a broker to return a Response value if the Cancel flag is true. "> </t>
</list></t>
</list></t>
<t>BrokerID: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The unique identifier for the transaction generated by the broker and returned in the corresponding Enquire transaction. "> </t>
</list></t>
</list></t>
</section>
<section title="Message: StatusResponse " anchor="Section_3_9_2">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmResponse </t>
</list></t>
</list></t>
<t>The result of a status request. </t>
<t>RequestStatus: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The status value. Valid values are PENDING, BCANCEL, ECANCEL, REPLY, REFUSED "> </t>
</list></t>
</list></t>
<t>Response: JoseWebEncryption (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Signed and optionally encrypted response message. "> </t>
</list></t>
</list></t>
</section>
</section>
<section title="Responder Transactions " anchor="Section_3_10">
</section>
<section title="Transaction: Pending " anchor="Section_3_11">
<t>Request: PendingRequest </t>
<t>Response:PendingResponse </t>
<t>Request a list of pending transactions meeting the specified selection criteria. </t>
<section title="Message: PendingRequest " anchor="Section_3_11_1">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmRequest </t>
</list></t>
</list></t>
<t>Request a list of pending requests for a specified account. </t>
<t>Responder: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The Responder account the the list of pending requests is  requested for. "> </t>
</list></t>
</list></t>
<t>MaxResponse: Integer (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The maximum number of request entries to return. "> </t>
</list></t>
</list></t>
<t>BeforeId: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Only send request entries posted prior to the specified entry.  "> </t>
</list></t>
</list></t>
<t>AfterId: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Only send request entries posted after the specified entry.  "> </t>
</list></t>
</list></t>
</section>
<section title="Message: PendingResponse " anchor="Section_3_11_2">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmResponse </t>
</list></t>
</list></t>
<t>Contains a list of pending requests. </t>
<t>Entries: RequestEntry (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="List of pending requests. "> </t>
</list></t>
</list></t>
</section>
<section title="Structure: RequestEntry " anchor="Section_3_11_3">
<t>Describes a pending request and associated information. </t>
<t>Request: JoseWebEncryption (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Signed and optionally encrypted request message. "> </t>
</list></t>
</list></t>
<t>Responder: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The Responder account the request is directed to. "> </t>
</list></t>
</list></t>
<t>Expire: DateTime (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Date and time after which the Enquirer has no interest in the request value. Note that a Broker MAY cancel requests according to its own policy at any time. "> </t>
</list></t>
</list></t>
<t>EnquirerID: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="A unique identifier for the transaction generated by the enquirer. This identifier MAY be used to reject duplicate transactions by a broker or Requestor.	 "> </t>
</list></t>
</list></t>
<t>BrokerID: String (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="The unique identifier for the transaction generated by the broker and returned in the corresponding Enquire transaction. "> </t>
</list></t>
</list></t>
</section>
</section>
<section title="Transaction: Respond " anchor="Section_3_12">
<t>Request: RespondRequest </t>
<t>Response:RespondResponse </t>
<t>Respond to a confirmation request. </t>
<section title="Message: RespondRequest " anchor="Section_3_12_1">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmRequest </t>
</list></t>
</list></t>
<t>Respond to a confirmation request. </t>
<t>Response: JoseWebEncryption (Optional) </t>
<t><list style="hanging">
<t><list style="hanging">
<t hangText="Signed and optionally encrypted response message. "> </t>
</list></t>
</list></t>
</section>
<section title="Message: RespondResponse " anchor="Section_3_12_2">
<t><list style="symbols">
<t><list style="symbols">
<t> Inherits: ConfirmResponse </t>
</list></t>
</list></t>
<t>Reports the success or failure of a Respond transaction. </t>
<t>[None] </t>
</section>
</section>
</section>
<section title="Simple Request Markup Language (SRMLv1)" anchor="Section_4">
<t>Confirmation requests are posted in SRML, a deliberately limited subset of HTML. SRML is limited to four elements and one attribute. These are:</t>
<t/>
<t>The top-level element for an SRML request</t>
<t/>
</section>
<section title="Heading Text&lt;/h1&gt;" anchor="Section_5">
<t>Heading</t>
<t/>
<t>Running text</t>
<t/>
<t>Paragraph</t>
<t>User option</t>
<t>Button specifying a value that the user can select.</t>
<t>While SRML is loosely based on the HTML forms markup, there are important differences. The HTML markup model supports multiple document types of which forms are only one and a single document may contain multiple forms with multiple different action values. In an SRML document is a single form and the form action to be performed is impicit in the presentation of the document to the user.</t>
<section title="XML Schema and Content Type Identifier" anchor="Section_5_1">
<t>The MIME Content Type and schema identifier for SRML are</t>
<t>Content-Type</t>
<t>text/xml    </t>
<t>xmlns</t>
<t>http://hallambaker.com/Schemas/srml.xsd</t>
<t>The schema is</t>
<t/>
<figure>
<artwork>
<![CDATA[<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="SRML"
    targetNamespace="http://hallambaker.com/Schemas/srml.xsd"
    elementFormDefault="qualified"
    xmlns="http://hallambaker.com/Schemas/srml.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="srml" type="SrmlType"/>

  <xs:complexType name="SrmlType">
    <xs:sequence>
      <xs:element name="h1" type="xs:string" 
                    minOccurs="1" maxOccurs="1"/>
      <xs:element name="p" type="xs:string" />
      <xs:element name="button" type="ButtonType" 
                    minOccurs="1" maxOccurs="unbounded"/>      
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ButtonType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType> 

</xs:schema>]]></artwork>
</figure>
</section>
<section title="Design considerations and future options" anchor="Section_5_2">
<t>The capabilities of SRML are intentionally limited to the bare minimum. It should be possible to make use of SRML to display options to the user on a smartwatch or other device with a highly constrained display.</t>
<t>The function of the confirmation service is to provide confirmation of an action that was initiated elsewhere. It is therefore inappropriate for this or any future version of SRML to offer extensive data entry or validation capabilities. SRML applications MUST NOT support any form of scripting or active code extensions to SRML content.</t>
<t>It might prove advantageous in the future to extend the input types to include simple form elements such as checkboxes, numeric fields, text choices and possibly free form text.</t>
</section>
</section>
<section title="Security Considerations" anchor="Section_6">
<t>Consider spam control, how do users prevent unwanted requests? (EV accreditatio, filtering at Broker)</t>
<t>People deploying Mesh/Confirm as a means of controlling access to networking infrastructure must consider the bootstrap issue. In particular since Mesh/Confirm requires Internet access the network administrator must ensure that it is possible to manage the network resources necessary to support an SXS service when that service is down.</t>
</section>
<section title="Acknowledgements" anchor="Section_7">
</section>
</middle>
<back>
</back>
</rfc>
