Hướng dẫn này khám phá cách các nhà phát triển có thể triển khai xác thực bằng mật mã trong các ứng dụng Ethereum, tận dụng ERC-4337 để tạo ra trải nghiệm người dùng liền mạch, an toàn mà không ảnh hưởng đến quyền tự quản lý.
Một trong những lời hứa của việc trừu tượng hóa tài khoản là loại bỏ hoàn toàn khóa riêng tư cho người dùng trong khi vẫn duy trì tính bảo mật và quyền tự quản lý mạnh mẽ. Tuy nhiên, nhiều tài khoản thông minh không đạt được tầm nhìn này vì có ít thư viện hơn để triển khai các phương thức xác thực thay thế. Điều này khiến nhiều nhà phát triển ứng dụng phải dựa vào các phương pháp ít thân thiện với người dùng hơn hoặc MPC của bên thứ ba và các dịch vụ đăng nhập xã hội. Nhìn chung, đây là trải nghiệm người dùng tốt hơn so với việc cấp cho người dùng khóa riêng, nhưng vẫn chưa có được tầm nhìn đầy đủ. Điều gì sẽ xảy ra nếu chúng ta có thể loại bỏ hoàn toàn những sự phụ thuộc này?
Nhập mật mã. Mật mã thể hiện một bước tiến mang tính chuyển đổi, cung cấp giải pháp thay thế xác thực an toàn, thân thiện với người dùng, tận dụng sinh trắc học, mã PIN hoặc mẫu và loại bỏ nhu cầu về các cụm từ ghi nhớ.
Hướng dẫn này khám phá cách các nhà phát triển có thể triển khai xác thực bằng mật mã trong các ứng dụng Ethereum, tận dụng ERC-4337 để tạo ra trải nghiệm người dùng liền mạch, an toàn mà không ảnh hưởng đến quyền tự quản lý.
Hiểu về mật mã và vai trò của chúng trong khả năng truy cập Blockchain
Mục tiêu của việc trừu tượng hóa tài khoản là làm cho công chúng dễ tiếp cận hơn với các ứng dụng blockchain và mật mã là một cách tuyệt vời để giúp xác thực web3 liền mạch như bất kỳ ứng dụng hoặc ứng dụng di động nào khác. Bằng cách kết hợp mật mã, chúng tôi có thể làm cho quá trình xác thực trở nên đơn giản như sử dụng bất kỳ ứng dụng thông thường nào, che giấu sự phức tạp của các công nghệ cơ bản như Face ID hoặc nhận dạng dấu vân tay đối với người dùng.
Triển khai mật mã với tiêu chuẩn ERC-4337
Để kích hoạt mật khẩu trên Ethereum, tài khoản của người dùng cần phải là hợp đồng thông minh ERC-4337 có thể xác minh chữ ký P256. Tiêu chuẩn này cho phép các giao dịch không có khóa riêng truyền thống, một hạn chế đối với Ethereum và các chuỗi khối tương thích EVM khác như Chuỗi thông minh BnB, Lạc quan và Aribtrum.
Có hai bước chung bạn cần thực hiện để kích hoạt mật mã trên Ethereum.
- Ký phía máy khách bằng mã xác thực: Sử dụng API WebAuthn để tạo và ký mã xác thực trên thiết bị của người dùng. Mặc dù việc tạo mật mã cục bộ khác nhau tùy theo thiết bị nhưng quy trình này thường tuân theo mẫu chuẩn. Để biết thêm chi tiết về cách tạo mật mã, hãy tham khảo các tài nguyên như hướng dẫn triển khai mật mã tuyệt vời của Web.dev .
- Thiết lập tài khoản thông minh cho mật mã: Triển khai tài khoản thông minh có khả năng xác minh chữ ký mật mã. Những chữ ký này thường được gọi là chữ ký P256 hoặc theo đường cong elip secp256r1. Việc triển khai điều này liên quan đến việc sửa đổi chức năng xác thựcUserOp trong hợp đồng thông minh của bạn để bao gồm thuật toán xác minh chữ ký P256. Đối với những người muốn giảm thiểu thời gian phát triển, hãy cân nhắc sử dụng các khung tài khoản thông minh đã được thiết lập như Barz của Trust Wallet hoặc khám phá trình xác minh Daimo p256 trên GitHub . Một đề xuất đang diễn ra, EIP-7212 , đề xuất biên dịch trước hợp đồng này để giảm chi phí gas liên quan đến xác minh chữ ký, nhưng tính đến tháng 2 năm 2024 chỉ có trên Polygon.
Tạo giao dịch bằng mật mã
Thao tác đầu tiên của người dùng đối với tài khoản mới luôn cần bao gồm initCode để triển khai tài khoản. initCode thường là sự kết hợp hex của một nhà máy sản xuất tài khoản thông minh và một lệnh gọi được mã hóa đến nhà máy đó để tạo một tài khoản mới do mật mã sở hữu. Bạn có thể thấy cách triển khai đơn giản này trong kho lưu trữ GitHub này.
Sau đó, bạn có thể tạo thao tác người dùng như bình thường, nhưng khi lấy chữ ký từ người dùng, bạn sẽ cần sử dụng API WebAuthn để lấy chữ ký từ mật mã. Trong ERC-4337, thông thường bạn sẽ ký hàm băm của thao tác người dùng.
Bạn có thể thấy cách triển khai đơn giản này trong bản demo mã khóa này hoặc trong trình tạo này trong gói userop.js .
Thiết lập tài khoản thông minh để sử dụng mật mã
Bây giờ bạn đã có hệ thống tạo mật mã và ký tin nhắn với chúng, bạn sẽ cần một tài khoản thông minh có thể xác minh chữ ký p256. Trong ERC-4337, việc xác minh chữ ký diễn ra trong hàm validUserOp. Đây là nơi bạn sẽ đưa vào thuật toán xác minh chữ ký p256.
Một triển khai logic này có thể được sử dụng từ hợp đồng vững chắc chữ ký P256 này , mặc dù có một đề xuất, EIP-7212 , để biên dịch trước hợp đồng này trên chuỗi khối Ethereum nhằm giảm phí gas liên quan đến đường cong này.
Nếu bạn không muốn tự mình viết toàn bộ hợp đồng thông minh từ đầu, bạn cũng có thể sử dụng một trong số ít cách triển khai tài khoản thông minh đã tồn tại. Việc triển khai ví hợp đồng thông minh sử dụng mật mã chữ ký P256 là Barz by Trust Wallet. Việc triển khai của họ có lợi thế là nó được kiểm tra và sản xuất bởi một trong những ví Ethereum lớn nhất thế giới, mặc dù nó không phải là mô-đun. Mô-đun mật khẩu Kernel của ZeroDev sẽ tự động sử dụng EIP-7212 để tiết kiệm phí gas (lên tới 400.000 gas) nếu nó tồn tại trên mạng. Cả hai đều được thư viện userop.js hỗ trợ nguyên bản.
Bạn cũng có thể tìm thấy cách triển khai cơ bản của một tài khoản đơn giản trong dự án nguồn mở thú vị này với SDK mã khóa . Kho lưu trữ này bao gồm cách triển khai rất cơ bản của một ứng dụng web với mật mã và là điểm khởi đầu tuyệt vời.
Hướng tới UX Web3 tốt hơn
Mật mã cung cấp một cách tiếp cận mang tính cách mạng để xác thực người dùng trên chuỗi khối Ethereum, phù hợp với mục tiêu trừu tượng hóa tài khoản bằng cách loại bỏ các khóa riêng truyền thống. Đối với các nhà phát triển và tổ chức đang tìm cách nâng cao tính bảo mật và trải nghiệm người dùng cho các ứng dụng blockchain của họ, việc tích hợp mật mã với ERC-4337 sẽ cung cấp một giải pháp hướng tới tương lai.