151 lượt xem

Bàn luận về Blockchain/Crypto dưới góc nhìn khác


Mấy ngày nay dân tình đặc biệt quan tâm đến công nghệ Blockchain và Cryptocurrency, trong đó có một số khái niệm rất hay dùng là public key, private key, nhưng tôi thấy có đến 99% người dùng thì đã đành nhưng kể cả chuyên gia về blockchain cũng không rành rẽ về mối quan hệ thế nào giữa public key và private key. Mối quan hệ đó có liên quan mật thiết đến đường cong elliptic mà gần như 99% các tiền crypto đều dùng, và trong lý thuyết về đường cong ellptic thì tính chất quan trọng nhất là tính chất kết hợp của phép cộng. Và chứng minh tính chất này thì rất ít người hiểu. Năm ngoái 2020, ông giáo có đóng góp 2 cách chứng minh mới cho tính chất này, cách 1 dài 363 trang và cách 2 vẻn vẹn 2 trang, ngắn nhất từ trước đến nay. Hôm nay nhân nói nhiều về Crypto về Blockchain, ông giáo lại lôi cái này lên chia sẻ với mọi người. Khoe tý không nhiều bạn bảo ông giáo toàn chém gió.

PS: Vẫn biết đa phần người bình thường không hiểu, nhưng hy vọng trong số 1% còn lại hiểu mà còn đánh giá được những đóng góp về mặt học thuật như thế nào, mà đường cong elliptic này chính là 1 trong 2 phần quan trọng nhất tạo nên từ khóa crypto, cái thứ 2 là Hash thì đơn giản hơn rất nhiều lần, nên có thể nói elliptic là trụ cột của crypto trong blockchain, từ elliptic mà có public key, private key, địa chỉ ví, ký số giao dịch…

Muốn hiểu cặn kẽ về Blockchain và Crypto thì phải hiểu đường cong elliptic.

Thông thường đối với các đồng tiền Crypto, thì cái quan trọng nhất đối với người dùng chính là private key, khóa riêng tư này được sinh ra một cách ngẫu nhiên, từ private key sẽ nhân vô hướng với điểm sinh G theo chuẩn secp256K1, để được public key, từ public key sẽ dùng một số thuật toán băm để sinh ra địa chỉ ví. Như vậy có thể thấy việc sinh ra số ngẫu nhiên là cực kỳ quan trọng đối với tiền crypto, nếu sinh số trùng nhau thì sẽ khiến có 2 private key trùng nhau và sẽ có 2 người có chung 1 ví (quá ư là nguy hiểm).

Vì thế thuật toán sinh số ngẫu nhiên là một điểm mà hacker hay tấn công, việc sinh số ngẫu nhiên hiện nay đa phần thực hiện trên máy tính,vì nguồn sinh ngẫu nhiên tuyệt đối theo lý thuyết và thực tế chỉ có thể được tạo ra từ máy tính lượng tử (Quantum Computer) mà thôi, mà máy tính lượng tử quá đắt đỏ và tốn kém nên trong giới Blockchain/Crypto không thể dùng được nên trên máy tính đa số sẽ dùng hàm giả ngẫu nhiên PRF mà thôi.

Rất nhiều đội ngũ dev ở Việt Nam mắc lỗi cơ bản về cách tạo số ngẫu nhiên, đa số họ dùng các hàm có sẵn random() trong ngôn ngữ lập trình (khá là ngây thơ) vì hàm này khá dễ để hack. Tiêu biểu ông giáo đã từng góp ý cho Bluezone nhiều vấn đề trong đó có hàm sinh ngẫu nhiên này, khi được mời làm audit cho một blockchain platform khác ở VN, ông giáo cũng góp ý cho team dev lỗi này.

Câu hỏi cho chuyên gia Blockchain cứng nhé. Thi thoảng ông giáo có đưa ra một số câu hỏi về Blockchain mà câu trả lời thường không có trên mạng cũng như không có trong sách.

Hỏi về học thuật, kiểu như mối quan hệ giữa public key và private key, hệ mật đường cong elliptic, hay ký số ECDSA trong phần lớn các tiền Crypto thì các bạn bảo cái này chỉ dành cho các giáo sư tiến sĩ, em chỉ biết gọi API thồi, còn tại sao như vậy thì em don’t care. Okie thế thì không hỏi về học thuật nữa quay sang hỏi về code/dev thôi nhé:

Tại sao trong thuật toán thay đổi độ khó khi đào Bitcoin nhân hoặc chia độ khó cũ đi 4 lần, sao không phải con số khác mà cứ phải là 4?

Thuật toán quá đơn giản nhỉ?

Mã nguồn có ở link github đây:

𝘪𝘧 (𝘯𝘈𝘤𝘵𝘶𝘢𝘭𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯 < 𝘱𝘢𝘳𝘢𝘮𝘴.𝘯𝘗𝘰𝘸𝘛𝘢𝘳𝘨𝘦𝘵𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯/4)
𝘯𝘈𝘤𝘵𝘶𝘢𝘭𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯 = 𝘱𝘢𝘳𝘢𝘮𝘴.𝘯𝘗𝘰𝘸𝘛𝘢𝘳𝘨𝘦𝘵𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯/4;
𝘪𝘧 (𝘯𝘈𝘤𝘵𝘶𝘢𝘭𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯 > 𝘱𝘢𝘳𝘢𝘮𝘴.𝘯𝘗𝘰𝘸𝘛𝘢𝘳𝘨𝘦𝘵𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯*4)
𝘯𝘈𝘤𝘵𝘶𝘢𝘭𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯 = 𝘱𝘢𝘳𝘢𝘮𝘴.𝘯𝘗𝘰𝘸𝘛𝘢𝘳𝘨𝘦𝘵𝘛𝘪𝘮𝘦𝘴𝘱𝘢𝘯*4;

Câu hỏi đặt ra là thực tế các đồng tiền Crypto đã sinh ra số ngẫu nhiền theo cách nào? Các chuyên gia nhào dzo nhé, welcome welcome.

PS. Tài khoản mà thợ đào Pi hiện nay sinh ra là cách chủ quan, không theo kiểu ngẫu nhiên mà các đồng crypto đang thực hiện.

(Fb Đặng Minh Tuấn)

Thẻ tìm kiếm:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *