Hi drazvan,
it has become clear now that we have quite different views. I think
it does not make sense to discuss your solution for a commercial and (partly) closed-source product any further in this thread which suggests an open source Android-based solution for a secure offline wallet. Let's use
your thread for this, instead.
I think the two solutions do not compete against each other, because the value propositions are too different, i.e. the targeted users and use cases are too different.
Anyway, some short anwsers between the lines below, and I am trying not to go off-topic.
Good luck for your project,
Michael
Thanks for the clarification. So this seems fine as long as the user is really never tempted to use a website like visualbtc.com with this app but only a pre-downloaded and code-reviewed version saved to his own computer. (However, practically, code review by the normal user is more complicated here than it is in open source projects where you have intrinsic security thanks to peer-reviews amongst developers).
So I have still some practical doubts. Also saving the html/JS code on the own computer etc. is no practical solution for the "normal" user. Such users are not used to saving websites to hard disk and then open local files "file://localhost/.../myfile.html" instead of URLs "
http://provider.com/remotefile.html".
Why does it matter if the user accesses
www.visualbtc.com or a locally saved file? All the service does is post a string to blockchain.info/pushtx .
It matters because if I visit the website, the owner of the site can change the code any time, can even switch from browser-side code to server-side code elements without the user knowing. Also, the site can be hacked by attacking the web host's server or a DNS attack, but I wrote this in last post already.
Are you trying to make sure that we won't modify the server to somehow activate a hidden flag in the wallet that would send back the private key? What I'm saying is that you will put at least a _little_ trust in some component of the system (unless you design it from the ground up, from hardware to OS to application software).
I disagree completely: For an
offline wallet solution I do not want to put
any trust (not even a _little_) into anybody who offers a related web service where my Bitcoin life savings depend on! Also I do not want to need to put trust in the programmer of the related closed-source app! If I want to use a service where I need to put some trust, I can use online wallet solutions or online wallet providers as they exist today, but only for a small fraction of my bitcoin "life savings".
Even with VisualBTC fully open source, there are a lot of components that are not (and definitely not the hardware). As you said, maybe the Chinese tablet manufacturer has already built in backdoors, who knows? Let's all go and design our own hardware for everything to be 100% safe...
Don't leave the context - I just made this point because you had suggested that an "old" phone may contain malware, so I said that also a new tablet may contain malware. Personally, I am quite sure that neither the new 50$ tablet nor the old phone (the old phone even less so!) contains malware that is able to compromise your android app (or my "yet-to-be-written" app) in the sense that it could steal the priv key.
You are generally questioning the benefit of open source for secure and backdoor-free SW. I do not want to lead this basic discussion here, it goes beyond the scope of this thread and has been made elsewhere many times. If you think that closed source is safer, or at least not less safe, than open source projects, any discussion is pointless of course. I am of different opinion. Even if I (or the average grandma) did not read every line of the source code myself, I (or she) can have trust that the code peer-reviews that are carried out in open source projects by the developers make sure sufficiently well that there are no undiscovered backdoors in the software.
You mean the average grandma will go reading open-source peer reviews before she purchases it?
No, I wrote the opposite, read my previous post, Please! Again: I said that the grandma can rely on the process of peer-reviews in open source projects! But again (I said it before!), I do not want to make this BASIC discussion about advantages and disadvantages of open source in gerneral in THIS thread, I consider this off topic, and we will certainly not resolve this by further discussion here!
I wonder who does code reviews for every version of Bitcoin Wallet for Android released (there have been some 4-5 updates in the past 2 months). People will just happily click the Update button and go on with their lives. No offense, but please point me to a recent code review for the Android version of Bitcoin Wallet or one for Electrum. Also, please present evidence (if any) of average end-users demanding to see code reviews before they install / update.
Again: I do not demand this degree of security from solutions for online-wallets were users are supposed to have a small fraction of their bitcoins, like Android wallet. HOWEVER, for OFFline wallet solutions designed to put life savings on it, I demand much higher standards. Specifically, since you were asking for it, Electrum has an active development community comprising many programmers, and I am sufficiently confident that they do not insert malicious "key-stealer" code and mutually review their code. For a new open-source project like the one intended to be initiated in this thread, I expect a similar kind of community development of course.
Also, let's tell the average grandma to demand that her bank releases the Internet Banking software and the JavaCard applets powering her chip-and-pin credit card as open source, to make sure they're not stealing her money. Best of luck with that
.
You are going completely off-topic here - this is a ridiculous troll argument - stay serious, please! We are not talking about traditional banking here, but about bitcoin. If the bank makes a mistake and loses funds due to credit card frauds (which happens all the time), it will fully compensate the grandma for it. To be able to pay out such refunds, banks take considerable credit card fees for example (retailers pay roughly 3-5%). This is completely different in the bitcoin world, and I am sure you know that very well.
So good luck, because then you will have lots of nightmares.
You cannot enforce the HW platform that users install your app on, and you write yourself that it runs on other Android devices, too. You can give recommendations how people should use the app, but if they do not abide by it, it is out of your control. This is exactly a problem of your project, so your nightmares are pre-programmed. Users of your app will use other hardware than the 50$ tablet you are recommending, potentially even install it on their normal "online" phone, whether you like it or no. So you can prepare for your "commercial nightmares" already now!
If you want to avoid your nightmares, you should look at my last post's proposals how to add features to the offline wallet app (applicable to both "your" and "my" app concept). This can efficiently avoid wrong/unsafe usage of the app for the normal user (irrespective of what HW they are using), much better than if you just "recommend" buying a certain type of 50$ tablet from an unknown vendor and have no control were the users will really install your app.
I suppose you did not react on my proposals because this would destroy the business model that users purchase this special 50$ tablet.
Once again,
we do not sell that tablet. You buy it from Amazon UK and it's imported by a company called Storage Options from the UK. There's nothing special about it, other than being a known piece of hardware that we can develop against without having to worry about all the tiny hardware differences and firmware releases and everything. If you want security, you want to minimize the variables. Sure, it works on anything, but then it's your job to secure it. It's your choice - use your old smartphone and keep your fingers crossed or pay $50 (not to us, for Christ's sake) and get the recommended platform.
Wait, you are mixing together many different things here.
Firstly we are talking about the OFFline wallet side here, so no malware can simply "send the private keys away".
Secondly, your cheap "unknown-vendor 50$ tablet" might be just as easily rootable as other Android phones. Maybe it has malware even pre-installed, who knows.
I'm not saying the malware will send the key away. I'm saying it could piggyback on the existing QR communication channel (or replace the app altogether) and tell the user to go a specific site to upload his transaction (or to synchronize).
I see. So this attack scenario works if both sides (the offline wallet app and the corresponding peer (online) side - website or online wallet app/client on another device) co-operate, i.e. are equally malicious. In "my" solution it would mean both device would need to be hacked. In your solution it would mean that the website and the closed-source phone app have malicious code.
Thirdly, your (or my) app could have SW features that recommends a factory-reset before installation, or could even check if the device is rooted and if too many other non-system-apps are installed, and could reject its work until the phone is "clean". So SW features of your app can get around these vulnerabilies that you are listing, if you really think they are relevant.
I thought you said the tablet (or phone) could come with malware pre-installed
. Factory reset only resets to whatever was preinstalled on the device (with all factory-installed malwares
).
See above, you are putting this out of context again, I made this point in the context of saying that not necessarily only old phones may have malware (as you had suggested).
I would rather have an app that makes sure that the average user does not use it in a way it is not intended to be used, by the well-realizable app feature proposals I have given in this and in my previous post. This would work irrespective of a particular phone hardware. And most users, even those without any savings, and irrespective of whether they have much or little technical knowledge, will welcome if they have a choice whether to use a new $50 tablet or a more ecological and even cheaper solution of using their old smartphones.
Ok, next time you go to the hospital and need a CT scan, tell your doctor that you want to have an X-Ray instead on their old X-Ray machine, CT scanners are known to be very power hungry and non-ecological and all. Of course, you might die from radiation overexposure but hey, it's X Rays, it should work "irrespective of the particular hardware" used.
What I'm saying is
if you want to secure your money, you buy a SAFE, you don't reuse your old filing cabinet.
"X-Ray"... Again off-topic trolling here. Please stop that!
As to the SAFE, I am also of a different opinion: I think the safe is less secure, because its tangible contents can be robbed much more easily. However, an AES-256 encrypted private key is military-grade secured and cannot be robbed by anyone, so the safe (with gold or money or plain-text paper wallet in it) is the worse solution - not only to my opinion, but probably to most of those who secure their bitcoin wallets/private keys by strongly encrypting them and saving them at several different places, including the cloud.
I am also absolutely convinced that a today's old Android phone's software does not have a malware installed that is able to manipulate the functioning of a future(!) app (an app that has not yet been written!) and will be able for example to manipulate the QR output of that app in a sense that enables it to steal a private key. If you seriously think otherwise (and only in this case), you should be so consequent as to also consider that the same malware is also installed on our brand-new 50$ tablet.
Personally I am so convinced that such malware does not exist on my old phones, that I would even put my bitcoin life savings at risk for that. I have much less trust however in an app whose programmer and whose source code I do not know, and which sends data to a web site whose creator and whose web hoster I do not know. This is just much less transparent for me, the user.
--------------------
One more thing (I should probably post it to the VisualBTC thread but it answers some of your questions as well): our plan is to augment the VisualBTC wallet with a smartcard-based key generation / signing system. Once we have that in place, all key generation and signing will be done on that smartcard and the smartcard will keep track of all the transactions it has signed.
This is another problem: A cautious user would never trust key generation to a hardware that he cannot look into. Nobody can guarantee that the keys are statistically well generated (one needs quite advanced maths and should also use some physical(!) random number generator for that), or even malicious. Also, the hardware may fail, and then the key is gone, and so are the funds, unless there is a possibility to backup the key. But from your next sentence below I take that it is not planned that the key can be backed up (note:
in my last post already I called this approach "naive or insane" - and already underlined it).
My advice to you: Don't follow this concept - it is deemed to fail, and many others before you have tried to make such bitcoin smartcards, nobody came up with a viable commercial solution.
Then, we will offer a contractual guarantee to reimburse the users for any transactions performed with their private key but not stored in the smartcard log. If we somehow leak the private key and it is used to sign a transaction without going through the smartcard, we will commit to pay them back (they would of course have to send the card back to us to extract the log). So we would effectively insure them against all loss of Bitcoin due to stolen private keys.
"Contractual guarantee"? You can't be serious. Like mybitcoin, bitcoinica, bitmarket.eu and all the others? You must be a Multi-Multi-Billion-Dollar-Company with huge amounts of liquidity to be able to give such a guarantee. Otherwise, such a "guarantee"
is not worth a penny!
Nobody will trust in that! A user can transfer an ARBITRARY amount of bitcoins to this smartcard's address. If the smartcard gets corrupted or fails due to HW reasons, how do you want to guarantee to re-imburse the lost bitcoins? Such a guarantee is simply not possible! Imagine the Winklevoss twins transfer their 100,000 bitcoins to that smartcard, and in the meantime 1 BTC becomes worth 10,000 USD? Will you be able to reimburse the 100,000 BTC or at least the equivalent of 10 Bill USD then?
Anyway - this makes ultimately evident the fundamentally different philosophy between your commercial solution and my open source solution concept. They have really hardly anything in common:
- I am thinking of a simple open-source Android-based offline wallet as alternative to existing offline wallet solutions like Armory or Electrum, i.e. a similar concept with a comparable degree of safety, just running on Android, and using open interfaces for data exchange, with clearly defined useful yet limited features. Purpose is saving big amounts of bitcoins in a very secure way, yet being able to make payments comfortably from time to time, if needed.
- You are talking about a rather sophisticated commercial solution with lots of different features, involving partly proprietary software (requiring trust into the company making this SW) and partly even proprietary hardware. Also, parts of this basket of many different solutions relies on trust into your company's ability to have enough liquidity to pay arbitrary amounts of bitcoins to customers whose bitcoin-smartcards have hardware failures.
Now that this difference is clear, I would no longer like to discuss your commercial solution in this thread.
From here on, this thread should be confined to discussing the open-source Android solution that I would like to initiate.
I will send further replies concerning your solution in your thread, to stay focused and on-topic in this thread.