Wallets - bitcoin.org
https://spectrocoin.com/en/
Vi BTC được chia thành hai loại cơ bản:
- Client-side Wallets là việc dùng phần mềm để tạo ví trên thiết bị của bạn như PC, Smarrtphone...
Lợi thế của một chiếc ví là chìa khóa Bitcoin của bạn hoàn toàn của riêng bạn. Không có trung gian cần thiết để giúp bạn chuyển tiền.
Những bất lợi của chiếc ví này là sự an toàn hoàn toàn của riêng bạn. Trong thực tế bạn là bảo vệ của ngân hàng của riêng bạn. Như vậy bạn cần phải: ngăn chặn phần mềm độc hại và vi rút từ ăn cắp chìa khóa của bạn duy trì và cập nhật các bản sao lưu thích hợp của các phím của bạn thực thi bảo mật vật lý của máy tính (s) có chứa các phím (ví dụ như bị khóa với một đĩa cứng được mã hóa). Truy cập vào Bitcoins của bạn từ nhiều máy tính có thể được khó khăn, vì nó đòi hỏi bạn phải chuyển các phím một cách an toàn giữa nhiều máy tính. Hơn nữa, bởi vì hầu hết người dùng đặc biệt cẩn thận với mật khẩu của mình cho tiền mặt Bitcoin họ, quên hoặc mất mật khẩu một cách bất thường 'mạnh mẽ' trở thành một mối đe dọa thực sự của sự mất mát.
- Web Wallets là ví được lưu trữ tại website của nhà cung cấp dịch vụ.
Ví loại này có lợi thế là bạn có thể truy cập nó thông qua trang web chủ từ bất cứ nơi nào. Các trang web lưu trữ ví của bạn cần phải là một bên tin cậy, vì họ thường yêu cầu truy cập trực tiếp đến các phím của bạn, hoặc họ có thể nắm giữ chìa khóa của bạn trong khi bạn không có gì cả.
Nhưng nhược điểm là hiển nhiên. Một trang web tổ chức nhiều khoá cho hàng triệu người dùng là một mục tiêu rất rõ ràng cho những kẻ tấn công. Nếu trang web bị hack, bạn sẽ mất Bitcoin của bạn. Tương tự như vậy, nếu trang web bị đình chỉ do không đáp ứng được quy định, bạn sẽ mất Bitcoin của bạn. Do vậy, bạn cần chọn những website uy tín để lưu trữ tiền của bạn. Những ví được khuyên dùng.
- Để hóa giải nhược điểm của hai loại ví trên, một công nghệ mới được phát triển, đó là: Công nghệ Xác thực hai yếu tố (Two-factor authentication - 2FA). Công nghệ này dùng hai yếu tố để xác nhận chủ nhân của một tài khoản: yếu tố thứ nhất là username và password, yếu tố thứ hai là mã xác thực 6 chữ số do Google Authenticator (hoặc Authy) cung cấp tới số điện thoại (thường là smartphone) hay email do chủ tài khoản đăng ký. Do vậy, nếu có bị ăn cắp username và password, kẻ cắp cũng không thể vào được tài khoản của bạn.
Đại diện cho hình thức ví này là https://airbitz.co, tuy nhiên, doanh nghiệp này còn cải tiến công nghệ ở mức thuận tiện hơn cho người dùng được gọi là: One Touch 2FA (nghĩa là 2FA một chạm).
Chúng tôi đã thực sự đơn giản này bởi về cơ bản kết hợp các chức năng của Google Authenticator vào Airbitz. Khi bật 2FA, ứng dụng Airbitz sẽ chia sẻ một mã thông báo ngẫu nhiên với các máy chủ Airbitz. Thay vì sao chép và dán mã PIN 6 chữ số mỗi khi bạn muốn đăng nhập, Airbitz sẽ chỉ đơn giản là tạo ra một mật khẩu sử dụng một lần từ các mã thông báo được chia sẻ, và gửi nó với mỗi tương tác máy chủ. Điều này có hiệu quả quan hệ tài khoản của bạn với thiết bị hiện tại của bạn.
Nếu người sử dụng bị mất thiết bị của họ, họ vẫn có thể cố gắng đăng nhập bằng cách sử dụng một thiết bị khác và yêu cầu đặt lại 2FA. Các thiết lập lại sẽ yêu cầu 7 ngày, trong thời gian đó, một thông báo sẽ được gửi đến thiết bị của người sử dụng để ngăn chặn một thiết lập lại gian lận.
--------
--> Pay To Script Hash (P2SH) là một công nghệ ví an toàn mới do bitgo.com (một trong các website mà bitfurycap.com đá đầu tư) cung cấp. Nó được giới thiệu như là một phần của BIP16 (Bitcoin Improvement Proposal 16 - Đề xuất Cải thiện Bitcoin 16) vào đầu năm 2012. Nó được bảo đảm bằng các thuật toán phức tạp hơn so với các địa chỉ Bitcoin truyền thống.
Không giống như các địa chỉ Bitcoin truyền thống, được đảm bảo với một chìa khóa duy nhất ECDSA, nó được bảo đảm bằng ba phím ECDSA. Nộp tiền vào các địa chỉ của nó cũng giống như gửi tiền vào một địa chỉ Bitcoin chuẩn. Tuy nhiên, rút tiền từ các địa chỉ của nó cần ít nhất 2 trong 3 phím ký.
Sử dụng một địa chỉ 2-3 cung cấp một số lợi thế:
+ Bạn có thể cung cấp cho một bên tin cậy một chìa khóa duy nhất chính thức về các giao dịch mà không cho phép họ thực hiện giao dịch trên quỹ của bạn nếu không có sự đồng thuận của bạn.
+ Bạn có thể mất một chìa khóa nhưng không mất quyền truy cập vào các quỹ của bạn.
+ Bạn có thể chia sẻ một khóa với nhiều bên tin cậy và mỗi người trong họ không thể tiếp cận nguồn vốn của bạn, nhưng có thể tiếp cận nếu họ làm việc cùng nhau.
In this section, we propose an implementation of a web wallet using the 2-of-3 address. It provides the following features
Safety
The service cannot initiate a transaction by itself
Stealing the user’s online password is not sufficient to steal funds
Stealing the user’s online private key is not sufficient to steal funds
Malware on the user’s computer cannot steal funds
Convenience
The user can access his funds from any computer
The user does not need to remember his private key and can access funds with a password and two-factor authentication.
Recovery
The user can recover funds even if the service is shutdown due to regulatory reasons
The user can lose his website password and not lose his funds
The user can lose his private key and not lose his funds
Privacy
Privacy must be maintained for the user’s funds
This implementation will rely upon:
A service (e.g. a website) with all communications over TLS.
Coordination between a browser and that service
Use of 2-factor authentication
Use of strong passwords
The mechanics of creating the 2-of-3 address is very important. In this proposal, it will be done both on the user’s computer and on the website. Critically, the user will generate 2 keys while the server will generate one. Address creation time is the only time when two or more of the keys are on the same computer concurrently.
The process starts with the user’s browser (or client-side key creator) generating 2 ECDSA keys:
The user’s key-pair
A backup key-pair
The backup private key-pair will be printed out and stored completely offline. It is only for fund recovery. The backup public key will be stored with the service. The service never sees the backup private key and cannot use it to unlock funds.
The user’s private key will be encrypted on the user’s machine with a strong password of the user’s choice. The encrypted private key and the public key will be stored in the service. Because the private key is encrypted with a password the service has never seen, the service cannot use this key to unlock funds.
The server will then create a 3rd key. The private key will be encrypted with a strong password known to the service and stored on the server. The server will use the 2 public keys from the user as well as the service key to create the 2-of-3 address. The server will notify the user of the server’s public key, as this will be critical for recovering funds from the address if the service ever goes down. The user will print out a copy of all 3 public keys and store them securely.
With this system, we now have an address where the user has 1 key, the service has 1 key, and the 3rd key has been saved for later use.
To withdraw funds from the 2-of-3 address, the following steps will need to take place.
First, the user will login or authenticate to the service, and inform the service that she will make a withdrawal. The service will require the user to further authenticate with a 2-factor authentication challenge to a smartphone or mobile device. Note: 2-factor authentication is required because even strong passwords can be stolen with a keylogger.
Upon validation of the 2-factor authentication, the service sends the user’s encrypted private key to the user’s browser. The browser will prompt the user for the user’s password to unlock the encrypted private key.
Executing within the user’s browser, the application creates the bitcoin transaction for the withdrawal, unlocks the encrypted private key, and signs the transaction with a single signature.
Finally, the signed transaction is then sent to the service. The service validates the transaction, and if suitable, applies the 2nd signature using its private key. Note that the service will likely implement transaction limits. If, for some reason, the user's account was compromised, the service can refuse to sign large transactions unless further authentication or the backup key signature is presented.
To maintain maximal privacy, it is important to not re-use bitcoin addresses. However, re-generating such keys repeatedly with each transaction would make many of the backup benefits that come with this system difficult. Users of bitcoin standard addresses already face this problem today and use a variety of deterministic wallet mechanisms to generate multiple keys from a single source.
The same techniques can be applied to the 2-of-3 address. Any key used as a signature should be rotated to a new address based on the next sequence in the deterministic key.
As a compromise solution, the 2-of-3 address offers one more option: only rotating the server's key. Since the 2-of-3 key is generated from 3 keys, one of which is managed by the service, we can rotate the user's funds to a new address by only rotating the server’s key. The resulting address cannot be correlated to the original 2-of-3 address. However, upon spending of the outputs, the public keys will again be revealed and a correlation could be made at that time. To maintain the ability for the user to extract funds without the service, the service will need to send the newly minted service public key to the user for safekeeping. This can be done via email. But again for maximal privacy, use of deterministic key rotation is recommended.
Using multi-signature wallets provides flexibility for the user to share keys with trusted family without exposing all funds. For example, a user may decide to give one key to his sister, and another to his lawyer, with instructions to get the bitcoin when the user dies. With a traditional bitcoin address, the lawyer and sister would both have full access to the user’s funds. With a 2-of-3 wallet, they would need to collude against the user. But overall, the 2-of-3 address offers a lot of flexibility.
No security mechanism is perfect. One potential weakness with the 2-of-3 address is that it does have 2 of the 3 keys online in the user’s browser at the time of address creation. Malware that specifically targeted an application using 2-of-3 wallets could lie-in-wait of an address to be created, steal the keys, and then extract the funds later. However, any wallet, client or server suffers from this problem. With a 2-of-3 address, the exposure to malware is mostly limited to address creation time, whereas traditional addresses are exposed to this weakness any time you transact. Hardware wallets may be the best mitigator against this particular attack.