Skip to content
Snippets Groups Projects

Monero Signer Resurrection: Reviving and Enhancing the Monero Signing Project

Merged Thorsten Kaiser requested to merge DiosDelRayo/ccs-proposals:MoneroSignerResurrection into master

Monero Signer Resurrection: Reviving and Enhancing the Monero Signing Project

Proposal

This project has been stagnant since December 28th, 2023. In taking over, I have updated the original proposal to include essential features for the current Monero ecosystem, such as:

Adding UR (Unified Resource) support Integrating with polyseed Interfacing with the Monero GUI I have already made progress on some of these components, visible in my GitHub repositories, listed at the end of the proposal.

I propose to take over and finish the Monero Signer project, which was funded but never really started. After learning about Monero Signer and researching the existing work, I found it to be a stale project that was never truly initiated. I aim to complete the project by delivering what was originally promised, with some modifications to make it more useful and avoid wasting time on potentially unnecessary features.

I will complete all the work myself, as I prefer to move quickly, keep things streamlined, and discard unnecessary elements. Security and usability are my top priorities, followed by features and fancy extras. This approach leads to more secure and maintainable code, better user experience, and reduced documentation needs.

Features

Monero Signer

  • Monero seed generation by dice rolls (without password)
  • Monero seed generation camera (without password)
  • Monero seed generation by picking 24 words (without password)
  • Polyseed generation by dice rolls
  • Polyseed generation by camera
  • Full Polyseed support
  • Wallet import with seed words (Monero/Polyseed)
  • Wallet import with QR code
  • Wallet export via Seed
  • Wallet export via QR code
  • View key only wallet export
  • Receive via QR code unsigned transactions
  • Sign transaction
  • Send via QR code signed transaction

Reasoning why this is proposal is without password encryption for monero seeds:

On using monero-python there is no password protection implemented and after investigating a little bit,
the reason behind is probably, that the encryption/decryption is not really mad in a "standard" way.
So to be compatible with Monero-CLI and Monero-GUI the encryption must be implemented in CryptoNight and
another propiatary way to add and substract the mask of the CryptoNight password hash.
This will be a rabbit hole I can estimate.

Why not another encryption instead? I dislike to have various standards until nobody knows anymore what and where to use.
A temporary password encryption would in my opinion also only make the things worse on reaching compatibility with the
original implementation. Because now, what to do, support two different standards? Remove the way, people protected the
password of there seeds before?

If there is interest, and somehow funding for it I will implement it later in the monero-python fork (the original was archived) for MoneroSigner. But until then password encryption for seed will only supported for Polyseed.

Monerosigner companion application (Desktop):

  • Prepare unsigned transaction
  • Send unsigned transaction via QR code
  • Receive unsigned transaction via QR code
  • Publish signed transaction

Monero-GUI integration (Optional)

  • Send unsigned transaction via QR code (hidden but accessible)
  • Receive signed transaction via QR code (hidden but accessible)
  • Check transaction and publish to network
  • Process flow in Send for view key only wallet, to make the workflow natural as possible

Documentation:

  • Short and simple step-by-step guide
  • README on how to use the automatic build process, including git clone, make, make install, and troubleshooting

Tools and Scripts:

  • Build image for target device
  • Build emulator

I want to express that I will try to minimize the need for documentation by making the process easier to build and use. Nobody wants to read a book to get something done.

PortableMoneroQR: dropped in favor of UR's

  • Well-defined data protocol
  • Targeting low-end cameras and screens
  • Targeting high speed
  • Application agnostic
  • Library Python
  • Library Java/Kotlin

There is no need for that, I was not aware of Blockchain Commons’ Uniform Resources (URs), but that is the way to go. Sending and receiving data will be implemented using URs.

Milestones and Timeline

Monero Signer basics on emulator (5.38 XMR): Done

  • Emulator easy start
  • implement Polyseed in (pure) Python
  • Monero seed generation by camera
  • Monero seed generation on dice rolls
  • Polyseed generation by camera
  • Polyseed generation by dice rolls
  • Wallet export Seed~~/hex~~/QR code
  • Build script to generate executable (For macOS only Docker provided and I have no way to verify)

Monero Signer working with companion Application (5 XMR) (25 days from now)

  • Monero signer companion Application finished
  • All missing Monero signer functionality
  • PortableMoneroQR stable
  • UR's implemented

Cleanup and production ready (35 XMR) (45 days from now)

  • Tools
  • Scripts
  • Documentation final version
  • Final cleanup Monero Signer
  • Final cleanup companion Application
  • Final cleanup PortableMoneroQR

Monero-GUI integration (10 XMR) (60 days from now from, until PR)

  • Fork
  • Modify
  • PR

The given timeline reflects the upper bounds, but I target myself:

  • Milestone 1: 7 days from now, June 1, 2024
  • Milestone 2: 14 days from now, June 8, 2024
  • Milestone 3: 30 days from now, June 24, 2024
  • Milestone 4: 45 days from now, July 9, 2024

I kindly request that the payouts be made promptly upon completion of each milestone to allow me to concentrate fully on delivering Monero Signer successfully.

An expiration date for the proposal is set for 70 days from now, August 3, 2024.

  • Milestone 4: 45 days from now, July 9, 2024

I kindly request that the payouts be made promptly upon completion of each milestone to allow me to concentrate fully on delivering Monero Signer successfully.

An expiration date for the proposal is set for 70 days from now, August 3, 2024.# Monero Signer Resurrection: Reviving and Enhancing the Monero Signing Project

Progress can be watched at: MoneroSigner Emulator polyseed python monero python Todo, where is no work at the moment, but tracked about password encryption

(will add with time other repositories, as soon there is code to see)

Edited by Thorsten Kaiser

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • added 1 commit

    • d789cae2 - Update MoneroSignerResurrection.md, typo after front matter and values in XMR

    Compare with previous version

  • Edited by r4v3r23
  • added 1 commit

    • 9bc4fdfd - Update MoneroSignerResurrection.md: XMR values in the text.

    Compare with previous version

  • added 1 commit

    • d5d3fc6f - Update MoneroSignerResurrection.md, Dropped PortableMoneroQr in favor of UR's...

    Compare with previous version

  • Thorsten Kaiser changed the description

    changed the description

    • Given that the old proposal has already been funded and there's still nothing concrete on the table, given the repeated disappearances of the owner of the old CCS, it's now clear that we can't count on him even if he does reappear, could we perhaps transfer the donations from the old CCS to this one?

      Maybe I'm wrong but I don't see any contribution from you to the Monero project in the past, could you maybe start some of the work to prove to us that you are capable and have the skills to run the project? I'm sure it would give the community more confidence.

      PS: I apologize in advance for any syntax errors, as English is not my mother tongue.

    • You are right, I have done until now almost always only work in the shadows and the dark. I made a bountyMonero Bounties site, parse donation address as link where I fixed blackfriday to figure out it is not used anymore (for the Bounties purpose), then I fixed it in Fider and updated the monerobot to fix it easy, but my delivery was not accepted because I didn't make PR's (and how I have a hard time with people, it's normal not my way of operating, I simply fix or create, but I don't ask anybody to do me favors (PR) or interact much with people - I'm better on the tech side, but the source is still there). I started also with the Desktop service/GUI for running a Monero node on boot/in the background and almost finished, but because of a lack of confidence and not being able to make unpaid work at the moment I stopped working on it, maybe I will consider to finish it and push it to github. Actually I'm working on it since 25th of May on MoneroSigner and I pushed the (not production ready, but working) Polyseed Python implementation. I would push the rest also, but I'm afraid that this will have a negative impact on the approval of the CCS because the work is then already done and no need to pay anymore for it. As long this concern is not resolved yet, I make commits only on my local machine and as soon it will be approved I will push it to the repos MoneroSigner, MoneroSignerEmulator, and the other related to it. My plan is to work through at least the first milestone is finished, and then see if until there is some reaction what gives me the confidence to continue. I hope I could give a bit more confidence in me, on approval I will push my commits in real time, so it will be possible to observe the progress. Thank you for your time! :smile:

    • PS: With the first milestone I plan to be able to compile executables for desktop (linux/win32/macOS(?)) of the emulator daily to be able to follow the progress without the actual hardware. Will probably work on that in the afternoon, so if I succeed tonight I could upload this executables to easy have a peak preview if this would be helpful.

    • Thank you for your reply, I am very grateful for your CCS proposal, a project like seedsigner for monero is a real missing piece of the puzzle.

      If you prove your reliability, I'm sure the community will support your work over the long term.

      Also, as a seedsigner enthusiast, I've had a few conversations about some of their technical choices, and if I can make a suggestion, for example, seedsigner does not have a companion app to minimize dependencies and risks, you may want to adapt directly to FatherWallet which already has the functionality to accommodate something like monerosigner.

    • Hey @XmrStreet thank you for your comment! :smile:

      About the companion application, it is there because of two reasons, my proposal was from the beginning to take over the approved, founded but never delivered MoneroSigner proposal, with the idea to take over to the same conditions with the same to deliver as in the proposal, and the second reason is that while you develop some code which transfers data, you want to have during development also a reference implementation you completely control to sometimes test further the functionality and what happens when the other side is broke.

      So I would anyway write something to test, well not production ready, but at least some effort what would not be used otherwise. I don't think the companion app should be used over another wallet (I would prefer Monero-GUI (the wallet I use still - have not really looked around). But as what I got on information until today it should work also with Feather Wallet and I think also with Monerujo or Cake Wallet, not sure, but I will test it on the way.

      And there is a third reason for the companion application, I don't like to depend on external dependencies, let's say when I make finally the PR to integrate functionality into Monero-GUI and it will get never merged, I can not force them. I have a hard time to cope with people, I'm autistic, so issues with people are very energy draining for me, for that I mostly avoid it. I prefer to solve all issues by myself before I once ask to fix a issue upstream.

      I'm more then willing to help to integrate when there is interest from the counter part, but I don't fore myself up on another project neither do I jump through loops somebody puts up - there are the lines for me. However, how I said, if somebody is willing to step up for handle communication stuff I do not reject per se, but I'm not willing to drain my battery with people stuff (what drains my battery like 10x then doing actual work) if I'm able to solve it in a way I can control.

      Once again, I don't want to push people away, I'm mostly a friendly person and like to help out, but I have seen in a lot of communities and projects that a lot of people on some ego trip or want to push there agenda. I'm a voluntaryist and I don't expect anybody to do something for me except I paid for it, I don't like to bother somebody and finally dislike also to be bothered. And I'm certainly nobody bending over. :laughing:

      Hope this explains the concern. Warning: I'm arkward :laughing:

      Btw. I pushed the MoneroSigner Emulator some minutes/hours ago and will push depending how the next hours go the first commit of MoneroSigner (really hope that this is not contradictory to the CCS proposal :confused:

    • Thank you for your explanations.

      I think currently only father and nero have the ability to run something like monerosigner, monerujo has been working for a few years to integrate this functionality now, and I think I've heard that cake wallet could potentially add this type of functionality in the future but doesn't have it yet.

      I hope that the CCS will merge and that we will be able to support you in this adventure.

    • @XmrStreet Thank you for the info, yeah Nero, I think was it, what if I understood it right, is a two part Android app and @r4v3r23 told me I could use to test the functionality of the UR and signing, what I will do (apart of the companion application) and the integration in Monero-GUI.

      Thank you for the support!

    • Please register or sign in to reply
  • added 1 commit

    • 49f80e31 - Update MoneroSignerResurrection.md

    Compare with previous version

  • Thorsten Kaiser changed the description

    changed the description

  • added 1 commit

    • 8f30132d - Update MoneroSignerResurrection.md: Logical corrections, progress,...

    Compare with previous version

  • Thorsten Kaiser changed the description

    changed the description

  • plowsoff
  • added 1 commit

    • 5e351431 - Update MoneroSignerResurrection.md, intro/proposal

    Compare with previous version

  • Thorsten Kaiser changed the description

    changed the description

  • added 1 commit

    • 6cfd50ec - Update MoneroSignerResurrection.md: fr -> wip, see comment @plowsof

    Compare with previous version

  • plowsoff mentioned in merge request !440 (merged)

    mentioned in merge request !440 (merged)

  • added 1 commit

    • eeba026e - Update MoneroSignerResurrection.md

    Compare with previous version

  • Thorsten Kaiser marked the checklist item Polyseed generation by dice rolls as completed

    marked the checklist item Polyseed generation by dice rolls as completed

  • Thorsten Kaiser marked the checklist item Polyseed generation by camera as completed

    marked the checklist item Polyseed generation by camera as completed

  • Thorsten Kaiser marked the checklist item Polyseed generation by dice rolls as completed

    marked the checklist item Polyseed generation by dice rolls as completed

  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Please register or sign in to reply
    Loading