You are currently viewing Xây dựng công cụ khai thác Bitcoin trên FPGA

Xây dựng công cụ khai thác Bitcoin trên FPGA

Tóm tắt

Bitcoin là hệ thống tiền điện tử ngang hàng phi tập trung. Khác với các loại tiền tệ thông thường, Bitcoin không dựa vào bất kỳ thực thể tập trung nào như ngân hàng hoặc chính phủ để đảm bảo độ tin cậy của hệ thống. Do đó, tiền được gửi trực tiếp từ người này sang người khác mà không cần thông qua tổ chức tài chính bên thứ ba. Bitcoin được tạo ra duy nhất bởi một quy trình gọi là khai thác Bitcoin (Bitcoin Mining), trong đó các thợ đào (miner) hỗ trợ sức mạnh tính toán để hỗ trợ mạng. Trong dự án này, chúng tôi thảo luận về quá trình khai thác Bitcoin và phát triển một công cụ khai thác Bitcoin mới trên FPGA.

Đọc hướng dẫn khai thác Bitcoin miễn phí bằng trình duyệt CryptoTab ở đây.

  1. Giới thiệu

Bitcoin là một hệ thống tiền điện tử ngang hàng được gửi trực tiếp từ người này sang người khác mà không thông qua tổ chức tài chính. Việc thiếu một thực thể tập trung như ngân hàng, cơ quan thanh toán bù trừ hoặc chính phủ dẫn đến phí thấp hơn nhiều. Hơn nữa, bất kỳ ai cũng có thể sử dụng Bitcoin ở mọi nơi, tài khoản không thể bị đóng băng và không có điều kiện tiên quyết hoặc hạn chế nào để bắt đầu sử dụng Bitcoin. Được ra mắt vào năm 2009 bởi một hacker có tên Satoshi Nakamoto, mạng Bitcoin đã trở thành một trong những mạng điện toán phân tán mạnh mẽ nhất [1]. Vào thời điểm bài báo này được viết, 1 Bitcoin (viết tắt là 1 BTC) đã được giao dịch với giá trị khoảng 37.848 đô la Mỹ với tổng giá trị của mạng Bitcoin là xấp xỉ 704.023 triệu đô la Mỹ [2].

Bitcoin được tạo ra trên khắp Internet bởi bất kỳ ai chạy một chương trình có tên là Bitcoin miner, chương trình này hoạt động để duy trì hệ sinh thái Bitcoin. Mỗi thợ mỏ cố gắng tìm ra giải pháp hợp lệ cho một vấn đề khó về mật mã. Mỗi khi tìm thấy giải pháp hợp lệ, người khai thác được thưởng một số Bitcoin. Khai thác là cách duy nhất để tạo ra Bitcoin và độ khó khai thác được mạng Bitcoin điều chỉnh tự động để số lượng Bitcoin được tạo ra tăng lên một cách ổn định và có thể dự đoán được. Trong dự án này, chúng tôi thảo luận về quá trình khai thác Bitcoin và giới thiệu một công cụ khai thác Bitcoin mới được triển khai trên FPGA. Chúng tôi bắt đầu bằng cách một giới thiệu ngắn gọn về mạng Bitcoin trong Phần 2. Tiếp theo, chúng tôi trình bày một số chi tiết về quy trình khai thác Bitcoin trong Phần 3. Sau đó, chúng tôi phác thảo việc thực hiện của một công cụ khai thác Bitcoin trên FPGA ở Phần 4. Và cuối cùng ở Phần 5, chúng tôi kết luận và trình bày một số công việc trong tương lai.

  1. Mạng Bitcoin

Bitcoin là hệ thống tiền mặt đầu tiên chạy trên một mạng ngang hàng phân tán giải quyết được vấn đề chi tiêu kép phát sinh khi không có bên thứ ba tập trung, đáng tin cậy [3]. Mạng lưu trữ các giao dịch bằng cách băm chúng thành một chuỗi theo thứ tự thời gian các bằng chứng công việc (proof-of-work) dựa trên hàm băm. Khái niệm bằng chứng công việc đảm bảo rằng chuỗi không thể được sửa đổi nếu không thực hiện lại bằng chứng công việc. Chuỗi giao dịch dài nhất đóng vai trò là bằng chứng về chuỗi sự kiện ngăn những kẻ tấn công thực hiện giao dịch với cùng một Bitcoin. Miễn là phần lớn sức mạnh tính toán đang hợp tác hỗ trợ mạng Bitcoin, những kẻ tấn công không thể tạo ra một chuỗi dài hơn. Vì các thợ đào chỉ làm việc trên chuỗi dài nhất, bất kỳ chuỗi thay thế nào sẽ bị mạng loại bỏ. Lưu ý rằng nhiều chuỗi dài nhất có thể tồn tại cùng một lúc, tuy nhiên tại một số thời điểm, một trong số chúng trở thành chuỗi dài nhất và chuỗi thứ hai bị loại bỏ.

Chuỗi giao dịch

Chuỗi giao dịch được tạo bởi các khối nơi các giao dịch thực sự được lưu trữ.

Như chỉ ra trong Hình 1, nhiều chuỗi có thể tồn tại cùng một lúc trong mạng, tuy nhiên những chuỗi ngắn hơn sẽ bị loại bỏ khi thời gian trôi qua và được thay thế bằng chuỗi dài nhất. Chuỗi dài nhất là chuỗi đòi hỏi khối lượng công việc lớn được tạo ra, không nhất thiết là chuỗi có nhiều khối hơn. Các thợ mỏ cố gắng kéo dài chuỗi dài nhất bằng cách tìm một khối tiếp theo cho nó (các khối màu trắng trong Hình 1). Khối tiếp theo được gắn vào chuỗi dài nhất và được những người tham gia khác chấp nhận khi hàm băm của nó có một số thuộc tính rất khó xảy ra như sẽ thảo luận ở Phần 3. Khối được đính kèm bao gồm một giao dịch đặc biệt tạo ra Bitcoin mới thưởng cho người khai thác đã “giải quyết” khối đó. Lưu ý rằng một số khối tiếp theo được thử cùng lúc bởi các thợ đào khác nhau trên mạng. Nhưng chỉ người đầu tiên giải được một khối được thưởng.

Khi chuỗi dài nhất phát triển, các giao dịch bị chôn sâu vào chuỗi và việc cố gắng sửa đổi chúng bằng cách bắt đầu một chuỗi đồng thời trở nên không thực tế. Các thuộc tính này đảm bảo rằng mạng Bitcoin luôn đáng tin cậy miễn là kẻ tấn công không kiểm soát hầu hết các nút trên mạng.

STEM Chuỗi giao dịch Bitcoin

Hình 1. Chuỗi giao dịch Bitcoin.

  1. Khai thác Bitcoin

Khai thác Bitcoin về cơ bản là quá trình mã hóa bảo mật theo hàm băm một tiêu đề khối (block header) trong đó cần tìm kiếm một hàm băm, khi được hiểu là số lớn, có đặc tính rất khó xảy ra là nằm dưới một số giá trị mục tiêu nhỏ. Mục tiêu như vậy được mạng Bitcoin tự động điều chỉnh để giữ cho việc tạo ra Bitcoin diễn ra liên tục. Khi khả năng tính toán của mạng tăng lên, mục tiêu giảm xuống khiến quá trình khai thác trở nên khó khăn hơn. Mặt khác, nếu sức mạnh tính toán của mạng giảm, mục tiêu được tăng lên cũng làm tăng khả năng tìm thấy hàm băm bên dưới mục tiêu này. Bên trong mỗi tiêu đề khối, một trường đặc biệt gọi là “nonce” chỉ dành riêng cho mục đích khai thác. Những người khai thác thử các giá trị “nonce” khác nhau để tìm kiếm một giá trị băm hợp lệ (một giá trị băm nằm dưới giá trị mục tiêu). Mỗi khi thử một “nonce” mới, một hàm băm mới sẽ được thu được. Nếu một “nonce” tạo ra một hàm băm hợp lệ, nó được gọi là một “nonce” vàng (golden nonce). Đối với bất kỳ thuật toán băm tốt nào, không có cách nào được biết để tìm ra “nonce” vàng ngoài việc quét tất cả các giá trị “nonce” có thể có. Điều này đảm bảo rằng để tìm được một đồng tiền vàng, các thợ mỏ phải tiêu tốn một lượng điện năng máy tính nhất định để đưa ra khái niệm bằng chứng công việc hỗ trợ độ tin cậy của hệ sinh thái Bitcoin.

Tiêu đề khối

Dữ liệu được ghi lại vĩnh viễn trong mạng Bitcoin thông qua các khối.

Một khối được “giải quyết” (được xuất bản và được coi là hợp lệ bởi các thành viên trong mạng ngang hàng) khi hàm băm của tiêu đề khối nằm dưới giá trị mục tiêu hiện tại. Tiêu đề khối bao gồm 640 bit (80 byte) như được hiển thị trong Bảng 1. Hầu hết các trường là hằng số, nhưng người khai thác có thể chơi với một trong số chúng, chẳng hạn trường “nonce”. Một số công cụ khai thác cũng thay đổi trường dấu thời gian (timestamp) như một giải pháp để cho phép nhiều thử nghiệm hơn trên mỗi tiêu đề khối, tuy nhiên, trong nghiên cứu này, chúng tôi chỉ tập trung vào trường “nonce”.

Bảng 1. Tiêu đề khối của Bitcoin

Kích thước trường Tên trường Loại dữ liệu Miêu tả
4 Phiên bản Uint32_t Thông tin về phiên bản, dựa trên thông tin về phiên bản của phần mềm tạo ra khối này
32 Prev_block Char[32] Giá trị băm của khối trước mà một khối cụ thể đang tham chiếu tới
32 Merkle_root Char[32] Tham chiếu đến tập hợp cây Merkle – đây là một hàm băm của tất cả các giao dịch liên quan đến khối này
4 Timestamp Uint32_t Một timestamp ghi lại khi nào khối này được tạo ra (được giới hạn tới 2016)
4 bits Uint32_t Giá trị mục tiêu khó được tính toán đang được sử dụng cho khối này
4 Nonce Uint32_t Nonce được sử dụng để tạo ra khối này, để cho phép các biến thể của tiêu đề và tính toán các hàm băm khác

Hàm băm

Mạng Bitcoin sử dụng hàm băm SHA-256 [5] làm của hàm băm cốt lõi của riêng nó như được minh họa bên dưới.

Hashbitcoin(m) = SHA – 256(SHA – 256(m))

SHA-256 là một thành viên của họ hàm băm mật mã SHA-2. Nó có một bản tóm tắt (digest) 256 bit. Cho đến nay không có xung đột nào (hai thông điệp khác nhau với cùng một hàm băm) được tìm thấy. Tin nhắn được chia thành từng cụm 512 bit và dữ liệu được xử lý dưới dạng các từ lưu trữ kiểu big-endian 32 bit. Thông báo từng phần được tìm thấy cho mỗi đoạn phụ thuộc vào thông báo trước (đối với thông báo đầu tiên, thông báo liên tục được sử dụng). Cấu trúc chính của hàm băm được thể hiện trong Hình 2, được thực hiện 64 lần.

STEM Chức năng nén của họ SHA-2

Hình 2. Chức năng nén củahọ SHA-2 [6].

  1. Công cụ khai thác Bitcoin trên FPGA

Tất cả mạch điện được triển khai trên FPGA được thực hiện bằng ngôn ngữ mô tả phần cứng VHDL.

Như một mô hình vàng, một phần mềm Java cũng được thực hiện. Để tính toán giá trị băm, chúng tôi chia tiêu đề khối thành 16 lát với 32 byte mỗi lát và sử dụng chúng làm đầu vào tuần tự hóa trong cùng một khối logic. Bằng cách này, chúng tôi giảm diện tích cần thiết để thực hiện với cái giá phải chịu là một vài chu kỳ xung nhịp phụ và yêu cầu một máy trạng thái để kiểm soát quy trình.

Để thực hiện giao tiếp giữa bo mạch FPGA và máy tính, chúng tôi đã phát triển cả ứng dụng Java và mô-đun VHDL sử dụng giao thức truyền thông nối tiếp RS-232 để gửi và nhận dữ liệu như được mô tả trong Hình 3. Chúng tôi đã chọn giao diện nối tiếp vì nó là một trong những giao thức truyền thông đơn giản nhất hiện có và tốc độ truyền thấp của nó không ảnh hưởng đến hiệu suất tổng thể của hệ thống. Giao tiếp nối tiếp bao gồm việc gửi 44 byte đến FPGA (32 byte cho đoạn giữa và 12 cho đoạn thứ hai) và nhận câu trả lời từ FPGA với 5 byte dữ liệu đã xử lý (4 byte cho đoạn nonce và 1 byte để chỉ ra tính hợp lệ). Ứng dụng Java cũng chịu trách nhiệm yêu cầu tiêu đề khối từ máy chủ và gửi bằng chứng công việc.

STEM Cấu trúc của máy khai thác

Hình 3. Cấu trúc của máy khai thác.

Cơ chế song song của FPGA

Một lợi thế khi làm việc với bo mạch FPGA là chúng ta có thể tạo nhiều đơn vị tính toán giá trị băm song song nhất có thể phù hợp với bo mạch mà chúng ta có.

Các đơn vị này hoàn toàn độc lập với nhau và mỗi đơn vị sẽ tiêu tốn một khoảng thời gian riêng để tính toán hàm băm phù hợp. Với Virtex-II PRO được sử dụng trong các thử nghiệm của chúng tôi, chúng tôi có thể thực hiện được 8 đơn vị tính toán giá trị băm vào chip nhưng con số này có thể dễ dàng tăng lên khi sử dụng các bo mạch khác có tài nguyên logic hơn.

  1. Kết luận và các công việc trong tương lai

Trong bài viết này, chúng tôi đã thảo luận về quy trình khai thác Bitcoin tổng thể và xây dựng một công cụ khai thác Bitcoin trên FPGA.

Mục tiêu của chúng tôi là hiểu sâu sắc về quy trình khai thác và tạo ra một công cụ khai thác hoạt động đúng chức năng nhưng chưa được tối ưu hóa cao. Mặc dù công cụ khai thác hiện tại chỉ hoạt động với tốc độ khoảng 6 Mhash/s (so với một số công cụ khai thác bằng GPU có tốc độ 100 Mhash/s), nhưng khung khai thác được phát triển sẽ cho phép chúng tôi dễ dàng thử nghiệm các thiết kế công cụ khai thác mới. Chúng tôi dự kiến sẽ đạt 20 Mhash/s với cùng một bo mạch FPGA bằng cách tạo ra một thiết kế nhỏ gọn hơn và áp dụng một số tối ưu hóa phần cứng SHA-256 đã biết. Hơn nữa, chúng tôi đang nghiên cứu những cách mới để tối ưu hóa hơn nữa SHA-256. Mặc dù mục đích đầu tiên của chúng tôi là xây dựng một máy khai thác Bitcoin nhanh hơn, bất kỳ kỹ thuật tối ưu hóa phần cứng nào của SHA-256 đều quan trọng vì SHA-2 được sử dụng trong nhiều ứng dụng như TLS và SSL, PGP, SSH, S / MIME và IPsec.

  1. Tài liệu tham khảo

[1] Reuben Grinberg. “Bitcoin”. Available on

http://www.milkeninstitute.org/publications/review/2012_1/22-31MR53.pdf.

[2] http://bitcoincharts.com/

[4] Satoshi Nakamoto. “Bitcoin: A Peer-to-Peer Electronic Cash System”. Available on

http://bitcoin.org/bitcoin.pdf.

[5] R. Chaves, G. Kuzmanov, L. Sousa, S. Vassiliadis, “Cost-Efficient

SHA Hardware Accelerators”, IEEE Transactions on Very Large Scale

This Post Has One Comment

Trả lời