Please login or register.

Adding Monero support for Trezor

The idea of adding Monero support for Trezor reached it's funding goal of 500XMR in 2 days! That means this just got real! :)

I don't know exactly how long this will take, since I don't have a Trezor yet and it'll be difficult to estimate all of the potential problems that can arise. What I can promise is that I'll be allocating on average 10h per week (~1h/weekdays; ~5h/weekend) for this project.

I will also be posting updates to this thread about how things are progressing and potential ETA for tasks I can estimate time for. All of the updates will be done as individual posts to this thread and I will link to them from this initial post.

If you think the work I'm doing is awesome and you're satisfied with the progress, please consider donating in the initial funding thread.

Progress

Code

Replies: 53
Reply to: roosmaa
Lloydimiller4 edited 8 years ago Replies: 1 | Weight: -481 | Link [ + ]

I am incredibly excited about this project. Once it is finished you can expect a hefty tip from me for making it easier to secure my Monero :D

Reply to: Lloydimiller4 roosmaa
Kazuki edited 8 years ago Weight: -480 | Link [ + ]

word.

Reply to: roosmaa
Lloydimiller4 edited 8 years ago Replies: 1 | Weight: -479 | Link [ + ]

Do you have an estimate for approximately how long this project will take you? If we are able to raise more Monero as a bounty, would you be willing/able to devote more time to the project?

Reply to: Lloydimiller4 roosmaa
roosmaa edited 8 years ago Weight: -477 | Link [ + ]

No estimates yet, but the timescale will be in months. Wishful thinking: maybe in 2 months time there will be something unstable that people can start experimenting with.

Unless we could raise enough Moneros to compensate for all of my time (near market price), I don't see any way I would be able to promise more time to this project. So I'm afraid we just have to be patient.

roosmaa edited 8 years ago Weight: -464 | Link [ + ]

11th of May - Intimate weekend with crypto

Past weeks I’ve been prototyping things in Go, to see if it would be feasible to implement the PC side wallet application in Go. I had already got serialization and deserialization of various Monero data types working. This weekend I spent porting Moneros crypto functions to Go.

Though the work I’ve done did stop being a prototype and started resembling a real library a long time ago, but now all of the basic things to interact with Monero are there: binary serialization, portable storage binary serialisation and cryptographic functionality.

The code lives on Github and I will be basing future developments on that, instead of trying to refactor simplewallet into something usable for this project.

Next, I’ll (finally) start hacking away at Trezor’s code.

roosmaa edited 8 years ago Replies: 1 | Weight: -438 | Link [ + ]

24th of May - Navigating the Trezor codebase

I have been studying the Trezor code in detail. It has become clear that the right course of action for our project is to throw out most of the Bitcoin related functionality and create a “Monezor”. Basically a completely different firmware specialised for Monero. All of the low-level USB, proto-buf RPC and UI code can be reused.

I have been trying to come up with some sort of a plan on how to approach this. But progress has been slow on that front sadly. Ideally I’d like to include only really basic functionality (ie authorising payments), but there are a lot of “extra” functionality that is implicitly required to be implemented: generating a new wallet, recovering a wallet, etc.

Hopefully by next time I have come up with the concept of what I want the device usage to be like and started reorganising trezor-mcu code for our needs. If you have any suggestions for the name of the Trezor-specialized-for-Monero project, let me know. Otherwise I’ll just go with Monezor.

Reply to: roosmaa
Lloydimiller4 edited 8 years ago Replies: 1 | Weight: -438 | Link [ + ]

Monezor sounds pretty cool to me or maybe Trozero lol, and as always, I'm very grateful for your work on this much needed project. :D

roosmaa edited 8 years ago Replies: 1 | Weight: -422 | Link [ + ]

31st of May - Communicating with Trezor

Last week has been pretty crazy. I managed to launch my other Monero related project (CryptoName) on Tuesday and then accepted a full-time job on Thursday. Time commitment wise there will be no changes for this project, 10h/week should still be doable.

I now have a pretty good idea how I want to approach developing Monezor. The short version of the plan is as follows:

  • Reorganise trezor-mcu project, removing Bitcoin crypto code and changing the protobuf communication API to suite Monezor.
  • Port over Monero crypto to Trezor.
  • Implement actual Monezor features: wallet generation, PIN protection, key image generation, mnemonic seed displaying/restoring.
  • Library for communicating with Monezor (which will also be used by the wallet app later on).

I’ve created a little tool for myself to communicate with Trezor and will use that to verify that Monezor works when I'm doing the firmware changes. This tool will later be refactored into the library that anyone can use.

Reply to: roosmaa
luigi1111 edited 8 years ago Replies: 1 | Weight: -413 | Link [ + ]

"Having access to those key images means it is possible to spend that output."

This isn't true, unless you mean "having access to generate those key images". You need the output private key to create a valid ring signature. A key image is another public key of the output private key using a different base. Unless i'm missing something, I'm not sure why you'd use a hash instead of the actual key image.

Keep up the good work!

Reply to: luigi1111 roosmaa
roosmaa edited 8 years ago Weight: -412 | Link [ + ]

Thanks for the support luigi1111! :)

And it seems you are right - I missed the fact (back in April) that you need to have access to the output-specific private key as well in addition to the key image. No need to hash them.

Reply to: Lloydimiller4 roosmaa
dnaleor edited 8 years ago Weight: -408 | Link [ + ]

Monezor sounds awesome indeed. About "trozero"... Maybe "Trezero" ? Could have the meaning of 'trust zero' (zero trust / trust no one)

Also, you could make a difference between the firmware of the device and software to communicate with the device. (With trezor, some people are confused that their trezor device can speak with other software and not only mytrezor.com) So you could for example call the firmware/device 'Monezor' and call the software/website 'Trezero'

Anyway, do what you want. Name isn't important ;)

Reply to: roosmaa
Lloydimiller4 edited 8 years ago Weight: -409 | Link [ + ]

Congrats to your other projects/full time job. Glad to have you helping us, I know Monezor will be extremely useful for protecting funds with people who have a tough time creating safe offline wallets. Happy to hear you will still have time to keep working on this project. :D

dnaleor edited 8 years ago Replies: 1 | Weight: -394 | Link [ + ]

A small question: Would it be possible to create a seperate bootloader for "monezor" so that it recognises your firmware? This is why I ask: Black Arrow released a Trezor copy (eWallet) and they offer the devices without bootloader if requested by the costumer. I think it would be great to have a signed firmware running on a device.

And about the fact that it's a trezor ripp-off: yeah, that's true, but you are basically rewriting the firmware, so I don't see any harm in using the eWallet for Monezor.

Thoughts?

Reply to: dnaleor
roosmaa edited 8 years ago Weight: -392 | Link [ + ]

I have been thinking of the same thing. Basically when the software is done, I plan on getting in touch with Trezor to see if they would be interested in selling a version of their device with software signed by me. Though this Black Arrow product looks nice as well! :)

roosmaa edited 8 years ago Replies: 2 | Weight: -391 | Link [ + ]

16th of June - Under the Weather

Just wanted to let everyone know that I’m still here. But for past two weeks I have made almost zero progress. :( I’ve managed to catch something and whenever I’m home from work, resting has been getting a higher priority than coding.

I seriously hope this thing will blow over soon and I can start showing progress again.