NGHIÊN CỨU ĐẢM BẢO AN TOÀN VÍ TIỀN ĐIỆN TỬ CÔNG NGHỆ BLOCKCHAIN

66 428 2
NGHIÊN CỨU ĐẢM BẢO AN TOÀN VÍ TIỀN ĐIỆN TỬ CÔNG NGHỆ BLOCKCHAIN

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU ĐẢM BẢO AN TOÀN VÍ TIỀN ĐIỆN TỬ CÔNG NGHỆ BLOCKCHAIN Hà Nội, 2018 BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU ĐẢM BẢO AN TOÀN VÍ TIỀN ĐIỆN TỬ CÔNG NGHỆ BLOCKCHAIN Hà Nội, 2018 MỤC LỤC CÁC CỤM TỪ VIẾT TẮT iii DANH MỤC HÌNH VẼ iv DANH MỤC BẢNG BIỂU v LỜI CẢM ƠN vi LỜI NÓI ĐẦU vii CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN 1 1.1. Tổng quan công nghệ blockchain 1 1.1.1. Khái niệm Blockchain và một số khái niệm liên quan 1 1.1.2. Kiến trúc chung 2 1.1.2.1. Tầng ứng dụng (Applications) 3 1.1.2.2. Sổ cái phân tán (Decentralized Ledger) 3 1.1.2.3. Mạng ngang hàng (Peer to peer Network) 12 1.1.3. Các phiên bản của Blockchain hiện tại 13 1.1.3.1. Blockchain 1.0 13 1.1.3.2. Blockchain 2.0 13 1.1.3.3. Blockchain 3.0 13 1.1.4. Các loại Blockchain 13 1.2. Lợi ích của Blockchain 14 1.2.1. Phân cấp 14 1.2.2. Tính minh bạch và sự tin tưởng 14 1.2.3. Tính bảo toàn 15 1.2.4. Tính sẵn sàng cao 15 1.2.5. Tính bảo mật cao 15 1.2.6. Đơn giản hóa mô hình hiện tại 15 1.2.7. Giao dịch nhanh hơn 15 1.2.8. Tiêt kiệm chi phí 15 1.3. Thách thức và giới hạn của Blockchain 16 CHƯƠNG 2: VÍ ĐIỆN TỬ BLOCKCHAIN 17 2.1. Tổng quan về công nghệ ví 17 2.1.1. Ví bất định (ngẫu nhiên) 17 2.1.2. Ví tất định 18 2.1.2.1. Ví HD (BIP32BIP44) 19 2.1.2.2. Hạt giống (seed) và mã trợ nhớ 20 2.1.2.3. Cụm từ mã trợ nhớ 21 2.1.2.4. Tạo các từ trợ nhớ 22 2.1.2.5. Từ cụm trợ nhớ đến hạt giống 23 2.1.2.6. Tạo ví HD từ hạt giống 25 2.1.2.7. Tạo khóa bí mật con 26 2.1.2.8. Khóa mở rộng 27 2.1.2.9. Tạo khóa con gia cố 28 2.1.2.10. Số thứ tự để tạo khóa gia cố và khóa thường 30 2.1.2.11. Định danh (đường dẫn) khóa ví HD 30 2.2. Một số cách lưu trữ của ví tiền điện tử blockchain 31 2.2.1. Ví nóng 32 2.2.2. Ví trữ lạnh 33 2.3. Thực trạng vấn đề an toàn ví điện tử blockchain 33 2.3.1. Đánh giá hiện trạng 33 2.3.1.1. Bảo mật 33 2.3.1.2. Kiểm soát truy cập 34 2.3.2. Đề xuất giải pháp khắc phục 34 2.3.3. Phân tích kịch bản đa chữ ký 35 2.3.3.1. Tạo địa chỉ đa chữ ký P2SH 38 2.3.3.2. Kịch bản chi tiêu giao dịch đa chữ ký 40 CHƯƠNG 3: THỰC NGHIỆM MÔ PHỎNG VÍ ĐA CHỮ KÝ 45 3.1. Phát biểu bài toán 45 3.1.1. Lựa chọn công nghệ 45 3.1.2. Triển khai thực nghiệm 46 3.1.2.1. Tạo địa chỉ đa chữ ký 46 3.1.2.2. Tạo và chi tiêu giao dịch 47 3.2. Đánh giá mô hình thực nghiệm 50 KẾT LUẬN 51 TÀI LIỆU THAM KHẢO 52 PHỤ LỤC 53 CÁC CỤM TỪ VIẾT TẮT BIP32 Bitcoin Improvement Proposals 32 Đề xuất cải tiến bitcoin 32 BIP39 Bitcoin Improvement Proposals 39 Đề xuất cải tiến bitcoin 39 BIP44 Bitcoin Improvement Proposals 44 Đề xuất cải tiền bitcoin 44 CKD Childen key derivation Hàm tạo khóa con ECDSA Elliptic Curve Digital Signature Algorithm Thuật toán chữ ký số đường con elliptic HD Hierarachical Deterministic Ví tất định phân cấp PoW Proof of Work Bằng chứng xử lý P2SH Pay to script hash Trả tới mã băm kịch bản P2PKH Pay to pubkey hash Trả tới mã băm khóa công khai P2P Network PeertoPeer Network Mạng ngang hàng PBKDF2 PasswordBased Key Derivation Function 2 Hàm băm kéo dài khóa 2 RIPEMD160 RACE Integrity Primitives Evaluation Message Digest Thuật toán mã hóa RIPEMD160 SHA256 SHA256 Cryptographic Hash Algorithm Thuật toán mã hóa SHA256 UTXO Unspent transaction outputs Đầu ra chưa chi tiêu Xprv Extend Private Key Khóa bí mật mở rộng Xpub Extend Public Key Khóa công khai mở rộng DANH MỤC HÌNH VẼ Hình 11. Kiến trúc chung Blockchain 2 Hình 12.Ví dụ ví Bitcoin 3 Hình 13. Khóa bí mật, khóa công khai, địa chỉ bitcoin 4 Hình 14. Ví dụ tập UTXO 5 Hình 15. Cấu trúc một block 9 Hình 16. Cây merkle 10 Hình 21. Ví bất định 18 Hình 22. Ví tất định (được gieo hạt): một chuỗi khóa tất định được tạo ra từ một hạt giống 19 Hình 23. Ví HD: một cây gồm các khóa được tạo ra từ một hạt giống duy nhất 20 Hình 24. Tạo entropy và mã hóa thành cụm từ trợ nhớ 23 Hình 25. Từ cụm trợ nhớ đến hạt giống 24 Hình 26. Ví dụ mã trợ nhớ và hạt giống 25 Hình 27. Tạo khóa chính (master key) và mã chuỗi (master chain code) từ hạt giống gốc 26 Hình 28. Mở rộng khóa bí mật mẹ và tạo ra các khóa con của nó, cứ thế tiếp tục thành vô số thế hệ 27 Hình 29. Tạo khóa con gia cố; bỏ qua khóa công khai mẹ 29 Hình 210. Kết hợp scriptSig và scriptPubkey xác định mã giao dịch 35 Hình 211. Sơ đồ tạo địa chỉ đa chữ ký P2SH 40 Hình 212. Tạo chữ ký cho giao dịch 41 Hình 213. Quá trình kiểm tra chữ ký 42 Hình 214. Quá trình thực thi kịch bản 44 Hình 31. Giao diện nhập số địa chỉ và số yêu cầu khóa 46 Hình 32. Tạo địa chỉ đa chữ ký 2 trong 5 khóa 47 Hình 33. Giao diện yêu cầu nhập thông tin giao dịch 47 Hình 34. Giao diện hiển thị thông tin giao dịch chưa ký Unsigned TX 48 Hình 35. Giao dịch sau khi được ký 49 Hình 36. Giao dịch lỗi 49 Hình 37. Mã băm Transaction ID 49 Hình 38. Giao diện tra cứu giao dịch trên BlockCypher 50 DANH MỤC BẢNG BIỂU Bảng 11. Mã băm khi thay đổi hậu tố 12 Bảng 21. Biểu thức của kịch bản P2SH và P2PKH 37 Bảng 22. Kịch bản không dùng P2SH 38 Bảng 23. Kịch bản dùng P2SH 38 Bảng 24. Biểu thức kịch bản mô tả redeemScript 39   LỜI CẢM ƠN Trong quá trình thực hiện và hoàn thiện báo cáo thực tập này, em xin gửi lời cảm ơn chân thành nhất đến các thầy cô trong Khoa An toàn thông tin nói riêng cũng như toàn thể các thầy cô của Học Viện Kỹ Thuật Mật Mã nói chung đã cung cấp cho em những kiến thức quý báu trong suốt 5 năm học qua. Đặc biệt cho em gửi lời cảm ơn sâu sắc nhất tới ThS. Nguyễn Thị Hồng Hà và KS. Trịnh Khắc Linh đã dành nhiều thời gian vô cùng quý báu để định hướng và tận tình hướng dẫn em cũng như tạo mọi điều kiện thuận lợi để em có thể hoàn thành tốt nhất đồ án tốt nghiệp của mình. Em xin chân thành cảm ơn SINH VIÊN THỰC HIỆN Đặng Văn Quyết   LỜI NÓI ĐẦU Thương mại trên Internet hiện nay hầu như chỉ dựa vào các cơ quan tài chính đóng vài trò như các bên thứ ba đáng tin cậy để xử lý các thanh toán điện tử. Trong khi hệ thống này hoạt động vẫn đủ tốt đối với hầu hết các giao dịch, nó vẫn phải gánh chịu những điểm yếu cố hữu của mô hình dựa trên lòng tin. Ví dụ như các vấn đề về chi phí giao dịch, thời gian xử lý, gian lận... Trong đó một tỷ lệ gian lận nhất định phải được chấp thuận như điều không thể tránh khỏi. Các chi phí này và những sự không chắc chắn trong thanh toán có thể tránh được bằng cách sử dụng đồng tiền vật lý, nhưng không thể tồn tại cơ chế nào để thực hiện thanh toán qua một kênh truyền thông mà không cần một bên được tín nhiệm. Điều cần thiết chính là một hệ thống thanh toán điện tử dựa trên bằng chứng mật mã thay vì tín nhiệm, cho phép hai bên bất kỳ tự nguyện giao dịch trực tiếp với nhau mà không cần phải có một bên thứ ba đáng tin cậy. Với việc phát minh ra bitcoin vào năm 2008, thế giới đã được đưa vào một khái niệm mới mà hiện nay có khả năng cách mạng hóa toàn bộ xã hội. Đó là điều hứa hẹn sẽ ảnh hưởng đến mọi ngành nghề, không chỉ giới hạn ở các lĩnh vực tài chính, chính phủ và truyền thông. Một số mô tả nó như là một cuộc cách mạng, trong khi một trường phái tư tưởng khác nói rằng nó sẽ là một sự tiến hóa và phải mất nhiều năm nữa mới có được những lợi ích thiết thực từ blockchain. Cuộc cách mạng đã bắt đầu; nhiều tổ chức lớn trên khắp thế giới đã chứng minh bằng cách sử dụng công nghệ blockchain vì tiềm năng của nó đã được công nhận đầy đủ. Tuy nhiên, một số tổ chức vẫn đang ở giai đoạn thăm dò sơ bộ nhưng dự kiến sẽ tiến bộ nhanh hơn khi công nghệ ngày càng trở nên trưởng thành. Đây là một công nghệ có ảnh hưởng đến các công nghệ hiện tại và có khả năng thay đổi chúng ở mức cơ bản. Khái niệm tiền điện tử hoặc tiền tệ kỹ thuật số không phải là mới. Kể từ những năm 1980, các giao thức điện tử đã tồn tại dựa trên mô hình do David Chaum đề xuất. Các vấn đề cơ bản cần được giải quyết trong các hệ thống tiền điện tử là trách nhiệm giải trình và ẩn danh. David Chaum đã giải quyết cả hai vấn đề này trong bài báo cáo của ông vào năm 1984 bằng cách giới thiệu hai hoạt động mật mã, đó là chữ ký mù và chia sẻ bí mật. Tại thời điểm này, có thể nói rằng chữ ký mù cho phép ký một tài liệu mà không thực sự nhìn thấy nó và chia sẻ bí mật là một khái niệm cho phép phát hiện vấn đề double spending (chi kép). Sau khi các giao thức khác xuất hiện như Chaum, Fiat, và Naor (CFN), chương trình ecash đã giới thiệu tính ẩn danh và phát hiện chi kép. Thương hiệu ecash là một hệ thống cải tiến khác trên CFN, làm cho nó trở nên hiệu quả hơn. Một khái niệm khác nhưng có liên quan được gọi là hashcash do Adam Back giới thiệu vào năm 1997 là một hệ thống Proof of Work (PoW) để kiểm soát email rác. Ý tưởng khá đơn giản: nếu người dùng hợp pháp muốn gửi email, thì họ phải tính toán hàm băm để chứng minh rằng họ đã sử dụng một lượng tài nguyên máy tính hợp lý trước khi gửi email. Tạo hashcash là một quy trình tăng cường tính toán nhưng không ngăn cản người dùng hợp pháp gửi email vì số lượng thư thông thường mà người dùng hợp pháp yêu cầu phải là khá thấp. Mặt khác, nếu một spammer muốn gửi email, thường là số lượng hàng nghìn, thì sẽ trở nên không thể tính được hashcash cho tất cả các email, do đó làm cho nỗ lực gửi spam tốn kém; kết quả là cơ chế này có thể được sử dụng để ngăn chặn email spam. Hashcash chiếm một lượng đáng kể tài nguyên máy tính để tính toán nhưng dễ dàng và nhanh chóng xác minh. Việc xác minh được thực hiện bởi người dùng nhận email. Hashcash được phổ biến bởi việc sử dụng nó trong quá trình đào bitcoin. Ý tưởng sử dụng các câu đố toán học hoặc các chức năng định giá để ngăn chặn spam email ban đầu được giới thiệu vào năm 1992 bởi Cynthia Dwork và Moni Naor. Sau đó, Adam Back đã phát minh ra hashcash độc lập vào năm 1997, trong đó giới thiệu việc sử dụng các hàm băm máy tính như PoW. Năm 1998, bmoney được giới thiệu bởi Wei Dai và đề xuất ý tưởng tạo ra tiền điện tử thông qua việc giải quyết các câu đố toán học như hashcash. Nó dựa trên mạng peertopeer, nơi mỗi nút duy trì danh sách các giao dịch của chính nó. Một ý tưởng tương tự khác của Nick Szabo được gọi là BitGold đã được giới thiệu vào năm 2005 và cũng đề xuất giải quyết các câu đố toán học để khai thác tiền điện tử. Năm 2005, Hal Finney giới thiệu khái niệm tiền mật mã bằng cách kết hợp ý tưởng từ bmoney và các câu đố hashcash nhưng nó vẫn dựa vào một cơ quan tin cậy tập trung. Trong năm 2009, triển khai thực tế đầu tiên của một cryptocurrency tên Bitcoin được giới thiệu; lần đầu tiên nó giải quyết được vấn đề phân tán của sự đồng thuận trong một mạng tin cậy. Nó sử dụng mật mã khóa công khai với hashcash như PoW để cung cấp một phương pháp an toàn, kiểm soát và phân cấp của phương pháp khai thác tiền điện tử. Sự đổi mới chính là ý tưởng của một danh sách được sắp xếp của các khối bao gồm các giao dịch và mật mã bảo mật bằng cơ chế PoW. Nhìn vào tất cả các công nghệ nói trên và lịch sử của họ, thật dễ dàng để thấy những ý tưởng và khái niệm từ các chương trình tiền điện tử và các hệ thống phân phối được kết hợp với nhau để tạo ra bitcoin và cái bây giờ được gọi là công nghệ blockchain. Blockchain đầu tiên được phát minh và thiết kế bới Satoshi Nakamoto và được hiện thực hóa vào năm sau đó như là một phần cốt lõi của Bitcoin, khi công nghệ blockchain đóng vai trò như là một cuốn sổ cái cho tất cả các giao dịch. Qua việc sử dụng mạng lưới ngang hàng và một hệ thống dữ liệu phân cấp, Bitcoin blockchain được quản lý tự động. Việc phát minh ra blockchain cho Bitcoin đã làm cho nó trở thành loại tiền tệ kỹ thuật số đầu tiên giải quyết được vấn đề double spending (chi tiêu gian lận khi 1 lượng tiền được dùng 2 lần). Công nghệ này của Bitcoin đã trở thành nguồn cảm hứng cho một loạt các ứng dụng khác. Nhận thấy, sự quan trọng của công nghệ blockchain nên đồ án đã lựa chọn tìm hiểu đề tài về “Nghiên cứu đảm bảo an toàn ví tiền điện tử công nghệ blockchain”. Để nghiên cứu hiểu rõ hơn về ứng dụng ví điện tử blockchain, mục tiêu tìm hiểu về công nghệ blockchain, công nghệ ví blockchain. Đây là công nghệ giúp cho việc giao dịch tiền điện tử được bảo mật bởi các thuật toán mã hóa khóa công khai, sử dụng chữ ký số và hàm băm để bảo vệ tính bí mật, xác thực và toàn vẹn thông tin trong công nghệ blockchain. Nội dung của đồ án tốt nghiệp gồm ba chương: Chương 1: Tổng quan về công nghệ blockchain, bao gồm những hiểu biết cơ bản về công nghệ blockchain như: định nghĩa, kiến trúc chung, các loại blockchain, những lợi ích và rủi ro của công nghệ blockchain. Chương 2: Công nghệ ví tiền điện tử blockchain, chỉ rõ được khái niệm, chi tiết công nghệ ví, một số ứng dụng ví thường gặp, thực trạng an toàn ví hiện nay. Chương 3: Thực nghiệm mô phỏng ví đa chữ ký, triển khai ứng dụng tạo địa chỉ, tạo giao dịch đa chữ ký 2 trong 5 khóa. Do thời gian thực hiện đồ án tương đối ngắn hạn nên đồ án của em chắc chắn sẽ không tránh khỏi những thiếu sót. Vì vậy em rất mong nhận được sự đóng góp ý kiến của thầy cô để đồ án của em được hoàn thiện hơn. Em xin chân thành cảm ơn SINH VIÊN THỰC HIỆN Đặng Văn Quyết CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN Tổng quan công nghệ blockchain Khái niệm Blockchain và một số khái niệm liên quan Blockchain (chuỗi khối) là một cơ sở dữ liệu phân cấp lưu trữ thông tin trong các khối thông tin được liên kết với nhau bằng mã hóa và mở rộng theo thời gian. Mỗi khối thông tin đều chứa thông tin về thời gian khởi tạo và được liên kết tới khối trước đó, kèm một mã thời gian và dữ liệu giao dịch. Blockchain được thiết kế để chống lại việc thay đổi của dữ liệu: Một khi dữ liệu đã được mạng lưới chấp nhận thì sẽ không có cách nào thay đổi được nó. Blockchain phù hợp để ghi lại những sự kiện, hồ sơ y tế, xử lý giao dịch, công chứng, định danh và chứng minh nguồn gốc. Việc này có tiềm năng giúp xóa bỏ các hậu quả lớn khi dữ liệu bị thay đổi trong bối cảnh thương mại toàn cầu. Một khối (block) đơn giản chỉ là một sự lựa chọn của các giao dịch được nhóm lại với nhau để tổ chức chúng một cách hợp lý. Nó được tạo thành từ các giao dịch và kích thước khối phụ thuộc vào loại thiết kế của blockchain đang sử dụng. Một tham chiếu đến một khối trước đó cũng được bao gồm trong khối trừ khi nó là một khối genesis. Một khối Genesis hay còn gọi là khối nguyên thủy là khối đầu tiên trong blockchain đã được hardcoded tại thời điểm blockchain đã được bắt đầu. Cấu trúc của một khối cũng phụ thuộc vào kiểu và thiết kế của một blockchain, nhưng thông thường có một vài thuộc tính cần thiết cho chức năng của một khối, chẳng hạn như tiêu đề khối, các con trỏ tới các khối trước đó, tem thời gian, nonce, bộ đếm giao dịch, giao dịch và các thuộc tính khác. Sổ cái phân tán (Decentralized Legder) là một cơ sở dữ liệu phân tán sử dụng blockchain để ghi lại các giao dịch.   Kiến trúc chung Hình 11 dưới đây cho thấy cấu trúc chung của một hệ thống blockchain. Hình ảnh mô tả theo tài liệu 10. Hình 1 1. Kiến trúc chung Blockchain Lớp trên cùng đại diện cho tầng ứng dụng (Applications) có thể xây dựng dựa trên sổ cái phân tán (Decentralized Ledger) được duy trì bởi mạng ngang hàng (Peertopeer Network). Trong trường hợp của Bitcoin, các ứng dụng như vậy rất đơn giản vì toàn bộ kiến trúc chỉ hỗ trợ chức năng đó là trao đổi bitcoin cho mục đích thương mại hoặc đầu cơ. Ví dụ như là ví tiền Bitcoin (Bitcoin wallet) được tạo ra để quản lý số lượng coin của người dùng. Trong khí đó hiện nay, blockchain như Ethereum cho phép xây dựng những ứng dụng phức tạp hơn. Khối Decentralized Ledger bao gồm nhiều chức năng đảm bảo rằng sổ cái là duy nhất, có tính toàn cầu, vẫn giữ được sự thống nhất và chống gian lận. Cấu trúc cơ bản của sổ cái là Blockchain, nơi các giao dịch được nhóm thành các khối, mỗi khối lại liên kết với khối tiền nhiệm trước đó để tạo thành một chuỗi. Giao dịch đại diện cho một số các trao đổi giá trị giữa các thành viên. Ví dụ trong bitcoin là việc di chuyển số lượng bitcoin giữa các người dùng. Quá trình nhóm các giao dịch vào một khối để được thêm vào khối tiếp theo của blockchain hiện tại được gọi là quá trình đào (mining). Để đảm bảo sự đồng thuận giữa tất cả các nút (node) trên blockchain là hợp pháp, một thuật toán Proof of Work (PoW) được sử dụng như một cơ chế để chứng minh rằng một người đào đã hoàn thành số lượng công việc cần thiết để tìm ra một khối mới. Lớp cuối cùng của kiến trúc này là mạng ngang hàng với các loại nút đóng vai trò khác nhau trong hệ thống. Để cập nhập và duy trì sổ cái phân cấp, các nút này sẽ trao đổi các gói tin nhắn với nhau. Tầng ứng dụng (Applications) Ví(wallet) là một ứng dụng phần mềm tạo và lưu trữ các cặp khóa bí mật và công khai của người dùng. Ở mức khái quát, ví là ứng dụng đóng vai trò giao diện người dùng chính. Ví kiểm soát quyền truy cập tiền của người dùng, quản lý các khóa và địa chỉ, theo dõi số dư, tạo và ký giao dịch. Trên thực tế, ví không chứa bất kỳ một đồng coin nào mà thay vào đó nó sử dụng các bản ghi trên cuốn sổ cái phân tán để tạo ra một bức tranh dễ hiểu hơn về số lượng tiền của người dùng. Hình 12 là ví dụ về giao diện ví bitcoin. Hình 1 2.Ví dụ ví Bitcoin Để hiểu rõ hơn tại sao lại như vậy, đồ án sẽ đi chi tiết hơn ở phần giao dịch của mạng blockchain bitcoin. Sổ cái phân tán (Decentralized Ledger) Người tham gia và giao dịch bitcoin Cuốn sổ cái của bitcoin ghi lại trao đổi các giao dịch giữa người dùng trên hệ thống Bitcoin. Hầu hết người dùng đều là cá nhân nhưng bitcoin không quan tâm đến nhận dạng của họ. Số lượng bitcoin được gắn vào địa chỉ bitcoin và được chuyển từ địa chỉ này sang địa chỉ khác trong một giao dịch. Quyền sở hữu của bitcoin được thiết lập thông qua các khóa số, địa chỉ bitcoin và chữ ký số. Các khóa số này thực ra không được lưu trữ trên mạng mà do người dùng tạo ra và lưu trữ trong một file, hay một cơ sở dữ liệu đơn giản chính là ví. Các khóa số trong ví của người dùng hoàn toàn độc lập với giao thức bitcoin, và phần mềm ví của người dùng có thể tạo và quản lý chúng mà không cần tham chiếu tới blockchain hay phải kết nối Internet. Khóa là nhân tố kích hoạt nhiều thuộc tính của bitcoin, bao gồm kiểm soát giao dịch, tín nhiệm phi tập trung, xác thực quyền sở hữu, và mô hình an ninh sử dụng bằng chứng mật mã. Một địa chỉ bitcoin được tạo ra từ một cặp khóa bí mật và khóa công khai. Khóa bí mật sẽ được phần mềm tính toán và tạo ra ngẫu nhiên (thường được tạo ra từ phần mềm ví). Khóa công khai tương ứng được tạo ra bằng cách sử dụng thuật toán mật mã dựa trên đường cong Elliptic (ECDSAECC), cho phép người giữ khóa ký một cái gì đó với khóa bí mật và được kiểm tra bởi khóa công khai. Địa chỉ bitcoin được tạo ra bằng cách lấy khoá công khai tương ứng của khoá bí mật và băm nó hai lần, trước tiên với thuật toán SHA256 và sau đó với RIPEMD160. Kết quả là băm 160 bit sau đó được bắt đầu với một số phiên bản và cuối cùng được mã hoá bằng lược đồ mã hóa Base58Check. Địa chỉ bitcoin dài 2635 ký tự và bắt đầu bằng chữ số 1 hoặc 3 tùy thuộc cách sử dụng địa chỉ. Địa chỉ bitcoin điển hình trông giống như một chuỗi được hiển thị ở đây: 1PkaJqaF7CNEov8UQaShdJM5hZMMg8vube Mối quan hệ giữa khóa bí mật, khóa công khai và địa chỉ bitcoin được thể hiện trong hình 13. Hình 1 3. Khóa bí mật, khóa công khai, địa chỉ bitcoin Kết quả là các bitcoin liên quan đến một địa chỉ cụ thể được cho là “sở hữu” bởi người nắm giữ khóa bí mật có thể ký các giao dịch và sử dụng lượng bitcoin đó. Giao dịch là cốt lõi của hệ sinh thái bitcoin. Giao dịch có thể đơn giản chỉ bằng cách gửi một số bitcoin đến một địa chỉ này đến một địa chỉ bitcoin khác, hoặc nó có thể khá phức tạp tùy thuộc vào yêu cầu. Mỗi giao dịch bao gồm ít nhất một đầu vào (input) và đầu ra (output). Đầu ra giao dịch là các khối tiền không thể chia tách, được ghi vào blockchain và được toàn bộ mạng bitcoin công nhận là hợp lệ. Các nút đầy đủ theo dõi tất cả các đầu ra hiện có, có thể có và có thể chi tiêu, hay còn gọi là các đầu ra giao dịch chưa sử dụng, hay UTXO (unspent transaction outputs). Các giao dịch mới có đầu vào sử dụng (chi tiêu) một hoặc nhiều đầu ra từ tập UTXO. Ví dụ về tập UTXO ở hình 14 dưới đây. Hình 1 4. Ví dụ tập UTXO Chi tiết một giao dịch thô được mô tả như ví dụ dưới đây: { version: 1, locktime: 0, vin: { txid: 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18, vout: 0, scriptSig : 3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813ALL 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf, sequence: 4294967295 } , vout: { value: 0.01500000, scriptPubKey: OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG }, { value: 0.08450000, scriptPubKey: OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG, } } Đầu ra giao dịch bao gồm hai phần: Một lượng coin nhất định Một thách thức mật mã quyết định các điều kiện cần thiết để có thể sử dụng đầu ra. Thách thức mật mã này nằm trong một ngôn ngữ kịch bản, gọi là kịch bản khóa, hay một scriptPubKey. Xem xét chi tiết giao dịch cụ thể sau, trong mã hóa JSON, đầu ra nằm trong một mảng có tên là vout: vout: { value: 0.01500000, scriptPubKey: OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG }, { value: 0.08450000, scriptPubKey: OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG, } Có thể thấy, mảng vout của giao dịch này chứa hai đầu ra. Mỗi đầu ra được xác định một giá trị và một kịch bản khóa. Các đầu vào giao dịch xác định (tham chiếu) UTXO sẽ chi tiêu và cung cấp bằng chứng sở hữu thông qua một kịch bản mở khóa, hay scriptSig. Để tạo một giao dịch, ví chọn ra số các UTXO mà nó kiểm soát có đủ giá trị để thực hiện khoản thanh toán được yêu cầu. Các đầu vào giao dịch là một mảng gọi là vin: vin: { txid: 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18, vout: 0, scriptSig : 3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813ALL 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf, sequence: 4294967295 } Đầu vào này chứa 4 yếu tố: Một ID txid giao dịch tham chiếu đến giao dịch chứa UTXO đang được chi tiêu. Một số thứ tự đầu ra (vout) xác đinh UTXO nào trong giao dịch đó đang được tham chiếu đến. Một scriptSig thỏa mãn các điều kiện đặt ra cho UTXO đó, mở khóa nó để chi tiêu. Một số tuần tự Ngôn ngữ kịch bản giao dịch bitcoin được gọi là Script. Cả kịch bản khóa đặt trong UTXO và kịch bản mở khóa đều được viết bằng ngôn ngữ kịch bản này. Khi một giao dịch được xác thực, kịch bản mở khóa trong mỗi đầu sẽ được thực thi cùng với kịch bản khóa tương ứng, để kiểm tra xem đầu vào đó có thỏa mãn điều kiện chi tiêu hay không. Kịch bản khóa (scriptPubKey) là một điều kiện chi tiêu đặt trong một đầu ra: nó chỉ rõ các điều kiện phải được đáp ứng để có thể chi tiêu đầu ra đó trong tương lai. Kịch bản khóa thường chứa một khóa công khai hoặc một địa chỉ bitcoin (mã băm khóa công khai). Kịch bản mở khóa là một kịch bản “giải đố”, hay thỏa mãn các điều kiện do kịch bản khóa đặt vào đầu ra và cho phép chi tiêu đầu ra đó. Kịch bản mở khóa là một phần của mọi đầu vào giao dịch. Thông thường, chúng chứa một chữ ký số do ví của người dùng tạo ra từ khóa bí mật. Kịch bản mở khóa thường được gọi là scriptSig, bởi nó thường chứa một chữ ký số Bất kỳ một giao dịch nào được truyền lên mạng bitcoin thì đều được kiểm tra tính hợp lệ của giao dịch. Một số kiểm tra như cú pháp, đầu vào và đầu ra, kiểm tra khóa với ngôn ngữ kịch bản, kiểm tra số tiền,...Chỉ các giao dịch hợp lệ mới được truyền lên để tránh các cuộc tấn công spam và từ chối dịch vụ. Để ghi giao dịch hợp lệ vào sổ cái thì giao dịch sẽ được mã hóa và lưu trong các block. Cấu trúc block Cấu trúc dữ liệu blockchain là một danh sách gồm các block giao dịch được sắp xếp thứ tự. Các block được liên kết với nhau theo thứ tự, mỗi block tham chiếu đến block trước đó trong chuỗi. Blockchain thường được hình dung như một ngăn xếp theo chiều dọc, trong đó các block xếp chồng lên nhau và block đầu tiên đóng vai trò là nền tảng của ngăn xếp. Vì không có điểm trung tâm trong mạng bitcoin duy trì bản ghi cuối cùng của các giao dịch, nên phải có một cách để các giao dịch hợp lệ được liên kết vào cuốn sổ cái blockchain. Bước đầu tiên trong quá trình ghi lại các giao dịch trong sổ cái là hành động nhóm các giao dịch mới hợp thành một khối. Thu nhập các giao dịch mới và tạo ra một khối có thể được nối vào blockchain là một hoạt động có thể tham gia bởi tất cả người dùng khi có đủ khả năng tính toán. Nút thực hiện điều này được gọi là thợ đào (miner), và hành động tạo ra một khối đáp ứng các tiêu chí để gắn vào cuối của blockchain được gọi là quá trình đào (mining). Đồ án sẽ mô tả làm thế nào đào trong nội dung dưới, ở đây sẽ tập trung vào cấu trúc của một block. Hình 15 dưới đây là cấu trúc đơn giản của một block. Hình 1 5. Cấu trúc một block Một block thông thường có 2 phần chính: header và danh sách các giao dịch. Header chứa các thông tin dữ liệu như version, nonce, mã băm block trước đó, tem thời gian, cây merkle, theo sau là một danh sách dài các giao dịch, chiếm phần lớn kích thước của block. Mỗi block trong blockchain bitcoin chứa một bản tóm tắt toàn bộ các giao dịch có trong block đó sử dụng một cây merkle. Một cây merkle là một cấu trúc dữ liệu được sử dụng để tóm lược và kiểm tra tính toàn vẹn của những tập dữ liệu lớn một cách hiệu quả. Các cây merkle là các cây nhị phân chứa các mã băm mật mã. Thuật ngữ “cây” thường được sử dụng trong khoa học máy tính để mô tả cấu trúc dữ liệu phân nhánh, có gốc ở trên và lá ở dưới như ví dụ hình 16. Hình 1 6. Cây merkle Cây merkle được xây dựng từ dưới lên bằng cách băm các giao dịch theo từng cặp cho tới khi chỉ còn một mã băm được gọi là gốc merkle (merkle root). Các thông tin còn lại của phần header sẽ được sử dụng trong quá trình đà sẽ được mô tả chi tiết ở phần quá trình đào và cơ chế đồng thuận. Danh sách giao dịch bao gồm tất cả các giao dịch có trong block. Quá trình đào và cơ chế đồng thuận Quá trình đào chính là cơ chế làm nền tảng cho thanh toán phi tập trung, qua đó các giao dịch được xác thực và thanh toán. Quá trình đào là phát minh tạo cho bitcoin trở nên đặc biệt, một cơ chế bảo mật phi tập trung là cơ sở cho tiền điện tử ngang hàng. Việc đào bảo mật hệ thống bitcoin và cho phép sự xuất hiện của đồng thuận toàn mạng lưới mà không cần một cơ quan quyền lực trung tâm nào. Phần thưởng cho công việc này gồm các đồng bitcoin mới được tạo ra và phí giao dịch là một mô hình khích lệ nhằm hỗ trợ hoạt động của các thợ đào vì sự bảo mật của mạng lưới, trong khi cũng đồng thời thực hiện việc cung ứng tiền tệ. Các thợ đào xác thực giao dịch mới và ghi chúng vào sổ cái. Một block mới, chứa các giao dịch xảy ra sau block cuối cùng, được “đào” trung bình mỗi 10 phút, từ đó bổ sung thêm các giao dịch vào blockchain. Các giao dịch trở thành một phần của block và được thêm vào blockchain được coi là “đã được xác nhận”, cho phép những chủ sở hữu mới của bitcoin có thể tiêu bitcoin mà họ nhận được trong các giao dịch đó. Các thợ đào nhận được hai loại phần thưởng cho việc cung cấp bảo mật bằng việc đào: những đồng tiền mới được tạo ra cùng với mỗi block mới và phí giao dịch từ tất cả các giao dịch trong block. Để kiếm được phần thưởng này, các thợ đào phải cạnh tranh để giải quyết một bài toán học khó khăn dựa trên một thuật toán băm mật mã. Giải pháp cho vấn đề này được gọi là bằng chứng xử lý (Proof of Work), được bao gồm trong block mới và đóng vai trò là bằng chứng cho thấy người đào đã có nỗ lực tính toán rất lớn. Thuật toán PoW băm lấy một đầu vào dữ liệu (phần header) và tạo ra một kết quả xác định. Với bất kỳ một đầu vào cụ thể, mã băm sẽ luôn luôn là như nhau và có thể dễ dàng được tính và xác minh bởi bất cứ ai thực hiện cùng một thuật toán băm. Hàm băm SHA256 là hàm được sử dụng trong quá trình đào bitcoin. Trong SHA256, với kích thước của đầu vào có độ dài bất kỳ thì kích thước đầu ra luôn là 256 bit. Minh họa cho điều này bằng ví dụ sau, sử dụng mã hóa SHA256 cho cụm từ “I am Satoshi Nakamoto”: Input: I am Satoshi Nakamoto Kết quả sau khi băm: Output: 5d7c7ba21cbbcd75d14800b100252d5b428e5b1213d27c385bc141ca6b47989e Bây giờ, sẽ thêm các hậu tố vào cụm từ để thay đổi độ dài của input trên sẽ nhận được mã băm khác nhau như bảng 11. Bảng 1 1. Mã băm khi thay đổi hậu tố I am Satoshi Nakamoto9 → 7007cf7dd40f5e933cd89fff5b791ff0… I am Satoshi Nakamoto10 → c2f38c81992f4614206a21537bd634a...… I am Satoshi Nakamoto11 → 7045da6ed8a914690f087690e1e8d66… I am Satoshi Nakamoto12 → 60f01db30c1a0d4cbce2b4b22e88b9b … I am Satoshi Nakamoto13 → 0ebc56d59a34f5082aaef3d66b37a66… I am Satoshi Nakamoto14 → 27ead1ca85da66981fd9da01a8c6816… Số được sử dụng như là một biến trong một kịch bản như vậy được gọi là một nonce. Nonce được sử dụng để thay đổi đầu ra của một hàm mật mã, trong trường hợp này là để thay đổi giá trị SHA256 của cụm từ. Để đưa ra một thách thức trong thuật toán này, có một mục tiêu được đặt ra như sau: “tìm cụm từ tạo ra một mã băm bắt đầu bằng số 0”. Từ ví dụ trên, sẽ thấy cụm từ “I am Satoshi Nakamoto13” tạo ra mã băm có bắt đầu là số 0, phù hợp với tiêu chí đưa ra. Phải mất 13 lần tìm kiếm để tìm ra kết quả này. Như vậy, độ khó của bài toán đặt ra sẽ phụ thuộc vào độ khó của tiêu chí đưa ra. Thợ đào sẽ sử dụng sức mạnh tính toán để có thể tìm ra được đáp án. Kết quả thành công cũng là bằng chứng xử lý, bởi vì nó chứng minh rằng các thợ đào đã xử lý công việc để tìm ra nonce đó. Và kết quả này cũng sẽ được xác thực độc lập bởi bất kỳ thợ đào nào khác vì giá trị băm sẽ không đổi. Sự đồng thuận sẽ xảy ra trên toàn mạng lưới. Mạng ngang hàng (Peer to peer Network) Bất kỳ máy tính nào cũng có thể là một nút Bitcoin. Tất cả yêu cầu của một nút đầy đủ là có đủ không gian lưu trữ, sức mạnh tính toán và có thể liên lạc với các nút khác thông qua hạ tầng Internet. Giao thức mạng Bitcoin cho phép các nút đầy đủ đồng bộ và duy trì một mạng ngang hàng cho việc trao đổi block và giao dịch. Nút đầy đủ tải về và xác minh mỗi khối và giao dịch trước khi chuyển chúng lên các nút khác. Nó lưu trữ toàn bộ blockchain và có thể tạo thành một nơi tra cứu lịch sử block cho các nút khác. Các nút có chứa chức năng của nút đầy đủ nhưng không chứa toàn bộ block trên mà chỉ sử dụng phiên bản rút gọn gọi là nút ngắn gọn. Nút gắn gọn này có thể là ví. Tất cả những người tham gia hoạt động của mạng lưới sẽ giúp đảm bảo sự an toàn và tính sẵn sàng cho mạng lưới. Các phiên bản của Blockchain hiện tại Blockchain 1.0 Được giới thiệu với việc phát minh ra bitcoin và cơ bản của tiền điện tử. Ngoài ra, bitcoin được coi là dấu mốc để phân loại Blockchain 1.0 gồm các công nghệ chỉ bao gồm tiền tệ mật mã. Tất cả các đồng coin tương tự và bitcoin được phân thể loại này. Bao gồm các ứng dụng về thanh toán. Blockchain 2.0 Thế hệ 2.0 được sử dụng bởi các dịch vụ tài chính và các hợp đồng được giới thiệu trong thế hệ này. Bao gồm các tài sản tài chính khác nhau, ví dụ như các công cụ phái sinh, các lựa chọn, hoán đổi và trái phiếu. Các ứng dụng vượt quá tiền tệ, tài chính và thị trường được bao gồm ở cấp này. Blockchain 3.0 Thế hệ thứ ba của blockchains được sử dụng để thực hiện các ứng dụng ngoài ngành dịch vụ tài chính và được sử dụng trong các ngành công nghiệp có mục đích chung như chính phủ, y tế, truyền thông, nghệ thuật và công lý. Các loại Blockchain Dựa vào sự phát triển trong vòng vài năm qua, Blockchain có thể được chia thành nhiều loại với các thuộc tính riêng biệt nhưng đôi khi là hỗ trợ cho nhau. Blockhain có thể chia thành ba loại cơ bản như sau: Blockchain công khai: được phân phối mở và công bố công khai. Thông tin giao dịch của blockchain là công khai. Để đảm bảo tính nhất quán của hệ thống xác nhận các giao dịch, các ưu đãi về tài chính và các cơ chế đồng thuận được nhúng vào hệ thống. Bởi vì chuỗi blockchain được công bố cho toàn mạng nên những cải tiến chỉ được thay đổi khi có sự nhất chí của toàn bộ hệ thống. Điều quan trọng là các dạng Blockchain công khai có tiềm năng lớn để giảm chi phí. Blockchain riêng tư: được thiết lập và duy trì bởi các tổ chức tư nhân, chỉ cấp quyền truy cập cho các bên có thẩm quyền. Các giao dịch được xác minh trong Blockchain riêng tư và có thể được sửa đổi trong mạng riêng đó, do đó cho phép các nhà khai thác sửa lỗi. Điều này sẽ không được chấp nhận trong một blockchain công khai. Các blockchain riêng tư có thể xác thực các giao dịch nhanh hơn trong vòng vài giây – bởi chúng hoạt động trên các mạng được kiểm soát (không phải là tập trung) và được tạo ra bởi ít máy tính hơn. Slidechain: là mạng phân cấp, peertopeer cung cấp các cải tiến hữu ích (như bảo mật, rủi ro và hiệu suất) và chạy song song với một blockchain chính. Ví dụ: slidechain cho phép các nhà phát triển các ứng dụng mới một cách an toàn mà không gặp rủi ro. Sidechain cũng có thể được hình dung như một cơ chế cho phép các phần sử dụng trong một blockchain riêng biệt, được di chuyển trở lại chuỗi ban đầu nếu cần. Theo quy đươc, chuỗi ban đầu thường được gọi là “chuỗi chính”, trong đó, những phần thêm vào cho phép người dùng giao dịch bên trong chuỗi chính, có thể được gọi là “sidechain”. Lợi ích của Blockchain Nhiều lợi ích của công nghệ blockchain đang được thảo luận trong ngành công nghiệp và được các nhà lãnh đạo tư tưởng đề xuất trên khắp thế giới trong không gian blockchain. Mười lợi ích hàng đầu được liệt kê và thảo luận như sau: Phân cấp Đây là một khái niệm cốt lõi và lợi ích của blockchain. Không cần phải có một bên thứ ba đáng tin cậy hoặc trung gian để xác nhận các giao dịch; thay vào đó một cơ chế đồng thuận được sử dụng để thống nhất về tính hợp lệ của các giao dịch. Tính minh bạch và sự tin tưởng Khi blockchain được chia sẻ công khai, mọi người có thể nhìn thấy những gì đang có trên blockchain, điều này cho phép hệ thống được minh bạch và như là một sự tin tưởng từ kết quả được xây dựng. Điều này có liên quan hơn trong các tình huống như việc giải ngân vốn hoặc lợi ích mà cần phải hạn chế quyền cá nhân. Tính bảo toàn Một khi các dữ liệu đã được ghi vào blockchain, rất khó để thay đổi nó trở lại. Nó không thực sự bất biến nhưng do sự thay đổi dữ liệu là cực kỳ khó khăn và hầu như không thể, điều này được xem như là một lợi ích để duy trì một sổ cái bất biến của các giao dịch. Tính sẵn sàng cao Khi hệ thống dựa trên hàng ngàn nút trong một mạng ngang hàng, và dữ liệu được nhân rộng và cập nhật trên mỗi nút, hệ thống trở nên có sẵn rất cao. Ngay cả khi các nút rời khỏi mạng hoặc trở nên không thể tiếp cận, toàn bộ hệ thống vẫn tiếp tục hoạt động, do đó làm cho hệ thống có tính sẵn sàng cao. Tính bảo mật cao Tất cả các giao dịch trên một blockchain được bảo mật mật mã và cung cấp tính toàn vẹn. Đơn giản hóa mô hình hiện tại Mô hình hiện tại trong nhiều ngành công nghiệp như tài chính hoặc y tế khá thiếu tổ chức, trong đó nhiều thực thể duy trì cơ sở dữ liệu riêng của họ và chia sẻ dữ liệu có thể trở nên rất khó khăn do tính chất khác biệt của hệ thống. Tuy nhiên, một blockchain có thể đóng vai trò như một sổ cái chia sẻ giữa các bên liên quan, điều này có thể làm đơn giản hóa mô hình này bằng cách giảm sự phức tạp của việc quản lý các hệ thống riêng biệt được duy trì bởi mỗi thực thể. Giao dịch nhanh hơn Trong ngành tài chính, đặc biệt là các chức năng thanh toán sau thương mại, blockchain có thể đóng một vai trò quan trọng bằng cách nó cho phép giải quyết nhanh chóng các giao dịch vì nó không yêu cầu quá trình xác minh, đối chiếu nguồn gốc bởi vì một phiên bản dữ liệu đã được đồng ý sẵn sàng có trên sổ cái chia sẻ giữa các tổ chức tài chính. Tiêt kiệm chi phí Vì không có bên thứ ba hoặc các nhà thanh toán bù trừ được yêu cầu trong mô hình blockchain, điều này có thể loại bỏ ồ ạt chi phí đầu vào dưới hình thức các khoản phí trả cho các nhà thanh toán bù trừ hoặc các bên thứ ba đáng tin cậy. Thách thức và giới hạn của Blockchain Như với bất kỳ công nghệ nào cũng có những thách thức cần được giải quyết nhằm làm cho hệ thống trở nên mạnh mẽ, hữu ích và dễ tiếp cận hơn. Công nghệ Blockchain không phải là ngoại lệ; trong thực tế, rất nhiều nỗ lực đang được thực hiện trong Học viện và Công nghiệp để vượt qua những thách thức đặt ra bởi công nghệ blockchain. Một sự lựa chọn của những thách thức nhạy cảm nhất được trình bày như sau: Khả năng mở rộng Khả năng thích nghi Quy chế Khả năng bảo mật ví Rủi ro của các pool đào Rủi ro trên các sàn giao dịch   CHƯƠNG 2: VÍ ĐIỆN TỬ BLOCKCHAIN Tổng quan về công nghệ ví Một sự nhầm lẫn khái niệm thường gặp về blockchain cũng như bitcoin là ví blockchain chứa coin nhưng trên thực tế, ví blockchain chỉ chứa khóa. Các coin được ghi lại vào blockchain trên mạng bitcoin. Người dùng kiểm soát tiền của mình trên mạng lưới bằng cách dùng khóa trong ví để ký các giao dịch. Ở một góc độ nào đó, có thể hiểu ví blockchain là một chùm chìa khóa. Có hai loại ví chính, được phân biệt bằng mối liên hệ giữa các khóa chứa trong ví: ví bất định và ví tất định. Loại đầu tiên là ví bất định, trong đó mỗi hóa được tạo ra độc lập từ một số ngẫu nhiên. Các khóa này không liên quan đến nhau, loại ví này được gọi là ví JBOK. Loại thứ hai là ví tất định, trong đó tất cả các khóa đều được tạo ra từ một khóa chính duy nhất (master key), hay còn gọi là hạt giống. Tất cả các khóa trong loại ví này đều liên quan đến nhau và có thể được tạo lại nếu có hạt giống gốc. Có một số cách tạo khóa khác nhau dùng trong các ví tất định, trong đó cách phổ biến nhất là sử dụng một cấu trúc dạng cây gọi là ví tất định phân cấp (hierarachical deterministic), hay ví HD. Các ví tất định được khởi tạo từ một hạt giống. Để dễ sử dụng hơn, các hạt giống được mã hòa thành từ tiếng Anh để hỗ trợ người dùng còn được gọi là các từ mã trợ nhớ. Ví bất định (ngẫu nhiên) Trong ví blockchain đầu tiên (hiện nay được gọi là Bitcoin Core), ví là tập hợp các khóa bí mật được tạo ngẫu nhiên. Ví dụ, phần mềm Bitcoin Core gốc tạo sẵn 100 khóa bí mật ngẫu nhiên khi khởi động lần đầu tiên và tạo ra thêm các khóa khi cần thiết, mỗi khóa chỉ sử dụng một lần. Việc quản lý, sao lưu và nhập các ví này rất phiền phức vì vậy chúng đang bị thay thế bởi các ví tất định. Điểm bất lợi của các khóa ngẫu nhiên là nếu tạo nhiều khóa, người dùng sẽ phải giữ bản sao của tất cả các khóa đó, điều này đồng nghĩa với việc phải sao lưu ví thường xuyên. Phải sao lưu từng khóa, nếu không số tiền do các khóa kiểm soát sẽ bị mất vĩnh viễn nếu không truy cập được ví. Điều này xung đột trực tiếp với nguyên tắc tránh dùng lại địa chỉ thông qua việc sử dụng mỗi địa chỉ bitcoin cho riêng một giao dịch. Việc dùng lại địa chỉ làm giảm đi tính bảo mật do liên kết nhiều giao dịch và địa chỉ lại với nhau. Hình 21 minh họa một ví bất định, chứa mộ tập hợp các khóa ngẫu nhiên không liên quan đến nhau. Hình 2 1. Ví bất định Ví tất định Ví tất định, hay ví “được gieo hạt”, là ví chứa các khóa bí mật được tạo ra từ hạt giống chung bằng hàm băm một chiều. Hạt giống này là một số được tạo ngẫu nhiên sau đó kết hợp với các dữ liệu khác, ví dụ như một chỉ số hay một “mã chuỗi” (chain code) để tạo ra các khóa bí mật. Trong ví tất định, chỉ cần hạt giống này là có thể khôi phục lại tất cả các khóa được tạo ra, do đó chỉ cần một bản sao lưu vào thời điểm khởi tạo là đủ. Hạt giống này cũng có thể xuất và nhập ví, cho phép dễ dàng di chuyển qua lại tất cả các khóa của người dùng giữa các bản thực thi ví khác nhau. Hình 22 là biểu đồ logic của một ví tất định. Hình 2 2. Ví tất định (được gieo hạt): một chuỗi khóa tất định được tạo ra từ một hạt giống Ví HD (BIP32BIP44) Các ví tất định được phát triển nhằm hỗ trợ việc tạo nhiều khóa từ một “hạt giống” duy nhất. Dạng ví tất định tiên tiến nhất là ví HD được định nghĩa theo chuẩn BIP32. Ví HD chứa các khóa được tạo ra từ một cấu trúc hình cây, sao cho khóa mẹ có thể tạo ra một chuỗi khóa con, mỗi khóa con lại có thể tạo ra một chuỗi khóa cấp nhỏ hơn, và cứ tiếp tục mở rộng vô tận. Hình 23 minh họa cấu trúc hình cây này. Hình 2 3. Ví HD: một cây gồm các khóa được tạo ra từ một hạt giống duy nhất Ví HD có 2 ưu điểm chính so với các khóa chính so với các khóa ngẫu nhiên. Thứ nhất, có thể dùng cấu trúc hình cây này để biểu đạt thêm ý nghĩa về mặt tổ chức, chẳng hạn một nhánh khóa con cụ thể được dùng để nhận các khoản thanh toán đến và một nhánh khác được dùng để nhận tiền thừa trả lại từ các khoản thanh toán đi. Ưu điểm thứ hai của ví HD là người dùng có thể tạo một chuỗi khóa công khai mà không cần truy cập khóa bí mật tương ứng. Điều này cho phép sử dụng ví HD trên các máy chủ không an toàn hay dùng chỉ để nhận tiền, trong đó mỗi giao dịch lại có một khóa công khai mới. Nếu máy chủ không biết khóa bí mật được tiêu tiền thì không cần phải tải sẵn hay tạo trước khóa công khai. Hạt giống (seed) và mã trợ nhớ Ví HD là một cơ chế rất hiệu quả để quản lý số lượng lớn các hóa và đỉa chỉ. Chúng còn hữu dụng hơn nữa nếu được kết hợp với phương pháp tạo hạt giống chuẩn từ chuỗi tiếng Anh dễ ghi lại, xuất và nhập giữa các ví. Chuỗi từ này được gọi là một cụm từ trợ nhớ (mnemonic) và chuẩn này được định nghĩa bởi BIP39. Ngày nay, hầu hết các ví blockchain sử dụng chuẩn này và có thể nhập cũng như xuất các hạt giống sao lưu và khôi phục thông qua các cụm từ trợ nhớ tương thích lẫn nhau. Ví dụ về hạt giống và mã trợ nhớ: 0C1E24E5917779D297E14D45F14E1A1 Aarmy van defense carry jealous true garbage claim echo media make crunch Khi công nghệ bitcoin đã và đang dần trở nên hoàn thiện, một số chuẩn chung của ngành cũng đã xuất hiện nhằm giúp các ví bitcoin có thể tương thích với nhau một cách rộng rãi, dễ sử dụng, an toàn, và linh hoạt. Các chuẩn chung này là: Các từ mật mã trợ nhớ, được thiết lập dựa trên BIP39 Các ví HD, dựa trên BIP32 Cấu trúc ví HD đa mục đích, dựa trên BIP43 Các ví đa tiền tệ và đa tài khoản, dựa trên BIP44 Các chuẩn này có thể thay đổi theo thời gian và sự phát triển của công nghệ, nhưng ở thời điểm hiện tại, chúng hợp thành một tập các công nghệ kết nối lẫn nhau và đang trở thành một tiêu chuẩn ví cho bitcoin. Các chuẩn này được nhiều loại ví bitcoin phần cứng và phần mềm chấp nhận, giúp cho tất cả các ví này đều tương thích lẫn nhau. Một người dùng có thể xuất một cụm trợ nhớ do một trong các ví này tạo ra và nhập nó vào một ví khác, rồi từ đó khôi phục lại toàn bộ các giao dịch, khóa và địa chỉ. Một vài ví dụ về ví phần mềm hỗ trợ các chuẩn này bao gồm: Breadwallet, Copay, Multibit HD và Mycelium. Các ví dụ về ví phần cứng hỗ trợ các chuẩn này như: Keepkey, Legder và Trezor. Cụm từ mã trợ nhớ Cụm từ mã trợ nhớ là chuỗi từ tượng trưng cho (mã hóa) một số ngẫu nhiên được dùng làm hạt giống để tạo ví tất định. Chỉ cần chuỗi từ này là có thể tạo ra lại hạt giống đó, rồi từ hạt giống đó tạo lại ví với tất cả các khóa đã được tạo ra. Khi lần đầu tạo ví, ứng dụng ví cài đặt các ví tất định với cụm từ trợ nhớ sẽ hiển thị cho người dùng một chuỗi 12 đến 24 từ. Chuỗi từ này chính là bản sao lưu của ví và có thể dùng nó để khôi phục cũng như tạo lại tất cả các khóa trong cùng ứng dụng ví hoặc trong bất cứ ứng dụng ví tương thích nào. Các từ trợ nhớ giúp người dùng sao lưu ví dễ dàng hơn bởi chúng dễ đọc và dễ sao chép chính xác hơn so với một chuỗi ngẫu nhiên các con số. Tạo các từ trợ nhớ Ví tự động tạo ra các từ trợ nhớ thông qua quá trình chuẩn hóa được định nghĩa trong BIP39. Từ điểm khởi đầu là một nguồn entropy, ví bổ sung một mã checksum, sau đó ánh xạ entropy này đến một danh sách các từ. Quá trình tạo từ trợ nhớ bao gồm các bước sau: Tạo một chuỗi ngẫu nhiên (một entropy) 128 đến 256 bit. Tạo một checksum của chuỗi ngẫu nhiên trên bằng cách lấy các bit đầu tiên (độ dài entropy chia cho 32) của mã băm SHA256 của nó. Thêm checksum này vào cuối chuỗi ngẫu nhiên. Chia chuỗi này thành các đoạn 11 bit. Ánh xạ từng giá trị 11 này thành 1 từ trong một từ điển cho trước gồm 2048 từ. Mã trợ nhớ chính là chuỗi từ này. Hình 24 minh họa cách dùng entropy để tạo ra các từ trợ nhớ. Hình 2 4. Tạo entropy và mã hóa thành cụm từ trợ nhớ Từ cụm trợ nhớ đến hạt giống Các cụm từ trợ nhớ này đại diện cho entropy có độ dài từ 128 đến 256 bit. Sau đó, dùng entropy này để tạo một hạt giống dài hơn (512 bit) bằng hàm kéo dài khóa PBKDF2. Tiếp đến, dùng hạt giống tạo được để xây dựng một ví tất định rồi tạo các khóa của nó. Hàm kéo dài khóa nhận hai tham số: cụm trợ nhớ và salt. Mục đích của salt trong hàm kéo dài khóa là nhằm gây khó khăn cho việc xây dựng một bảng tìm kiếm để thực hiện một cuộc tấn công vét cạn. Trong chuẩn BIP39, salt còn có một mục đích khác – nó cho phép tạo một passphrase đóng vai trò một lớp bảo vệ tăng cường để bảo vệ hạt giống. Quá trình được mô tả trong các bước 7 đến 9 tiếp tục quá trình đã được mô tả trước đó ở phần “tạo cụm mã trợ nhớ”. Tham số đầu tiên cho hàm kéo dài khóa PBKDF2 là cụm trợ nhớ tạo ra ở bước 6. Tham số thứ hai cho hàm kéo dài khóa PBKDF2 là một salt. Salt bao gồm một hằng số dạng chuỗi “mnemonic” được nối với một chuỗi passphrase tùy chọn do người dùng cung cấp. PBKDF2 kéo dài các tham số cụm trợ nhớ và hạt salt bằng việc băm 2048 lần với thuật toán HMACSHA512, tạo ra kết quả cuối cùng là một giá trị 512 bit. Giá trị này chính là hạt giống. Hình 25 minh họa cách dùng một cụm trợ nhớ để tạo hạt giống Hình 2 5. Từ cụm trợ nhớ đến hạt giống Hình 26 là ví dụ về các cụm từ mã trợ nhớ và hạt giống được tạo từ website www.iancoleman.iobip39 Hình 2 6. Ví dụ mã trợ nhớ và hạt giống Tạo ví HD từ hạt giống Các ví HD được tạo ra từ một hạt giống gốc đơn lẻ và một số ngẫu nhiên 128, 256 hoặc 512 bit. Thường gặp nhất là các hạt giống được tạo ra từ một cụm trợ nhớ như đã trình bày ở phần trước. Mọi khóa trong ví HD đều được tạo ra từ hạt giống gốc này, vì vậy có thể tạo lại toàn bộ ví HD từ hạt giống đó trong bất kỳ ví HD tương thích nào. Vì thế có thể dễ dàng sao lưu, khôi phục và xuất nhập các ví HD vốn chứa hàng ngàn, thậm chí hàng triệu khóa với một thao tác đơn giản di chuyển cụm trợ nhớ đã tạo ra hạt giống gốc. Hình 27 minh họa quá trình tạo khóa chính và mã chuỗi chính cho một ví HD. Hình 2 7. Tạo khóa chính (master key) và mã chuỗi (master chain code) từ hạt giống gốc Hạt giống gốc là đầu vào cho thuật toán HMACSHA512 và mã băm kết quả được dùng để tạo ra một khóa bí mật chính (m) và một chuỗi chính (c). Sau đó, khóa bí mật chính tạo ra một khóa công khai chính tương ứng (M) thông qua phép nhân đường cong elliptic. Mã chuỗi (c) được dùng để tạo entropy trong hàm tạo khóa con từ khóa mẹ. Tạo khóa bí mật con Ví HD sử dụng hàm tạo khóa con (childen key derivation – CKD) để tạo ra các khóa con từ các khóa mẹ. Các hàm tạo khóa con dựa trên một hàm băm một chiều kết hợp với các giá trị sau: Một khóa bí mật hoặc khóa công khai Một hạt giống gọi là một mã chuỗi (256 bit) Một số thứ tự (32 bit) (index number) Mã chuỗi được dùng để đưa dữ liệu ngẫu nhiên tất định vào quá trình này, do đó nếu chỉ biết số thứ tự và một khóa con là chưa đủ để suy ra các khóa con khác. Việc biết một khóa con không làm cho việc tìm kiếm các khóa ngang hàng với nó trở trên khả thi, nếu như không biết mã chuỗi. Hạt giống mã chuỗi đầu tiên (tại gốc của cây) được tạo ra từ hạt giống, trong khi các mã chuỗi con về sau lại được tạo ra từ mã chuỗi mẹ. Ba thành phần này (khóa mẹ, mã chuỗi và số thứ tự) được kết hợp với nhau rồi băm ra để tạo ra các khóa con như sau: Kết hợp khóa công khai mẹ, mã chuỗi và số thứ tự với nhau rồi băm bằng thuật toán HMACSHA512 để tạo ra một mã băm 512 bit. Chia mã băm 512 bit này thành 2 nửa 256 bit. Nửa bên phải là trở thành mã chuỗi của khóa con. Nửa bên trái được thêm vào khóa bí mật để tạo khóa bí mật con. Hình 28 minh họa quá trình này với số thứ tự 0 để tạo ra khóa con thứ “0” (là khóa đầu tiên được đánh thứ tự) của khóa mẹ. Hình 2 8. Mở rộng khóa bí mật mẹ và tạo ra các khóa con của nó, cứ thế tiếp tục thành vô số thế hệ Việc thay đổi số thứ tự cho phép mở rộng khóa mẹ và tạo ra khóa con khác thành chuỗi, ví dụ Con 0, Con 1, Con2…Mỗi khóa mẹ có thể có tới 231 khóa con. Lặp lại quá trình này ở một tầng thấp hơn của cây, mỗi khóa con khi đó lại trở thành một khóa mẹ và tạo ra các con của nó, cứ thế tiếp diễn thành vô số thế hệ. Khóa mở rộng Như đã biết, có thể dùng hàm tạo khóa để tạo các khóa con ở bất kỳ bậc nào của cây, dựa trên ba đầu vào: khóa, mã chuỗi, và số thứ tự của khóa con mong muốn. Hai thành phần cốt yếu ở đây là khóa và mã chuỗi, khi kết hợp lại với nhau, chúng được gọi là một khóa mở rộng. Khóa mở rộng được lưu và biểu diễn đơn giản dưới dạng ghép 256 bit khóa và 256 bit mã chuỗi thành 512 bit. Có 2 loại khóa mở rộng là xprv và xpub. Khóa bí mật mở rộng (xprv) là sự kết hợp giữa khóa bí mật với mã chuỗi, có thể dùng để tạo các khóa bí mật con. Khóa công khai mở rộng (xpub) là khóa công khai và mã chuỗi, có thể dùng nó để tạo ra các khóa con công khai (chỉ khóa công khai mà thôi). Sẽ an toàn hơn nếu ví chỉ xem số dư tài khoản hoặc chỉ nhận thanh toán nhưng không thể ký các giao dịch vì không có khóa bí mật. Ví dụ về khóa mở rộng xpub và xprv BIP32 Root Key extended private key xprv9s21ZrQH143K3jPJPCXm8mHXv8nBHEgfnrvrCXGaWYXdLDXRSctw7gcTvA148X8Qri8CznUsHMPWemcSFtL8mCjXXzratuDC7Yn3nFjQNyN BIP32 Root Key extended public key xpub661MyMwAqRbcGDTmVE4mVuEGUAcfghQXA5rSzugC4t4cD1rZzADBfUvwmSbFtgZA4ikYcrcX9mSQg83Nu5hbL9kt3ryGwgFk31hY5bMHTz5 Tạo khóa con gia cố Khả năng tạo nhánh khóa công khai từ khóa xpub là rất hữu dụng. Một ứng dụng phổ biến của giải pháp này là cài đặt khóa công khai mở rộng trên một máy chủ web đóng vai trò một ứng dụng thương mại điện tử. Máy chủ web này có thể dùng hàm tạo khóa công khai để tạo ra một địa chỉ bitcoin mới cho mỗi giao dịch. Máy chủ web không có bất kỳ khóa bí mật nào nên không lo trộm cắp. Nếu không có ví HD, cách duy nhất để thực hiện điều này là tạo sẵn hàng nghìn địa chỉ bitcoin trên một máy chủ an toàn riêng biệt. Phương án này rất rắc rối và đòi hỏi bảo trì thường xuyên. Một ứng dụng phổ biến khác của giải pháp này là lưu trữ lạnh và các ví phần cứng. Trong trường hợp này, có thể lưu khóa bí mật mở rộng vào ví giấy hay thiết bị phần cứng (ví dụ như Trezor), trong khi có thể lưu khóa mở rộng công khai trên mạng trực tuyến. Ứng dụng rất phổ biến nhưng vẫn xảy ra rủi ro mất an toàn. Thông thường ví xpub không cung cấp quyền truy cấp các khóa bí mật con, tuy nhiên, vì ví xpub chứa mã chuỗi, nên nếu biết khóa bí mật con, hoặc thông tin về khóa này bị rò rỉ bởi một lý do nào đó, thì có thể kết hợp nó với mã chuỗi để suy ra tất cả các khóa bí mật con khác. Một khóa bí mật con bị rò rỉ, cùng với mã chuỗi của khó

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU ĐẢM BẢO AN TỒN TIỀN ĐIỆN TỬ CƠNG NGHỆ BLOCKCHAIN Hà Nội, 2018 BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU ĐẢM BẢO AN TỒN TIỀN ĐIỆN TỬ CƠNG NGHỆ BLOCKCHAIN Hà Nội, 2018 MỤC LỤC CÁC CỤM TỪ VIẾT TẮT BIP-32 BIP-39 BIP-44 CKD Bitcoin Improvement Proposals 32 Bitcoin Improvement Proposals 39 Bitcoin Improvement Proposals 44 Đề xuất cải tiến bitcoin 32 Đề xuất cải tiến bitcoin 39 Đề xuất cải tiền bitcoin 44 Childen key derivation Hàm tạo khóa Elliptic Curve Digital Signature Thuật tốn chữ ký số Algorithm đường elliptic HD Hierarachical Deterministic tất định phân cấp PoW Proof of Work Bằng chứng xử lý P2SH Pay to script hash Trả tới mã băm kịch P2PKH Pay to pubkey hash ECDSA P2P Network PBKDF2 RIPEMD16 Trả tới mã băm khóa công khai Peer-to-Peer Network Mạng ngang hàng Password-Based Key Derivation Function RACE Integrity Primitives Hàm băm kéo dài khóa Thuật tốn mã hóa Evaluation Message Digest SHA-256 Cryptographic Hash RIPEMD160 Thuật tốn mã hóa Algorithm SHA256 UTXO Unspent transaction outputs Đầu chưa chi tiêu Xprv Extend Private Key Khóa bí mật mở rộng Xpub Extend Public Key Khóa cơng khai mở rộng SHA256 DANH MỤC HÌNH VẼ DANH MỤC BẢNG BIỂU LỜI CẢM ƠN Trong q trình thực hồn thiện báo cáo thực tập này, em xin gửi lời cảm ơn chân thành đến thầy Khoa An tồn thơng tin nói riêng tồn thể thầy Học Viện Kỹ Thuật Mật Mã nói chung cung cấp cho em kiến thức quý báu suốt năm học qua Đặc biệt cho em gửi lời cảm ơn sâu sắc tới ThS Nguyễn Thị Hồng Hà KS Trịnh Khắc Linh dành nhiều thời gian vô quý báu để định hướng tận tình hướng dẫn em tạo điều kiện thuận lợi để em hồn thành tốt đồ án tốt nghiệp Em xin chân thành cảm ơn! SINH VIÊN THỰC HIỆN Đặng Văn Quyết LỜI NÓI ĐẦU Thương mại Internet dựa vào quan tài đóng vài trò bên thứ ba đáng tin cậy để xử lý toán điện tử Trong hệ thống hoạt động đủ tốt hầu hết giao dịch, phải gánh chịu điểm yếu cố hữu mơ hình dựa lòng tin dụ vấn đề chi phí giao dịch, thời gian xử lý, gian lận Trong tỷ lệ gian lận định phải chấp thuận điều tránh khỏi Các chi phí khơng chắn tốn tránh cách sử dụng đồng tiền vật lý, tồn chế để thực toán qua kênh truyền thơng mà khơng cần bên tín nhiệm Điều cần thiết hệ thống toán điện tử dựa chứng mật mã thay tín nhiệm, cho phép hai bên tự nguyện giao dịch trực tiếp với mà không cần phải có bên thứ ba đáng tin cậy Với việc phát minh bitcoin vào năm 2008, giới đưa vào khái niệm mà có khả cách mạng hóa tồn xã hội Đó điều hứa hẹn ảnh hưởng đến ngành nghề, không giới hạn lĩnh vực tài chính, phủ truyền thơng Một số mơ tả cách mạng, trường phái tưởng khác nói tiến hóa phải nhiều năm có lợi ích thiết thực từ blockchain Cuộc cách mạng bắt đầu; nhiều tổ chức lớn khắp giới chứng minh cách sử dụng cơng nghệ blockchain tiềm cơng nhận đầy đủ Tuy nhiên, số tổ chức giai đoạn thăm dò sơ dự kiến tiến nhanh công nghệ ngày trở nên trưởng thành Đây cơng nghệ có ảnh hưởng đến cơng nghệ có khả thay đổi chúng mức Khái niệm tiền điện tử tiền tệ kỹ thuật số Kể từ năm 1980, giao thức điện tử tồn dựa mơ hình David Chaum đề xuất Các vấn đề cần giải hệ thống tiền điện tử trách nhiệm giải trình ẩn danh David Chaum giải hai vấn đề báo cáo ông vào năm 1984 cách giới thiệu hai hoạt động mật mã, chữ ký mù chia sẻ bí mật Tại thời điểm này, nói chữ ký mù cho phép ký tài liệu mà khơng thực nhìn thấy chia sẻ bí mật khái niệm cho phép phát vấn đề double spending (chi kép) Sau giao thức khác xuất Chaum, Fiat, Naor (CFN), chương trình e-cash giới thiệu tính ẩn danh phát chi kép Thương hiệu e-cash hệ thống cải tiến khác CFN, làm cho trở nên hiệu Một khái niệm khác có liên quan gọi hashcash Adam Back giới thiệu vào năm 1997 hệ thống Proof of Work (PoW) để kiểm soát e-mail rác Ý tưởng đơn giản: người dùng hợp pháp muốn gửi e-mail, họ phải tính tốn hàm băm để chứng minh họ sử dụng lượng tài nguyên máy tính hợp lý trước gửi e-mail Tạo hashcash quy trình tăng cường tính tốn khơng ngăn cản người dùng hợp pháp gửi e-mail số lượng thư thông thường mà người dùng hợp pháp yêu cầu phải thấp Mặt khác, spammer muốn gửi e-mail, thường số lượng hàng nghìn, trở nên khơng thể tính hashcash cho tất e-mail, làm cho nỗ lực gửi spam tốn kém; kết chế sử dụng để ngăn chặn email spam Hashcash chiếm lượng đáng kể tài nguyên máy tính để tính tốn dễ dàng nhanh chóng xác minh Việc xác minh thực người dùng nhận e-mail Hashcash phổ biến việc sử dụng trình đào bitcoin Ý tưởng sử dụng câu đố toán học chức định giá để ngăn chặn spam email ban đầu giới thiệu vào năm 1992 Cynthia Dwork Moni Naor Sau đó, Adam Back phát minh hashcash độc lập vào năm 1997, giới thiệu việc sử dụng hàm băm máy tính PoW Năm 1998, b-money giới thiệu Wei Dai đề xuất ý tưởng tạo tiền điện tử thông qua việc giải câu đố tốn học hashcash Nó dựa mạng peer-to-peer, nơi nút trì danh sách giao dịch Một ý tưởng tương tự khác Nick Szabo gọi BitGold giới thiệu vào năm 2005 đề xuất giải câu đố toán học để khai thác tiền điện tử Năm 2005, Hal Finney giới thiệu khái niệm tiền mật mã cách kết hợp ý tưởng từ b-money câu đố hashcash dựa vào quan tin cậy tập trung Trong năm 2009, triển khai thực tế cryptocurrency tên Bitcoin giới thiệu; lần giải vấn đề phân tán đồng thuận mạng tin cậy Nó sử dụng mật mã khóa cơng khai với hashcash PoW để cung cấp phương pháp an tồn, kiểm sốt phân cấp phương pháp khai thác tiền điện tử Sự đổi ý tưởng danh sách xếp khối bao gồm giao dịch mật mã bảo mật chế PoW Nhìn vào tất cơng nghệ nói lịch sử họ, thật dễ dàng để thấy ý tưởng khái niệm từ chương trình tiền điện tử hệ thống phân phối kết hợp với để tạo bitcoin gọi công nghệ blockchain Blockchain phát minh thiết kế bới Satoshi Nakamoto thực hóa vào năm sau phần cốt lõi Bitcoin, công nghệ blockchain đóng vai trò sổ cho tất giao dịch Qua việc sử dụng mạng lưới ngang hàng hệ thống liệu phân cấp, Bitcoin blockchain quản lý tự động Việc phát minh blockchain cho Bitcoin làm cho trở thành loại tiền tệ kỹ thuật số giải vấn đề double spending (chi tiêu gian lận lượng tiền dùng lần) Công nghệ Bitcoin trở thành nguồn cảm hứng cho loạt ứng dụng khác Nhận thấy, quan trọng công nghệ blockchain nên đồ án lựa chọn tìm hiểu đề tài “Nghiên cứu đảm bảo an tồn tiền điện tử cơng nghệ blockchain” Để nghiên cứu hiểu rõ ứng dụng điện tử blockchain, mục tiêu tìm hiểu cơng nghệ blockchain, cơng nghệ blockchain Đây cơng nghệ giúp cho việc giao dịch tiền điện tử bảo mật thuật tốn mã hóa khóa cơng khai, sử dụng chữ ký số hàm băm để bảo vệ tính bí mật, xác thực tồn vẹn thơng tin công nghệ blockchain Nội dung đồ án tốt nghiệp gồm ba chương: Chương 1: Tổng quan công nghệ blockchain, bao gồm hiểu biết công nghệ blockchain như: định nghĩa, kiến trúc chung, loại blockchain, lợi ích rủi ro cơng nghệ blockchain Chương 2: Cơng nghệ tiền điện tử blockchain, rõ khái niệm, chi tiết công nghệ ví, số ứng dụng thường gặp, thực trạng an tồn Chương 3: Thực nghiệm mơ đa chữ ký, triển khai ứng dụng tạo địa chỉ, tạo giao dịch đa chữ ký khóa Do thời gian thực đồ án tương đối ngắn hạn nên đồ án em chắn khơng tránh khỏi thiếu sót em mong nhận đóng góp ý kiến thầy để đồ án em hồn thiện Em xin chân thành cảm ơn! SINH VIÊN THỰC HIỆN Đặng Văn Quyết CHƯƠNG 1: TỔNG QUAN VỀ CƠNG NGHỆ BLOCKCHAIN 1.1 Tổng quan cơng nghệ blockchain 1.1.1 Khái niệm Blockchain số khái niệm liên quan Blockchain (chuỗi khối) sở liệu phân cấp lưu trữ thông tin khối thông tin liên kết với mã hóa mở rộng theo thời gian Mỗi khối thông tin chứa thông tin thời gian khởi tạo liên kết tới khối trước đó, kèm mã thời gian liệu giao dịch Blockchain thiết kế để chống lại việc thay đổi liệu: Một liệu mạng lưới chấp nhận khơng có cách thay đổi Blockchain phù hợp để ghi lại kiện, hồ sơ y tế, xử lý giao dịch, công chứng, định danh chứng minh nguồn gốc Việc có tiềm giúp xóa bỏ hậu lớn liệu bị thay đổi bối cảnh thương mại toàn cầu Một khối (block) đơn giản lựa chọn giao dịch nhóm lại với để tổ chức chúng cách hợp lý Nó tạo thành từ giao dịch kích thước khối phụ thuộc vào loại thiết kế blockchain sử dụng Một tham chiếu đến khối trước bao gồm khối trừ khối genesis Một khối Genesis hay gọi khối nguyên thủy khối blockchain hardcoded thời điểm blockchain bắt đầu Cấu trúc khối phụ thuộc vào kiểu thiết kế blockchain, thơng thường có vài thuộc tính cần thiết cho chức khối, chẳng hạn tiêu đề khối, trỏ tới khối trước đó, tem thời gian, nonce, đếm giao dịch, giao dịch thuộc tính khác Sổ phân tán (Decentralized Legder) sở liệu phân tán sử dụng blockchain để ghi lại giao dịch 10 52 Hình 2- 14 Quá trình thực thi kịch 53 CHƯƠNG 3: THỰC NGHIỆM MÔ PHỎNG ĐA CHỮ KÝ 3.1 Phát biểu tốn Bài tốn đặt tạo Bitcoin dựa kịch đa chữ ký để thực giao dịch Ban đầu sinh N ngẫu nhiên với N cặp khóa bí mật/cơng khai, cụ thể , nghĩa có với cặp khóa bí mật/cơng khai tương ứng Sau tạo yêu cầu M chữ ký (N) dựa N cặp khóa tạo trước đó, tốn ngưỡng dành cho M là: Trong phạm vi đồ án, thực kịch khóa với , để tạo địa bitcoin với kịch đồng thời cần chữ ký để thực giao dịch Chi tiết kịch sau: OP_2 OP_5 OP_CHECKMULTISIG Thực kịch thu giá trị redeemScript Sau mã hóa redeemScript địa đa chữ ký P2SH mơ tả chương hình 211 Để chi tiêu giao dịch từ địa P2SH tạo cần tạo giao dịch thô chưa ký Unsigned TX từ đầu chưa chi tiêu UTXO tương ứng với địa P2SH Sau dùng chữ ký từ khóa bí mật để ký lên giao dịch Unsigned TX hai giá trị Hai giá trị đưa vào kịch với redeemscript để kết hợp thành kịch mở khóa Giao dịch lúc có đầy đủ kịch mở khóa kịch khóa Kết hợp kịch mô tả sau: DUP HASH160 EQUALVERIFY CHECKMULTISIG Quá trình xác thực kịch diễn mô tả chương hình 2-14 Sau xác thực, giao dịch broadcast lên mạng bitcoin để xác thực lần thợ đào 3.1.1 Lựa chọn công nghệ Ngôn ngữ sử dụng để phát triển Python 54 Để giao tiếp với blockchain ứng dụng sử dụng BlockCypher API BlockCypher cung cấp thông tin đầy đủ sở liệu Blockchain miễn phí cung cấp mã nguồn thư viện miễn phí hỗ trợ lập trình Ngồi sử dụng sở liệu blockchain bitcoin testnet Môi trường phát triển tổng hợp lại bảng sau: Mơi trường Ngơn ngữ lập trình Hệ điều hành Dịch vụ API Blockchain 3.1.2 Triển khai thực nghiệm Tên môi trường Python Windows BlockCypher Bitcoin Testnet Với phạm vi đồ án, ứng dụng triển khai mơ q trình tạo địa giao dịch với địa đa chữ ký khóa Tạo địa đa chữ ký 3.1.2.1 Người dùng yêu cầu nhập số địa cần tạo (N) số chữ ký yêu cầu giao dịch (M) Mơ tả thể qua hình 3-1: Hình 3- Giao diện nhập số địa số yêu cầu khóa Với phạm vi đồ án, giá trị , , ứng dụng tạo địa với thơng tin bao gồm cặp khóa cơng khai/khóa bí mật, địa Thơng số dùng làm số lượng chữ ký đầu vào cho kịch redeemscript mã hóa thành địa đa chữ ký P2SH Kết thu địa đa chữ ký P2SH Bitcoin testnet có dạng hình 3-2: 55 Hình 3- Tạo địa đa chữ ký khóa 3.1.2.2 Tạo chi tiêu giao dịch Để chi tiêu cần khóa bí mật tạo từ địa P2SH Khóa thứ khóa thứ ba sử dụng làm dụ (tất nhiên khóa làm việc) Gọi khóa bí mật khóa bí mật A khóa bí mật C Để tạo giao dịch, cần có đầu vào đầu chưa chi tiêu UTXO trước đó, số tiền giao dịch địa đích đến Ứng dụng yêu cầu người dùng nhập số tiền giao dịch, địa gửi địa nhận, sau lấy liệu từ blockchain bitcoin testnet đầu chưa chi tiêu UTXO gắn với địa gửi Tiếp theo, ứng dụng tìm đầu chưa chi tiêu UTXO hợp lý để làm đầu vào cho giao dịch tạo giao dịch thô chưa ký Mơ tả thể hình 3-3 Hình 3- Giao diện yêu cầu nhập thông tin giao dịch 56 Giao dịch thơ có đầu vào input đầu chưa chi tiêu UTXO trước Mơ tả giao dịch chưa chi tiêu hình 3-4 Hình 3- Giao diện hiển thị thông tin giao dịch chưa ký Unsigned TX Trong thông tin giao dịch chưa chi tiêu, thơng số bao gồm:  Địa (addresses): gồm địa gửi địa nhận  Mảng inputs: gồm thơng tin mã băm UTXO trước (prev_hash), giá trị UTXO (output_value), loại kịch (script_type)  Mảng outputs: gồm đầu đến địa đích trả tiền thừa địa người gửi  Một số thông tin khác như: block_heigh, block_index, hash,… Giao dịch thô băm lần với mã băm SHA256 sau ký với khóa bí mật riêng biệt thuật tốn ECDSA Sơ đồ ký mơ tả chương hình 2-12 Sau có đủ chữ ký, áp dụng chữ ký vào kịch giao dịch, lúc mảng Input xuất script mô tả kịch scriptSig dạng mã hóa hình 3-5 57 Hình 3- Giao dịch sau ký Sau xác thực kịch xác thực hai chữ ký với kịch khóa, giao dịch phát tán lên mạng bitcoin Nếu việc xác thực kịch thất bại trả thơng báo lỗi hình 3-6 Hình 3- Giao dịch lỗi Mỗi giao dịch có hàm băm mật mã để định danh giao dịch, hàm băm giao dịch gọi Transaction ID Định danh mơ tả hình 3-7 Hình 3- Mã băm Transaction ID Giao dịch sau thợ đào xác thực trở thành giao dich hợp lệ kiểm tra BlockExplorer Kiểm tra giao dịch mô tả hình 3-8 website www.live.blockcypher.com 58 Hình 3- Giao diện tra cứu giao dịch BlockCypher 3.2 Đánh giá mơ hình thực nghiệm Chương trình thực mức độ mơ q trình giao dịch bitcoin testnet theo kịch sử dụng chữ ký Trong với kịch chữ ký sử dụng số lượng chữ ký (có thể yêu cầu 2, 3, chữ ký), chương trình yêu cầu cần phải có chữ ký hợp lệ để chi tiêu giao dịch Điều giúp cho giao dịch đảm bảo hơn, giải vấn đề lưu trữ kiểm soát truy cập 59 KẾT LUẬN Cơng nghệ Blockchain chuyển đổi thành nguồn lượng đáng tin cậy có giá trị giới kỹ thuật số kinh doanh Nó có ứng dụng hầu hết ngành cơng nghiệp Thậm chí tập đồn lớn theo đuổi việc sử dụng công nghệ để nâng cấp quy trình hoạt động họ Để bắt kịp xu hướng phát triển công nghệ, đồ án thực “Nghiên cứu đảm bảo an toàn tiền điện tử blockchain” nhằm đảm bảo việc giao dịch an toàn cho người dùng Sau thời gian thực hiện, đồ án đạt số kết sau: o Tìm hiểu cơng nghệ blockchain cơng nghệ tiền điện tử blockchain o Tìm hiểu mơ hình đa chữ ký giao dịch bitcoin o Thực nghiệm mô ứng dụng yêu cầu chữ ký khóa bí mật Mục tiêu phát triển nghiên cứu hướng tới an tồn cho tiền điện tử blockchain, nhằm giúp người dùng giảm thiểu rủi ro sử dụng Hướng phát triển tương lai:  Triển khai với giao dịch nhiều chữ ký với  Hỗ trợ nhiều loại tiền điện tử blockchain  Xây dựng giao diện giúp người dùng dễ sử dụng Trong trình thực hiện, thời gian hạn chế kiến thức, kinh nghiệm thực tiễn nên đồ án em nhiều thiếu sót, em mong đánh giá, góp ý thầy cô Em xin chân thành cảm ơn! SINH VIÊN THỰC HIỆN Đặng Văn Quyết 60 TÀI LIỆU THAM KHẢO Tài liệu tiếng Anh: [1] Andreas M Antonopoulos, “Mastering Bitcoin - Second Edition”, [2] Imran Bashir, “Mastering Blockchain” Các trang web: [3] BIP-32, https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki [5] Building new state machines with Virtualchain, http://blockstack.ghost.io/virtualchain-research-paper-published-at-dccl16 [6] Bitcoin multisig the hard way: Understanding raw P2SH multisig transactions, https://www.soroushjp.com/2014/12/20/bitcoin-multisig-the-hardway-understanding-raw-multisignature-bitcoin-transactions [7] BlockCypher Python, https://github.com/blockcypher/blockcypher-python [8] BlockCypher Dev, https://www.blockcypher.com/dev/bitcoin/ [9] Transaction, http://adrenaline2017.hatenablog.com/entry/2017/05/29/120701 [10] Understanding Blockchains (and Bitcoin) – Part 2: Technology, https://luxsci.com/blog/understanding-blockchains-and-bitcoin-technology.html 61 PHỤ LỤC Mã nguồn tạo địa đa chữ ký 2-trong-5 P2SH from cryptos import * #Token Blockcyper 44f2af2587fb46f8855a8f5c79d06316 from blockcypher import * from decimal import * c=Bitcoin(testnet=True) getcontext().prec = 10 mid = "\",\"" #this thing inserts these characters "," #API - COIN INFO# BC_API_KEY = ('44f2af2587fb46f8855a8f5c79d06316') coin_testnet = ('btc-testnet') n_address = int(input('Number of wallet address: ')) m_sign = int(input('Number of require signature: ')) #create dict address info privkey = dict() pubkey = dict() add = dict() wif_format = dict() ##### for i in range(0, n_address): #Generate three new addresses (Pub Key & Priv Key) print print ("Brand New Address Pair: Number", i+1) address_dick = generate_new_address( coin_symbol=coin_testnet, api_key=BC_API_KEY, ) add[i] = address_dick['address'] pubkey[i] = address_dick['public'] privkey[i] = address_dick['private'] wif_format[i] = address_dick['wif'] print ("Wallet Address : ",add[i]) 62 ... hiểu đề tài Nghiên cứu đảm bảo an toàn ví tiền điện tử cơng nghệ blockchain Để nghiên cứu hiểu rõ ứng dụng ví điện tử blockchain, mục tiêu tìm hiểu cơng nghệ blockchain, cơng nghệ ví blockchain. .. quan công nghệ blockchain, bao gồm hiểu biết công nghệ blockchain như: định nghĩa, kiến trúc chung, loại blockchain, lợi ích rủi ro cơng nghệ blockchain Chương 2: Cơng nghệ ví tiền điện tử blockchain, ...BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU ĐẢM BẢO AN TỒN VÍ TIỀN ĐIỆN TỬ CƠNG NGHỆ BLOCKCHAIN Hà Nội, 2018 MỤC LỤC

Ngày đăng: 14/08/2018, 13:30

Từ khóa liên quan

Mục lục

  • CÁC CỤM TỪ VIẾT TẮT

  • DANH MỤC HÌNH VẼ

  • DANH MỤC BẢNG BIỂU

  • LỜI CẢM ƠN

  • LỜI NÓI ĐẦU

  • Đặng Văn Quyết

  • CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN

    • 1.1. Tổng quan công nghệ blockchain

      • 1.1.1. Khái niệm Blockchain và một số khái niệm liên quan

      • 1.1.2. Kiến trúc chung

      • 1.1.2.1. Tầng ứng dụng (Applications)

      • 1.1.2.2. Sổ cái phân tán (Decentralized Ledger)

      • 1.1.2.3. Mạng ngang hàng (Peer to peer Network)

      • 1.1.3. Các phiên bản của Blockchain hiện tại

      • 1.1.3.1. Blockchain 1.0

      • 1.1.3.2. Blockchain 2.0

      • 1.1.3.3. Blockchain 3.0

      • 1.1.4. Các loại Blockchain

      • 1.2. Lợi ích của Blockchain

        • 1.2.1. Phân cấp

        • 1.2.2. Tính minh bạch và sự tin tưởng

        • 1.2.3. Tính bảo toàn

Tài liệu cùng người dùng

Tài liệu liên quan