[Podcast #6] Rute on Proof of Residency
![[Podcast #6] Rute on Proof of Residency](/content/images/size/w2000/2025/03/Youtube-episode-Nitya-4-.jpg)
On the Hylé podcast, we talk about cool applications that leverage cryptography in general and zero-knowledge technology in particular, with a new guest every episode.
Our guest for this first episode, Rute, is a software engineer and a Hylé grantee who built proof of residency, a project that leverages government-signed utility bills to create a zero-knowledge proof of residency that can be settled on Hylé.
In this episode, we discuss proof of residency, how zero-knowledge might allow us to believe in governments, and why signed data is so valuable!
If you prefer the written format, you can read the highlights below.
About proof of residency
Many entities ask for utility bills or other kinds of proof of residency to access services. And that has a bunch of issues: you might live with someone else, or you don't know where these documents are, or you don't want to share the amount of your electricity bill with a company you don’t know.
The experience is poor, and Proof of Residency fixes it. Proof of Residency is a web application that allows you to upload a utility bill.
Currently, it only works for Portuguese utility bills because it checks for an ATCUD code, the standard used by the Portuguese government to sign utility bills. It also checks if you have a valid address in that PDF and then generates proof that you live in this certain location.
I’m saying « a certain location » without being more specific because the idea is that you can also scope this to prove that you live in a country, a city, or even a specific address. It currently only works for Portuguese bills but should work with any bill with the same logic.
It's worth it to provide more privacy during this process. Even for KYC purposes, they usually ask for your exact address, and there are smaller use cases like hyper-local chat groups. But why do they need to know how much you spend on electricity?
The sky's the limit and we can imagine anything with this stuff!
Learn more about how Rute built Proof of Residency:

A few struggle
What I struggled the most was actually the beginning.
Most of the time, when you implement something with ZK, you imagine a lot of great things to do, but the technology is still not very mature.
So, you have a lot of challenges implementing what you imagined before.
The beginning was the hardest part of the project for me.
I was planning to use zkEmail. zkEmail is a great technology since you can prove anything with your email, and you spend your life looking at emails and receiving emails from everywhere. But for utility bills, you actually needed to parse PDFs, and this was not implemented on zkEmail at the time.
Since I didn't have too much time to explore that challenge, I decided that PDF parsing was the most important part of the proof of concept. So, I decided to implement PDF parsing in a zkVM − I didn't know if it was even possible. But in the end, with SP1, it was easy: I just had to find a PDF parsing library for Rust that was compatible with the zkVM.
SP1 works well on a server, but it doesn't work well on the browser. So there was also that challenge, and for that, what I did was spinning up an ephemeral server only for that user. And as soon as the proof was generated, the server was killed. It's not the ideal process, of course, the best would be to prove everything client-side, but I think it’s already pretty good for a proof of concept!
Expanding Proof of Residency
I want to see people improve the quality of the core library's checking of the PDF. For now, I only support simple cases like checking the address and checking if there is an ATCUD code. You can also check if the ATCUD code is actually valid by connecting to the government API. But for that, you need to ask for a key, and that was too much for a simple proof of concept.
I'm excited about this project because the core logic can be easily changed. You can be as granular as you need with the proof of residency: country, city, street, or whatever. It’s the same logic and the same document. Because everything is built in a modular way, you can still spin up an ephemeral server, and if you want to expand to other countries, you can reuse the library and add more logic to it.
I would also love to check which countries could not benefit from this model. Countries that don't have signed utility bills may need another model.
It would also be cool to use something like Airbnb or Booking to prove that you're outside of your country. Sometimes, you need to prove that you’re away. I think it would be interesting to add proof of residency. You can ask Airbnb for documents for visa purposes, but it could be even more generic: it shouldn’t depend on the service provider to actually give you that.
The future of signed data
Use existing signed data more
I think most of the most important stuff is already being implemented, like ID cards, passports, or… documents like PDF documents. I didn't know about this data when I found it, and I thought, «Okay, this is quite clever.»
With this, you can already do a lot of stuff around your identity.
Sign more data for democracy
The greatest case would be electronic voting, which still has some drawbacks.
A huge use case would be to prove more that governments are compliant and that they work on what they say they’re working on. It would be good to sign and start building applications around that.
So, it would be good to promote democracy and ensure that everyone can participate and that people are accountable to their electorate.
With blockchain and ZK, we can recover faith in governance.
Read more about ZK for democracy with Kitty from Rarimo :

zkEmail and easily onboarding people to Web3
Rute has recently joined the zkEmail team.
I think zkEmail is a great project because it opens many doors for different use cases and provides a better user experience, even for people who don't really know what ZK and blockchain are.
Everyone knows email. So I think it's much easier to say, «Oh, you can use your email in this way. You can use your email to prove where you live and you don't need to look for the utility bill. We can query your inbox. » Email wallets also make it much simpler for people to adopt blockchain without actually needing to set up a Metamask wallet, for example.
That's the more general way that I think zkEmail helps a lot, especially when onboarding people who are not aware of the technical aspects of zero knowledge.
We tell people they need to save their seed phrase if they don’t want to lose the money. This is what makes a lot of people afraid of doing this. They want someone to keep their things safe. A lot of my friends think that their money in the bank is safer because someone is taking care of it. But in the end, is it really safe? It builds like a false sense of trust, instead of that scary knowledge that «I'm the owner of this, but if I lose the access, I'm screwed.»
And of course, because emails are signed, you can prove a lot of stuff from the headers of your email and don't need to expose all of your data. That's pretty cool.
Ending words
To whoever cares about the Proof of Residency project, please take the project and expand it. There are a lot of great use cases for these. From my side, I'll also work on it when I have time, but I would love to see more people help and give ideas.