Khoá bí mật trong Bitcoin là một con số ngẫu nhiên dài 256 bit, nằm trong một khoảng xác định. Từ khoá bí mật, phép nhân điểm trên đường cong elliptic secp256k1 cho ra khoá công khai. Từ khoá công khai, hai lần băm và một bước mã hoá cho ra địa chỉ mà bạn đưa người khác để nhận. Mỗi bước trong chuỗi này chỉ đi một chiều: từ địa chỉ không tìm được khoá công khai trước khi nó được tiết lộ, từ khoá công khai không tìm được khoá bí mật.
Bài viết giải thích từng bước bằng ngôn ngữ dễ hiểu, vì sao chúng an toàn, và những sai lầm nguy hiểm khi người dùng tự tạo khoá theo cách không chuẩn. Đây là kiến thức mật mã cơ bản cho người muốn hiểu ví hoạt động thế nào.
Khoá bí mật là một con số
Khoá bí mật đơn giản là một số nguyên trong khoảng từ một đến gần hai mũ hai trăm năm mươi sáu. Khoảng này lớn đến mức con số khả năng vượt xa số nguyên tử ước tính trong vũ trụ quan sát được.
Sức mạnh của khoá nằm hoàn toàn ở tính ngẫu nhiên. Nếu khoá được chọn ngẫu nhiên thực sự, không ai đoán trúng được bằng cách thử, kể cả với toàn bộ máy tính trên thế giới trong hàng tỷ năm.
Nhưng nếu khoá được chọn theo cách dễ đoán, như từ một câu thơ, ngày sinh, hay một con số nhỏ, kẻ gian có thể thử những khả năng đó rất nhanh. Đã có nhiều ví bị lấy sạch vì người dùng tự nghĩ ra khoá.
Phần mềm ví chuẩn dùng nguồn ngẫu nhiên an toàn của hệ điều hành hay chip chuyên dụng. Ví phần cứng có bộ tạo số ngẫu nhiên riêng.
Khoá bí mật có thể được biểu diễn ở nhiều dạng: chuỗi thập lục phân sáu mươi tư ký tự, định dạng nhập khẩu ví bắt đầu bằng chữ K, L hoặc số 5, hoặc gián tiếp qua cụm từ khôi phục.
Dù ở dạng nào, ai có nó là có quyền chi tiêu.
Từ khoá bí mật đến khoá công khai
Đường cong elliptic secp256k1 là một tập hợp điểm thoả một phương trình nhất định trên một trường số hữu hạn. Có một điểm cố định gọi là điểm sinh, ai cũng biết.
Khoá công khai là kết quả của việc cộng điểm sinh với chính nó số lần bằng khoá bí mật, phép toán gọi là nhân điểm. Có thuật toán làm việc này rất nhanh.
Chiều ngược lại, biết khoá công khai và điểm sinh, tìm ra số lần đã nhân, là bài toán logarit rời rạc trên đường cong elliptic. Với kích thước khoá của Bitcoin, không có thuật toán nào trên máy tính cổ điển giải được trong thời gian thực tế.
Khoá công khai thường được biểu diễn dạng nén ba mươi ba byte. Với Taproot, chỉ dùng toạ độ x, ba mươi hai byte.
Khoá công khai được dùng để kiểm tra chữ ký: ai cũng kiểm tra được chữ ký đúng là do khoá bí mật tương ứng tạo ra, mà không cần biết khoá bí mật.
Đây là nền tảng của toàn bộ hệ thống quyền sở hữu trong Bitcoin.
Từ khoá công khai đến địa chỉ
Với các loại địa chỉ cổ điển và SegWit gốc dạng một khoá, khoá công khai được băm bằng SHA-256, rồi băm tiếp bằng RIPEMD-160, cho ra dấu vân tay hai mươi byte, gọi là HASH160.
Dấu vân tay này được mã hoá thành địa chỉ. Địa chỉ cổ điển dùng mã hoá Base58Check, bắt đầu bằng số 1. Địa chỉ SegWit gốc dùng bech32, bắt đầu bằng bc1q.
Cả hai cách mã hoá đều có mã kiểm tra, giúp phát hiện phần lớn lỗi gõ. Gõ sai một ký tự, ví sẽ báo địa chỉ không hợp lệ thay vì gửi đi.
Với Taproot, địa chỉ chứa trực tiếp khoá công khai đã điều chỉnh, không qua băm, mã hoá bằng bech32m, bắt đầu bằng bc1p.
Băm khoá công khai trong địa chỉ cổ điển có thêm một lớp bảo vệ: khoá công khai chỉ lộ ra khi chi tiêu. Đây là lý do đôi khi người ta khuyên không dùng lại địa chỉ.
Địa chỉ ngắn hơn khoá công khai, dễ chia sẻ hơn, và có mã kiểm tra.
Chữ ký số: chứng minh mà không tiết lộ
Khi chi tiêu, ví dùng khoá bí mật tạo chữ ký trên dữ liệu giao dịch. Bitcoin dùng chữ ký ECDSA cho các loại địa chỉ cũ và SegWit gốc, chữ ký Schnorr cho Taproot.
Một chữ ký chỉ hợp lệ cho đúng giao dịch đó. Thay đổi bất kỳ chi tiết nào, như địa chỉ nhận hay số lượng, chữ ký không còn hợp lệ. Kẻ gian không thể lấy chữ ký của bạn để dùng cho giao dịch khác.
Quá trình ký cần một số ngẫu nhiên phụ cho mỗi chữ ký. Nếu số này bị dùng lại hoặc dễ đoán, khoá bí mật có thể bị tính ra. Lỗi này đã từng xảy ra với một số phần mềm kém chất lượng.
Phần mềm hiện đại tạo số này một cách tất định từ khoá và thông điệp, tránh được lỗi dùng lại.
Đây là ví dụ cho thấy an toàn không chỉ phụ thuộc vào toán học mà còn vào chất lượng triển khai.
Dùng phần mềm được rà soát rộng rãi là cách giảm rủi ro triển khai.
Những sai lầm nguy hiểm khi tự tạo khoá
Sai lầm phổ biến nhất là ví não: tạo khoá từ một câu, một cụm từ tự nghĩ ra. Con người rất kém trong việc tạo ngẫu nhiên, và kẻ gian có danh sách hàng tỷ câu phổ biến để thử. Nhiều ví não đã bị lấy sạch trong vài giây sau khi nhận tiền.
Sai lầm thứ hai là dùng trang web tạo khoá trực tuyến. Trang có thể ghi lại khoá, hoặc dùng nguồn ngẫu nhiên kém. Kể cả trang thật cũng có thể bị thay mã độc.
Sai lầm thứ ba là tự chọn từ trong danh sách cụm từ khôi phục theo ý thích thay vì để thiết bị chọn ngẫu nhiên. Từ do người chọn không ngẫu nhiên.
Sai lầm thứ tư là dùng thiết bị không rõ nguồn gốc, đã bị can thiệp để tạo khoá dễ đoán hoặc gửi khoá ra ngoài.
Quy tắc an toàn: để phần mềm hoặc thiết bị đáng tin tạo khoá, trên thiết bị sạch, và không bao giờ tự nghĩ ra khoá.
Sự tò mò về toán học là tốt; thử nghiệm với tài sản thật thì không.
Dùng lại địa chỉ và quyền riêng tư
Về kỹ thuật, một địa chỉ có thể nhận bitcoin nhiều lần. Nhưng dùng lại địa chỉ làm giảm quyền riêng tư: mọi khoản nhận đều gắn với cùng một chuỗi ký tự công khai, ai biết địa chỉ đó đều thấy toàn bộ lịch sử.
Với địa chỉ cổ điển, khoá công khai chỉ lộ ra khi chi tiêu lần đầu. Dùng lại địa chỉ sau khi đã chi tiêu nghĩa là khoá công khai đã công khai, mất đi lớp bảo vệ của hàm băm. Lớp này hiện chưa cần thiết với máy tính cổ điển, nhưng được nhắc đến trong các thảo luận về máy tính lượng tử.
Ví HD hiện đại tự tạo địa chỉ mới cho mỗi lần nhận, nên việc tránh dùng lại gần như tự động. Người dùng chỉ cần không cố tình dùng mãi một địa chỉ.
Một số trường hợp cần địa chỉ cố định, như nhận quyên góp công khai. Khi đó, cần chấp nhận rằng mọi khoản nhận đều công khai.
Hiểu mối quan hệ khoá và địa chỉ giúp bạn hiểu vì sao ví lại cho bạn một địa chỉ mới mỗi lần bấm nhận, và vì sao điều đó không làm mất bitcoin ở địa chỉ cũ.
Chuỗi từ khoá bí mật đến địa chỉ
Khoá bí mật Số ngẫu nhiên 256 bit, giữ tuyệt mật.
Nguồn ngẫu nhiên Phải an toàn; con người không tạo được ngẫu nhiên tốt.
Đường cong secp256k1 Đường cong elliptic mà Bitcoin dùng.
Điểm sinh Điểm cố định công khai trên đường cong.
Khoá công khai Khoá bí mật nhân với điểm sinh; nén 33 byte.
Bài toán ngược Logarit rời rạc trên đường cong, không giải được trên máy tính cổ điển.
HASH160 SHA-256 rồi RIPEMD-160 trên khoá công khai, ra 20 byte.
Base58Check Mã hoá địa chỉ cổ điển bắt đầu bằng 1 hoặc 3.
Bech32 Mã hoá địa chỉ SegWit gốc bắt đầu bằng bc1q.
Bech32m Mã hoá địa chỉ Taproot bắt đầu bằng bc1p.
Chữ ký ECDSA cho địa chỉ cũ và SegWit, Schnorr cho Taproot.
Chỉ một chiều Từ địa chỉ không suy ra khoá công khai, từ khoá công khai không suy ra khoá bí mật.
Câu hỏi thường gặp
Khoá bí mật Bitcoin là gì?
Là một số ngẫu nhiên 256 bit, ai có nó là có quyền chi tiêu bitcoin gắn với khoá công khai tương ứng.
Có thể tính khoá bí mật từ địa chỉ không?
Không trong thực tế. Mỗi bước từ khoá bí mật đến địa chỉ chỉ đi một chiều.
Ví não là gì?
Là ví có khoá tạo từ câu hay cụm từ do người tự nghĩ ra, rất dễ bị đoán và đã gây mất tài sản nhiều lần.
Bitcoin dùng đường cong elliptic nào?
Đường cong secp256k1 cho cả chữ ký ECDSA và Schnorr.
Vì sao không nên dùng trang web tạo khoá?
Trang có thể ghi lại khoá, dùng nguồn ngẫu nhiên kém, hoặc bị thay mã độc.