Chương 7: Chứng Cứ Blockchain
Trụ sở Ngân hàng Nhà nước Việt Nam, số 49 Lý Thái Tổ, quận Hoàn Kiếm, Hà Nội. Toà nhà kiến trúc thuộc địa Pháp sơn vàng nhạt, mái ngói đỏ, nằm lặng lẽ giữa phố cổ như một ông già uy nghiêm giữa đám trẻ con xôn xao. Kiệt đã đi ngang qua đây hàng trăm lần khi còn là sinh viên, nhưng chưa bao giờ bước vào bên trong.
Chín giờ sáng thứ Hai — đúng năm ngày sau quyết định đình chỉ — Kiệt, Linh, và luật sư Quân ngồi trong phòng họp tầng ba, đối diện đoàn thanh tra bốn người do Phó Vụ trưởng Phạm Thị Kim Oanh chủ trì. Bàn họp hình chữ nhật, phủ khăn xanh, trên bàn bày sẵn bốn cốc trà xanh và một bình nước lọc.
Kiệt mang theo hai thứ: một chiếc laptop và một ổ cứng ngoài SSD chứa toàn bộ mã nguồn PayBlock cùng tài liệu kiến trúc hệ thống. Nhưng thứ quan trọng nhất nằm trong file PowerPoint bốn mươi hai slide mà anh đã chuẩn bị suốt ba đêm không ngủ.
"Chúng tôi đã nhận và kiểm tra sơ bộ hồ sơ anh nộp," bà Oanh mở đầu. "Mã nguồn PayBlock đã được đội kỹ thuật của chúng tôi chạy code similarity analysis với mã nguồn PayViet mà bên tố cáo cung cấp. Kết quả: hai mươi ba phần trăm similarity — chủ yếu ở những module sử dụng thư viện mã nguồn mở chung như Web3.js và ethers.js."
Kiệt gật nhẹ. Hai mươi ba phần trăm — con số đó hoàn toàn bình thường khi hai sản phẩm cùng dùng chung framework và library. Nếu hai đứa trẻ cùng dùng bộ Lego, chúng sẽ có một số miếng giống nhau — nhưng ngôi nhà chúng xây hoàn toàn khác.
"Tuy nhiên," bà Oanh tiếp tục, "bên tố cáo — PayViet — khẳng định rằng core payment engine của PayBlock được copy trực tiếp từ PayViet, và yêu cầu chúng tôi xác minh quyền sở hữu mã nguồn gốc. Anh Kiệt, anh có bằng chứng nào chứng minh mã nguồn PayBlock là do anh tự phát triển?"
"Có," Kiệt đáp. Anh mở laptop, kết nối với projector trong phòng họp. Slide đầu tiên hiện lên — tiêu đề: "Blockchain-based Code Provenance: Bằng chứng Bất biến về Quyền Sở hữu Mã nguồn."
"Từ tháng Ba năm 2023," Kiệt bắt đầu, "trước khi PayViet được thành lập, tôi đã xây dựng thói quen lưu hash SHA-256 của mỗi commit code lên Ethereum mainnet. Mỗi khi tôi hoàn thành một module, một tính năng, hoặc một bản vá lỗi, tôi hash toàn bộ source code tại thời điểm đó và ghi hash đó vào một smart contract trên Ethereum — mạng lưới blockchain công khai mà không ai — kể cả tôi — có thể sửa đổi sau khi ghi."
Anh lật sang slide thứ hai — một sơ đồ giải thích quy trình: Code → SHA-256 Hash → Ethereum Transaction → Block Confirmation → Timestamp bất biến.
"Đây không phải công nghệ mới," Kiệt nói. "Đây là ứng dụng cơ bản nhất của blockchain: chứng minh một thông tin tồn tại tại một thời điểm cụ thể. Tương tự như công chứng, nhưng không cần công chứng viên — mạng lưới hàng nghìn node trên toàn thế giới xác nhận."
Bà Oanh nhìn hai chuyên viên thanh tra — một người ghi chú, một người đang kiểm tra thông tin trên laptop riêng. Bà gật nhẹ: "Tiếp tục."
Kiệt lật sang slide thứ ba — bảng so sánh. Cột trái: "Code PayViet — Core Payment Engine." Cột phải: "Code gốc của Phạm Tuấn Kiệt — hash trên Ethereum."
"Đây là module thanh toán lõi mà PayViet đang sử dụng," Kiệt chỉ vào cột trái. "Tôi sẽ chứng minh rằng module này — từng dòng, từng function, từng biến — được viết bởi tôi, vào ngày mười bảy tháng Năm năm 2023, tức là bốn tháng trước khi PayViet đăng ký kinh doanh."
Anh mở terminal trên laptop, kết nối với Etherscan — trình duyệt blockchain công khai. Gõ vào địa chỉ smart contract lưu trữ hash: 0x7a3f...b21d. Màn hình hiện ra danh sách transaction — tám trăm bốn mươi bảy giao dịch, xếp theo thứ tự thời gian từ ngày bốn tháng Ba năm 2023.
"Transaction đầu tiên," Kiệt click vào. "Block number 16,782,441. Timestamp: ngày bốn tháng Ba năm 2023, mười lăm giờ hai mươi bảy phút UTC. Input data chứa hash SHA-256 của file payment_engine_v0.1.sol — phiên bản đầu tiên của smart contract thanh toán."
Anh mở một cửa sổ khác, hiển thị file payment_engine_v0.1.sol từ ổ cứng ngoài. Chạy lệnh sha256sum trên terminal — kết quả: hash trùng khớp chính xác với hash ghi trên Ethereum.
"Timestamp trên Ethereum mainnet không thể bị giả mạo," Kiệt giải thích. "Mỗi block được confirm bởi hàng nghìn node validator trên toàn thế giới. Chi phí để sửa một block đã xác nhận trên Ethereum vượt quá mười tỷ đô la — về mặt thực tế, là bất khả thi."
Bà Oanh nghiêng người về phía trước, mắt nheo lại nhìn màn hình. "Anh có thể chứng minh rằng hash trên Ethereum đó tương ứng chính xác với code mà PayViet đang dùng?"
"Được." Kiệt lật sang slide tiếp theo — so sánh song song. Bên trái: code PayViet mà Đức Anh nộp cho đoàn thanh tra. Bên phải: code gốc của Kiệt có hash trên Ethereum từ năm 2023. Anh highlight từng function, từng tên biến, từng comment.
"Giống nhau chín mươi bảy phần trăm," Kiệt nói. "Ba phần trăm khác biệt là vì PayViet đã rename một số biến và thay đổi format comment — nhưng logic, cấu trúc, và thậm chí cả những lỗi typo trong comment đều y hệt. Ví dụ: dòng hai trăm bốn mươi ba, comment ghi 'calcualte fee' thay vì 'calculate fee' — lỗi chính tả mà tôi mắc và cả hai bản code đều có."
Một chuyên viên thanh tra — người trẻ hơn, khoảng ba mươi tuổi, có vẻ hiểu công nghệ — nhìn màn hình rồi nhìn đồng nghiệp. "Nếu timestamp trên Ethereum có trước ngày PayViet đăng ký kinh doanh, thì..."
"Thì mã nguồn gốc thuộc về người ghi hash trước," Kiệt hoàn thành câu. "Tức là tôi. Và điều đó có nghĩa: PayViet không phải bị ăn cắp code — PayViet chính là sản phẩm được xây trên code mà tôi viết. Đức Anh không sở hữu mã nguồn lõi. Anh ta sở hữu một bản sao."
Phòng họp im lặng mười lăm giây. Kiệt nghe rõ tiếng quạt laptop quay rè rè và tiếng xe máy chạy ngoài phố Lý Thái Tổ vọng vào qua cửa sổ mở hé.
Bà Oanh gỡ kính, lau bằng khăn vải, rồi đeo lại. "Anh Kiệt, chúng tôi sẽ cần xác minh độc lập các transaction trên Ethereum mà anh cung cấp. Đội kỹ thuật của Ngân hàng Nhà nước sẽ tiến hành trong bảy ngày."
"Tất nhiên," Kiệt đáp. "Tôi sẵn sàng cung cấp mọi thông tin cần thiết. Và tôi có thêm một bằng chứng nữa."
Anh lật sang phần cuối slide — tiêu đề: "DDoS Attack Forensics." Slide hiện ra kết quả phân tích forensics của Hoàng — IP nguồn của cuộc tấn công DDoS vào PayBlock được trace ngược về một dải IP thuộc hosting provider CloudKH ở Phnom Penh, Campuchia. Tài khoản thanh toán cho dịch vụ hosting đó được đăng ký bằng thẻ Visa của công ty PayViet.
"PayViet trả tiền cho cuộc tấn công DDoS vào PayBlock," Kiệt nói, giọng phẳng. "Bằng thẻ công ty. Transaction record từ Visa statement."
Bà Oanh nhìn bằng chứng, rồi nhìn luật sư Quân. Quân đặt lên bàn một bản sao lưu công chứng của Visa statement — do VinaTech Ventures thu thập qua kênh đối tác ngân hàng với sự đồng ý của Visa Vietnam.
"Chúng tôi sẽ chuyển phần này cho Cục An ninh mạng, Bộ Công an," bà Oanh nói sau một phút. "Đây vượt quá thẩm quyền thanh tra tài chính."
Cuộc họp kết thúc lúc mười một giờ ba mươi. Kiệt, Linh, và Quân bước ra khỏi trụ sở Ngân hàng Nhà nước, đi bộ trên vỉa hè phố Lý Thái Tổ dưới bóng cây xà cừ cổ thụ. Nắng trưa Hà Nội chiếu xuyên qua tán lá, tạo những vệt sáng nhảy múa trên mặt đường.
"Anh trình bày tốt," Linh nói, tay cầm cốc trà đá mua từ quán vỉa hè cạnh cổng Ngân hàng Nhà nước. Cô uống một ngụm, mắt nhìn thẳng phía trước. "Blockchain evidence rõ ràng, timeline chặt chẽ. Đoàn thanh tra có vẻ bị ấn tượng."
"Có vẻ thôi," Kiệt đáp. "Họ vẫn cần bảy ngày xác minh. Và Đức Anh sẽ không ngồi yên."
"Đức Anh đã hết đạn," Linh nói. "Hắn dùng DMCA, dùng báo chí, dùng DDoS, dùng cả đơn tố cáo Ngân hàng Nhà nước. Tất cả đều dựa trên một tiền đề sai — rằng code PayViet là của hắn. Bây giờ tiền đề đó sắp sụp."
"Không chỉ sụp," Kiệt dừng bước, quay sang nhìn Linh. Ánh nắng chiếu vào mắt anh, nhưng anh không nheo lại. "Trong quá trình chuẩn bị hồ sơ, tôi phát hiện thêm một thứ trên blockchain. Các giao dịch trên mạng thanh toán của PayViet — pattern rất lạ. Nhiều giao dịch nhỏ lẻ, lặp đi lặp lại, giữa các ví ẩn danh, với tổng giá trị lớn bất thường. Tôi chưa chắc chắn, nhưng nó giống đúng mô hình..."
"Rửa tiền," Linh nói, không phải câu hỏi.
Kiệt gật đầu. "Tôi cần thêm thời gian để phân tích. Nhưng nếu đúng — Đức Anh không chỉ ăn cắp code. Hắn đang dùng PayViet làm công cụ rửa tiền."
Linh dừng lại, hai tay siết chặt cốc trà đá — nhựa kêu lạo xạo. Mắt cô nhìn vào khoảng không, đang tính toán. Rồi cô nói, giọng thấp: "Nếu chứng minh được, đây không còn là chuyện startup cạnh tranh nữa. Đây là hình sự."
"Tôi biết," Kiệt đáp. "Và tôi sẽ chứng minh."