You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.8 KiB

HIP304 - z_signmessage + z_verifymessage

  HIP: 304
  Title: Signing and verifying messages from Sapling addresses
  Author: Duke Leto
  Category: Standards
  Created: 2020-02-02
  License: GPLv3

Terminology

The key words "MUST", "MUST NOT", and "MAY" in this document are to be interpreted as described in RFC 2119. [#RFC2119]

Abstract

This is an xxx HIP describing signed Sapling messages.

Motivation

TLDR: Extend the signmessage and verifymessage RPCs to Sapling shielded addresses. Many people, including the author, have created Github issues asking for the ability to sign messages with zaddrs. Originally, it was not possible with Sprout addresses but now Sapling zaddrs have the internal machinery to support this use case.

Specification

This document specifies two new RPCs

z_signmessage
z_verifymessage

which are direct shielded counterparts to the original Bitcoin RPCs:

signmessage
verifymessage

This specification is directly influenced by various Zcash Github issues and ZIP304 such as https://github.com/zcash/zcash/issues/3159 and https://github.com/zcash/zcash/issues/1770 and the algorithm designed by Daira and other Zcash developers. We simply took the publicly defined algorithm and decided to actually implement it and decide any implementation details that would be needed along the way.

Internal Design

One option would be to write a custom zk-SNARK "circuit" to support signing via a zaddr. This would be a large amount of work and was dismissed, reasonably, as not viable by Zcash developers.

References

.. [#RFC2119] Key words for use in RFCs to Indicate Requirement Levels <https://tools.ietf.org/html/rfc2119>_ .. [#BIP32] Hierarchical Deterministic Wallets <https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki>_