šŸ’¾ computr wallet - INTERNET IDENTITY SPOOFING (new experimental feature)

computr

TLDR; You can think of computr as an open source, airgap compatible alternative to Plug wallet that trades off convenience for better security and granular control.

What Is It?

computr is a browser extension *wallet interface for the Internet Computer that allows you to manage your signing keys entirely outside of the browser. Instead of storing private keys within the extension itself, computr intercepts each canister call request and displays the dfx command needed to sign it in your terminal. Once you paste the signed response back in, it submits the response on your behalf, making the workflow compatible even with airgapped setups.

Why?

The Internet Computer deserves a better open source wallet. For those of us who have been around, once Plug wallet was acquired and went closed sourced, there was no way to verifiably trust it any more. Not only may you be trusting the keys to your life savings on an extension that you do not know what data is being sent to external servers, but since it’s distributed by a centralized web store, most people who still use Plug are also likely trusting extension auto-updates, and not to mention, Google’s distribution integrity, which I personally don’t think is a good long-term strategy.

So along came Oisy wallet from DFINITY, who we all thought was supposed to be developing the protocol, not products. Regardless, this is my reccomended hot wallet for a good balance between security and practicality. But the issue is that Oisy is much too complicated and cannot in any practical way be self-deployed as it is tied closely to the Oisy domain and DFINITY infrastructure. I also don’t think we should all be centralizing around a single wallet workflow as the end-all solution. What if hypothetically, DFINITY in a whim decides to.. let’s say.. enforce Oisy 2.0 with features no one likes? They would never do that right? There is no precedent for this right? Right? …

The second gripe I have with Oisy is that back when Plug was ā€œsafeā€ to use, the wallets were recoverable by seed phrase, but Oisy does not let you import your identity from seed phrase (as far as I am aware). I get that this partly comes down to personal preference, but I like the BIP39 seed phrase implementation in that it is a cross-chain standard and you can use it with physical steel wallets, plus it comes with creative custody solutions like multi-sig. Of course, this has its tradeoffs (could get lost, stolen etc.), but for what it’s worth, it can’t get bricked (as is all too common with our hardware devices) and it’s also not based on the good faith of Big Tech companies like the auth solutions that Internet Identity now offers (Google, Microsoft..). Furthermore, according to stats, most people store their passkeys on a password provider implemented by a Big Tech company. Is this really the direction we wanted to go?

For this reason, I think when used cautiously, computr has laid the groundwork to be the safest wallet workflow on the IC (albeit there are some dangerous features). I refer to computr as a wallet interface, because the wallet part of the flow is actually being handled by dfx (cli) and computr is just the interface that serves as the bridge to the browser context. But computr doesn’t only represent a paradigm shift in security/privacy, it’s also a very interesting tool for dissecting (poorly architected) IC web apps. The main reason it is usable at all is because it can spoof itself as Plug wallet, making it compatible with most dApps if they already have Plug wallet integrations.

Here’s where things get spicy.. if a dApp is relying solely on the frontend and Plug to resolve critical app logic and fails to verify important details with the IC backend (hopefully no one actually does this), there are going to be some fatal flaws that can be exposed through computr (and in all honesty, could have been exposed in many other ways as well). The development of computr naturally progressed into having features such as signing a transaction as a different user than what the frontend perceives, modifying the args of the canister call requested, fabricating responses to the frontend, and editing the response from a transaction before it gets passed back to the dApp. For the record, trusting the data returned from a wallet provider as infallible was never a correct assumption to make. Hopefully computr will bring more awareness to such novice design flaws and prompt dApp creators to make more secure decisions when it comes to gluing together their frontend and backend.

Post Script

This was a long time in the making, I think I started this project before or around the time of the first release of Oisy, but I’m not entirely sure anymore. I was really only able to finish it due to AI coding agents suddenly becoming ā€œgoodā€ at coding and quickly finishing all the tedious work. I wish I had been able to finish the project back when the IC had a more vibrant user base, but it is what it is. I still consider it an important project for me personally and also for the IC ecosystem.

Screenshots

…Nevermind, looks like I can’t embed them here.

You can find screenshots on the š—€Ģ¶š—‚Ģ¶š—Ģ¶š—Ģ¶š—ŽĢ¶š–»Ģ¶ Codeberg repo below

Help

I won’t even ask for coffee. But..

If you have an X account, I haven’t been active for a long time so if you want to help boost visibility here’s the post

https://x.com/swagcomputer/status/2079998237562355728

If you have a Codeberg account (or decide to create one because you’re fed up with GitHub) please consider star-ing the repo.

Source Code:

https://codeberg.org/bradyinfinity/computr

Download computr:

https://codeberg.org/bradyinfinity/computr/releases

I’ll take a look at it and see if it can work inside BonsaiOS.app

I removed plug from my ecosystem a while ago because of the security risks, lack of trust, and tbh it’s incredibly annoying to build with.

I am currently using OISY for transactions and NFT Mints in my Marketplace and it works. I’ll take a look at yours.

Appreciate it. For users that want to keep their identity in the terminal, it will be helpful.

Keep up the good work, will let you know once I experiment :slight_smile:

Please explain why keys stored by dfx are more secure than those stored by Extension storage.

In theory, if you are forced to use a trusted open source browser (most people don’t), and have an open source browser extension wallet, have a provable solid encryption strategy, and minimal upstream (npm) dependencies, auto-updates turned off, I think I could trust that fairly well. Unfortunately we don’t even have an open source IC browser extension wallet that works at the moment.

But even with all that, you can’t rule out the possibility of a zero day without hardware isolation. In other words, an air-gapped setup. If you’ve been following cyber security, AI is able to assist with finding some seriously complex vulnerabilities like overflows that I can’t say I truly understand on software we have trusted for decades like the Linux kernel. There are some serious funds in crypto so the incentive is there.

So to answer the question, dfx is not inherently more secure (although I doubt any browser wallet will ever have as many tests run on it as dfx does) but it by design allows for your funds to be on an air gapped machine with very little attack surface. Even though computr is still more of a proof of concept, I was able to use it to swap on ICPswap from dfx, and I thought that was pretty cool.

DFINITY used to have guides on air-gapped setups for the ultra paranoid before their wiki got nuked and went full claude. I found the archives anyways:

https://web.archive.org/web/20220927133223/https://wiki.internetcomputer.org/wiki/ICP_custody_with_seed_phrase_and_air-gapped_machine

https://web.archive.org/web/20230324053426/https://wiki.internetcomputer.org/wiki/ICP_staking_with_seed_phrase_and_air-gapped_computer

FYI be sure to have a backup anywhere else .

https://hackaday.com/2026/07/24/codeberg-bans-cryptocurrency-and-llm-generated-code-projects/

Thanks @ZackDS

I actually saw this as a banner on the top of the website right after they had approved my project for CI/CD automated builds (which run on their hardware I suppose).

I’m sure we see ICP more as network technology, but by the way it has been going, I can’t blame someone from the outside if it just looks like another sh*tcoin at this point. Let’s see how long it holds on.

Very good explanation of the many attack vectors on browsers, especially now with AI on the loose attacking any open source they can.

Joseph Hurtado
Building Satoshi Notes on ICP

Brady, bravo for this useful project!

I will check it out, and eventually audit the code.
I will also follow you on X, over there I am https://x.com/josephfounder.

One suggestion, leave Codeberg they are not crypto friendly and have already terminated a friend’s account, he does smart contracts.

I attach an image of Codeberg’s pathetic announcement on top of their website.

As an alternative I suggest Atlassian Bamboo, way better than GitHub for privacy and even reliability.

Joseph Hurtado
Building Satoshi Notes on ICP

Thanks for the kind words Joseph. An audit is welcome.

As per Codeberg, I really hope not to get kicked off since I have the CI/CD pipeline working on it. That said, I think my next alternative would be Disroot’s instance of Forgejo.

Cheers

Have you ever wanted to use your Plug Identity seed phrase identity (that you exported from Plug) in the NNS?

computr wallet extension v0.2.0 ships with an experimental feature to spoof internet identity with your own dfx seed phrase ā€œdelegatedā€ identity. It doesn’t work with all dapps (notably Oisy and the old NNS for reasons that are documented in the repo will not work) but I would say works with most dapps including the new NNS dapp (nns.internetcomputer.org).

Perhpas not everyone is aware, but when you sign in with Internet Identity, you essentially give the dapp the ā€œdelegationā€ to do ANYTHING it wants with your principal, so I would be extra careful whenever you connect via II (including when you are using the actual service and not spoofing).

In computr, you have the option to restrict the canisters which the dapp has access to, but you are not able to get the same granular control you would have when spoofing Plug where you are able to approve every single canister call individually.

Some more cool features to come. Keep eyes on road.


DISCLAIMER: This is still an experimental feature. Dapp auth architecture CAN and WILL change often, so use at your own risk.