Something that's always plagued crypto currencies is the fact that storing money on your computer can be very unsafe unless you have extensive experience with computer security. This has caused countless users to loose their money and people to call these currencies unsafe. Another consequence is average everyday users are scared away from keeping crypto currencies on their computers or venturing into the new field altogether because they're scared of having their money stolen.



These issues compound further, as you must store your Darkcoin in a paper wallet in order to keep them safe. However, this allow can be dangerous. How much experience is required to create the paper wallet in such a way where you can be sure it's safe and wasn't compromised while it was being created?



As a result, inexperienced users commonly rely on 3rd parties to store their coins, which are also insecure.



The solution: Protocol level 2-Factor Authentication.



I propose a protocol extension whereby you can sign a specific Darkcoin address, requiring the second level of validation. This will propagate across the network and all clients will require the code to process any future transactions from this address. Money can go into these protected addresses freely, however, to move out they will require this code.



This will be built directly into the core client as an optional feature, to be implemented after InstantX has been released.



This means if someone gains access to your machine and your private keys, any transactions they make using those keys will be outright rejected by the network. You'll know your keys have been stolen and be able to safely move your funds and secure your computer.



No more will we hear "I turned by computer on and now all of my Darkcoins are gone" and everyday users will be able to use Darkcoin for their online purchases without having to risk losing their money to thieves.



How will it work?



Upon sending a transaction, the client will look at the current 2FA requirements for the addresses involved. Then it will ask you to validate the transaction by entering the code. The code will be passed to the network via the data field of the transaction. The rest of the network will take the code in the data field and use an API to make sure the code is approved and include the message in the memory pool. New blocks will also be validated by using the API to make sure all transactions are OK.



More research must be done to find a compatible 2FA API. There are many services to choose from and we'll evaluate each to find the best match.