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ó
Trang 1BAN CƠ YẾU CHÍNH PHỦ
Trang 2BAN CƠ YẾU CHÍNH PHỦ
Trang 3MỤ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
Trang 42.1.2.1 Ví HD (BIP-32/BIP-44) 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
Trang 5CÁC CỤM TỪ VIẾT TẮT
BIP-32 Bitcoin Improvement Proposals
BIP-39 Bitcoin Improvement Proposals
BIP-44 Bitcoin Improvement Proposals
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
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
khaiP2P
Network Peer-to-Peer Network Mạng ngang hàng
PBKDF2 Password-Based Key Derivation
UTXO Unspent transaction outputs Đầu ra chưa chi tiêu
DANH MỤC HÌNH VẼ
Hình 1-1 Kiến trúc chung Blockchain 2
Trang 6Hình 1-2.Ví dụ ví Bitcoin 3
Hình 1-3 Khóa bí mật, khóa công khai, địa chỉ bitcoin 4
Hình 1-4 Ví dụ tập UTXO 5
Hình 1-5 Cấu trúc một block 9
Hình 1-6 Cây merkle 10
Hình 2-1 Ví bất định 18
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 19
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 .20
Hình 2-4 Tạo entropy và mã hóa thành cụm từ trợ nhớ 23
Hình 2-5 Từ cụm trợ nhớ đến hạt giống 24
Hình 2-6 Ví dụ mã trợ nhớ và hạt giống 25
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 26
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ệ 27
Hình 2-9 Tạo khóa con gia cố; bỏ qua khóa công khai mẹ 29
Hình 2-10 Kết hợp scriptSig và scriptPubkey xác định mã giao dịch 35
Hình 2-11 Sơ đồ tạo địa chỉ đa chữ ký P2SH 40
Hình 2-12 Tạo chữ ký cho giao dịch 41
Hình 2-13 Quá trình kiểm tra chữ ký 42
Hình 2-14 Quá trình thực thi kịch bản 44
Hình 3-1 Giao diện nhập số địa chỉ và số yêu cầu khóa 46
Hình 3-2 Tạo địa chỉ đa chữ ký 2 trong 5 khóa 47
Hình 3-3 Giao diện yêu cầu nhập thông tin giao dịch 47
Hình 3-4 Giao diện hiển thị thông tin giao dịch chưa ký Unsigned TX 48
Hình 3-5 Giao dịch sau khi được ký 49
Hình 3-6 Giao dịch lỗi 49
Hình 3-7 Mã băm Transaction ID 49
Hình 3-8 Giao diện tra cứu giao dịch trên BlockCypher 50
DANH MỤC BẢNG BIỂU
Trang 7Bảng 1-1 Mã băm khi thay đổi hậu tố 12
Bảng 2-1 Biểu thức của kịch bản P2SH và P2PKH 37
Bảng 2-2 Kịch bản không dùng P2SH 38
Bảng 2-3 Kịch bản dùng P2SH 38
Bảng 2-4 Biểu thức kịch bản mô tả redeemScript 39
Trang 8LỜ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ửilờ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óiriê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ànthà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
Trang 9LỜ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àichí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 chiphí này và những sự không chắc chắn trong thanh toán có thể tránh được bằngcá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ệnthanh 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ằngchứng mật mã thay vì tín nhiệm, cho phép hai bên bất kỳ tự nguyện giao dịchtrự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àomộ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ĩnhvự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áchmạ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 minhbằng cách sử dụng công nghệ blockchain vì tiềm năng của nó đã được côngnhậ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ưởngthà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.
Trang 10Cá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 e-cash đã giới thiệu tính ẩn danh và phát hiện chi kép Thương hiệue-cash 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
e-mail rác Ý tưởng khá đơn giản: nếu người dùng hợp pháp muốn gửi e-mail, 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àinguyên máy tính hợp lý trước khi gửi e-mail Tạo hashcash là một quy trình tăngcường tính toán nhưng không ngăn cản người dùng hợp pháp gửi e-mail 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ặtkhác, nếu một spammer muốn gửi e-mail, 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 e-mail, do đó làm cho nỗ lựcgửi spam tốn kém; kết quả là cơ chế này có thể được sử dụng để ngăn chặn emailspam 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ùngnhận e-mail Hashcash được phổ biến bởi việc sử dụng nó trong quá trình đàobitcoin Ý 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, b-money đượ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 peer-to-peer, nơi mỗi nút duy trì danh sách các giao dịch củachính nó
Trang 11Mộ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ừ b-money và các câu đố hashcash nhưng nó vẫn dựa vàomộ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ênBitcoin đượ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ớihashcash như PoW để cung cấp một phương pháp an toàn, kiểm soát và phâncấ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ủamộ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ảomậ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, khicông nghệ blockchain đóng vai trò như là một cuốn sổ cái cho tất cả các giaodị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 choBitcoin đã làm cho nó trở thành loại tiền tệ kỹ thuật số đầu tiên giải quyết đượcvấ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 ứngdụ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
Trang 12bở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ạiblockchain, 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ắcchắ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
Trang 13CHƯƠ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
Blockchain (chuỗi khối) là một cơ sở dữ liệu phân cấp lưu trữ thông tintrong các khối thông tin được liên kết với nhau bằng mã hóa và mở rộng theothời gian Mỗi khối thông tin đều chứa thông tin về thời gian khởi tạo và đượcliê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 đượcnhó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ácgiao 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ủamột blockchain, nhưng thông thường có một vài thuộc tính cần thiết cho chứcnă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
Trang 14Hì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ựngdựa trên sổ cái phân tán (Decentralized Ledger) được duy trì bởi mạng nganghàng (Peer-to-peer 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 bitcoincho mục đích thương mại hoặc đầu cơ Ví dụ như là ví tiền Bitcoin (Bitcoinwallet) được tạo ra để quản lý số lượng coin của người dùng Trong khí đó hiệnnay, 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ấutrúc cơ bản của sổ cái là Blockchain, nơi các giao dịch được nhóm thành cáckhố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ếptheo 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
Trang 15Proof of Work (PoW) được sử dụng như một cơ chế để chứng minh rằng mộtngườ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
1.1.2.1 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ò giaodiệ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ôngchứ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ườidùng Hình 1-2 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ủamạng blockchain bitcoin
1.1.2.2 Sổ cái phân tán (Decentralized Ledger)
a 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 quantâ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
Trang 16Quyề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ảnchí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ứcbitcoin, và phần mềm ví của người dùng có thể tạo và quản lý chúng mà khôngcần tham chiếu tới blockchain hay phải kết nối Internet Khóa là nhân tố kích hoạtnhiều thuộc tính của bitcoin, bao gồm kiểm soát giao dịch, tín nhiệm phi tậptrung, 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ụngthuật toán mật mã dựa trên đường cong Elliptic (ECDSA/ECC), cho phép ngườigiữ 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ớiRIPEMD160 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ỉ bitcoindài 26-35 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 1-3
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ượngbitcoin đó
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,
Trang 17hoặ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 ítnhấ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àoblockchain 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 1-4 dưới đây
Trang 18"scriptSig" :
"3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c 4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8 f6e3813[ALL]
0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc541 2336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"scriptPubKey": "OP_DUP OP_HASH160
ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
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"
Trang 19}, { "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:
0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc541 2336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"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
Trang 20 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ảnnày Khi một giao dịch được xác thực, kịch bản mở khóa trong mỗi đầu sẽ đượcthực thi cùng với kịch bản khóa tương ứng, để kiểm tra xem đầu vào đó có thỏamã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 đầura: nó chỉ rõ các điều kiện phải được đáp ứng để có thể chi tiêu đầu ra đó trongtươ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ộtchữ 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ểmtra 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ưutrong các block
b 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 blocktham chiếu đến block trước đó trong chuỗi Blockchain thường được hình dungnhư 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
Trang 21Vì không có điểm trung tâm trong mạng bitcoin duy trì bản ghi cuối cùngcủ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ếtvà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ể thamgia 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ộtblock Hình 1-5 dưới đây là cấu trúc đơn giản của một block
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ểmtra 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ử
Trang 22dụ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 1-6.
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 theotừ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
c 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 minhtạo cho bitcoin trở nên đặc biệt, một cơ chế bảo mật phi tập trung là cơ sở chotiề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 đồngthuậ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ầnthưởng cho công việc này gồm các đồng bitcoin mới được tạo ra và phí giaodị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ảomậ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 10phút, từ đó bổ sung thêm các giao dịch vào blockchain Các giao dịch trở thànhmột phần của block và được thêm vào blockchain được coi là “đã được xác
Trang 23nhậ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ậtbằ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ếtmộ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 chovấn đề này được gọi là bằng chứng xử lý (Proof of Work), được bao gồm trongblock mới và đóng vai trò là bằng chứng cho thấy người đào đã có nỗ lực tínhtoá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ùngmộ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:
5d7c7ba21cbbcd75d14800b100252d5b428e5b1213d27c385bc141ca6b47 989e
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 1-1
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…
Trang 24Số đượ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ã, trongtrườ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ànhcô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ởibất kỳ thợ đào nào khác vì giá trị băm sẽ không đổi Sự đồng thuận sẽ xảy ratrên toàn mạng lưới
1.1.2.3 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ủamộ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ạcvới các nút khác thông qua hạ tầng Internet Giao thức mạng Bitcoin cho phépcá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 khichuyển chúng lên các nút khác Nó lưu trữ toàn bộ blockchain và có thể tạothà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ăngcủa nút đầy đủ nhưng không chứa toàn bộ block trên mà chỉ sử dụng phiên bảnrú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ườitham 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àngcho mạng lưới
1.1.3 Các phiên bản của Blockchain hiện tại
1.1.3.1 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
Trang 25nghệ chỉ bao gồm tiền tệ mật mã Tất cả các đồng coin tương tự và bitcoin đượcphân thể loại này Bao gồm các ứng dụng về thanh toán.
1.1.3.2 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 đượcgiớ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ượtquá tiền tệ, tài chính và thị trường được bao gồm ở cấp này
1.1.3.3 Blockchain 3.0
Thế hệ thứ ba của blockchains được sử dụng để thực hiện các ứng dụngngoà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ý
1.1.4 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 chiathà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 đượcxác minh trong Blockchain riêng tư và có thể được sửa đổi trong mạngriê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únghoạt động trên các mạng được kiểm soát (không phải là tập trung) và đượctạo ra bởi ít máy tính hơn
Trang 26 Slidechain: là mạng phân cấp, peer-to-peer 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 blockchainchính Ví dụ: slidechain cho phép các nhà phát triển các ứng dụng mớimột cách an toàn mà không gặp rủi ro Sidechain cũng có thể được hìnhdung như một cơ chế cho phép các phần sử dụng trong một blockchainriê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ầnthê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”
1.2 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ànhcông nghiệp và được các nhà lãnh đạo tư tưởng đề xuất trên khắp thế giới trongkhông gian blockchain Mười lợi ích hàng đầu được liệt kê và thảo luận như sau:1.2.1 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ácgiao dịch
1.2.2 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 trongcá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
Trang 271.2.4 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
1.2.5 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à cungcấp tính toàn vẹn
1.2.6 Đơ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ácbê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ể.1.2.7 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ươngmại, blockchain có thể đóng một vai trò quan trọng bằng cách nó cho phép giảiquyết nhanh chóng các giao dịch vì nó không yêu cầu quá trình xác minh, đốichiế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
1.2.8 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ứccá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
1.3 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ảiquyế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
Trang 28thức đặt ra bởi công nghệ blockchain Một sự lựa chọn của những thách thứcnhạ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
Trang 29CHƯƠNG 2: VÍ ĐIỆN TỬ BLOCKCHAIN
2.1 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áccoin được ghi lại vào blockchain trên mạng bitcoin Người dùng kiểm soát tiềncủ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ứatrong 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ộtkhóa chính duy nhất (master key), hay còn gọi là hạt giống Tất cả các khóatrong 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ốnggố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áchạ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ớ
2.1.1 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ậphợp các khóa bí mật được tạo ngẫu nhiên Ví dụ, phần mềm Bitcoin Core gốctạ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êmcá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ảigiữ 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í
Trang 30thườ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ớinguyên tắc tránh dùng lại địa chỉ thông qua việc sử dụng mỗi địa chỉ bitcoin choriê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ếtnhiều giao dịch và địa chỉ lại với nhau Hình 2-1 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
2.1.2 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ạongẫ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ạtgiố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ộtbả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ữacác bản thực thi ví khác nhau Hình 2-2 là biểu đồ logic của một ví tất định
Trang 31Hì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
2.1.2.1 Ví HD (BIP-32/BIP-44)
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ĩatheo chuẩn BIP-32 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 ramột chuỗi khóa cấp nhỏ hơn, và cứ tiếp tục mở rộng vô tận Hình 2-3 minh họacấu trúc hình cây này
Trang 32Hì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ẫunhiê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áckhoả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ôngkhai 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ỗigiao 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
2.1.2.2 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à đỉachỉ 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ạtgiố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ĩabởi BIP-39 Ngày nay, hầu hết các ví blockchain sử dụng chuẩn này và có thể
Trang 33nhậ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ẩnchung của ngành cũng đã xuất hiện nhằm giúp các ví bitcoin có thể tương thíchvớ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 chungnày là:
Các từ mật mã trợ nhớ, được thiết lập dựa trên BIP-39
Các ví HD, dựa trên BIP-32
Cấu trúc ví HD đa mục đích, dựa trên BIP-43
Các ví đa tiền tệ và đa tài khoản, dựa trên BIP-44
Các chuẩn này có thể thay đổi theo thời gian và sự phát triển của côngnghệ, 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ếtnố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ấpnhậ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
2.1.2.3 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ẫunhiê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 đã đượctạ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ảnsao 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
Trang 34trong 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épchính xác hơn so với một chuỗi ngẫu nhiên các con số.
2.1.2.4 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 địnhnghĩa trong BIP-39 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:
1 Tạo một chuỗi ngẫu nhiên (một entropy) 128 đến 256 bit
2 Tạo một checksum của chuỗi ngẫu nhiên trên bằng cách lấy các bit đầutiên (độ dài entropy chia cho 32) của mã băm SHA256 của nó
3 Thêm checksum này vào cuối chuỗi ngẫu nhiên
4 Chia chuỗi này thành các đoạn 11 bit
5 Á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ừ
6 Mã trợ nhớ chính là chuỗi từ này
Hình 2-4 minh họa cách dùng entropy để tạo ra các từ trợ nhớ