
Đảm bảo tính toàn vẹn dữ liệu bằng hàm băm mật mã và chuỗi khối Ethereum
Áp dụng các nguyên thủy blockchain vào việc lập phiên bản, truy xuất nguồn gốc và đảm bảo tính toàn vẹn của tập dữ liệu Bài viết Đảm bảo tính toàn vẹn dữ liệu bằng băm mật mã và chuỗi khối Ethereum xuất hiện lần đầu trên Towards Data Science.
Kỹ thuật dữ liệu
Đảm bảo tính toàn vẹn của dữ liệu bằng hàm băm mật mã và chuỗi khối Ethereum
Áp dụng các nguyên thủy chuỗi khối vào việc lập phiên bản tập dữ liệu, nguồn gốc và đảm bảo tính toàn vẹn
Sam Black
Ngày 1/6/2026
8 phút đọc
Chia sẻ
Ảnh của fabio qua Unsplash
Trong nhiều quy trình khoa học dữ liệu, các nhóm thường cần truy cập vào một tập dữ liệu dùng chung, được đồng bộ hóa hoàn hảo và không thể sửa đổi, ví dụ: trong môi trường học máy phân tán nơi nhiều nhóm dựa vào cùng một tập hợp tính năng.
Trong bài viết này, tôi sẽ trình bày một phương pháp đơn giản, miễn phí để băm mật mã một tập dữ liệu thuộc bất kỳ kích thước nào và lưu trữ hàm băm của nó một cách bất biến trên chuỗi khối Ethereum, tạo ra một bản ghi vĩnh viễn và có thể kiểm chứng về tính toàn vẹn của tập dữ liệu.
Phương pháp này cũng có thể dễ dàng mở rộng cho trọng số mô hình, các phép biến đổi cụ thể cần được áp dụng một cách nhất quán, mã nguồn hoặc các dữ liệu khác cần bất biến và có thể kiểm chứng.
🤔Tại sao tính toàn vẹn lại quan trọng
Nếu bạn ít nhiều quen thuộc với khoa học dữ liệu như một thực hành, bạn đã nhận thức được tầm quan trọng của tính toàn vẹn dữ liệu. Ngay cả những thay đổi nhỏ hoặc lỗi trong dữ liệu đầu vào cũng có thể làm sụp đổ một dự án.
Các mô hình học máy hiện đại cực kỳ nhạy cảm với dữ liệu huấn luyện của chúng. Các bước chuẩn hóa bị thiếu, một tệp CSV bị sửa đổi, các hàng bị xáo trộn, các tính năng bị hỏng hoặc sự không khớp giữa các tập dữ liệu huấn luyện và xác thực có thể tạo ra kết quả khác biệt đáng kể.
Các lỗi toàn vẹn rất khó phát hiện và thường gây gián đoạn.
Các mô hình vẫn có thể hoạt động bình thường hoặc huấn luyện, nhưng các chỉ số có thể suy giảm chậm, sự trôi dạt tích lũy hoặc các thử nghiệm trở nên không thể tái tạo. Tính toàn vẹn càng quan trọng gấp đôi khi nhóm làm việc phân tán, có thể trên các tổ chức khác nhau và cần làm việc trên các phiên bản khác nhau của cùng một vấn đề.
🔐Sử dụng hàm băm mật mã làm “nguồn đáng tin cậy”
Hàm băm mật mã cung cấp cho chúng ta một cơ chế đơn giản và rất hữu ích để xác minh tính toàn vẹn của dữ liệu.
Giới thiệu ngắn gọn về hàm băm mật mã
Một hàm băm nhận bất kỳ lượng dữ liệu đầu vào nào (byte) và tạo ra một đầu ra có độ dài cố định một cách xác định, được gọi là hàm băm hoặc bản tóm tắt. Hàm băm mật mã là nền tảng trong khoa học máy tính, như bạn có thể đã biết.
Điểm mấu chốt là tính xác định:
Dữ liệu đầu vào giống nhau → hàm băm đầu ra giống nhau
Ngay cả một byte duy nhất bị thay đổi trong dữ liệu đầu vào cũng tạo ra một hàm băm hoàn toàn khác.
Vì thuộc tính này, hàm băm hoạt động như dấu vân tay duy nhất cho dữ liệu và cực kỳ hữu ích để xác minh tính toàn vẹn. Có nhiều loại hàm băm, và một số hữu ích hơn cho nhiệm vụ này như tôi sẽ mô tả.
Điều này áp dụng cho các tập dữ liệu như thế nào?
Do tính xác định của hàm băm, một khi được áp dụng cho một tập dữ liệu, chúng ta có thể nhanh chóng và đáng tin cậy kiểm tra xem tập dữ liệu có giống hệt với những gì chúng ta mong đợi hay không.
Điều này đặc biệt có giá trị với các tập dữ liệu lớn được sử dụng bởi nhiều nhóm, nhiều công ty, chuyển từ phiên bản này sang phiên bản tiếp theo. Nhóm 1 tại Nhóm Nghiên cứu Alpha tạo các tính năng 1-10, Nhóm 2 tại Nhóm Nghiên cứu Zeta tạo các tính năng 10-100, Hệ thống X sử dụng phiên bản Y, v.v.
Chúng ta không còn cần phải đặt câu hỏi về dữ liệu, chỉ cần tính toán hàm băm trên tập dữ liệu và so sánh nó với hàm băm được tính tại một điểm tham chiếu. Nếu khớp, OK. Nếu không, có điều gì đó đã thay đổi.
Hàm băm (hashing) có hiệu suất cực cao. Chạy một hàm băm trên tập dữ liệu 10MB hoặc 10TB sẽ nhanh chóng cho ra một chuỗi có kích thước nhỏ, cố định, có thể chia sẻ, lưu trữ hoặc công bố.
🧐 Tại sao sử dụng Ethereum làm kho lưu trữ bất biến?
Đây là phần thực sự hữu ích của bài viết này.
Ethereum, như đã biết, là một blockchain. Điều này mang lại cho chúng ta:
Tính bất biến: một giao dịch không bao giờ có thể thay đổi.
Tính khả dụng phân tán: luôn có thể truy cập mà không cần cơ quan trung ương.
Tính vĩnh viễn: một khi đã ghi, nó sẽ được truy cập vĩnh viễn.
Nhưng, Ethereum dành cho các giao dịch? Chúng ta có cần viết một hợp đồng thông minh phức tạp cho mục đích chuyên biệt này không?
Thực tế là có thể. Nhưng chúng ta không cần thiết phải làm vậy.
Điểm thông minh ở đây là tận dụng trường dữ liệu đầu vào ít được sử dụng này trong một giao dịch Ethereum, đôi khi được gọi là "calldata".
Nhưng, các giao dịch Ethereum tốn tiền thật (gas, phí, v.v.)?
Điều này cũng đúng. Trên Ethereum, người dùng bị tính phí "gas" cho mỗi byte trong dữ liệu đầu vào. Trên mạng chính (mainnet), với giá 2.000 USD/ETH, chi phí này có thể dao động từ 0,04 USD đến 0,10 USD cho mỗi hàm băm. Khoản này chưa bao gồm phí gas cần thiết cho một giao dịch thực tế được đưa vào bởi trình xác thực khối (block validator), có thể đáng kể tùy thuộc vào tải hiện tại của mạng.
Hãy làm cho điều này thông minh hơn. 🦊
Bằng cách chuyển mọi thứ sang "mạng thử nghiệm" (testnet), mà mọi blockchain thường có, chúng ta có thể thực hiện điều này hoàn toàn miễn phí.
Sepolia (mạng thử nghiệm của ETH) hiếm khi được sử dụng trừ khi bạn là nhà phát triển hợp đồng thông minh. Sepolia ETH miễn phí và có sẵn công khai từ các vòi (faucets).
Điều này có nghĩa là chúng ta có thể tạo ra vô số giao dịch, trên mạng thử nghiệm có thể truy cập công khai (được gọi là Sepolia cho Ethereum), miễn phí!
Miễn là dữ liệu đầu vào của chúng ta có kích thước hợp lý, Sepolia cung cấp một cách để sử dụng blockchain để lưu trữ dữ liệu vô hạn, với hầu hết các thuộc tính tương tự như mạng chính*.
* Các blockchain Sepolia không vĩnh viễn, nhưng hầu hết đáng tin cậy trong nhiều năm. Nếu bạn cần tính vĩnh viễn tuyệt đối, bạn sẽ cần phải trả tiền cho nó bằng cách sử dụng mạng chính.
Hãy nhớ rằng, chúng ta không lưu trữ dữ liệu thực tế trên chuỗi. Chỉ lưu trữ dấu vân tay.
⚙️Quy trình
Đầu tiên, chúng ta cần một cách để tạo giao dịch trên Ethereum một cách đáng tin cậy.
Mặc dù có vẻ phức tạp, nhưng điều này thực sự cực kỳ đơn giản. Chúng ta không cần bất kỳ phần mềm hoặc công nghệ ví bổ sung nào. Một ví không gì khác hơn là một khóa, được ghép nối với một bí mật được sử dụng để ký.
Để tạo một giao dịch Ethereum, chúng ta tạo một đối tượng Python với các khóa và định dạng cần thiết, mã hóa nó bằng khóa của chúng ta và phát sóng nó đến mạng. Một trình xác thực sau đó sẽ lấy giao dịch của chúng ta từ "mempool" và đưa nó vào một khối.
Nguồn tin: Towards Data Science — Tác giả: Sam Black. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.