Phần 5: Cách bảo mật giao dịch Tiền ảo bằng Ví tiền ảo
Bài này đang được chỉnh sửa nên các bạn đọc trước cho vui thôi nhé... Với 4 phần trước, bạn đã tạo được cho mình một đế chế tiền ảo. Người dùng bắt đầu đổ xô đi đào loại tiền ảo MyCoin mà bạn đã xây dựng sẵn, và hí hửng nhặt về các địa chỉ VÍ CÁ NHÂN của họ. Vấn đề dễ nhận thấy nhất là ...
Bài này đang được chỉnh sửa nên các bạn đọc trước cho vui thôi nhé...
Với 4 phần trước, bạn đã tạo được cho mình một đế chế tiền ảo. Người dùng bắt đầu đổ xô đi đào loại tiền ảo MyCoin mà bạn đã xây dựng sẵn, và hí hửng nhặt về các địa chỉ VÍ CÁ NHÂN của họ.
Vấn đề dễ nhận thấy nhất là MyCoin không hề bảo mật. Địa chỉ ta thấy chỉ là một chuỗi "Dia Chi Cua Ong A", "DiaChiViNhanTienThuong". Một hacker nếu sửa đổi bất kỳ bản ghi nào trong chuỗi Blockchain là không hợp lệ vì sai Hash. Nhưng nếu anh ta có Block cuối cùng. Anh ta nhanh tay lấy DiaChiViTienThuongCuaBan và chuyển hết số tiền vào ViHacker và nhét Block mới vào chuỗi MangBlock, thế là nghiễm nhiên giao dịch thành công. Bùm, bạn mất sạch tiền.
Vậy thì làm cách nào để ngăn chặn việc này? Phải có cách nào đó để bảo mật chứ nhỉ?
Tất nhiên rồi, ta lại phải nghĩ ra vài thuật toán cao siêu để ngăn chặn hacker ăn cắp tiền. Địa chỉ nhận tiền lúc này không thể là một chuỗi nữa. Cần phải mã hóa nó đi.
Nếu bạn chỉ nghĩ đơn giản là mã hóa chuỗi DiaChiViTienThuongCuaBan thành một chuỗi loằng ngoằng MD5 dạng kj 82y382h ưco2c3 o2hc3o và giấu đi để hacker không thể nhìn thấy thì bạn nhầm. Chuỗi địa chỉ của bạn trong Block luôn luôn được hiển thị, không có cách nào mã hóa nó để không ai nhìn thấy được. Bởi vì Blockchain luôn minh bạch, giao dịch phải được kiểm chứng bởi các người dùng khác trong hệ thống, nếu không họ sẽ không đồng ý thêm giao dịch của bạn vào chuỗi Block.
Lúc này ta cần đến thuật toán key-pair (cặp key gồm public key và private key).
Public key sẽ được dùng để nhét vào các giao dịch trong các Block. Ai cũng nhìn thấy đc. Còn Private Key chỉ bạn biết. Public Key như là Tên Tài Khoản, Private Key là mật khẩu. Khi nối 2 thứ này lại thì sẽ ra được địa chỉ ví tiền thật của bạn.
Vấn đề đã giải quyết xong chưa nhỉ? Vấn đề vẫn còn nguyên. Vì PublicKey và PrivateKey là một cặp, được tạo ra bởi một thuật toán nào đó. Nếu bạn đem nhét PublicKey vào GiaoDich. Thì hầu như giao dịch nào của bạn trong hệ thống cũng có y hệt một chuỗi. Có chuỗi này, hacker bắt đầu brusforce-attach (tấn công theo kiểu mò mẫn, thử lần lượt đến khi nào đúng thì thôi). Và đến lúc nào đó thì Private Key của bạn vẫn lòi ra. PrivateKey thậm chí có người đặt dài đến 128 ký tự. Nhưng vẫn vô vọng thôi.
Phải có cách cao tay hơn. Đó là mỗi một giao dịch ta phải có một địa chỉ hoàn toàn khác nhau.
WHAT?! Thế thì làm thế nào để tiền gửi về đúng địa chỉ của ví của ta được?
Bình tõm. Cái chuỗi ngẫu nhiên nhét vào các GiaoDich thường được gọi là Digital Signature (Chữ ký điện tử). Nhưng chuỗi chữ ký này mỗi giao dịch là khác nhau, bởi vì nó mã hóa privateKey + Data trong chuỗi.
(chỗ này đang viết tiếp...)
Chú ý là Địa chỉ ví tiền của bạn đã có. Nhưng giá trị số tiền thật trong ví lại không được lưu trong ví, không hề có con số tổng tiền trong ví lưu ở server nào cả. Toàn bộ giao dịch tăng giảm ví tiền của bạn đều vẫn được lưu ở cơ sở dữ liệu Blockchain. Và cơ sở dữ liệu này thì cực kỳ bảo mật như bạn đã biết. Chỉ có thể gửi và nhận chứ không sửa xóa được. Muốn tính xem bạn đang có bao nhiêu tiền bạn vẫn phải gọi hàm TinhTienTrongVi() và lục lại toàn bộ giao dịch trên Blockchain để đếm tổng. Bạn hoàn toàn yên tâm là không ai đụng được vào đồng nào của bạn trong ví. Bạn chỉ cần cất thật kỹ privateKey là có thể đắp chăn nằm ngủ.
Như vậy là ta đã hiểu được về địa chỉ ví tiền ảo và tại sao nó lại an toàn đến mưc không ai có thể biết được ai sở hữu và không có cách nào lấy đc tiền từ tài khoản ra khỏi blockchain.