<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    I would like to propose two things that are closely related.&nbsp; I will
    start making BIPS if there's positive feedback.&nbsp; Sorry it's so long,
    but I felt both should be in the same email...<br>
    <br>
    <br>
    <u><b>(1) Signature Blocks</b>&nbsp; -- A more-robust, versatile,
      message-signing exchange</u><br>
    <br>
    Satoshi client 0.6.0 introduced message signing, but I've been
    fairly unimpressed with the implementation.&nbsp; Strictly speaking, it
    works, but it's really not intended for "regular users."&nbsp; There is
    no indication of what message was signed or what address signed it.&nbsp;
    Key recovery works for the computers processing it, but the user has
    no idea what this chunk of random data is.&nbsp; They don't even know if
    the message they thought they signed is what's in the signature
    (along the lines of the copy&amp;paste virus, the message could be
    switched out without the user noticing).<br>
    <br>
    I have implemented <a
      href="https://bitcointalk.org/index.php?topic=56424.msg776163#msg776163">Signature
      Blocks</a> in Armory (as of v0.55), which is a fully-functional
    expansion on the idea.&nbsp; Along the lines of BIP 10, a signature block
    is a human-readable chunk of data that immediately identifies the
    address and the message that are being signed.&nbsp; It is easily
    copy&amp;pasted via email or text files, and is fairly compact for
    visual identification.&nbsp;&nbsp; Click the link above to see an example
    signature block and an Armory screenshot of the UI (which needs
    improvement, but still usable).&nbsp; The verification process will
    include:<br>
    <br>
    -- Check that the public key (included or recovered) matches the
    address field.&nbsp; <br>
    -- Verify that the signature matches the included message for this
    public key<br>
    -- The message is properly formatted with a standardized character
    set and escape/replacement scheme for things like newlines or
    double-quotes.<br>
    <br>
    gmaxwell already pointed out that key recovery makes the "Public
    Key" field pointless.&nbsp; Okay fine -- I just don't have key recovery
    implemented yet in Armory, and when I do I can ditch that field (or
    simply make it optional).&nbsp; The point is to create a versatile,
    human-readable standardized form, much like the <a
      href="https://en.bitcoin.it/wiki/BIP_0010">BIP 0010
      signature-collection scheme</a>.<br>
    <br>
    <br>
    <u><b>(2) Sign-Message URI scheme</b><b>&nbsp; </b>-- Request signed
      messages from users using URIs</u><br>
    <br>
    I had the idea that for certain services, the first funding address
    could be used to identify the owner of an account, and all account
    maintenance (such as cashouts) be done through signed messages with
    this address.&nbsp; For instance, the user would need both a login
    password <b>and</b> a signed message in order to make a withdrawal
    or purchase:<br>
    <br>
    <tt>&nbsp;&nbsp;&nbsp; ("Please withdraw 12.3 BTC from acct 1828349132 to address
      1Hfr3jk2093f")_signed_by_A</tt><br>
    <br>
    This gives the service the ability to use two separate factors to
    authenticate the request (username&amp;password <b>and</b> access
    to unencrypted wallet).&nbsp; This <i>could</i> work with manual
    signature blocks alone... but it's too many steps for regular
    users.&nbsp; However, I think it's workable if we expand bitcoin URIs to
    include "Signature Requests".<br>
    <br>
    The URI scheme would add a few parameters to the scheme, and would
    have to have further replacement rules to make sure that messages
    are handled properly.&nbsp;&nbsp; The general CONOPs would be (<b>Con</b>cept
    of <b>Op</b>eration<b>s</b>):<br>
    <br>
    &nbsp;&nbsp;&nbsp; -- User navigates to "Withdraw funds" on webpage<br>
    &nbsp;&nbsp;&nbsp; -- Webpage has you fill in the details:&nbsp; from-account,
    to-address, withdrawal amount<br>
    &nbsp;&nbsp;&nbsp; -- Webpage produces a clickable URI link that loads all the
    information into your client, including addr-reqd-for-sig<br>
    &nbsp;&nbsp;&nbsp; -- Client asks for confirmation and passphrase (if necessary)
    then produces a signature (and sig block if necessary)<br>
    &nbsp;&nbsp;&nbsp; -- URI may include reply-to field that tells it where to send
    the siganture when it's ready<br>
    <br>
    So the extra tags that would be needed would probably be:<br>
    <br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "<b>requestSig</b>=True": <br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Flag to identify that this is a signing request URI<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "<b>sigNeeded</b>=1Qjf3392k31h" <br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; The address that needs to sign the message<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "<b>message</b>=Please%20withdraw%2012.3%20BTC%20to%20addr%201Hfr3jk2093f"<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Some encoding of the message that can be parsed the
    same way on all systems<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "<b>replyurl</b>=<a class="moz-txt-link-freetext" href="http://requestor.com/sig_replies.asp">http://requestor.com/sig_replies.asp</a>?"<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; (Optional) After signing, application will submit
    the signature to the replyurl<br>
    <br>
    The reply url could be simply an http URL which will use bitcoin URI
    syntax, with the fields above copied.&nbsp; Therefore, to complete the
    above request, the application handling the request will simply send
    an HTTP request to:<br>
    <br>
    <tt>&nbsp;&nbsp;&nbsp; <a class="moz-txt-link-freetext" href="http://requestor.com/sig_replies.asp">http://requestor.com/sig_replies.asp</a>?<b>sigNeeded</b>=1Qjf3392k31h&amp;<b>message</b>=...&amp;<b>signature</b>=1fb1893ac193...&amp;<b>replySig</b>=True</tt><br>
    <br>
    Any thoughts?&nbsp; (I have no doubts that there are :) )<br>
    <br>
    -Alan<br>
    <br>
    <br>
    <br>
    <br>
    <br>
  </body>
</html>