
Chao xìn mọi người lại là mình đây Nhabachoc KAD.
Bài viết này có dành cho bạn?
Khái niệm đầu tiên cần biết về Blockchain
Cái tên Blockchain xuất phát từ đâu
Hành trang cần chuẩn bị:
Biết tiêu tiền
Cùng tắt đèn bật ý tưởng, gét go 🪄
Sau khi đi qua 1 chương nặng nề về kiến thức khiến bạn hoa mắt, chóng mặt, váng đầu thi chúng ta sẽ đi vào 1 thứ nhẹ nhàng hơn, 1 bữa ăn nhẹ đầu giờ chiều. Chuỗi khối - blockchain và đúng như tên gọi của nó, công nghệ này áp dụng những kiến thức về mã hóa để xây dựng nên 1 bức tường vững chắc, không thể xuyên thủng.
Chúng ta hay cùng xem dữ liệu được xử lý khi CÓ và KHÔNG áp dụng chuỗi khối sẽ thế nào nha:
Tôi vừa tiêu 2k |
---|
Tôi vừa tiêu 5k |
Bạn X vừa tiêu 9k |
Bạn Y vừa mua 1k |
có vẻ đây là cách mà các bản ghi được lưu trong DB, không có tính liên kết. Các bạn sẽ nói có thể thêm trường mà, Hừm 🤨:
Bản ghi 1 | Tôi vừa tiêu 2k | 0 |
---|---|---|
Bản ghi 2 | Tôi vừa tiêu 5k | Bản ghi 1 |
Bản ghi 3 | Bạn X vừa tiêu 9k | Bản ghi 2 |
Bản ghi 4 | Bạn Y vừa mua 1k | Bản ghi 3 |
ồ có vẻ chúng ta có sự liên kết ở đây rồi đó. Mọi thứ có vẻ ô kê hơn rồi nhưng nếu tôi vô tình để ai động vào máy tính mình, họ sẽ làm mọi thứ tệ hơn:
Nguyên trạng
Bản ghi 1 | Tôi vừa tiêu 2k | 0 |
---|---|---|
Bản ghi 2 | Tôi vừa tiêu 5k | Bản ghi 1 |
Bản ghi 3 | Bạn X vừa tiêu 9k | Bản ghi 2 |
Bản ghi 4 | Bạn Y vừa mua 1k | Bản ghi 3 |
Tôi | 7k |
---|---|
Bạn X | 5k |
Bạn Y | 10k |
Sau khi những kẻ tàn nhẫn muốn tôi bại sản:
Bản ghi 1 | Tôi vừa tiêu 7k | 0 |
---|---|---|
Bản ghi 2 | Tôi vừa tiêu 7k | Bản ghi 1 |
Bản ghi 3 | Bạn X vừa tiêu 9k | Bản ghi 2 |
Bản ghi 4 | Bạn Y vừa mua 1k | Bản ghi 3 |
Tôi | 0k |
---|---|
Bạn X | 5k |
Bạn Y | 10k |
Ựa tôi mất hết tiền nhưng lại không làm gì được nhưng không sao các bạn yên tâm, tý tôi sửa lại là được và đây cũng chính là lý do khiến mô hình trên dù hợp lý nhưng vẫn không đạt:
<aside> ✅ Không thể thay đổi
</aside>
Vì vậy chúng ta cần 1 chút thay đổi ở đây và mọi thứ sẽ theo đúng theo gọi của nó <Chuỗi khối>
Bản ghi 1 | Tôi vừa tiêu 2k | 0 |
---|---|---|
Bản ghi 2 | Tôi vừa tiêu 5k | 9609ee605e… |
Bản ghi 3 | Bạn X vừa tiêu 9k | 9b8a66ae37… |
Bản ghi 4 | Bạn Y vừa mua 1k | b9c0b1bcf0… |
Tôi vừa làm gì á. 😈 tôi vừa áp dụng 72 phép biến hóa để khiến bản ghi của chúng ta trong loằng ngoằng và ma mị hơn, họ nhìn vào sợ mà không dám sửa nữa 😛😛😛
Tôi vừa áp dụng những thứ chúng ta học bên trên. Cốt lõi của vấn đề là “Immutability - Một khi dữ liệu được ghi vào blockchain, nó không thể được chỉnh sửa hoặc xóa” vậy hãy cùng tìm cách nào:
Khiến cho các bản ghi không thể bị sửa đổi ⇒ không thể nào, lỗ hổng xảy ra là điều không thể tránh khỏi và kể cả không phải người ngoài sửa thì cũng có thể là người trong nội bộ sửa.
Thay vì cố gắng suy nghĩ theo cách ngăn cấm các hành vi, chúng ta tiến hành xác minh các thông tin bằng cách băm các thông tin trước đó và lưu lại ở các bản ghi ngay sau:
Bản ghi 1, Tôi vừa tiêu 2k vì là bản ghi đầu tiên mà trong blockchain họ thường gọi là genesis nên sẽ có mã liên kết là 0
Bản ghi 2, Tôi vừa tiêu 5k và điều QUAN TRỌNG nằm ở đây: mã liên kết với bản ghi 1 sẽ chính là dữ liệu của nó được băm ra
Bản ghi 3, Bạn X vừa tiêu 9k, mã liên kết với bản ghi 2 sẽ chính là dữ liệu của nó được băm ra
⇒ Cứ như thế chúng ta đã có 1 liên kết rất đầy đủ tạo thành chuỗi các bản ghi <khối dữ liệu> ⇒ có chuỗi khối.
Chúng ta vừa đi qua luồng chính nhưng bạn hãy nhìn lại và tìm xem còn vấn đề gì không 🤔 3 phút nhé… Gợi ý nha nếu tôi vẫn cố tình sửa dữ liệu thì sao ?
Theo đúng những gì mà chúng ta hấp thu nó sẽ như này:
Thay đổi bản ghi 1 số bất kỳ ⇒ dữ liệu đầu vào thay đổi ⇒ hàm băm thay đổi
Hàm băm ở trên thay đổi ta đối chiếu với mã liên kết bên dưới (ở bản ghi 2) là sẽ thấy ngay được sự sai sót này: Hàm băm mới ở trên # với cái ta lưu
Cố chấp thay thế mã liết kết ở bản ghi 2 sẽ lại dính với bản ghi 3
Cứ thế bản sẽ phải thay thế đến hết …
Ơ nhưng mà thế là vẫn chuẩn mà sai ở đâu 😐 <Ô lừa bọn tôi à>. Không không nếu đến bản ghi cuối cùng thì sao 🤣🤣🤣 chúc mừng bạn nào đã tìm ra lỗ hổng nha và không tìm được cùng không sao, trước tôi còn không có ai hướng dẫn nữa là. Bản ghi cuối cùng sẽ chẳng có mã liên kết nào đằng sau để đối chứng cả nên sửa gì tùy ý.
Giải pháp:
Vừa nãy ta băm cả bản ghi và truyền vào mã liên kết bản ghi ngay sau. Đúng như chưa đủ
Bây giờ ta băm cả dữ liệu và lưu ngay vào bản ghi đấy ⇒ Vậy là vừa xác minh được dữ liệu trong bản ghi vừa có liên kết bản ghi trước. Ta gọi mã liên kết là Prev Hash hoặc Parent Hash và băm dữ liệu lưu ngay vào bản ghi đấy gọi là Hash.
Bản ghi 1 | Tôi vừa tiêu 2k | 0 | a295084d27… |
---|---|---|---|
Bản ghi 2 | Tôi vừa tiêu 5k | a295084d27… | cd53143fdf… |
Bản ghi 3 | Bạn X vừa tiêu 9k | cd53143fdf… | ade6212797… |
Bản ghi 4 | Bạn Y vừa mua 1k | ade6212797… | 66d6da8df2… |
Nếu các bạn muốn bắt tay vào kiểm thử:
Vào trang web:
SHA256
Điền vào input:
<aside> 👉🏿 Bản ghi 1 Tôi vừa tiêu 2k 0
</aside>
Kết quả thu được:
a295084d2718640ab343c0c897483242fd990a387c5fd441474732cfd6a9d5f1
là hàm băm SHA256 nội dung của bản ghi 1
Nếu input là:
<aside> 👉🏿 Bản ghi 2 Tôi vừa tiêu 5k a295084d2718640ab343c0c897483242fd990a387c5fd441474732cfd6a9d5f1
</aside>
Kết quả thu được:
cd53143fdfa8a24f67f97d62f9dbdf2cd5a93cbd1c159787b0223359404e6f52
là hàm băm SHA256 nội dung của bản ghi 1 và trong đó có mã liên kết với bản ghi 1